本文讲解了,如何设置uboot环境变量和编译linux内核,实现将uboot和系统同时放置到SD卡或eMMC后,从SD或者eMMC启动uboot,引导系统启动的过程。
同时使用E2000Q-demo,演示了从SD卡启动和从eMMC启动的过程。
1、制作MMC(eMMC/SD卡)启动镜像文件
1.1、重新编译u-boot.bin,实现U-boot环境变量存储在MMC(eMMC/SD卡)
在交叉编译环境(Ubuntu20.04_X86虚拟机),进入Uboot源码目录,运行make menuconfig配置环境参数保存在MMC设备,偏移地址为0x300000(这里0x00000-0x300000地址空间预留存放BIOS固件fip-all.bin,偏移地址必须大于fip-all.bin),然后重新make得到u-boot.bin。
进入E2000打包工具image-fix目录,更新bl33_new.bin指向重新make得到的u-boot.bin,然后执行脚本打包得到新的BIOS固件文件fip-all.bin。
1.2、重新编译linux内核,实现bootargs传递分区信息
E2000配置从MMC(eMMC/SD卡)启动的模式,上电启动需要从MMC设备(eMMC/SD卡)起始地址加载BIOS固件,BIOS固件会覆盖分区表信息,因此需要开启“u-boot通过bootargs重新传递分区表”的功能。
在交叉编译环境(Ubuntu20.04_X86虚拟机),进入linux kernel源码目录,运行make menuconfig开启command line partition support,然后重新make得到内核镜像Image.gz。
1.3、打包MMC(eMMC/SD卡)启动镜像
第1步:在交叉编译环境(Ubuntu20.04_X86虚拟机),使用命令 mkimage将当前目录下的内核Image.gz、设备树e2000q-demo-board.dtb进行打包,