U-Boot在内核为Cortex-A8的飞思卡尔处理器i.MX53上的移植
本文章介绍了如何在于i.MX53处理器的目标板上,引导、运行和编译B-Boot程序。
一、概括
U-Boot是一个支持多平台开发、串行口引导,且开源的Boot-loader实用程序,其支持引导和管理boot镜像文件,如Linux等系统。U-Boot具备以下特征:
1.将U-Boot烧入MMC
为将U-Boot烧入MMC/SD卡的话,请参考以下步骤:
如果U-Boot的二进制文件已经烧入MMC/SD卡的话,则将目标板切换至MMC启动模式下,重新上电,此时将会在串行口的超级终端看到相关的启动提示文字。
3.从MMC快速启动U-Boot
要想快速启动U-Boot的话,则必须确保MMC为eMMC4.3或者eMMC4.4,其相关操作步骤如下:
以下步骤将介绍如何将U-Boot写入SATA硬盘
在默认模式下,U-Boot将被配置为以NFS的方式启动系统,在启动之前,需要做出相关的配置。
在U-Boot启动出现提示“ Hit any key to stop autoboot: 0 ”倒计时时,敲入任何键,中断启动,进入U-Boot命令模式。
设置"boot arguments":
为避免IP地址冲突,可以通过命令"dhcp"进行查询,以确保有效的IP地址。
7.从Nand启动内核
对于U-Boot的默认配置,其超级终端上的串行口通讯参数为:115,200-8-N-1。
系统通讯参数也可以通过命令setenv来重新设置,下面举例介绍如何为目标板配置IP地址。
U-Boot> setenv serverip 10.193.100.158
U-Boot> setenv ethaddr 00:04:9F:00:EA:D7
U-Boot> setenv ipaddr 10.193.102.93
U-Boot> setenv kernel uImage
U-Boot> setenv nfsroot /data/rootfs_home/rootfs
U-Boot> saveenv
Saving Environment to SPI Flash...
Erasing SPI flash...Erase is built in program.
Writing to SPI flash...Writing SPI NOR flash 0x100000 [0x20000 bytes] <- ram
0x975e06e8
......SUCCESS
done
U-Boot>
上面所有相关的参数都必须正确的设置,以便正常使用网络,有些参数值U-Boot上使用不到,但是在某些系统中将会用到。
设置好后的参数通过下面显示:
U-Boot> printenv
bootdelay=3
baudrate=115200
loadaddr=0x90800000
netdev=eth0
ethprime=FEC0
U-Boot_addr=0xa0000000
U-Boot=u-boot.bin
bootargs_base=setenv bootargs console=ttymxc0,115200
bootargs_nfs=setenv bootargs ${bootargs} root=/dev/nfs ip=dhcp
nfsroot=${serverip}:${nfsroot},v3,tcp
bootcmd=run bootcmd_net
bootcmd_net=run bootargs_base bootargs_nfs; tftpboot ${loadaddr} ${kernel};
bootm
prg_U-Boot=tftpboot ${loadaddr} ${U-Boot}; protect off ${U-Boot_addr}
0xa003ffff; erase ${U-Boot_addr} 0xa003ffff; cp.b ${loadaddr} ${U-Boot_addr}
${filesize}; setenv filesize; saveenv
ethact=FEC0
ethaddr=00:04:9F:00:EA:D7
bootargs=console=ttymxc0,115200 root=/dev/nfs ip=dhcp nfsroot=:/opt/eldk/
arm,v3,tcp
ipaddr=10.193.102.93
serverip=10.193.100.158
nfsroot=/data/rootfs_home/rootfs
kernel=uImage.r450
stdin=serial
stdout=serial
stderr=serial
Environment size: 830/131068 bytes
Boot>
四、使用U-Boot
OS镜像文件在U-Boot环境下可以通过串行口或者以太网下载下去,下载后的镜像文件可以直接解压到SDRAM上执行,亦或者存储到Flash上,以便以后使用。
五、编译U-Boot
这里有两种方式进行对U-Boot的编译,从Ltib进行编译,或者是对源码直接进行编译。
1.从ltib对U-Boot进行编译
在Windows下可以通过工具Cygwin对U-Boot进行编译,也可以直接在Linux下编译。下面是编译U-Boot需要的相关文件:
u-boot-2009.08.tar.bz2(pkgs/)
tc-fsl-x86lnxarmeabi-nptl-4.1.2-3.i386.rpm(included)
u-boot-v2009.08-imx_10.05.02.tar.bz2(pkgs/)
下面介绍如何在Linux搭建编译环境
针对飞思卡尔的相关目标板系列,下面介绍常用的相关命令。
本文章介绍了如何在于i.MX53处理器的目标板上,引导、运行和编译B-Boot程序。
一、概括
U-Boot是一个支持多平台开发、串行口引导,且开源的Boot-loader实用程序,其支持引导和管理boot镜像文件,如Linux等系统。U-Boot具备以下特征:
- 支持网络下载模式:TFTP、BOOTP、DHCP、NFS。
- 串行口下载:S-record、Binary(通过Kermit方式)。
- Flash管理:copy,erase,protect,cramfs, jffs2
- 存储器应用管理:copy, dump. crc, check, mtest
- 大容量存储设备:USB
- 磁盘启动方式:raw block, ext2, fat, reiserfs
- 交互接口方式:支持多种脚本操作方式
1.将U-Boot烧入MMC
为将U-Boot烧入MMC/SD卡的话,请参考以下步骤:
- 将MMC/SD卡插入目标板
- 通过ATK工具,将U-Boot二进制文件烧入地址为0的空间(MX53目标板采用MFG下载)
如果U-Boot的二进制文件已经烧入MMC/SD卡的话,则将目标板切换至MMC启动模式下,重新上电,此时将会在串行口的超级终端看到相关的启动提示文字。
3.从MMC快速启动U-Boot
要想快速启动U-Boot的话,则必须确保MMC为eMMC4.3或者eMMC4.4,其相关操作步骤如下:
- 首先,确保卡片支持快速启动模式
- 将U-Boot镜像文件烧入eMMC的引导区
比如:
- 将普通的SD卡插入slot1,并将eMMC4.3/4.4卡插入slot3
- 从slot1的SD卡启动
- 将U-Boot.bin写入eMMC卡的引导区
指令:
U-Boot> mmc dev 0
mmc0 is current device
U-Boot> mmc read ${loadaddr} 0 0x200
MMC read: dev # 0, block # 0,count 512 ...
512 blocks read: OK> mmc dev 1 1
mmc1(part 1) is current device
U-Boot> mmc write ${loadaddr} 0 0x200
MMC read: dev # 1, block # 0,count 512 ...
512 blocks write: OK - 获取eMMC总线宽度
通过命令“mmcinfo <dev>“获取总线宽度:
U-Boot> mmcinfo 1
Device: FSL_ESDHC
Manufacturer ID: 3
OEM: 5344
Name: SD04G
Tran Speed: 25000000
Rd Block Len: 512
SD version 2.0
High Capacity: Yes
Capacity: 3965190144
Bus Width: 4-bit - 通过开关设置为eMMC快速启动模式和相应的位宽
- 重启目标板
以下步骤将介绍如何将U-Boot写入SATA硬盘
- 首先从MMC启动U-Boot
- 从MMC读取u-boot.bin:
U-Boot> mmc dev 0
U-Boot> mmc read ${loadaddr} 0 0x200
MMC read: dev # 0, block # 0, count 512 ... 512 blocks read: OK
- 写入SATA硬盘:
U-Boot> sata write ${loadaddr} 0 0x200 - 设置目标板为SATA启动模式
- 复位目标板,查看超级终端输出情况
- 首先将目标板从mmc boot或者nand boot方式下启动
- 将u-boot.bin 上传至tftp根目录下
- 将U-Boot镜像文件引导至Ram:
U-Boot> setenv serverip 10.193.100.158
U-Boot> setenv ethaddr 00:04:9F:00:EA:D7
U-Boot> setenv ipaddr 10.193.102.93
U-Boot> tftpboot ${loadaddr} u-boot.bin - 将u-boot.bin烧入SPI-NOR的0地址下
初始化SPI-NOR:
U-Boot> sf probe 1
在写之前先擦除SPI-NOR:
U-Boot> sf erase 0 0x40000
Erase is built in program.
将数据写入SPI-NOR:
U-Boot> sf write ${loadaddr} 0 0x40000
Writing SPI NOR flash 0x0 [0x40000 bytes] <- ram 0xXXXXXXXX
..........SUCCESS
在默认模式下,U-Boot将被配置为以NFS的方式启动系统,在启动之前,需要做出相关的配置。
在U-Boot启动出现提示“ Hit any key to stop autoboot: 0 ”倒计时时,敲入任何键,中断启动,进入U-Boot命令模式。
设置"boot arguments":
U-Boot > setenv bootargs 'console=ttyAM0,115200n8'设置"boot command":
U-Boot > setenv bootcmd 'run bootcmd_net'设置"NFS boot arguments":
U-Boot > setenv bootargs_nfs ‘setenv bootargs ${bootargs} root=/dev/nfs设置"tftp server IP":
ip=dhcp nfsroot=${serverip}:${nfsroot}Setup net boot command:
U-Boot > setenv bootcmd_net 'run bootargs_nfs; dhcp; bootm'
U-Boot> setenv serverip 10.193.100.158设置"mac address":
U-Boot> setenv ethaddr 00:04:9F:00:EA:D7设置"IP address":
U-Boot> setenv ipaddr 10.193.102.93设置内核名字:
U-Boot> setenv kernel uImage设置rootfs路径:
U-Boot> setenv nfsroot /data/rootfs_home/rootfs保持配置信息:
U-Boot> saveenv注意:
为避免IP地址冲突,可以通过命令"dhcp"进行查询,以确保有效的IP地址。
7.从Nand启动内核
- 将内核和rootfs烧入Nand
方法一:通过ATK工具,请将内核镜像文件烧入地址0x300000下,将rootfs镜像文件烧入0x800000下。
方法二:通过串行口将镜像文件下载到Ram,然后在U-Boot下使用Nand命令将镜像文件烧入Nand。
方法三:通过tftpboot命令将内核下载到Ram,然后在U-Boot下使用Nand命令将镜像文件烧入Nand。 - 配置环境
设置配置信息:
U-Boot> setenv bootargs_nand 'setenv bootargs ${bootargs} root=/dev/mtdblock2
ip=dhcp rootfstype=jffs2'
U-Boot> setenv bootcmd_nand 'run bootargs_base bootargs_nand;nand read
${loadaddr} 0x300000 0x200000;bootm'
U-Boot> setenv
U-Boot> saveenv
U-Boot> setenv bootcmd 'run bootcmd_nand'
重启目标板。
- 格式化MMC卡
第一步,将MMC卡插入Linux主机,此MMC卡将会是/dev/mmcblkx,e.g /dev/mmcblk0,可以通过命令dmesg获得更详细的信息。
擦除SD卡:
export DISK=/dev/sdb
sudo parted --script ${DISK} mklabel msdos
第二步,通过命令fdisk将MMC卡格式化为2个分区:
root@freescale ~$ fdisk /dev/mmcblk0
举例,在lucid用户下操作USB读卡器下的SD卡:
lucid@ubuntu ~$ sudo fdisk /dev/sdb
第三步,在fdisk环境下,输入"p",获得磁盘cylinder相关信息:
Command (m for help): p
Disk /dev/mmcblk0: 3965 MB, 3965190144 bytes
4 heads, 16 sectors/track, 121008 cylinders
Units = cylinders of 64 * 512 = 32768 bytes
可知cylinder尺寸为:32768Bytes = 0x8000.
第四步,计算首要分区起始的cylinder,通常,引导分区内容由3部分组成,分别为MBR、u-boot.bin和uImage,MBR为512 Bytes,u-boot.bin为180KB,uImage为2MB。因此,我们可以将MMC卡的头4MBytes作为引导区,其首要分区的起始cylinder为:0x400000 / 0x8000 = 128.
第五步,计算首要分区末尾的cylinder,将文件"rootfs.ext2.gz"解压,然后查看"ext2 rootfs"大小,约为380MB,因此我们将首要分区然后设置为500MB,其结尾cylinder为:(500 * 0x100000) / 0x80000 = 16000.
第六步,创建首要分区
输入"n"以创建一个分区:
Command (m for help): n
Command action
e extended
p primary partition (1-4)
输入"p"以创建一个首要分区
输入"1"作为首要分区的编号:
Partition number (1-4): 1
输入"96"作为首要cylinder:
First cylinder (1-121008, default 1): 96
输入"16000"作为末尾cylinder:
Last cylinder or +size or +sizeM or +sizeK (96-121008, default 121008): 16000
第七步,创建第二分区
输入"n"以创建一个分区:
Command (m for help): n
Command action
e extended
p primary partition (1-4)
输入"p"以创建一个首要分区
输入"2"作为第二分区的编号:
Partition number (1-4): 2
输入"16001"作为首要cylinder:
First cylinder (1-121008, default 1): 16001
敲入“回车”,以默认的cylinder作为末尾cylinder:
ast cylinder or +size or +sizeM or +sizeK (16001-121008, default 121008): Using
default value 121008
第八步,确认并写入分区信息
输入"p"以显示分区信息:
Command (m for help): p
Disk /dev/mmcblk0: 3965 MB, 3965190144 bytes
4 heads, 16 sectors/track, 121008 cylinders
Units = cylinders of 64 * 512 = 32768 bytes
Device Boot Start End Blocks Id System
/dev/mmcblk0p1 96 16000 508960 83 Linux
/dev/mmcblk0p2 16001 121008 3360256 83 Linux
如果分区信息正确的话,则敲入“w",将分区信息写入MBR:
Command (m for help): w
The partition table has been altered!
Calling mmcblk0: ioctl() to re-read partition ta p1ble
p2
分别格式化成fat 和ext3 的方式,然后把kernel 和rootfs 放入相应的分区。
sudo mkfs.vfat -F 32 /dev/sdb1
sudo mkfs.ext3 /dev/sdb2
- 将u-boot.bin,kernel和rootfs烧入MMC卡
第一步,保存MBR
root@freescale /$ dd if=/dev/mmcblk0 of=./mbr.bin bs=512 count=1
在lucid用户下操作USB读卡器下的SD卡:
lucid@ubuntu ~$ sudo dd if=/dev/sdb of=./mbr.bin bs=512 count=1
备注:另外一种方式可以跳过此步骤,你可以通过定制u-boot.bin文件,以禁止镜像文件里的flash header,然后在第二步操作里面,将u-boot.bin烧入地址0x400。
第二步,将u-boot.bin,kernel,rootfs烧入MMC卡
通过工具ATK,将u-boot.bin烧入地址0x0,将uImage烧入0x100000,将rootfs烧入0x400000。
或者通过tftp的方式下载,其命令为:
tftpboot <ram_address> <image_name>
cp.b <ram_address> <card_offset> <len>
直接在Ubuntu命令下烧写U-Boot.bin:
lucid@ubuntu ~$ sudo dd if=./u-boot-aml.bin of=/dev/sdb bs=1 count=442
lucid@ubuntu ~$ sudo dd if=./u-boot-aml.bin of=/dev/sdb bs=512 skip=1 seek=1
第三步,恢复MBR
root@freescale /$ dd if=./mbr.bin of=/dev/mmcblk0
在lucid用户下操作USB读卡器下的SD卡:
lucid@ubuntu ~$ sudo dd if=./mbr.bin of=/dev/sdb
- 配置环境
U-Boot> setenv bootargs_mmc 'setenv bootargs ${bootargs} root=/dev/mmcblk0p1
ip=dhcp rootfstype=ext2'
U-Boot> setenv bootcmd_mmc 'run bootargs_base bootargs_mmc;mmc dev 0;mmc read
${loadaddr} 0x800 0x1000;bootm'
U-Boot> setenv bootcmd ‘run bootcmd_mmc’
U-Boot> saveenv
重启目标板。
对于U-Boot的默认配置,其超级终端上的串行口通讯参数为:115,200-8-N-1。
系统通讯参数也可以通过命令setenv来重新设置,下面举例介绍如何为目标板配置IP地址。
U-Boot> setenv serverip 10.193.100.158
U-Boot> setenv ethaddr 00:04:9F:00:EA:D7
U-Boot> setenv ipaddr 10.193.102.93
U-Boot> setenv kernel uImage
U-Boot> setenv nfsroot /data/rootfs_home/rootfs
U-Boot> saveenv
Saving Environment to SPI Flash...
Erasing SPI flash...Erase is built in program.
Writing to SPI flash...Writing SPI NOR flash 0x100000 [0x20000 bytes] <- ram
0x975e06e8
......SUCCESS
done
U-Boot>
上面所有相关的参数都必须正确的设置,以便正常使用网络,有些参数值U-Boot上使用不到,但是在某些系统中将会用到。
设置好后的参数通过下面显示:
U-Boot> printenv
bootdelay=3
baudrate=115200
loadaddr=0x90800000
netdev=eth0
ethprime=FEC0
U-Boot_addr=0xa0000000
U-Boot=u-boot.bin
bootargs_base=setenv bootargs console=ttymxc0,115200
bootargs_nfs=setenv bootargs ${bootargs} root=/dev/nfs ip=dhcp
nfsroot=${serverip}:${nfsroot},v3,tcp
bootcmd=run bootcmd_net
bootcmd_net=run bootargs_base bootargs_nfs; tftpboot ${loadaddr} ${kernel};
bootm
prg_U-Boot=tftpboot ${loadaddr} ${U-Boot}; protect off ${U-Boot_addr}
0xa003ffff; erase ${U-Boot_addr} 0xa003ffff; cp.b ${loadaddr} ${U-Boot_addr}
${filesize}; setenv filesize; saveenv
ethact=FEC0
ethaddr=00:04:9F:00:EA:D7
bootargs=console=ttymxc0,115200 root=/dev/nfs ip=dhcp nfsroot=:/opt/eldk/
arm,v3,tcp
ipaddr=10.193.102.93
serverip=10.193.100.158
nfsroot=/data/rootfs_home/rootfs
kernel=uImage.r450
stdin=serial
stdout=serial
stderr=serial
Environment size: 830/131068 bytes
Boot>
四、使用U-Boot
OS镜像文件在U-Boot环境下可以通过串行口或者以太网下载下去,下载后的镜像文件可以直接解压到SDRAM上执行,亦或者存储到Flash上,以便以后使用。
- 串行口下载
如果想通过串行口下载镜像文件的话,那么通讯终端必须支持y moderm协议,如果Windows下的超级终端,同时在U-Boot下输入命令:loady
执行命令后,U-Boot等待接收数据,这时,通过操作“Transfer -> Send File -> Ymodem (under Protocol) ->Send...”来下载镜像文件。 - 以太网下载
注意TFTP不是一个可靠的协议,在网络繁忙的时候,可能会导致下载失败,且没有任何错误的提示,在下载的时候务必要确保下载后正确的字节数。注意有些目标板没有对MAC地址进行设置的。
以太网下载文件步骤:
第一步,对TFTP服务进行相关配置
setenv ethaddr <board_mac_addr>
setenv serverip <Server_IP_Addr>
setenv ipaddr <Board_IP_Addr>
第二步,对服务器进行配置,并且将镜像文件复制到相应的目录下
第三步,测试网络情况
ping <TFTP server IP address>
第四步,下载和执行镜像文件
tftpboot ${loadaddr} <file name>
bootm
五、编译U-Boot
这里有两种方式进行对U-Boot的编译,从Ltib进行编译,或者是对源码直接进行编译。
1.从ltib对U-Boot进行编译
- 获取Ltib
git clone git://git.am.freescale.net/git/ltib.git
git checkout --track -b branch-imx-sdk origin/branch-imx-sdk - 从Ltib获取U-Boot源码
首先换到目录Ltib下,
获取U-Boot源码:
./ltib -m prep -p u-boot - 从Ltib编译U-Boot
./ltib -m scbuild -p u-boot - 从Ltib安装U-Boot
./ltib -m scdeploy -p u-boot
编译好后的代码位于:ltib/rootfs/boot
在Windows下可以通过工具Cygwin对U-Boot进行编译,也可以直接在Linux下编译。下面是编译U-Boot需要的相关文件:
u-boot-2009.08.tar.bz2(pkgs/)
tc-fsl-x86lnxarmeabi-nptl-4.1.2-3.i386.rpm(included)
u-boot-v2009.08-imx_10.05.02.tar.bz2(pkgs/)
下面介绍如何在Linux搭建编译环境
- 设置Linux下编译环境
首先,确保pkgs/下的文件u-boot-2009.08.tar.bz2和u-boot-v2009.08-imx_10.05.02.tar.bz2
在Linux以root的身份登陆,安装tc-fsl-x86lnx-armeabi-nptl-4.1.2-3.i386.rpm - 生成U-Boot镜像文件
相关工具配置完毕后,请遵照以下指令生成U-Boot镜像文件
第一步,从源码文件里u-boot-2009.08.tar.bz2解压到工作目录下
$ tar jxvf u-boot-2009.08.tar.bz2
第二步,切换到子目录u-boot-2009.08,并将补丁u-boot-v2009.08-imx_09.12.00.tar.bz2打上,命令如下:
$ cd u-boot-2009.08
$ tar jxvf u-boot-v2009.08-imx_10.05.02.tar.bz2
$ ./patches/patch-U-Boot.sh
务必确保正确打上补丁
第三步,编译U-Boot,以下命令可以在任何的目录情况下执行,建议在源码目录下创建一全新目录。
针对i.MX53 START board目标板的执行命令为:
make CROSS_COMPILE=/opt/freescale/usr/local/gcc-4.4.4-glibc-2.11.1-multilib-1.0/arm-fsl-linux-gnueabi/bin/arm-none-linux-gnueabimx53_loco_config
make CROSS_COMPILE=/opt/freescale/usr/local/gcc-4.4.4-glibc-2.11.1-multilib-1.0/arm-fsl-linux-gnueabi/bin/arm-none-linux-gnueabi-
这时,将会生成u-boot.bin镜像文件,此镜像文件可以在SDRAM或者Flash上执行。 - 为MMC启动定制U-Boot镜像文件
切换至子文件夹u-boot-2009.08,编译文件include/configs/mx25_3stack_config.h
第一步,去掉Nand配置,注释掉相关代码
/* #define CONFIG_CMD_NAND */
/* #define CONFIG_MXC_NAND */
第二步,使能MMC配置,去掉相关注释
/*
* MMC Configs
* */
#ifdef CONFIG_CMD_MMC
#define CONFIG_MMC 1
#define CONFIG_GENERIC_MMC
#define CONFIG_IMX_MMC
#define CONFIG_DOS_PARTITION1
#define CONFIG_CMD_FAT1
#endif
针对飞思卡尔的相关目标板系列,下面介绍常用的相关命令。
- Run
按照环境变量'var'来运行相关命令:
run [env_variable] - Net命令
使用BOOTP/TFTP协议启动镜像文件:
bootp [loadAddress] [[hostIPaddr:]bootfilename]
使用TFTP协议启动镜像文件:
tftpboot [loadAddress] [[hostIPaddr:]bootfilename]
使用DHCP/TFTP协议启动镜像文件:
dhcp [loadAddress] [[hostIPaddr:]bootfilename]
使用RARP/TFTP协议启动镜像文件:
rarpboot [loadAddress] [[hostIPaddr:]bootfilename] - Boot命令
从存储器执行应用程序:
bootm [addr [arg ...]]
使用TFTP协议启动镜像文件:
tftpboot [loadAddress] [[hostIPaddr:]bootfilename]
使用DHCP/TFTP协议启动镜像文件:
dhcp [loadAddress] [[hostIPaddr:]bootfilename]
使用RARP/TFTP协议启动镜像文件:
rarpboot [loadAddress] [[hostIPaddr:]bootfilename] - 环境配置命令
设置和保持环境配置:
setenv [env_var] [val]
saveenv - SPI-NOR命令
初始化SPI-NOR Flash:
sf probe
从SPI-NOR读取数据:
sf read <dest_addr> <src_offset> <length>
擦除SPI-NOR:
sf erase <src_offset> <length>
写入SPI-NOR:
sf write <dest_addr> <src_offset> <length> - MMC命令
操作一,显示和设置当前MMC设备[分区]:
mmc dev [dev_no] [partition_no]
举例,
- 显示当前MMC设备:
U-Boot > mmc dev
mmc0 is current device - 将MMC设备切换至设备1:
U-Boot > mmc dev 1
Mmc1(part 0) is current device - 切换至MMC设备1,分区1:
U-Boot > mmc dev 1 1
Mmc1(part 1) is current device
操作二,从MMC读取数据:
Mmc read <addr> <blk> <cnt>
举例,
- 从设备0[当前为设备0]读取数据:
U-Boot > mmc read 0x70100000 0 0x200
MMC read: dev # 0, block # 0, count 512 ... 512 blocks read: OK - 从设备1[当前为设备0]读取数据:
U-Boot > mmc dev 1
Mmc1(part 0) is current device
U-Boot > mmc read 0x70100000 0 0x200
MMC read: dev # 1, block # 0, count 512 ... 512 blocks read: OK
操作三,写数据到MMC:
Mmc write <addr> <blk> <cnt>
举例,
- 写数据到设备0[当前为设备0]:
U-Boot > mmc write 0x70100000 0 0x200
MMC write: dev # 0, block # 0, count 512 ... 512 blocks write: OK - 写数据到设备1[当前为设备0]:
U-Boot > mmc dev 1
Mmc1(part 0) is current device
U-Boot > mmc write 0x70100000 0 0x200
MMC read: dev # 1, block # 0, count 512 ... 512 blocks read: OK
操作四,从MMC卡显示和设置Boot分区:
Mmc bootpart [dev] [part]
举例,
- 显示分区:
U-Boot > mmc bootpart
Card doesn't support boot partition feature
U-Boot > mmc bootpart 1
Device 1: boot partition 1 is for boot - 设置Boot分区:
U-Boot > mmc bootpart 1 1
Device 1: boot partition 1 is for boot
U-Boot > mmc bootpart 1 0
Switch boot partition to partition #0, OK
Device 1: boot partition 0 is for boot
操作五,在当前MMC设备列出可用的分区:
Mmc list
举例,
U-Boot > mmc list
FSL_ESDHC: 0
FSL_ESDHC: 1
操作六,擦除数据:
Mmc erase <blk> <cnt>
举例,
- 在当前的设备blk offset 0擦除0x200 Blocks:
U-Boot > mmc erase 0x0 0x200
MMC erase: dev # 1, block # 0, count 512 ...
Caution! Your devices Erase group is 0x400
The erase range would be change to 0x0~0x3ff
512 blocks erase: OK
操作七,Rescan设备:
Mmc rescan
举例,
U-Boot > mmc rescan
U-Boot > mmc list
FSL_ESDHC: 0
FSL_ESDHC: 1
- 显示当前MMC设备:
- FAT命令
- EXT2命令
- PATA命令
- SATA命令
- I2C命令