u-boot烧写emmc,并从emmc读数据到内存启动内核

时间:2024-03-21 07:04:48

使用的是petalinux-v2015.4-final版本编译出来的U-BOOT及image.ub。板子内核芯片为ZYNQ-7021。

mmc info 显示存储设备的信息,在切换到emmc设备下(执行mmc dev 0),执行mmcinfo可看到存储设备各属性信息

u-boot烧写emmc,并从emmc读数据到内存启动内核u-boot烧写emmc,并从emmc读数据到内存启动内核

1.使用mmc erase addr blk# cnt    命令把emmc中的部分存储空间清空。mmc erase 0 12500

u-boot烧写emmc,并从emmc读数据到内存启动内核

其中addr指内存中的目标位置起始地址,blk#指被拷贝内容起始存储块的块号,cnt指要被拷贝的块数。一般每个块的大小为512byte。所以blk和cnt参数的单位都是块,一般为512字节。化成十六进制就是0x200。在使用mmc read命令时要注意后面的参数换算,即offset/0x200 = blk,size/200=cnt。

2.用tftf把image.ub下载到内存中:tftp 0x800000 image.ub 或者tftpboot 0x800000 image.ubWindows下TFTP服务器下载链接

u-boot烧写emmc,并从emmc读数据到内存启动内核

u-boot烧写emmc,并从emmc读数据到内存启动内核

3.把内存中的内容写到emmc中指定位置,我写在0x0开始的位置: mmc write 0x800000 0 12500

u-boot烧写emmc,并从emmc读数据到内存启动内核

4.设置环境变量并保存在启动过程中将emmc中的内容读取到0x1000000内存中并启动内核: setenv boot_emmc 'mmc read 0x1000000 0x0 12500 && bootm 0x1000000'(后面的bootm 0x1000000是从内存这个位置启动,为什么是0x1000000在这里有简单说到

u-boot烧写emmc,并从emmc读数据到内存启动内核

最后就直接启动就可以了,我这里是直接在u-boot下面run,如图:

u-boot烧写emmc,并从emmc读数据到内存启动内核

注意:  我这里只有一个存储设备所以是直接操作,如果有多个emmc或者SD用命令: mmc dev 1 切换到相应设备才能对其读)。这里有一篇对在u-boot对FLASH烧写的文章可以和这篇对照查看链接:烧写到flash启动内核网址:https://mp.csdn.net/postedit/80930124