在移植 Linux之前我們需要先移植一個(gè) bootloader 代碼,這個(gè) bootloader 代碼用于啟動(dòng) Linux 內(nèi)核, bootloader有很多,常用的就是 U-Boot。
移植好 U-Boot 以后再移植 Linux 內(nèi)核,移植完 Linux 內(nèi)核以后Linux 還不能正常啟動(dòng),還需要再移植一個(gè)根文件系統(tǒng)(rootfs),根文件系統(tǒng)里面包含了一些最常用的命令和文件。
所以 U-Boot、 Linux kernel 和 rootfs 這三者一起構(gòu)成了一個(gè)完整的 Linux 系統(tǒng),一個(gè)可以正常使用、功能完善的 Linux 系統(tǒng)。一個(gè)完整的linux系統(tǒng),通常包含了Uboot、kernel、設(shè)備樹以及根文件系統(tǒng)。
| 硬件平臺(tái)
綜合了多方開發(fā)板,最終選擇的是野火(i.MX6ULL eMMC),板子的顏值也比較高,但是原子的教程會(huì)詳細(xì)一點(diǎn),以「野火EBF6ULL Pro開發(fā)板教程」和「正點(diǎn)原子i.MX6ULL阿爾法開發(fā)板教程」為參考,進(jìn)行學(xué)習(xí)實(shí)踐。
(以具體的開發(fā)板為準(zhǔn))
| Uboot介紹
uboot 的全稱是 Universal Boot Loader, uboot 是一個(gè)遵循 GPL 協(xié)議的開源軟件, uboot 是一個(gè)裸機(jī)代碼,可以看作是一個(gè)裸機(jī)綜合例程。現(xiàn)在的 uboot 已經(jīng)支持液晶屏、網(wǎng)絡(luò)、 USB 等高級(jí)功能。
我們一般不會(huì)直接用 uboot 官方的 U-Boot 源碼的。uboot 官方的 uboot 源碼是給半導(dǎo)體廠商準(zhǔn)備的,半導(dǎo)體廠商會(huì)下載 uboot 官方的 uboot 源碼,然后將自家相應(yīng)的芯片移植進(jìn)去。也就是說(shuō)半導(dǎo)體廠商會(huì)自己維護(hù)一個(gè)版本的 uboot,這個(gè)版本的 uboot 相當(dāng)于是他們定制的。
| Uboot編譯
編譯前還要在Ubuntu 中「安裝ncurses 庫(kù)」,安裝命令如下:
sudoapt-getinstalllibncurses5-dev
提示:有些庫(kù)在Ubuntu中已經(jīng)自帶,如果編譯出錯(cuò)記得把需要的庫(kù)安裝;
獲取原廠的uboot源碼:
通過(guò)正點(diǎn)原子官網(wǎng)獲取資源,在「01、例程源碼/04、NXP官方原版Uboot和Linux」目錄下即可找到uboot(uboot-imx-rel_imx_4.1.15_2.1.0_ga.tar.bz2)源碼,然后放到方便找到的目錄下,比如直接放在桌面,本人直接放在桌面/saver目錄下;源碼文件是.bz2格式,需要對(duì)文件進(jìn)行解壓,解壓命令:
tar -vxjf uboot-imx-rel_imx_4.1.15_2.1.0_ga.tar.bz2
解壓后的文件如下圖所示:
uboot的目錄結(jié)構(gòu)如下圖所示:
首先看下「uboot的配置」,configs目錄下有很多的配置文件,找到與實(shí)際開發(fā)板相同類似的配置文件。正點(diǎn)原子和野火的I.MX6ULL開發(fā)板參考的就是「NXP官方的I.MX6ULL EVK開發(fā)板」做的硬件,因?yàn)槭诸^上的開發(fā)板是emmc版本的,所以就使用下面這個(gè)配置文件。
mx6ull_14x14_evk_emmc_defconfig
編譯uboot使用的指令:
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- distclean make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- mx6ull_14x14_evk_emmc_defconfig make V=1 ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- -j8
命令解析:
ARCH=arm 設(shè)置目標(biāo)為 arm 架構(gòu);
CROSS_COMPILE 指定所使用的交叉編譯器。
第1條命令相當(dāng)于make distclean,目的是清除工程,一般在編譯的時(shí)候需要清理一下工程已存在的編譯文件。
第2條指令相當(dāng)于make mx6ull_14x14_evk_emmc_defconfig,用于配置 uboot,配置文件為 mx6ull_14x14_evk_emmc_defconfig。
第3條指令相當(dāng)于make -j8,也就是使用8核來(lái)編譯uboot。
為了方便使用直接寫個(gè)腳本文件,新建一個(gè)build.sh文件,寫入相關(guān)腳本:
#!/bin/bash make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- distclean make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- mx6ull_14x14_evk_emmc_defconfig make V=1 ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- -j8
運(yùn)行腳本編譯uboot:
. build.sh
編譯后的文件結(jié)構(gòu):
編譯后會(huì)生成不少中間文件,其中編譯生成的 u-boot.imx文件就是我們最終要燒寫到開發(fā)板中的 uboot 鏡像文件;
| 燒寫鏡像
燒寫鏡像的方法有很多,這里采用的是SD卡燒錄的方式,簡(jiǎn)單理解就是讓開發(fā)板從SD啟動(dòng),開發(fā)板的啟動(dòng)方式是通過(guò)撥碼開關(guān)實(shí)現(xiàn)切換的;
配置撥碼開關(guān):
(截圖來(lái)源于正點(diǎn)原子,具體根據(jù)實(shí)際開發(fā)板配置)
(截圖來(lái)源于野火,具體根據(jù)實(shí)際開發(fā)板配置)
野火使用的是USB OTG或Etcher的方式更新鏡像,但是正點(diǎn)原子專門編寫了一個(gè)軟件來(lái)將編譯出來(lái)的.bin 文件燒寫到 SD 卡中,這個(gè)軟件叫做"imxdownload",路徑為:開發(fā)板光盤->5、開發(fā)工具->2、Ubuntu 下裸機(jī)燒寫軟件->imxdownload,注意imxdownlaod 只能在 Ubuntu 下使用;
使用步驟:
1. 將 imxdownload 拷貝到工程根目錄下,也就是和 **.bin 處于同一個(gè)文件夾下,要不然燒寫會(huì)失敗的;
2.給予 imxdownload 可執(zhí)行權(quán)限,imxdownload 默認(rèn)是沒有可執(zhí)行權(quán)限的,需要給予 imxdownload 可執(zhí)行權(quán)限;
chmod 777 imxdownload
3. 燒錄到SD卡,注意提前備份數(shù)據(jù),燒錄會(huì)格式化SD卡;
Ubuntu 下所有的設(shè)備文件都在目錄“/dev”里面,所以插上 SD 卡以后也會(huì)出現(xiàn)在“/dev”里面,其中存儲(chǔ)設(shè)備都是以“/dev/sd”開頭的。
//查看電腦所有存儲(chǔ)設(shè)備 ls /dev/sd*
注意:SD卡一定要連接到ubuntu中,如果出現(xiàn)設(shè)備無(wú)法連接到它的理想主機(jī)控制器,就需要把usb兼容性改成3.0;
imxdownload向SD卡燒寫u-boot.bin文件,命令格式如下:
./imxdownload u-boot.bin /dev/sdb
imxdownload:imxdownload工具;
u-boot.bin:需要燒寫到SD卡的文件;
/dev/sdb:插入的SD卡設(shè)備;
注意:不要選擇錯(cuò)設(shè)備,一定要保證是自己插入的SD卡設(shè)備;
注意這個(gè)燒寫速度,如果這個(gè)燒寫速度在幾百 KB/s 以下那么就是正常燒寫,如果這個(gè)燒寫速度大于幾十 MB/s、甚至幾百 MB/s 那么肯定是燒寫失敗了! 燒寫完成以后會(huì)在當(dāng)前工程目錄下生成一個(gè) load.imx 的文件,load.imx 這個(gè)文件就是軟件 imxdownload 根據(jù) NXP 官方啟動(dòng)方式介紹的內(nèi)容,在 u-boot.bin文件前面添加了一些數(shù)據(jù)頭以后生成的。最終燒寫到 SD 卡里面的就是這個(gè) load.imx 文件,而非boot.bin。
|驗(yàn)證效果
把啟動(dòng)方式切換到SD卡啟動(dòng),重新上電啟動(dòng)開發(fā)板,當(dāng)出現(xiàn)倒計(jì)時(shí)時(shí)(串口打印上出現(xiàn)Hit any key to stop autoboot)按下回車,就可以進(jìn)行uboot面板,默認(rèn)倒計(jì)時(shí)3秒,3秒內(nèi)沒有按下按鍵就會(huì)啟動(dòng)內(nèi)核;
使用MobaXterm工具查看開發(fā)板數(shù)據(jù),波特率設(shè)置為115200;
| uboot命令 輸入help或?,然后按下回車即可查看當(dāng)前 uboot 所支持的命令,不同版本的uboot支持的命令會(huì)有一點(diǎn)出入:
uboot支持的命令比較多,具體使用可以去官網(wǎng)看看文檔。
審核編輯:劉清
-
u-boot
+關(guān)注
關(guān)注
0文章
121瀏覽量
38228 -
LINUX內(nèi)核
+關(guān)注
關(guān)注
1文章
316瀏覽量
21650
原文標(biāo)題:i.MX6ULL|uboot初探
文章出處:【微信號(hào):玩轉(zhuǎn)單片機(jī),微信公眾號(hào):玩轉(zhuǎn)單片機(jī)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論