前幾篇移植都是通過網(wǎng)絡來測試的,在實際的產(chǎn)品開發(fā)中肯定不可能通過網(wǎng)絡來運行,否則沒網(wǎng)的時候產(chǎn)品豈不是就歇菜了。因此需要將 uboot、linux kernel(內(nèi)核)、.dtb(設備樹)和 rootfs 這四個文件燒寫到板子上的 EMMC、NAND 或 QSPI Flash 等其他存儲設備上,這樣不管有沒有網(wǎng)絡產(chǎn)品都可以正常運行,可以借助NXP 官方提供的 MfgTool 工具通過 USB OTG 口來燒寫系統(tǒng),此軟件在 Windows 下使用,對新手非常友好; mfg_tools 這個工具本意是給 NXP 自己的開發(fā)板設計的燒寫軟件,所以肯定帶有自家開發(fā)板對應的 uboot、linux kernel 和 rootfs 的文件。
| 獲取MfgTool
讀者可以直接去官網(wǎng)下載,這里使用的是原子提供的,可以在原子公開資料包中獲取,具體路徑如下:
5、開發(fā)工具->3、NXP官方原版MFG_TOOL燒寫工具->L4.1.15_2.0.0-ga_mfg-tools.tar.gz。
解壓后的文件如下:
|準備工具
解壓后里面還有2個.gz 壓縮包,一個是帶rootfs,一個是不帶rootfs,我們是需要燒寫文件系統(tǒng)的,所以選擇 mfgtools-with-rootfs.tar.gz 這個壓縮包并解壓,然后進入目錄 mfgtools-with-rootfsmfgtools 中, 在此目錄下有幾個文件夾和很多的.vbs 文件:
相關(guān)解析:
Profiles文件夾:要燒寫文件就放到這個文件夾中; MfgTool2.exe:燒寫軟件,一般不會直接打開這個軟件燒寫; 眾多的.vbs 文件:就是配置腳本,燒寫的時候通過雙擊這些.vbs 文件來打開燒寫工具;注意:mfg_tools 不僅能燒寫I.MX6U,而且也能給 I.MX7、I.MX6Q 等芯片燒寫,所以在燒寫之前必須要進行配置,指定燒寫的是什么芯片,燒寫到哪里去,就需要依靠不同的.vbs 配置腳本進行配置;
眾多的.vbs 燒寫腳本是可以刪除的,但是避免不必要的麻煩就不刪除;本人使用的開發(fā)板是EMMC 版核心板,因此只會用到 mfgtool2-yocto-mx-evk-emmc.vbs 這個燒寫腳本,如果用其他的核心板請參考相應的燒寫腳本。
| 燒寫步驟
連接USB OTG
MfgTool 是通過 USB OTG 接口將系統(tǒng)燒寫進 EMMC 中的,需要使用USB線連接電腦;
撥碼開關(guān)撥到 USB 下載模式
需要根據(jù)實際開發(fā)板進行切換,下圖是野火開發(fā)板的撥碼開關(guān)真值表;
如果插了 TF 卡,請彈出 TF 卡,否則電腦不能識別 USB!等識別出來以后再插上 TF 卡!
第一次連接會有提示,一旦第一次設置好設備以后,后面每次連接都不會有任何提示了;
系統(tǒng)燒寫
開發(fā)板連接電腦以后雙擊“mfgtool2-yocto-mx-evk-emmc.vbs”,就會出現(xiàn)下面那個窗口:
如果出現(xiàn)“符合 HID 標準的供應商定義設備”就說明連接正常,可以進行燒寫,如果出現(xiàn)其他的字符那么就要檢查連接是否正確。點擊“Start”按鈕即可開始燒寫;
|系統(tǒng)燒寫原理
需要燒寫uboot、kernel、.dtb 和 rootfs這四個文件,它們一起構(gòu)成了linux系統(tǒng)。 進入如下目錄中:
L4.1.15_2.0.0-ga_mfg-tools/mfgtools-with-rootfs/mfgtools/Profiles/Linux/OS Firmware目錄文件如下:
文件夾“OS Firmware”看名字就知道是存放系統(tǒng)固件的,重點還是關(guān)注 files、firmware 這兩個文件夾,以及 ucl2.xml 這個文件。
MfgTool 工作過程主要分兩個階段:
①、將 firmware 目錄中的 uboot、linux kernel 和.dtb(設備樹),然后通過 USB OTG 將這個文件下載到開發(fā)板的 DDR 中,目的就是在 DDR 中啟動 Linux 系統(tǒng),為后面的燒寫做準備。
②、經(jīng)過第①步的操作,此時 Linux 系統(tǒng)已經(jīng)運行起來了,系統(tǒng)運行起來以后就可以很方便的完成對 EMMC 的格式化、分區(qū)等操作。EMMC 分區(qū)建立好以后就可以從 files 中讀取要燒寫的 uboot、linux kernel、.dtb(設備樹)和 rootfs 這 4 個文件,然后將其燒寫到 EMMC 中,這個就是 MfgTool 的大概工作流程。
firmeare 文件夾
打開 firmware 文件夾,里面有很多的.imx 結(jié)尾的 uboot 文件、一個 zImage 鏡像文件、很多.dtb結(jié)尾的設備樹文件。這些文件都是NXP官方開發(fā)板使用的,不同的板子使用不同的文件,其中需要關(guān)心這三個文件:
這三個文件就是 I.MX6ULL EVK 開發(fā)板燒寫系統(tǒng)的時候第一階段所需的文件。如果要燒寫自己的系統(tǒng),就需要給編譯出來的文件改成上表的名稱;
files 文件夾
上圖三個文件下載到開發(fā)板的 DDR 上以后燒寫的第一階段就完成了,第二階段就是從 files 目錄中讀取整個系統(tǒng)文件,并將其燒寫到 EMMC 中。files 目錄中的文件和firmware 目錄中的基本差不多,都是不同板子對應的 uboot、設備樹文件,同樣,只關(guān)心下圖的四個文件:
如果要燒寫自己編譯出來的系統(tǒng),就需要用編譯出來的文件替換上面四個文件;
ucl2.xml 文件
ucl2.xml用來指定files和firmware目錄要燒寫的uboot和設備樹文件。ucl2.xml 以“
ucl2.xml 首先會判斷當前要向 I.MX 系列的哪個芯片燒寫系統(tǒng),代碼如下:...... ......
通過讀取芯片的VID和 PID 即可判斷出當前要燒寫什么處理器的系統(tǒng),如果 VID=0X15A2,PID=0080,那么就表示要給 I.MX6ULL 燒寫系統(tǒng)。
mfgtool2-yocto-mx-evk-emmc.vbs 文件
ucl2.xml文件中確定了要燒寫的處理器型號以后,還要確定向什么存儲設備燒寫系統(tǒng),這是在mfgtools/mfgtool2-yocto-mx-evk-emmc.vbs中配置;
Set wshShell = CreateObject("WScript.shell") wshShell.run "mfgtool2.exe -c ""linux"" -l ""eMMC"" -s ""board=sabresd"" -s ""mmc=1"" -s ""6uluboot=14x14evk"" -s ""6uldtb=14x14-evk""" Set wshShell = Nothing重點是“wshShell.run”這一行,這里一行調(diào)用了 mfgtool2.exe 這個軟件,并且還給出了一堆的參數(shù),其中就有“eMMC”字樣,說明是向 EMMC 燒寫系統(tǒng),要燒寫的存儲設備就這樣確定下來了。 繼續(xù)分析ucl2.xml文件中的燒寫過程 前面說了燒寫分兩個階段,第一步是通過 USB OTG 向 DDR中下載系統(tǒng),第二步才是正常的燒寫。通過 USB OTG 向 DDR 下載 uboot 的命令如下:
“file”表示要下載的文件位置,在firmware目錄下,文件名字為:Loading U-boot
u-boot-imx6ul%lite%%6uluboot%_emmc.imx“%lite%”和“%6uluboot%” 分別表示取lite和6uluboot的值,在cfg.ini文件中有定義。
cfg.ini文件
mfgtools/cfg.ini文件是一個配置文件,內(nèi)容如下:
[profiles] chip = Linux [platform] board = SabreSD [LIST] name = SDCard [variable] board = sabresd mmc = 0 sxuboot=sabresd sxdtb=sdb 7duboot=sabresd 7ddtb=sdb 6uluboot=14x14ddr3arm2 6uldtb=14x14-ddr3-arm2 6ulldtb=14x14-ddr3-arm2 ldo= plus= lite=l initramfs=fsl-image-mfgtool-initramfs-imx_mfgtools.cpio.gz.u-boot seek = 1 sxnor=qspi2 7dnor=qspi1 6ulnor=qspi1 nor_part=0
“%lite%”和“%6uluboot%”分別表示取 lite 和 6uluboot 的值,而 lite=l,6uluboot=14x14evk,因此將這個值代入以后就是:
u-boot-imx6ull14x14evk _emmc.imx這里向 DDR 中下載的是 firmware/ u-boot-imx6ull14x14evk _emmc.imx 這個 uboot 文件。同樣的方法將.dtb(設備樹)和 zImage 都下載到 DDR 中以后就會跳轉(zhuǎn)去運行 OS,這個時候會在 MfgTool 工具中會有“Jumping to OS image”提示語句,ucl2.xml 中的跳轉(zhuǎn)命令如下:
啟動 Linux 系統(tǒng)以后就可以在 EMMC 上創(chuàng)建分區(qū),然后燒寫 uboot、zImage、.dtb(設備樹)和根文件系統(tǒng)。Jumping to OS image.
|燒寫 NXP 官方系統(tǒng)
燒寫步驟如下:
1、連接好 USB,撥碼開關(guān)撥到 USB 下載模式。
2、彈出 TF 卡,然后按下開發(fā)板復位按鍵。
3、打開 串口工具。
4、雙擊“mfgtool2-yocto-mx-evk-emmc.vbs”,打開下載軟件,如果出現(xiàn)“符合 HID 標準的供應商定義設備”等字樣就說明下載軟件已經(jīng)準備就緒。點擊“Start”按鈕開發(fā)燒寫 NXP 官方系統(tǒng),燒寫過程如圖所示:
燒錄過程會輸出一些信息:
等待好幾分鐘,串口沒輸出就是下載完:
燒寫完成以后點擊“Stop”按鈕停止燒寫,然后點擊“Exit”鍵退出。拔出 USB 線,將開發(fā)板上的撥碼開關(guān)撥到 EMMC 啟動模式,然后重啟開發(fā)板,此時就會從 EMMC 啟動。只是啟動以后的系統(tǒng)是 NXP 官方給 I.MX6ULL EVK 開發(fā)板制作的,這個系統(tǒng)需要輸入用戶名,用戶名為“root”,沒有密碼:
成功進入系統(tǒng):
|燒寫自己的系統(tǒng)
準備要燒寫的文件: 自己移植編譯出來的uboot文件(u-boot.imx),自己移植編譯出來的zImage鏡像文件,開發(fā)板對應的.dtb(設備樹)mx6ull-myboard.dtb,自己構(gòu)建的根文件系統(tǒng)rootfs; rootfs需要先打包成rootfs.tar.bz2,進入Ubuntu中的nfs目錄下的rootfs目錄,使用tar命令打包:
cd rootfs/ tar -vcjf rootfs.tar.bz2 *
全部復制到windows桌面,然后修改一下名稱;
文明名稱一定要和下面的名稱一致;
原名稱 | 修改替換的名稱 |
---|---|
u-boot.imx | u-boot-imx6ull14x14evk_emmc.imx |
zImage | zImage(不需要重命名) |
imx6ull-myboard-emmc.dtb | zImage-imx6ull-14x14-evk-emmc.dtb |
rootfs.tar.bz2 | rootfs_nogpu.tar.bz2 |
先將上圖中的 zImage、u-boot-imx6ull14x14evk_emmc.imx 和 zImage-imx6ull-14x14-evk-emmc.dtb 這三個文件拷貝到 mfgtools-with-rootfs/mfgtools/Profiles/Linux/OS Firmware/firmware 目錄中,替換掉原來的文件。然后將上圖中的所有 4 個文件都拷貝到 mfgtools-with-rootfs/mfgtools/Profiles/Linux/OS Firmware/files目錄中,這兩個操作完成以后就可以進行燒寫了。雙擊“mfgtool2-yocto-mx-evk-emmc.vbs”,打開燒寫軟件,按照燒錄流程燒錄,點擊“Start”按鈕開始燒寫;
燒錄完成,切換到EMMC啟動,成功進入系統(tǒng);
|網(wǎng)絡開機自啟動設置
用 NFS 掛載根文件系統(tǒng)的時候因為要使用 NFS服務,因此 Linux 內(nèi)核會打開 eth0 這個網(wǎng)卡,現(xiàn)在不使用 NFS 掛載根文件系統(tǒng),因此 Linux內(nèi)核也就不會自動打開 eth0 網(wǎng)卡了,可以手動打開網(wǎng)卡;
//查看eth0和eth1是否都存在 ifconfig -a // 打開 eth0 網(wǎng)卡 ifconfig eth0 up //查看網(wǎng)卡,會看到eth0網(wǎng)卡 ifconfig //自動設置IP地址 udhcpc -i eth0 // 通過路由器分配 IP 地址 // 手動設置 IP 地址 ifconfig eth0 192.168.1.251 netmask 255.255.255.0 //設置 IP 地址和子網(wǎng)掩碼 route add default gw 192.168.1.1 //添加默認網(wǎng)關(guān)開機自動打開網(wǎng)卡 設置網(wǎng)卡 IP 地址的命令添加到/etc/init.d/rcS 文件中:
#!/bin/sh PATH=/sbin:/bin:/usr/sbin:/usr/bin:$PATH LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/lib:/usr/lib export PATH LD_LIBRARY_PATH mount -a mkdir /dev/pts mount -t devpts devpts /dev/pts echo /sbin/mdev > /proc/sys/kernel/hotplug mdev -s #網(wǎng)絡開機自啟動設置 ifconfig eth0 up #udhcpc -i eth0 ifconfig eth0 192.168.2.50 netmask 255.255.255.0 route add default gw 192.168.2.1修改了根文件系統(tǒng)就需要重新壓縮,然后燒錄到EMMC中,再從EMMC啟動系統(tǒng),再ping百度來驗證網(wǎng)絡是否能用:
移植工作就到這里,后續(xù)學習 Linux驅(qū)動開發(fā)!
審核編輯:湯梓紅
-
Linux
+關(guān)注
關(guān)注
87文章
11207瀏覽量
208714 -
移植
+關(guān)注
關(guān)注
1文章
376瀏覽量
28096 -
開發(fā)板
+關(guān)注
關(guān)注
25文章
4896瀏覽量
97058 -
燒寫
+關(guān)注
關(guān)注
0文章
57瀏覽量
14237
原文標題:i.MX6ULL|系統(tǒng)燒寫
文章出處:【微信號:玩轉(zhuǎn)單片機,微信公眾號:玩轉(zhuǎn)單片機】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論