最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊(cè)

i.MX6ULL嵌入式Linux開發(fā)1-uboot移植初探

2021-07-14 23:05 作者:碼農(nóng)愛學(xué)習(xí)-B站  | 我要投稿

本系列教程以i.MX6ULL處理器的ARM開發(fā)板為實(shí)驗(yàn)基礎(chǔ),學(xué)習(xí)記錄嵌入式Linux開發(fā)的各種知識(shí)與經(jīng)驗(yàn),主要內(nèi)容包括嵌入式Linux移植,嵌入式Linux驅(qū)動(dòng)開發(fā),嵌入式Linux應(yīng)用開發(fā)等。

本系列教程將以野火的i.MX6ULL eMMC開發(fā)板為硬件基礎(chǔ),以野火EBF6ULL Pro開發(fā)板教程正點(diǎn)原子i.MX6ULL阿爾法開發(fā)板教程為參考,進(jìn)行學(xué)習(xí)實(shí)踐。

1 嵌入式Linux移植概述

Linux 的移植主要包括3部分:

  • 移植bootloader 代碼, Linux 系統(tǒng)要啟動(dòng)就必須需要一個(gè) bootloader 程序,也就說芯片上電以后先運(yùn)行一段bootloader程序。 這段bootloader程序會(huì)先初始化DDR等外設(shè), 然后將Linux內(nèi)核從flash(NAND,NOR FLASH,SD,MMC 等)拷貝到 DDR 中,最后啟動(dòng) Linux 內(nèi)核。 bootloader 有很多,常用的就是 U-Boot。

    bootloader 和 Linux 內(nèi)核的關(guān)系就跟 PC 上的 BIOS 和 Windows 的關(guān)系一樣,bootloader 就相當(dāng)于 BIOS。

  • 移植Linux 內(nèi)核,Linux內(nèi)核由一系列程序組成,包括負(fù)責(zé)響應(yīng)中斷的中斷服務(wù)程序、負(fù)責(zé)管理多個(gè)進(jìn)程從而分享處理器時(shí)間的調(diào)度程序、負(fù)責(zé)管理地址空間的內(nèi)存管理程序、網(wǎng)絡(luò)、進(jìn)程間通信的系統(tǒng)服務(wù)程序等。內(nèi)核負(fù)責(zé)管理系統(tǒng)的硬件設(shè)備。

  • 移植根文件系統(tǒng)(rootfs),Linux 中的根文件系統(tǒng)更像是一個(gè)文件夾或者叫做目錄,在這個(gè)目錄里面會(huì)有很多的子目錄。根目錄下和子目錄中會(huì)有很多的文件,這些文件是 Linux 運(yùn)行所必須的,比如庫(kù)、常用的軟件和命令、設(shè)備文件、配置文件等等。根文件系統(tǒng)里面包含了一些最常用的命令和文件。

    U-Boot、Linux kernel 和 rootfs這三者一起構(gòu)成了一個(gè)完整的 Linux 系統(tǒng),一個(gè)可以正常使用、功能完善的 Linux 系統(tǒng)。

2 實(shí)驗(yàn)開發(fā)板簡(jiǎn)介

本測(cè)試使用的開發(fā)板為野火的i.MX6ULL eMMC開發(fā)板。

3 U-Boot簡(jiǎn)介

uboot 的全稱是Universal Boot Loader,遵循 GPL 協(xié)議的開源軟件。

uboot 是一個(gè)裸機(jī)代碼,可以看作是一個(gè)裸機(jī)綜合例程?,F(xiàn)在的 uboot 已經(jīng)支持液晶屏、網(wǎng)絡(luò)、USB 等高級(jí)功能。uboot 官網(wǎng)為 https://www.denx.de/wiki/U-Boot/

可以在uboot官網(wǎng)下載uboot源碼,點(diǎn)擊左側(cè) Topics 中的“Source Code”,然后點(diǎn)擊的“FTP Server” ,進(jìn)入其 FTP 服務(wù)器即可看到 uboot 源碼。

但我們移植uboot時(shí)一般不會(huì)直接用 uboot 官方的源碼的,官方的源碼是給半導(dǎo)體廠商準(zhǔn)備的,半導(dǎo) 體廠商會(huì)根據(jù)自家的芯片,維護(hù)自己芯片對(duì)應(yīng)的uboot。

NXP(freescale)維護(hù)的的uboot地址: https://github.com/Freescale/u-boot-fslc


4 NXP uboot測(cè)試

?uboot移植并不需要從零開始將 uboot 移植到我們現(xiàn)在所使用的開發(fā)板上。因?yàn)榘雽?dǎo)體廠商通常都會(huì)自己做一個(gè)開發(fā)板(原廠開發(fā)板), 將uboot移植到他們自己的原廠開發(fā)板上,再將這個(gè)uboot(原廠BSP 包)發(fā)布出去。

市面上的開發(fā)板,通常會(huì)參考原廠的開發(fā)板做硬件,然后在原廠提供的 BSP 包上做修改,如正點(diǎn)原子和野火的 I.MX6ULL 開發(fā)板參考的就是NXP官方的 I.MX6ULL EVK 開發(fā)板做的硬件:

4.1 編譯環(huán)境搭建

4.1.1 交叉編譯器下載

嵌入式Linux開發(fā),程序編譯通常在電腦端的Linux(如虛擬機(jī)中的Ubuntu)下進(jìn)行編譯,Ubuntu 自帶gcc 編譯器,但該編譯器是針對(duì) X86 架構(gòu)的!而嵌入式Linux是ARM架構(gòu)的, 所以需要一個(gè)在 X86 架構(gòu)上可以編譯 ARM 架構(gòu)代碼的 gcc編譯器,即交叉編譯器

交叉編譯器有很多,本實(shí)驗(yàn)使用 Linaro 出品的交叉編譯器,下載地址:

https://releases.linaro.org/components/toolchain/binaries/4.9-2017.01/arm-linux-gnueabihf/


4.1.2 交叉編譯器安裝

在Ubuntu中創(chuàng)建目錄:/usr/local/arm,并將下載的gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf.tar.xz復(fù)制到此文件中,然后解壓,解壓命令如下:

解壓完成以后會(huì)生成一個(gè)名為“gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf”的文件夾,這個(gè)文件夾里面就是我們的交叉編譯工具鏈。

然后,需要將該目錄添加到環(huán)境變量中。打開/etc/profile 以后,在最后面輸入如下所示內(nèi)容:

使用交叉編譯器之前還需要安裝其它的庫(kù),命令如下:

安裝完之后,可以查看交叉編譯工具的版本號(hào),輸入如下命令:

可以看到類似如下打印

以看出當(dāng)前交叉編譯器的版本號(hào)為 4.9.4,說明交叉編譯工具鏈安裝成功。


4.2 編譯原廠uboot

編譯前還要在Ubuntu 中安裝ncurses 庫(kù),安裝命令如下:

sudo apt-get install libncurses5-dev

在Ubuntu中創(chuàng)建存放uboot的目錄,如我的目錄是:/home/xxpcb/myTest/imx6ull/uboot/nxp_uboot

然后,將NXP(freescale)的uboot源碼復(fù)制進(jìn)來,這里使用的是正點(diǎn)原子提供的NXP官方原版Uboot源碼包( uboot-imx-rel_imx_4.1.15_2.1.0_ga.tar.bz2)

然后進(jìn)行解壓:

解壓后的源碼文件如下:


首先看下uboot的配置,configs 目錄下有很多跟 I.MX6UL/6ULL 有關(guān)的配置,找到與mx6ull相同的,如下圖。

因?yàn)槲疫@個(gè)開發(fā)板是emmc版本的,所有就使用這個(gè)mx6ull_14x14_evk_emmc_defconfig

編譯uboot使用下面3條指令:

這3條命令中 :

  • 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核來編譯uboot。

為了方便的執(zhí)行著3條指令,可以將這些指令寫成shell腳本,比如在uboot源碼目錄下新建一個(gè)build.sh文件,寫入如下內(nèi)容:

然后進(jìn)行編譯:

./build.sh

編譯完成以后uboot 源碼多了一些文件,其中u-boot.bin就是編譯出來的 uboot二進(jìn)制文件。 uboot是個(gè)裸機(jī)程序, 因此需要在其前面

加上頭部(IVT、 DCD等數(shù)據(jù))才能在I.MX6U上執(zhí)行,u-boot.imx文件就是添加頭部以后的 u-boot.bin。

u-boot.imx 就是我們最終要燒寫到開發(fā)板中的 uboot 鏡像文件。


4.3 燒錄開發(fā)板

這是的燒錄開發(fā)板,實(shí)際是要燒錄到SD卡中,然后將SD卡插入開發(fā)板,讓開發(fā)板從SD卡啟動(dòng)(需要在開發(fā)板上設(shè)置撥碼開關(guān)來選擇啟動(dòng)方式)。

4.3.1 燒錄到SD卡

正點(diǎn)原子專門編寫了一個(gè)小軟件用來將編譯出來的.bin 文件燒寫到 SD 卡中,這個(gè)軟件叫做“imxdownload

將imxdownload 復(fù)制到 Ubuntu 中的uboot源碼文件夾,再使用如下指令,給予 imxdownload 可執(zhí)行權(quán)限:

然后電腦USB中插入SD卡(讀卡器),并在虛擬機(jī)中設(shè)置usb加載(VMware或VirtualBox虛擬機(jī)需要先安裝增強(qiáng)功能才能使用)

然后可以使用如下指令來查看SD卡的掛載標(biāo)識(shí)符:

查看輸出結(jié)果:

這里的/dev/sdb就是我的SD卡。

注:我第一次使用SD卡燒錄時(shí),只多出了/dev/sdb,但不知什么情況,用了幾次后,再插入SD卡,就會(huì)同時(shí)多出來/dev/sdb和/dev/sdb1,但實(shí)際測(cè)試,仍然把程序燒錄到/dev/sdb也能用)。

imxdownload向SD卡燒寫led.bin文件,命令格式如下:

注意不能燒寫到/dev/sdasda1設(shè)備里面!那是系統(tǒng)磁盤。

燒寫過程會(huì)輸入如下信息:

燒寫的最后一行會(huì)顯示燒寫大小、用時(shí)和速度,比如u-boot.bin燒寫到SD卡中的大小是 423KB,用時(shí) 1.7s,燒寫速度是 236KB/s。

注意這個(gè)燒寫速度,如果這個(gè)燒寫速度在幾百KB/s 以下那么就是正常燒寫。 如果這個(gè)燒寫速度大于幾十MB/s、甚至幾百M(fèi)B/s那么肯定是燒寫失敗了! 重新插拔/格式化SD卡或重啟ubuntu再試。

燒寫完成以后會(huì)在當(dāng)前工程目錄下生成一個(gè)load.imx的文件,這個(gè)文件就是軟件 imxdownload 根據(jù) NXP 官方啟動(dòng)方式介紹的內(nèi)容, 在 bin 文件前面添加了一些數(shù)據(jù)頭以后生成的。最終燒寫到 SD卡里面的就是這個(gè)imx文件。

4.3.2 啟動(dòng)開發(fā)板

燒錄完之后,將SD卡插入開發(fā)板啟動(dòng),使用串口連接電腦,查看uboot啟動(dòng)信息。

設(shè)置好串口參數(shù)(波特率115200)并打開,按鍵復(fù)位開發(fā)板。

當(dāng)串口打印上出現(xiàn)“Hit any key to stop autoboot”倒計(jì)時(shí)的時(shí)候按下鍵盤上的回車鍵,默認(rèn)是 3 秒倒計(jì)時(shí),在 3 秒倒計(jì)時(shí)結(jié)束以后如果沒有按下回車鍵的話 uboot 就會(huì)使用默認(rèn)參數(shù)來啟動(dòng) Linux 內(nèi)核了。

如果在 3 秒倒計(jì)時(shí)結(jié)束之前按下回車鍵,那么就會(huì)進(jìn)入 uboot 的命令行模式:

解讀一下這些信息的含義:

  • 第1行是 uboot 版本號(hào)和編譯時(shí)間:當(dāng)前的 uboot 版本號(hào)是 2016.03,編譯時(shí)間是 2021/7 /11/15:22:25

  • 第3、4 行是 CPU 信息:當(dāng)前使用的 CPU 是飛思卡爾(屬于NXP)的 I.MX6ULL (頻率為 792MHz),此時(shí)運(yùn)行在 396MHz。這顆芯片是工業(yè)級(jí)的,結(jié)溫為-40°C~105°C

  • 第 5 行是復(fù)位原因:I.MX6ULL 芯片上有個(gè) POR_B 引腳,將這個(gè)引腳拉低即可復(fù)位 I.MX6ULL。

  • 第 6 行是板子名字,“MX6ULL 14x14 EVK”即NXP原廠開發(fā)板的名字 。

  • 第 7 行提示 I2C 準(zhǔn)備就緒。

  • 第 8 行提示當(dāng)前板子的DRAM(內(nèi)存) 為 512MB

  • 第 9 行提示當(dāng)前有兩個(gè)MMC/SD 卡控制器:FSL_SDHC(0)和 FSL_SDHC(1)。I.MX6ULL支持兩個(gè) MMC/SD,正點(diǎn)原子的 I.MX6ULL EMMC 核心板上 FSL_SDHC(0)接的 SD(TF)卡,F(xiàn)SL_SDHC(1)接的 EMMC。

  • 第10行是一條警告信息,先忽略。

  • 第 12、13 行是 LCD 型號(hào),原廠默認(rèn)的是TFT43AB (480x272)。

  • 第 14~16 是標(biāo)準(zhǔn)輸入、標(biāo)準(zhǔn)輸出和標(biāo)準(zhǔn)錯(cuò)誤所使用的終端,這里都使用串口(serial)作為終端。

  • 第 17 、18行是切換到emmc的第0個(gè)分區(qū)上,因?yàn)楫?dāng)前的 uboot 是 emmc 版本的,也就是從 emmc 啟動(dòng)的。我們只是為了方便將其燒寫到了 SD 卡上,但是它的“內(nèi)心”還是 EMMC的。所以 uboot 啟動(dòng)以后會(huì)將 emmc 作為默認(rèn)存儲(chǔ)器 。

  • 第 19行是網(wǎng)口信息,提示我們當(dāng)前使用的 FEC1 這個(gè)網(wǎng)口,I.MX6ULL 支持兩個(gè)網(wǎng)口。

  • 第 20行提示 FEC1 網(wǎng)卡地址沒有設(shè)置(后面我們會(huì)講解如何在uboot 里面設(shè)置網(wǎng)卡地址)。

  • 第 22行提示正常啟動(dòng), 也就是說 uboot要從emmc里面讀取環(huán)境變量和參數(shù)信息啟動(dòng) Linux內(nèi)核了。

  • 第23行是倒計(jì)時(shí)提示,默認(rèn)倒計(jì)時(shí) 3 秒,倒計(jì)時(shí)結(jié)束之前按下回車鍵就會(huì)進(jìn)入 Linux 命令行模式。如果在倒計(jì)時(shí)結(jié)束以后沒有按下回車鍵,那么 Linux 內(nèi)核就會(huì)啟動(dòng),Linux 內(nèi)核一旦啟動(dòng),uboot 就運(yùn)行結(jié)束了。

  • 第23行是在倒計(jì)時(shí) 3 秒內(nèi)按了回車鍵,符號(hào)=>表示可以繼續(xù)與uboot進(jìn)行命令交互。

看過了串口的uboot信息,再來看一下板子是實(shí)際運(yùn)行情況:

由于原廠的uboot驅(qū)動(dòng)的屏幕是TFT43AB (480x272),與我這里屏幕不一樣,所以屏幕沒有正常顯示(現(xiàn)在的屏幕看起來有許多彩色的小點(diǎn)點(diǎn)),接下來,就是對(duì)uboot進(jìn)行屏幕驅(qū)動(dòng)的修改。

在本篇結(jié)束之前,再來研究一下uboot的串口指令。

4.4 uboot命令初探

上面說道,在uboot啟動(dòng)的3 秒倒計(jì)時(shí)內(nèi),串口界面如果按下了回車鍵,uboot就會(huì)輸出符號(hào)=>,則可以繼續(xù)與uboot進(jìn)行命令交互。那可以輸入哪些命令呢?

4.4.1 help命令查看所有指令

輸入help或者? ,然后按下回車即可查看當(dāng)前 uboot 所支持的命令:

4.4.2 查看指令的使用說明

命令的具體使用方法,可以輸入help 命令名? 命令名查看,以“bootz”這個(gè)命令為例:

4.4.3 信息查詢命令

常用的和信息查詢有關(guān)的命令有 3 個(gè):bdinfo、printenvversion

  • bdinfo 板子信息

?從打印信息可以得出 DRAM 的起始地址和大小、啟動(dòng)參數(shù)保存起始地址、波特率、sp(堆棧指針)起始地址等信息.

  • printenv 打印環(huán)境變量

?這里有很多的環(huán)境變量, 比如baudrate、 board_name、 board_rec、 boot_fdt、 bootcmd等。比如 bootdelay 這個(gè)環(huán)境變量就表示 uboot 啟動(dòng)延時(shí)時(shí)間,默認(rèn) bootdelay=3,也就默認(rèn)延時(shí) 3秒。前面說的 3 秒倒計(jì)時(shí)就是由 bootdelay 定義的。另外uboot 中的環(huán)境變量都是字符串。

  • version 版本信息

?當(dāng)前uboot 版本號(hào)為 2016.03,編譯日期2021/7/11,編譯器為arm-linux-gnueabihf-gcc。

本篇uboot移植初探(原廠uboot燒錄測(cè)試)就到這里,下一篇進(jìn)行實(shí)際的uboot移植,使得uboot與所用的開發(fā)板匹配



i.MX6ULL嵌入式Linux開發(fā)1-uboot移植初探的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國(guó)家法律
万山特区| 辽宁省| 东乌珠穆沁旗| 江都市| 松滋市| 潢川县| 麻阳| 政和县| 英德市| 吐鲁番市| 巨鹿县| 沙湾县| 临潭县| 阿鲁科尔沁旗| 图木舒克市| 新密市| 名山县| 唐海县| 西贡区| 砀山县| 延寿县| 寿阳县| 南陵县| 平遥县| 柳林县| 神池县| 南雄市| 田阳县| 裕民县| 西宁市| 松江区| 永登县| 新竹市| 宜川县| 阿克| 巴马| 镶黄旗| 武汉市| 宜兰县| 兰西县| 仪征市|