如何写emmc 中的boot 区 mmcblk0boot0 分区

1448人阅读
bootloader(13)
uboot for wince(12)
------------------------------------------------------------------------------------------------------------------------
支持种方式烧写设备:
命令:通过接口烧写。
编写支持从卡启动,里面涉及到文件的修改,下面讲解。
按照上述方法,把烧录到上,使开发板从卡启动。
进入开发板命令终端
首先格式,目的是分配个分区。分别为分区分区分区分区
表示格式当前设备
:表示初始化的设备节点,设备加载顺序,分配的节点从开始到结束。不管你从哪个通道指定起始设备,多从开始分配。如:占用通道口,
分配的节点是,卡占用通道口,分配的节点是
如果不初始化emmc,只使用sd卡模式,在sd卡占用通道2口时,分配的节点是 0.这点请
了解源代码,后续会修改。
所以,如果想给板子上分区的话,使用如下命令在也初始化成功的情况下
查看设备分区情况:
格式化分区,分区为格式。其它都为文件系统格式
格式分区::
:同上意思,表示的已经加载的设备节点。
:表示第个分区,注意。程序默认第一个分区必须为分区,
只能指定为,程序会比较是否为分区,不是就不会格式化。
格式分区:
烧写文件:
给开发板通过线跟连接。
下载工具:到下,把要烧录的文件放到文件里面。
点下开始运行输入:
在控制行下进入所在的路径如:
输入命令:
修改启动参数:
---------------------------------------------------------------------------
烧写方式:
:编写支持从卡启动,里面涉及到文件的修改,下面讲解。
:按照上述方法,把烧录到上,使开发板从卡启动。
:在里新建文件目录,然后把需要烧写的文件放入里面。
:从卡模式启动开发板,进入开发板命令终端
确保已经对分配了节点,卡分配的节点
:格式化同上。
:烧写文件:
或者修改文件,支持全部自动烧写:
修改启动参数,同上。
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:358123次
积分:5058
积分:5058
排名:第3806名
原创:87篇
转载:380篇
评论:106条
(8)(2)(1)(13)(35)(32)(28)(1)(1)(36)(31)(26)(39)(13)(23)(1)(1)(1)(1)(1)(1)(3)(1)(3)(1)(15)(47)(2)(28)(12)(28)(20)(13)(1)tiny4412,emmc烧录u-boot,&支持fastboot模式烧写emmc
Tiny4412开发板刚拿到手是,看了下介绍,发现superboot是个好东西,但是不开源,这个严重与开源思想不符合。
按照光盘介绍编译烧写U-boot也无法启动板子,只有superboot使用后才可以启动板子。到此大家估计很多和我想的一样,如何使用开源的u-boot来启动开发板。
言归正传,我们的目的是要用u-boot来运行tiny4412.&
首先要注意的是,原版的内核配置把CONFIG_ARM_TRUSTZONE给打开了,这个与superboot.bin是配套使用的,但是u-boot经研究发现暂不支持TZ模式,所以内核配置要把这个选项去掉。不然按照教程会出现死机。论坛也有很多网友发现了此现象,不再赘述。(后面有时间本人会研究下trustzone机制)
把TZ选项去掉后,通过SD卡烧录u-boot可以把板子带起来,这个不是我们要讲述的重点,我们要讲的是如何把u-boot烧录到emmc中,这个友善没有提供方法,其实不难。
emmc其实和SD卡类似,都是SD设备,emmc是8-bit模式,SD是4-bit模式。TINY4412是eMMC4.4.
既然sd卡能烧,那么emmc一定可以烧。
SD卡烧录,其实通过友善教程,在U-boot源码目录下有sd_fusing.sh,打开看下即可知道烧录原理。这个不讲了,有兴趣的朋友可以看下,很见到。就是把各个bin文件按照指定位置烧到SD卡的系统分区中。
那么eMMC如何烧写呢,这是我们要讲的重点。在这里不得不讲一下DNW工具,这个可以通过USB把电脑端的文件烧录到目标板的内存中。附件是dnw
Linux完整源码包,解要到一个文件夹,里面有dnw.c , Makefile, 预编译dnw(x86_64).
大家可以直接使用或是自己编译,编译后的dnw 可以复制到/usr/bin,并chmod 777
/usr/bin/dnw.
u-boot中断也支持dnw指令,所以eMMC烧录就有可能了,因为电脑上的u-boot.bin固件可以通过dnw烧录到开发板的内存了。。。。
编译uboot过程友善的文档已经写的很完善,大家自己参考并编译u-boot.
编译完成后u-boot目录下有:
u-boot.bin
进入u-boot/sd_fuse/执行make,可以生成mkbl2工具,
进入u-boot/sd_fuse/tiny4412目录下可以看到bl2.bin&&E4412_N.bl1.bin&&E4412_tzsw.bin三个bin,其中bl2.bin在制作SD启动卡时会生成,我们也需要此文件。
下面讲如何使用dnw下载固件到开发板内存,
注意本人是以Ubuntu环境来调试,使用Windows的朋友自己对照流程。
1 下载附件dnw编译,上面已经讲了,
2 按照友善文档,制作SD启动卡,开发板SW2开关选择SD启动.
3 把串口先连接PC与开发板。
4 插制作好的SD卡到开发板,并给开发板上电SW1.
5 键盘按任意键盘进入uboot终端,此时输入help可以看到很多指令。
6 现在我们进入了SD卡模式启动的u-boot. 现在我们看下mmc设备信息:
u-boot模式下输入:
&mmcinfo 0
省略。。。
&mmcinfo 1
Device: S5P_MSHC4
Manufacturer ID: 15
Name: M4G1Y&
Tran Speed: 0
Rd Block Len: 512
MMC version 4.0
High Capacity: Yes
Size: 3728MB (block: 7634944)
Bus Width: 8-bit
Boot Partition Size: 2048 KB
上面两条指令分别执行,可以发现 mmc 0就是我们的SD卡,mmc
1设备就是我们要烧录的设备eMMC,uboot返回提示是8-bit,内存容量是4G的eMMC卡。
7 继续输入:
&fdisk -p 0
&fdisk -p 1
#&&&&size(MB)&&&&
block start
#&&&&block
count&&&&partition_Id&
1&&&&&&&&&&
695&&&&&&&&&&6070812&&&&&&&&
1424478&&&&&&&&&&0x0C&
2&&&&&&&&&&
320&&&&&&&&&&
134244&&&&&&&&&&656304&&&&&&&&&&0x83&
3&&&&&&&&&&2057&&&&&&&&&&
790548&&&&&&&&
4213770&&&&&&&&&&0x83&
4&&&&&&&&&&
520&&&&&&&&&&5004318&&&&&&&&
1066494&&&&&&&&&&0x83&
这两条指令是分别查看mmc
0/1设备的分区表信息。设备mmc1的分区信息,即eMMC分析,注意这个是superboot分区信息,我们就用这个分区。
分区1 是FAE分区, 分区2 是给system的,分区3是user-data, 分区4 是
8 格式化eMMC, u-boot模式下输入如下指令来格式化eMMC设备。
&fdisk -c 1 320
执行后会返回分区信息,继续格式话分区1,2,3,4
&fatformat mmc 1:1
这句话意思是对mmc 1设备的第一分区格式作fat格式化。
&ext3format mmc 1:2
&ext3format mmc 1:3
&ext3format mmc 1:4
上面三个指令是分别对eMMC的分区2,3,4作ext3格式化。
到此我们完成了对eMMC的设备的格式化。
接下来我们要想办法烧录bl1.bin, bl2.bin, u-boot.bin,
tzsw.bin烧录到eMMC中。
9 从PC端下载固件到开发板Memory中。
刚才我们重点介绍了dnw,
接下来我们要使用此工具来下载固件到开发板内存中。注意是下载到内存,把固件数据缓存起来,到时要烧录到eMMC中。
首先我们要打开emmc设备
u-boot下输入:
&emmc open 1
eMMC OPEN Success.!!
&&&&&&&&&&&&&&&&&&&&&&&&!!!Notice!!!
!You must close eMMC boot Partition after all image
!eMMC boot partition has continuity at image writing
!So, Do not close boot partition, Before, all images is
上面提示emmc开启成功,注意说明,emmc一旦打开,需要连续烧录,烧录完成后可以关闭emmc.
10 接下来我们要运行dnw
u-boot下面输入:
OTG cable Connected!
Now, Waiting for DNW to transmit data
提示等待数据输入,这里就是等待我们从PC端通过DNW传送数据过来。
此时在PC端终端串口,cd到u-boot目录所在路径
user@~/u-boot/:&
输入: dwn sd_fuse/tiny_N.bl1.bin
此时u-boot中断会提示传送校验完成,此时已经把bl1.bin通过USB传送到了memeory的0xc0000000起始地址,大小8KB.
接下来我们烧录bl1.bin到eMMC中,u-boot下继续输入:
&mmc write 1 0xc 0x10
会提示写入信息,说明已经写入成功。这个是把刚才从PC端通过dnw下载下来的bl1.bin固件下载到emmc中,起始0,
16个block, 一个block是512B, 16*512=8*1024=8KB.
这个是bl1.bin的存放位置。
以此类推,烧录bl2.bin. u-boot.bin, tzsw.bin
-------------------------------------------------------------------------------------------------------------------
u-boot终端继续输入:
PC端输入: (注意输入内容是以 dnw 开始的,前面是当前路径,便于理解)
user@~/u-boot/:&&dwn
sd_fuse/tiny4412/bl2.bin
u-boot下继续输入:
&mmc write 1 0xcx10 0x1C
bl2.bin实际大小约14K,分配的空间是16K. 其实是第16个block开始,写入28个block,
28*512B=14*1024=14K
注意这个区域预分配是32个Block,所以下一个开始是32+16=48
-------------------------------------------------------------------------------------------------------------------
u-boot终端继续输入:
PC端输入: (注意输入内容是以 dnw 开始的,前面是当前路径,便于理解)
user@~/u-boot/:&&dwn
u-boot.bin
u-boot下继续输入:
&mmc write 1 0xcx30 0x21D
u-boot.bin实际大小约270K,分配的空间是328K. 其实是第48个block开始,写入541个block,
541*512B=270.5*1024 约270K
-------------------------------------------------------------------------------------------------------------------
u-boot终端继续输入:
PC端输入: (注意输入内容是以 dnw 开始的,前面是当前路径,便于理解)
user@~/u-boot/:&&dwn
sd_fuse/tiny_tzsw.bin
u-boot下继续输入:
&mmc write 1 0xcx2c0 0xB8
tzsw.bin实际大小约92K,分配的空间是160K. 其实是第704个block开始,写入184个block,
184*512=92*1024=92K&
-------------------------------------------------------------------------------------------------------------------
启动分区到此全部写入完成,注意一定要关闭emmc,
u-boot下继续输入:
&emmc close 1
eMMC CLOSE Success.!!
关闭emmc设备,提示关闭成功。此时我们已经把启动文件全部烧录到了eMMC中。
-------------------------------------------------------------------------------------------------------------------
接下来我们可以把开发板的SW2拨动到NAND启动,同时u-boot中断输入reset,
并在电脑键盘按下任意键,此时我们可以看到:
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
U-Boot 00-g3e284d5-dirty (Jul 04 2014 - 17:40:58) for
CPU:&&&&S5PC220
[Samsung SOC on SMP Platform Base on ARM CortexA9]
&&&&&&&&APLL
= 1400MHz, MPLL = 800MHz
Board:&&TINY4412
DRAM:&& 1023 MiB
vdd_arm: 1.2
vdd_int: 1.0
vdd_mif: 1.1
BL1 version:&&N/A (TrustZone
Enabled BSP)
Checking Boot Mode ... EMMC4.41
REVISION: 1.1
MMC Device 0: 3728 MB
MMC Device 1: 1876 MB
MMC Device 2: N/A
Read... Bootmode reg 0x&
Get Bootmode reg 0xf3ca4c36&
ModeKey Check... run normal_boot&
Net:&&&&No
ethernet found.
Hit any key to stop
autoboot:&&0
TINY4412 #
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
大功告成啊,我们的u-boot已经成功写入到了eMMC中,并可以成功启动。
还有一件非常重要的事情我们还有做,就是启动参数写入,我们bootargs写入到env分区,注意ENV分区在TZSW分区后面,内核分区之前。即
TZSW | ENV | KERNEL
从eMMC启动u-boot后,在u-boot终端输入:
&setenv bootargs console=ttySAC0,
androidboot.console=ttySAC0 uhost0=n ctp=2 skipcali=y vmalloc=512m
设置并保存启动参数,此时再重启板子,进入U-boot。
u-boot下输入:
&printenv&
查看刚才烧录的启动参数是否成功。
11 烧写kernel, system, ramdisk
下面烧kernel, system,ramdisk和SD卡烧录一样。
u-boot继续输入
进入fastboot模式
PC端使用fastboot flash kernel zImag, fastboot flash system system.img,
fastboot flash ramdisk
ramdisk-u.img即可把剩下全部的img烧录到eMMC中。重启开发板,就可以启动开发板。
虽然没有开源的superboot,但是依然无法阻挡我们一个开源的心。
还有本人已经成功在u-boot加入按键启动u-boot的fastboot功能,在此贴一并发出。。。
使用开发板底板的K1按键,按住K1,开机即可进入系统的fastboot模式。 同时支持fastboot下载完成后执行fastboot
reboot bootloader重启模式。
功能已经全部验证。
到此位置,针对u-boot烧录eMMC的过程基本已经讲解完毕,希望给大家带来帮助,给友善的开源u-boot添砖加瓦。
已投稿到:查看: 788|回复: 0
人气1 技术0 资源1 推广0 帮助0 威望0 最后登录精华0UID6692758阅读权限10帖子积分39金币31 注册时间
, 积分 39, 距离下一级还需 11 积分
积分39金币31 注册时间
现在在做一个可以提高性能的ROM,包括recovery,在做recovery的时候,所有都正常,在“备份和恢复”功能那里,总是备份不了boot.img,请大神告诉我怎么搞!
就是这个文件recovery.fstab,用下面的都不行!不是说出错,就是备份出来的boot.img超级大几乎卡死
官方ROM解压出的recovery的recovery.fstab,是下面的信息
/boot& && &&&emmc& && && &boot
论坛里大星星XDA汉化版recovery的recovery.fstab,是下面的信息/boot& && &&&emmc& && && &/dev/bootimg
还忘大神指教!!!
安卓论坛 - 论坛版权1、本主题所有言论和图片纯属会员个人意见,与本论坛立场无关
2、本站所有主题由该帖子作者发表,该帖子作者与享有帖子相关版权
3、其他单位或个人使用、转载或引用本文时必须同时征得该帖子作者和的同意
4、帖子作者须承担一切因本文发表而直接或间接导致的民事或刑事法律责任
5、本帖部分内容转载自其它媒体,但并不代表本站赞同其观点和对其真实性负责
6、如本帖侵犯到任何版权问题,请立即告知本站,本站将及时予与删除并致以最深的歉意
7、管理员和版主有权不事先通知发贴者而删除本文
Powered by博客访问: 2247319
博文数量: 824
博客积分: 13014
博客等级: 上将
技术积分: 10159
注册时间:
认证徽章:
IT168企业级官微
微信号:IT168qiye
系统架构师大会
微信号:SACC2013
分类: LINUX
bb-black 板载emmc文件系统内容被破坏掉了,如何擦除其内容?
研究了下在uboot下确实可以完成这一目标:
进入uboot终端:
1、选择emmc
U-Boot# mmc dev 1&
mmc1(part 0) is current device
2、擦除emmc。
U-Boot# mmc erase 0 20000
MMC erase: dev # 1, block # 0, count 2097152 ...
阅读(3138) | 评论(0) | 转发(0) |
相关热门文章
给主人留下些什么吧!~~
请登录后评论。eMMC分区详解
转载请注明出处,谢谢:.cn/s/blog_5c401a150101jcos.html
最近总结了一下关于eMMC分区的一些资料,在此分享给大家,希望对大家在这方面的工作有所帮助:
大家一般所熟悉的分区的概念是在逻辑上将一个磁盘或存储设备分为几个区,每个区当做独立磁盘,以方便使用和管理。例如第一个磁盘的第一个分区叫做sda1,第二个磁盘的第二个分区叫做sda2;第二个磁盘的第一个分区叫做sdb1,第二个磁盘的第二个分区叫做sdb2。
大家所最为熟知的分区方式同时也是最主流的主要有两种:MBR(Master
Boot Record)和GPT(GUID Partition
Table)。前者应用于绝大多数使用BIOS引导的PC设备(苹果使用EFI的方式),而后者主要是针对MBR的一些缺点进行了改进同时还可以兼容MBR并且支持2TB以上的存储(MBR不支持2TB以上的存储设备)。
Android 2.x.x 版本上使用的是MBR,4.0版本以后就是使用的GPT分区方式。
注意,不管是MBR还是GPT,他们的分区都是指“逻辑上”的!!!即通过软件实现的,文件系统级别的。而我现在要说明的是eMMC本身自己的分区,即物理上的,不是通过软件就能实现的分区。
EMMC的分区有一些是AP不能修改的(如BOOT1、BOOT2和RPMB分区),有一些是可以通过特定的命令和寄存器就可以修改的(如Enhanced
Partition和GPAP)。下面就来集体说明一下:
通常,从厂家出来的eMMC
主要由这几个部分组成:
BOOT Area Partition 1
BOOT Area Partition 2
User Data Area
Vender private area
上面这5个部分中前4项是AP可以通过配置寄存器进行读写并且User Data
Area还可以进行分区配置的,如上图所示;下面来对上面的5个部分做一个详细说明:
Boot 1 & Boot 2
这两个分区是由厂家在生产过程中配置好了的,并且其大小是不能由AP进行配置的,当然,如果你的公司够牛,量足够大,并且也有这个需求的时候可以去要求厂家重新配置此区域大小,给你专门供货。
Boot 1 和Boot
2这两个区域在存储的稳定性、可靠性及擦除次数上都远比UDA要好(至于原因请往后看),所以很多chipset上都会使用这两个区域来存放一下关键数据,如boot
image,default
配置参数等等。当然不同的chipset的配置方法也不尽相同。这个可以找chipset的工程师询问。据笔者所知:以大陆市占最大的两家chipset为例,MTK使用UDA来存放boot
data,而使用boot
area来存放配置参数;Qualcomm则使用Boot 1 来存放boot data,boot 2 来存放配置参数。
另外,不同的eMMC版本一般对Boot area和RPMB的容量大小需求也不同,如下作一个简单的参考:
RPMB是Replay
Protected Memory Block的缩写,他的存在目的是用来给系统存放一些特殊的、需要进行访问授权的数据;他的请求及回应类型如下所:
据笔者所知,目前大陆的手机及平板厂商还没有一家使用到此区域的。
User Data Area就是AP及用户可以进行读写存储的区域,通常其大小为整块EMMC表示大小的93%左右,即4GB的eMMC
UDA的区域只有4GB*93%=3809MB。
之前说的BOOT1&2、RPMB和UDA区域我们都可以认为他们在物理上是独立的(当然都是存在于同一块die上)。即他们各自的物理起始地址都是0x0。这个在出厂的时候就会设置完成。下面我们就来说两种可以在物理上进行独立分区的方式:
GPAP即General
Purpose Area Partitions,eMMC 的spec上定义每个eMMC 最多可以通过配置寄存器来定义4个GPAP:
GPAP配置定义完成之后每一个GPAP的起始地址都为0x0;即可以相应地将其认为是独立的一块区域。只是在存放数据的时候会需要从新根据他的起始地址进行计算然后再存储数据。这样必然会增加一定的工作量;据笔者所知,目前大陆的手机及平板几乎没有用到这个功能。都是使用一整块的UDA,然后通过文件系统去进行逻辑上的分区使用。
我想肯定会有读者想问那这个功能到底有什么用呢?我想说eMMC是一个通过的存储设备,并不止是为手机和平板使用。当一个设备有多个CPU的时候并且他们的功能还不同时,这个时候使用GPAP这个功能就非常方便了。
Enhanced Partition
Partition这也是一个在手机及平板上使用较少的功能。为什么通过配置原本的UDA就可以变成“Enhanced”的呢?既然这么有用,为什么不将整个UDA配置成为”Enhanced”的呢?别着急,我来一一作答。
我们知道eMMC只是指他的接口标准,而他真正的存储介质还是NAND Flash,
而NAND又分为SLC、MLC和TLC(详细区别请参考我之前的文章),他们的稳定性、可靠性和擦除次数又有很大区别,当然中国厂商最关心的成本也相差很大;目前市场上主流的eMMC还是以MLC的NAND
存储介质为主,而TLC的eMMC也在逐渐的增加。其中以Samsung的TLC 的emmc最为成熟市占率也最高。我们这里先以MLC的EMMC来进行介绍:
以现在市面上最先进的NAND制程20nm的MLC为例,擦除次数大概在cycle。而SLC的擦除次数则在cycle。很明显SLC
要比MLC性能更好,数据存储更稳定。
而我们这里介绍的Enhanced
Partition的主要功能就是将MLC配置成为SLC。现在大家明白他为什么被称之为“Enhanced”的了!是相对于MLC(也就是default
storage media)来说的。
当然,从MLC配置为SLC不是没有代价的,这个代价自然就是容量变小,会变多小呢?容量只有原来的一半!!!原本1GB的MLC通过配置成SLC就只剩下512MB了,你说谁会愿意这样去大容量地转换呢?
据笔者所知,目前使用过这个功能的就只有台湾的HTC,他们是用来存储boot
data。另外,大陆也有一家大厂正在尝试使用Enhanced
Partition来做为swap 虚拟内存使用。
Vender Private Area
在eMMC里面除了AP能操作(即可识别并且可以通过地址进行访问)的boot
1&2、RPMB和UDA之外,其实还有一小部分区域是AP看不见也不能进行操作的。这部分区域是由生产厂家预留的,他主要是用来存放这样一些内容:
eMMC的FW(想知道是什么请参考我之前的文章),eMMC在boot的时候的code,FTL(Flash
Transilation Layer)以及在厂家生产过程中产生的坏块等等。
PS: 不是所有厂家的eMMC都支持Enhanced
Partition这个功能,但是只要这个eMMC是支持这个功能的那么他的BOOT
Area和RPMB就必须就Enhanced storage
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。

我要回帖

更多关于 emmc mmc 区别 的文章

 

随机推荐