0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

U-Boot介紹

玩轉(zhuǎn)單片機(jī) ? 來(lái)源:玩轉(zhuǎn)單片機(jī) ? 作者:noah ? 2022-10-08 10:50 ? 次閱讀

在移植 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)。

fc6b1e14-45db-11ed-96c9-dac502259ad0.png

| 硬件平臺(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)于是他們定制的。

fdb58cdc-45db-11ed-96c9-dac502259ad0.png

| 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

解壓后的文件如下圖所示:

fe1f5d24-45db-11ed-96c9-dac502259ad0.png

uboot的目錄結(jié)構(gòu)如下圖所示:

fe5d3c66-45db-11ed-96c9-dac502259ad0.png

首先看下「uboot的配置」,configs目錄下有很多的配置文件,找到與實(shí)際開發(fā)板相同類似的配置文件。正點(diǎn)原子和野火的I.MX6ULL開發(fā)板參考的就是「NXP官方的I.MX6ULL EVK開發(fā)板」做的硬件,因?yàn)槭诸^上的開發(fā)板是emmc版本的,所以就使用下面這個(gè)配置文件。

mx6ull_14x14_evk_emmc_defconfig

ff1a2088-45db-11ed-96c9-dac502259ad0.png

編譯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

ff49a204-45db-11ed-96c9-dac502259ad0.png

運(yùn)行腳本編譯uboot:

. build.sh

ffb56764-45db-11ed-96c9-dac502259ad0.png

編譯后的文件結(jié)構(gòu):

006ee252-45dc-11ed-96c9-dac502259ad0.png

編譯后會(huì)生成不少中間文件,其中編譯生成的 u-boot.imx文件就是我們最終要燒寫到開發(fā)板中的 uboot 鏡像文件;

| 燒寫鏡像

燒寫鏡像的方法有很多,這里采用的是SD卡燒錄的方式,簡(jiǎn)單理解就是讓開發(fā)板從SD啟動(dòng),開發(fā)板的啟動(dòng)方式是通過(guò)撥碼開關(guān)實(shí)現(xiàn)切換的;

配置撥碼開關(guān):

0087fe0e-45dc-11ed-96c9-dac502259ad0.png

(截圖來(lái)源于正點(diǎn)原子,具體根據(jù)實(shí)際開發(fā)板配置)

00d3e814-45dc-11ed-96c9-dac502259ad0.png

(截圖來(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 下使用;

00e8024a-45dc-11ed-96c9-dac502259ad0.png

使用步驟:

1. 將 imxdownload 拷貝到工程根目錄下,也就是和 **.bin 處于同一個(gè)文件夾下,要不然燒寫會(huì)失敗的;

010ca0f0-45dc-11ed-96c9-dac502259ad0.png

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;

01432e04-45dc-11ed-96c9-dac502259ad0.png

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è)備;

0178ef4e-45dc-11ed-96c9-dac502259ad0.png

注意這個(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。

01a41f48-45dc-11ed-96c9-dac502259ad0.png

0267ae72-45dc-11ed-96c9-dac502259ad0.png

|驗(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;

04b8503c-45dc-11ed-96c9-dac502259ad0.png

| uboot命令 輸入help或?,然后按下回車即可查看當(dāng)前 uboot 所支持的命令,不同版本的uboot支持的命令會(huì)有一點(diǎn)出入:

04e2083c-45dc-11ed-96c9-dac502259ad0.png

uboot支持的命令比較多,具體使用可以去官網(wǎng)看看文檔。





審核編輯:劉清

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 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)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    U-boot的基本介紹

    從本文開始,將陸續(xù)推送“手把手教你移植U-boot”系列文章,目標(biāo)是由淺入深地講解U-boot的工作流程、原理、配置方法和移植方法,手把手教你完成U-boot的移植工作,默認(rèn)硬件開發(fā)平臺(tái)為ARM,操作系統(tǒng)為L(zhǎng)inux。
    發(fā)表于 07-14 16:52 ?2905次閱讀
    <b class='flag-5'>U-boot</b>的基本<b class='flag-5'>介紹</b>

    u-boot-1.2.0移植手冊(cè)》(轉(zhuǎn)載)

    U-Boot移植手冊(cè)目錄: 寫在前面的話... 2 目 錄... 3 1. u-boot介紹... 4 1.1 U-Boot的來(lái)源... 4 1.2
    發(fā)表于 11-17 08:46

    U-Boot介紹1

    U-Boot介紹1
    發(fā)表于 08-04 00:23

    基于U-boot的EB44B0開發(fā)板移植

    嵌入式系統(tǒng)來(lái)說(shuō),引導(dǎo)程序比較復(fù)雜,一般采用在基本符合硬件體系要求的現(xiàn)有引導(dǎo)程序的基礎(chǔ)上進(jìn)行修改,然后通過(guò)應(yīng)用的方法設(shè)計(jì)引導(dǎo)程序,這就是引導(dǎo)程序的移植。1 U-boot介紹U-boot
    發(fā)表于 06-20 06:28

    U-boot的特點(diǎn)是什么

    Bootloader的操作模式常用bootloader介紹?U-boot介紹U-boot的特點(diǎn):U-boot命令
    發(fā)表于 12-14 09:22

    Porting U-Boot to the Control

    In this paper, the way of porting U-Boot to Control Computer Based MPC8349 will beintroduced
    發(fā)表于 01-25 15:45 ?13次下載

    u-boot的Makefile分析

    u-boot的Makefile分析 U-BOOT是一個(gè)LINUX下的工程,在編譯之前必須已經(jīng)安裝對(duì)應(yīng)體系結(jié)構(gòu)的交叉編譯環(huán)境,這里只針對(duì)ARM,編譯器系列軟件為arm-linux-*。 U-BOOT的下載
    發(fā)表于 05-17 09:16 ?2067次閱讀

    使用U-boot運(yùn)行測(cè)試程序

    本內(nèi)容介紹了使用U-boot運(yùn)行測(cè)試程序
    發(fā)表于 06-16 16:12 ?49次下載
    使用<b class='flag-5'>U-boot</b>運(yùn)行測(cè)試程序

    BootLoader與u-boot介紹

    發(fā)表于 10-20 18:11 ?0次下載

    u-boot簡(jiǎn)介

    U-Boot,全稱 Universal Boot Loader,是遵循GPL條款的開放源碼項(xiàng)目。U-Boot的作用是系統(tǒng)引導(dǎo)。U-Boot從FADSROM、8xxROM、PPCBOOT
    發(fā)表于 10-14 11:17 ?3563次閱讀

    fireflyAIO-3399C主板U-Boot介紹

    RK U-Boot 基于開源的 U-Boot 進(jìn)行開發(fā),工作模式有啟動(dòng)加載模式和下載模式。
    的頭像 發(fā)表于 12-04 10:31 ?1451次閱讀

    fireflyAIO-3288C主板U-Boot介紹

    RK U-Boot 基于開源的 U-Boot 進(jìn)行開發(fā),工作模式有啟動(dòng)加載模式和下載模式。
    的頭像 發(fā)表于 12-16 13:52 ?1153次閱讀
    fireflyAIO-3288C主板<b class='flag-5'>U-Boot</b><b class='flag-5'>介紹</b>

    微雪電子AIO-3128C主板U-Boot使用介紹

    RK U-Boot 基于開源的 U-Boot 進(jìn)行開發(fā),工作模式有啟動(dòng)加載模式和下載模式。
    的頭像 發(fā)表于 12-23 16:08 ?1364次閱讀
    微雪電子AIO-3128C主板<b class='flag-5'>U-Boot</b>使用<b class='flag-5'>介紹</b>

    fireflyAIO-3399J主板U-Boot使用介紹

    RK U-Boot 基于開源的 U-Boot 進(jìn)行開發(fā),工作模式有啟動(dòng)加載模式和下載模式。
    的頭像 發(fā)表于 12-24 10:00 ?1655次閱讀
    fireflyAIO-3399J主板<b class='flag-5'>U-Boot</b>使用<b class='flag-5'>介紹</b>

    Linux U-Boot開發(fā)指南

    介紹 U-Boot 的編譯打包、基本配置、常用命令的使用、基本調(diào)試方法等, 為 U-BOOT 的移植及應(yīng)用開發(fā)提供了基礎(chǔ)。
    的頭像 發(fā)表于 03-06 10:28 ?1323次閱讀
    Linux <b class='flag-5'>U-Boot</b>開發(fā)指南