Uboot初次编译、烧写、启动(启动界面log简析)
目錄
- U-Boot 初次編譯
- U-Boot 燒寫與啟動
上述筆記第三點就是建立shell腳本實現(xiàn)的
第四點就是修改Makefile文件實現(xiàn)的,下面均有實現(xiàn)步驟講解。
U-Boot 初次編譯
先編譯體驗一下正點原子提供的UBOOT。
首先在Ubuntu 中安裝ncurses 庫,否則編譯會報錯,安裝命令如下:
sudo apt-get install libncurses5-dev在Ubuntu 中創(chuàng)建存放uboot 的目錄,比如我的/home/$USER/linux/uboot,然后在此目錄下新建一個名為“alientek_uboot”的文件夾用于存放正點原子提供的uboot 源碼。alientek_uboot文件夾創(chuàng)建成功以后使用FileZilla 軟件將正點原子提供的uboot 源碼拷貝到此目錄中。
正點原子提供的uboot 源碼已經(jīng)放到了開發(fā)板光盤中,路徑為:開發(fā)板光盤->1、例程源碼->3、正點原
子Uboot 和Linux 出廠源碼-> uboot-imx-2016.03-2.1.0-ge468cdc-v1.5.tar.bz2。將其拷貝到Ubuntu中新建的alientek_uboot 文件夾下,完成以后如圖30.2.1 所示:
使用如下命令對其進行解壓縮:
tar -vxjf uboot-imx-2016.03-2.1.0-g8b546e4.tar.bz2解壓完成以后alientek_uboot 文件夾內(nèi)容如圖30.2.2 所示:
上圖中除了uboot-imx-2016.03-2.1.0-g8b546e4.tar.bz2 這個正點原子提供的uboot 源碼壓縮包以外,其他的文件和文件夾都是解壓出來的uboot 源碼。可以發(fā)現(xiàn)有Makefile,不過不能直接進行編譯,需要先進行配置(因為Makefile是通用的,板子不一樣)。
1、512MB(DDR3)+8GB(EMMC)核心板
如果使用的是512MB+8GB 的EMMC 核心板,使用如下命令來編譯對應(yīng)的uboot:
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- distclean make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- (加空格) mx6ull_14x14_ddr512_emmc_defconfig make V=1 ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- -j12- 這三條命令中ARCH=arm 設(shè)置目標為arm 架構(gòu),CROSS_COMPILE 指定所使用的交叉編譯器。第一條命令相當于“make distclean”,目的是清除工程,一般在第一次編譯的時候最好清理一下工程。
- 第二條指令相當于“make mx6ull_14x14_ddr512_emmc_defconfig”,用于配置uboot,配置文件為mx6ull_14x14_ddr512_emmc_defconfig。
- 最后一條指令相當于“make -j12”也就是使用12 核來編譯uboot。當這三條命令執(zhí)行完以后uboot 也就編譯成功了,如圖30.2.3 所示:
編譯完成以后的alentek_uboot 文件夾內(nèi)容如圖30.2.4 所示:
可以看出,編譯完成以后uboot 源碼多了一些文件,其中u-boot.bin 就是編譯出來的uboot二進制文件。uboot 是個裸機程序,因此需要在其前面加上頭部(IVT、DCD 等數(shù)據(jù))才能在I.MX6U上執(zhí)行【聯(lián)想到前面裸機學習的,I.MX 6ULL中內(nèi)部BOOT ROM初始化DDR,然后將.bin文件加載到RAM里面運行,這里就是u-boot.bin(需要加頭部),然后運行的u-boot程序去引導(dǎo)操作系統(tǒng)運行】,圖30.2.4 中的u-boot.imx 文件就是添加頭部以后的u-boot.bin,u-boot.imx 就是我們最終要燒寫到開發(fā)板中的uboot 鏡像文件。
【為了方便,引入shell腳本。其實把Makefile文件進行適當修改,也可以減少輸入很多字母,參考上面筆記的第四點,實際操作如下:】
然后編譯的時候只要在命令行輸入以下命令即可(交叉編譯工具變量直接替換了):
每次編譯uboot 都要輸入一長串命令,為了簡單起見,我們可以新建一個shell 腳本文件,將這些命令寫到shell 腳本文件里面,然后每次只需要執(zhí)行shell 腳本即可完成編譯工作。新建名為mx6ull_alientek_emmc.sh 的shell 腳本文件,然后在里面輸入如下內(nèi)容:
1 #!/bin/bash 2 make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- distclean 3 make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- (加空格) mx6ull_14x14_ddr512_emmc_defconfig 4 make V=1 ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- -j12第1 行是shell 腳本要求的,必須是“#!/bin/bash”或者“#!/bin/sh”。
第2 行使用了make 命令,用于清理工程,也就是每次在編譯uboot 之前都清理一下工程。這里的make 命令帶有三個參數(shù),第一個是ARCH,也就是指定架構(gòu),這里肯定是arm;第二個參數(shù)CROSS_COMPILE 用于指定編譯器,只需要指明編譯器前綴就行了,比如arm-linux-gnueabihf-gcc 編譯器的前綴就是“arm-linux-gnueabihf-”;最后一個參數(shù)distclean 就是清除工程。
第3 行也使用了make 命令,用于配置uboot。同樣有三個參數(shù),不同的是,最后一個參數(shù)是mx6ull_14x14_ddr512_emmc_defconfig。前面說了uboot 是bootloader 的一種,可以用來引導(dǎo)Linux,但是uboot 除了引導(dǎo)Linux 以外還可以引導(dǎo)其它的系統(tǒng),而且uboot 還支持其它的架構(gòu)和外設(shè),比如USB、網(wǎng)絡(luò)、SD 卡等。這些都是可以配置的,需要什么功能就使能什么功能。所
以在編譯uboot 之前,一定要根據(jù)自己的需求配置uboot。mx6ull_14x14_ddr512_emmc_defconfig就是正點原子針對I.MX6U-ALPHA 的EMMC 核心板編寫的配置文件,這個配置文件在uboot源碼的configs 目錄中。在uboot 中,通過“make xxx_defconfig”來配置uboot,xxx_defconfig
就是不同板子的配置文件,這些配置文件都在uboot/configs 目錄中。
第4 行有4 個參數(shù),用于編譯uboot,通過第3 行配置好uboot 以后就可以直接“make”編譯uboot 了。其中V=1 用于設(shè)置編譯過程的信息輸出級別;-j 用于設(shè)置主機使用多少線程編譯uboot,最好設(shè)置成我們虛擬機所設(shè)置的核心數(shù),如果在VMware 里面給虛擬就分配了4 個核,那么使用-j4 是最合適的,這樣4 個核都會一起編譯。使用chmod 命令給予mx6ull_alientek_emmc.sh 文件可執(zhí)行權(quán)限,然后就可以使用這個shell腳本文件來重新編譯uboot,命令如下:
./mx6ull_alientek_emmc.sh2、256MB(DDR3)+ 512MB(NAND)核心板
如果用的256MB+512MB 的NAND 核心板,新建名為x6ull_alientek_nand.sh 的shell 腳本文件,然后在里面輸入如下內(nèi)容:
完成以后同樣使用chmod 指令給予mx6ull_alientek_nand.sh 可執(zhí)行權(quán)限,然后輸入如下命令即可編譯NAND 版本的uboot:
./mx6ull_alientek_nand.shmx6ull_alientek_nand.sh 和mx6ull_alientek_emmc.sh 類似,只是uboot 配置文件不同,這里就不詳細介紹了。
U-Boot 燒寫與啟動
視頻里老師先是演示了簡單方便的OTG方式(參照上面筆記的第二點,給.bin添加頭使用的也是另一種方式),燒寫到EMMC里的。
后面我們還是使用imxdownload 軟件進行燒寫,就像裸機開發(fā)一樣。因為使用OTG方式不僅把U_boot,還有系統(tǒng)鏡像zimage、設(shè)備樹、根文件系統(tǒng)全部重新燒進去,很費時間,我們只是想更新一個u-boot而已。
uboot 編譯好以后就可以燒寫到板子上使用了,這里我們跟前面裸機例程一樣,將uboot燒寫到SD 卡中,然后通過SD 卡來啟動來運行uboot。使用imxdownload 軟件燒寫,命令如下:
chmod 777 imxdownload //給予imxdownload 可執(zhí)行權(quán)限,一次即可 ./imxdownload u-boot.bin /dev/sdd //燒寫到SD 卡,不能燒寫到/dev/sda 或sda1 設(shè)備里面!等待燒寫完成,完成以后將SD 卡插到I.MX6U-ALPHA 開發(fā)板上,BOOT 設(shè)置從SD 卡啟動,使用USB 線將USB_TTL 和電腦連接,也就是將開發(fā)板的串口1 連接到電腦上。打開MobaXterm,設(shè)置好串口參數(shù)并打開,最后復(fù)位開發(fā)板。在MobaXterm 上出現(xiàn)“Hit any key to stop autoboot: ”倒計時的時候按下鍵盤上的回車鍵,默認是3 秒倒計時,在3 秒倒計時結(jié)束以后如果沒有按下回車鍵的話uboot 就會使用默認參數(shù)來啟動Linux 內(nèi)核了。如果在3 秒倒計時結(jié)束之前按下回車鍵,那么就會進入uboot 的命令行模式,如圖30.3.1 所示:
從圖30.3.1 可以看出,當進入到uboot 的命令行模式以后,左側(cè)會出現(xiàn)一個“=>”標志。uboot 啟動的時候會輸出一些信息,這些信息如下所示:
第1 行是uboot 版本號和編譯時間,可以看出,當前的uboot 版本號是2016.03,編譯時間是2020 年8 月7 日凌晨20 點47 分。
第3 和第4 行是CPU 信息,可以看出當前使用的CPU 是飛思卡爾的I.MX6ULL(I.MX 以前屬于飛思卡爾,然而飛思卡爾被NXP 收購了),頻率為792MHz,但是此時運行在396MHz。這顆芯片是工業(yè)級的,結(jié)溫為-40°C~105°C。
第5 行是復(fù)位原因,當前的復(fù)位原因是POR。I.MX6ULL 芯片上有個POR_B 引腳,將這個引腳拉低即可復(fù)位I.MX6ULL。
第6 行是板子名字,當前的板子名字為“I.MX6U ALPHA|MINI”。
第7 行提示I2C 準備就緒。
第8 行提示當前板子的DRAM(內(nèi)存)為512MB,如果是NAND 版本的話內(nèi)存為256MB。
第9 行提示當前有兩個MMC/SD 卡控制器:FSL_SDHC(0)和FSL_SDHC(1)。I.MX6ULL支持兩個MMC/SD,正點原子的I.MX6ULL EMMC 核心板上FSL_SDHC(0)接的SD(TF)卡,FSL_SDHC(1)接的EMMC(MMC表示EMMC或者SD卡)。
第10 和第11 行是LCD 型號,當前的LCD 型號是ATK-LCD-7-1024x600 (1024x600),分辨率為1024x600,格式為RGB888(24 位)。
第12~14 是標準輸入、標準輸出和標準錯誤所使用的終端,這里都使用串口(serial)作為終端。
第15 和16 行是切換到emmc 的第0 個分區(qū)上,因為當前的uboot 是emmc 版本的,也就是從emmc 啟動的。我們只是為了方便將其燒寫到了SD 卡上,但是它的“內(nèi)心”還是EMMC的。所以uboot 啟動以后會將emmc 作為默認存儲器,當然了,你也可以將SD 卡作為uboot 的存儲器,這個我們后面會講解怎么做。
第17 行是網(wǎng)口信息,提示我們當前使用的FEC1 這個網(wǎng)口,I.MX6ULL 支持兩個網(wǎng)口。
第18 行提示FEC1 網(wǎng)卡地址沒有設(shè)置,后面我們會講解如何在uboot 里面設(shè)置網(wǎng)卡地址。
第20 行提示正常啟動,也就是說uboot 要從emmc 里面讀取環(huán)境變量和參數(shù)信息啟動Linux內(nèi)核了。
第21 行是倒計時提示,默認倒計時3 秒,倒計時結(jié)束之前按下回車鍵就會進入Linux 命令行模式。如果在倒計時結(jié)束以后沒有按下回車鍵,那么Linux 內(nèi)核就會啟動,Linux 內(nèi)核一旦啟動,uboot 就會壽終正寢。這個就是uboot 默認輸出信息的含義,NAND 版本的uboot 也是類似的,只是NAND 版本
的就沒有EMMC/SD 相關(guān)信息了,取而代之的就是NAND 的信息,比如NAND 容量大小信息。
uboot 是來干活的,我們現(xiàn)在已經(jīng)進入uboot 的命令行模式了,進入命令行模式以后就可以給uboot 發(fā)號施令了。當然了,不能隨便發(fā)號施令,得看看uboot 支持哪些命令,然后使用這些uboot 所支持的命令來做一些工作。下一節(jié)就講解uboot 命令的使用。
總結(jié)
以上是生活随笔為你收集整理的Uboot初次编译、烧写、启动(启动界面log简析)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: VMware下Windows Serve
- 下一篇: 车站计算机系统sc英文,城市轨道交通信号