E2000从eMMC或SD启动U-boot和系统

原文在我公众号上:

https://mp.weixin.qq.com/s/Jg_UNRtf1m7QNt-k4I44Yg


(相关资料图)

真诚感谢MK分享此篇文档

本文讲解了,如何设置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进行打包,得到启动镜像文件uImage.itd。

demo.its文件:

第2步:然后,使用dd 命令将fip-all.bin、uImage.itd封装在一起(偏移地址0x400000,可根据情况修改),封装合并后文件为BIOS固件fip-all.bin,这里把fip-all.bin重命名为mmc-boot.bin,支持eMMC/SD卡的MMC启动镜像文件就制作完成了。

2、E20000Q-DEMO SD卡启动BIOS和系统2.1、制作SD启动系统盘

第1步:在交叉编译环境(Ubuntu20.04_X86虚拟机)连接SD卡设备,使用fdisk 对SD卡进行分区,第一个分区起始地址要避开前64MB地址(First sector (2048-62333951,default 2048): 131072),空间0~64MB将用来存放fip-all.bin、kernel和设备树,64MB及之后空间是Linux根目录存放分区,下图为分区过程。

第2步:使用mkfs.ext4 格式化分区 (例:mkfs.ext4 /dev/sdb1),并使用mount 命令挂载文件系统。

第3步:将Linux根文件系统解压到SD卡分区根目录,解压完毕后,sync命令同步文件,然后使用 umount 卸载SD卡的挂载。

第4步:使用dd 命令烧录mmc-boot.bin到目标设备 /dev/sdb(目标设备可根据情况修改)。

到这里,SD系统盘就安装制作完成了。

2.2、在E20000Q-DEMO参考板上加载SD系统盘

第1步:将SD卡插入E2000Q-DEMO板的SD插座,配置SE_CFG[4:0]为SD启动模式,上电。第2步:在命令行设置如下Uboot环境变量后boot启动,这里bootargs重新传递分区表(前64MB为分区1,后面为第分区2,Linux根目录放在分区2)。

系统加载过程,SD启动log如下:

进入Linux系统后,查看分区:cat /proc/partitions

3、E20000Q-DEMO eMMC启动BIOS和系统第1步:在E2000Q-DEMO参考板,从SD、USB或者NVMe SSD加载进入Linux系统,对板载eMMC进行分区,第一个分区起始地址要避开前64MB地址(First sector (2048-62333951,default 2048): 131072),空间0~64MB将用来存放fip-all.bin、kernel和设备树,64MB及之后空间是Linux根目录存放分区,下图为分区过程。

第2步:使用mkfs.ext4 格式化分区 (例:mkfs.ext4 /dev/mmcblk0),并使用mount 命令挂载文件系统。         第3步:将Linux根文件系统解压到eMMC分区根目录,解压完毕后,sync命令同步文件,然后使用 umount 卸载eMMC的挂载。

第4步:使用dd 命令烧录mmc-boot.bin到目标设备 /dev/mmcblk0(目标设备可根据情况修改)。

第5步:参考板配置SE_CFG[4:0]为eMMC启动模式,重新上电。         第6步:在命令行设置如下Uboot环境变量后boot启动,这里bootargs重新传递分区表(前64MB为分区1,后面为第分区2,Linux根目录放在分区2)。

eMMC加载系统成功:

个人资料推广:

最近将多年来收集到的教学视频、国内外图书、源码等整理整合拿出来,

涉及 arm、Linux、python、信号完整性、FPGA、DSP、算法、stm32、

单片机、制图、电子模块、kali、出版社图书等。

资料目前约 1.5TB+。初、中、高不同阶段工程师,都能有提升自己的资料。

1.5TB“电子工程师资料”详细介绍

分享,让技术更伟大!欢迎转发!

欢迎飞腾爱好者加入微信交流群。

群内大家可以畅所欲言。在群内不需要表露自己的公司和身份,可以群内交流遇到的问题,分享自己的调试心得。

希望大家共建飞腾友谊!

标签:

X
X

Copyright ©  2015-2022 热讯信息网版权所有  备案号:豫ICP备20005723号-6   联系邮箱:29 59 11 57 8@qq.com