E2000從eMMC或SD啟動U-boot和系統(tǒng)

原文在我公眾號上:
https://mp.weixin.qq.com/s/Jg_UNRtf1m7QNt-k4I44Yg
真誠感謝MK分享此篇文檔

本文講解了,如何設(shè)置uboot環(huán)境變量和編譯linux內(nèi)核,實(shí)現(xiàn)將uboot和系統(tǒng)同時(shí)放置到SD卡或eMMC后,從SD或者eMMC啟動uboot,引導(dǎo)系統(tǒng)啟動的過程。
同時(shí)使用E2000Q-demo,演示了從SD卡啟動和從eMMC啟動的過程。
? ? ? ? ? ? ? ??
1、制作MMC(eMMC/SD卡)啟動鏡像文件
1.1、重新編譯u-boot.bin,實(shí)現(xiàn)U-boot環(huán)境變量存儲在MMC(eMMC/SD卡)
在交叉編譯環(huán)境(Ubuntu20.04_X86虛擬機(jī)),進(jìn)入U(xiǎn)boot源碼目錄,運(yùn)行make?menuconfig配置環(huán)境參數(shù)保存在MMC設(shè)備,偏移地址為0x300000(這里0x00000-0x300000地址空間預(yù)留存放BIOS固件fip-all.bin,偏移地址必須大于fip-all.bin),然后重新make得到u-boot.bin。


進(jìn)入E2000打包工具image-fix目錄,更新bl33_new.bin指向重新make得到的u-boot.bin,然后執(zhí)行腳本打包得到新的BIOS固件文件fip-all.bin。? ??
1.2、重新編譯linux內(nèi)核,實(shí)現(xiàn)bootargs傳遞分區(qū)信息
E2000配置從MMC(eMMC/SD卡)啟動的模式,上電啟動需要從MMC設(shè)備(eMMC/SD卡)起始地址加載BIOS固件,BIOS固件會覆蓋分區(qū)表信息,因此需要開啟“u-boot通過bootargs重新傳遞分區(qū)表”的功能。
在交叉編譯環(huán)境(Ubuntu20.04_X86虛擬機(jī)),進(jìn)入linux?kernel源碼目錄,運(yùn)行make?menuconfig開啟command?line?partition?support,然后重新make得到內(nèi)核鏡像Image.gz。



1.3、打包MMC(eMMC/SD卡)啟動鏡像
第1步:在交叉編譯環(huán)境(Ubuntu20.04_X86虛擬機(jī)),使用命令 mkimage將當(dāng)前目錄下的內(nèi)核Image.gz、設(shè)備樹e2000q-demo-board.dtb進(jìn)行打包,得到啟動鏡像文件uImage.itd。
demo.its文件:
第2步:然后,使用dd 命令將fip-all.bin、uImage.itd封裝在一起(偏移地址0x400000,可根據(jù)情況修改),封裝合并后文件為BIOS固件fip-all.bin,這里把fip-all.bin重命名為mmc-boot.bin,支持eMMC/SD卡的MMC啟動鏡像文件就制作完成了。
2、E20000Q-DEMO SD卡啟動BIOS和系統(tǒng)2.1、制作SD啟動系統(tǒng)盤
第1步:在交叉編譯環(huán)境(Ubuntu20.04_X86虛擬機(jī))連接SD卡設(shè)備,使用fdisk 對SD卡進(jìn)行分區(qū),第一個(gè)分區(qū)起始地址要避開前64MB地址(First sector (2048-62333951,default 2048): 131072),空間0~64MB將用來存放fip-all.bin、kernel和設(shè)備樹,64MB及之后空間是Linux根目錄存放分區(qū),下圖為分區(qū)過程。
? ? ? ? ?

第2步:使用mkfs.ext4?格式化分區(qū) (例:mkfs.ext4 /dev/sdb1),并使用mount 命令掛載文件系統(tǒng)。
第3步:將Linux根文件系統(tǒng)解壓到SD卡分區(qū)根目錄,解壓完畢后,sync命令同步文件,然后使用 umount 卸載SD卡的掛載。
第4步:使用dd 命令燒錄mmc-boot.bin到目標(biāo)設(shè)備?/dev/sdb(目標(biāo)設(shè)備可根據(jù)情況修改)。
到這里,SD系統(tǒng)盤就安裝制作完成了。
? ? ? ? ?
2.2、在E20000Q-DEMO參考板上加載SD系統(tǒng)盤
第1步:將SD卡插入E2000Q-DEMO板的SD插座,配置SE_CFG[4:0]為SD啟動模式,上電。第2步:在命令行設(shè)置如下Uboot環(huán)境變量后boot啟動,這里bootargs重新傳遞分區(qū)表(前64MB為分區(qū)1,后面為第分區(qū)2,Linux根目錄放在分區(qū)2)。
系統(tǒng)加載過程,SD啟動log如下:
進(jìn)入Linux系統(tǒng)后,查看分區(qū):cat /proc/partitions

? ? ? ? ?? ? ? ? ?? ? ? ?
3、E20000Q-DEMO eMMC啟動BIOS和系統(tǒng)第1步:在E2000Q-DEMO參考板,從SD、USB或者NVMe?SSD加載進(jìn)入Linux系統(tǒng),對板載eMMC進(jìn)行分區(qū),第一個(gè)分區(qū)起始地址要避開前64MB地址(First sector (2048-62333951,default 2048): 131072),空間0~64MB將用來存放fip-all.bin、kernel和設(shè)備樹,64MB及之后空間是Linux根目錄存放分區(qū),下圖為分區(qū)過程。

? ? ??
第2步:使用mkfs.ext4?格式化分區(qū) (例:mkfs.ext4 /dev/mmcblk0),并使用mount 命令掛載文件系統(tǒng)。? ? ? ? ?
第3步:將Linux根文件系統(tǒng)解壓到eMMC分區(qū)根目錄,解壓完畢后,sync命令同步文件,然后使用 umount 卸載eMMC的掛載。
? ? ? ??
第4步:使用dd 命令燒錄mmc-boot.bin到目標(biāo)設(shè)備?/dev/mmcblk0(目標(biāo)設(shè)備可根據(jù)情況修改)。
? ? ? ? ?
第5步:參考板配置SE_CFG[4:0]為eMMC啟動模式,重新上電。? ? ? ? ?
第6步:在命令行設(shè)置如下Uboot環(huán)境變量后boot啟動,這里bootargs重新傳遞分區(qū)表(前64MB為分區(qū)1,后面為第分區(qū)2,Linux根目錄放在分區(qū)2)。
?
??eMMC加載系統(tǒng)成功:

個(gè)人資料推廣:
最近將多年來收集到的教學(xué)視頻、國內(nèi)外圖書、源碼等整理整合拿出來,
涉及 arm、Linux、python、信號完整性、FPGA、DSP、算法、stm32、
單片機(jī)、制圖、電子模塊、kali、出版社圖書等。
資料目前約 1.5TB+。初、中、高不同階段工程師,都能有提升自己的資料。
1.5TB“電子工程師資料”詳細(xì)介紹

分享,讓技術(shù)更偉大!歡迎轉(zhuǎn)發(fā)!?
歡迎飛騰愛好者加入微信交流群。
群內(nèi)大家可以暢所欲言。在群內(nèi)不需要表露自己的公司和身份,可以群內(nèi)交流遇到的問題,分享自己的調(diào)試心得。
希望大家共建飛騰友誼!
