這篇具有很好參考價(jià)值的文章主要介紹了IMX6ULLPRO單獨(dú)編譯kernel+dtb內(nèi)核模塊以及uboot。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。
目錄
linux開(kāi)發(fā)板啟動(dòng)流程
為什么編譯驅(qū)動(dòng)程序之前要先編譯內(nèi)核?
驅(qū)動(dòng)程序要用到內(nèi)核文件:
編譯內(nèi)核
編譯安裝內(nèi)核模塊
編譯內(nèi)核模塊
安裝內(nèi)核模塊到 Ubuntu 某個(gè)目錄下備用
?安裝內(nèi)核和模塊到開(kāi)發(fā)板上
?Bootloader 介紹
編譯 u-boot 鏡像
linux開(kāi)發(fā)板啟動(dòng)流程

Reset-->ROM-->bootloader-->kernel+dtb-->rootfs-->APP
為什么編譯驅(qū)動(dòng)程序之前要先編譯內(nèi)核?
驅(qū)動(dòng)程序要用到內(nèi)核文件:
比如驅(qū)動(dòng)程序中這樣包含頭文件:
#include <asm/io.h>
,其中的
asm
是 一個(gè)鏈接文件,指向 asm-arm
或
asm-mips
,這需要先配置、編譯內(nèi)核才會(huì)生成 asm 這個(gè)鏈接文件。
?
編譯驅(qū)動(dòng)時(shí)用的內(nèi)核、開(kāi)發(fā)板上運(yùn)行到內(nèi)核,要一致:
開(kāi)發(fā)板上運(yùn)行到內(nèi)核是出廠時(shí)燒錄的,你編譯驅(qū)動(dòng)時(shí)用的內(nèi)核是你自己編譯 的,這兩個(gè)內(nèi)核不一致時(shí)會(huì)導(dǎo)致一些問(wèn)題。所以我們編譯驅(qū)動(dòng)程序前,要把自己 編譯出來(lái)到內(nèi)核放到板子上去,替代原來(lái)的內(nèi)核。
?
更換板子上的內(nèi)核后,板子上的其他驅(qū)動(dòng)也要更換:
板子使用新編譯出來(lái)的內(nèi)核時(shí),板子上原來(lái)的其他驅(qū)動(dòng)也要更換為新編譯出 來(lái)的。所以在編譯我們自己的第 1
個(gè)驅(qū)動(dòng)程序之前,要先編譯內(nèi)核、模塊,并且放到板子上去。
編譯內(nèi)核
不 同 的 開(kāi) 發(fā) 板 對(duì) 應(yīng) 不 同 的 配 置 文 件 , 配 置 文 件 位 于 內(nèi) 核 源 碼 arch/arm/configs/目錄。
kernel
的編譯過(guò)程如下:
make mrproper
make 100ask_imx6ull_defconfig
make zImage -j4
make dtbs
cp arch/arm/boot/zImage /home/book/nfs_rootfs
cp arch/arm/boot/dts/100ask_imx6ull-14x14.dtb /home/book/nfs_rootfs
編譯完成 zImage
后才可編譯設(shè)備樹(shù)文件。
編譯完成后生成的文件如圖
5.2
所示:
編譯完成后,在
arch/arm/boot
目錄下生成
zImage
內(nèi)核文件
,
在 arch/arm/boot/dts 目錄下生成設(shè)備樹(shù)的二進(jìn)制文件
100ask_imx6ull-
14x14.dtb
。把這
2
個(gè)文件復(fù)制到
/home/book/nfs_rootfs
目錄下備用,如圖 5.3:
編譯安裝內(nèi)核模塊
編譯內(nèi)核模塊
進(jìn)入內(nèi)核源碼目錄后,就可以編譯內(nèi)核模塊了
make ARCH=arm CROSS_COMPILE-arm=buildroot-linux-gnueabihf-modulese
內(nèi)核模塊編譯完成后如圖
安裝內(nèi)核模塊到 Ubuntu 某個(gè)目錄下備用
可以先把內(nèi)核模塊安裝到
nfs
目錄
(/home/book/nfs_rootfs)
。
執(zhí)行以下命令安裝模塊:
sudo make ARCH=arm INSTALL_MOD_PATH=/home/book/nfs_rootfs modules_install
把模塊安裝在
nfs
目錄“
/home/book/nfs_rootfs/
”下:
?安裝好驅(qū)動(dòng)后的/home/book/nfs_rootfs/目錄結(jié)構(gòu)如圖 5.6 所示:

?安裝內(nèi)核和模塊到開(kāi)發(fā)板上
假設(shè):在
Ubuntu
的
/home/book/nfs_rootfs
目錄下,已經(jīng)有了
zImage
、 dtb 文件,并且有
lib/modules
子目錄
(
里面含有各種模塊
)
。
接下來(lái)要把這些文件復(fù)制到開(kāi)發(fā)板上。假設(shè)
Ubuntu IP
為
192.168.5.11
, 在開(kāi)發(fā)板上執(zhí)行以下命令:
mount -t nfs -o nolock,vers=3 192.168.5.11:/home/book/nfs_rootfs/ /mnt
cp /mnt/zImage /boot
cp /mnt/100ask_imx6ull-14x14.dtb /boot
cp /mnt/lib/modules /lib -rfd
sync //同步
lsmod //查看內(nèi)核模塊

?Bootloader 介紹
Bootloader
是在操作系統(tǒng)運(yùn)行之前運(yùn)行的一段代碼,用于引導(dǎo)操作系統(tǒng)。
通常每個(gè)操作系統(tǒng)都有一組專屬的引導(dǎo)加載程序。引導(dǎo)加載程序通??梢酝ㄟ^(guò)多
種方式引導(dǎo)操作系統(tǒng)內(nèi)核,還有各種命令用于調(diào)試或修改內(nèi)核運(yùn)行環(huán)境。
U-Boot
是一個(gè)開(kāi)源的主引導(dǎo)加載程序,用于引導(dǎo)設(shè)備的操作系統(tǒng)內(nèi)核,并
含有多種命令以便調(diào)試系統(tǒng)。它適用于多種計(jì)算機(jī)體系結(jié)構(gòu),包括
68k
,
ARM
,
Blackfin
,
MicroBlaze
,
MIPS
,
Nios
,
SuperH
,
PPC
,
RISC-V
和
x86
。
U-boot
官網(wǎng):
https://www.denx.de/wiki/U-Boot
源碼下載頁(yè)面:
http://ftp.denx.de/pub/u-boot/
NXP
官方
uboot
源碼
Git
地址:
https://source.codeaurora.org/external/imx/uboot-imx
本開(kāi)發(fā)使用的
U-boot
位于
Git
倉(cāng)庫(kù),地址為:
https://e.coding.net/weidongshan/imx-uboot2017.03.git
注意
:
我們使用的版本針對(duì)板子進(jìn)行過(guò)修改,
u-boot
官網(wǎng)下載的源碼不能直接使用。
編譯 u-boot 鏡像
不同的開(kāi)發(fā)板對(duì)應(yīng)不同的配置文件,配置文件位于
u-boot
源碼的 “configs/
”目錄。對(duì)于
IMX6ULL Pro
版,
u-boot
的編譯過(guò)程如下
(
編譯
uboot 前必須先配置好工具鏈等開(kāi)發(fā)環(huán)境)
:
cd /home/book/100ask_imx6ull-sdk
book@100ask: ~/100ask_imx6ull-sdk$cd Uboot-2017.03
book@100ask: ~/100ask_imx6ull-sdk/Uboot-2017.03$ make distclean
book@100ask: ~/100ask_imx6ull-sdk/Uboot-2017.03$ make mx6ull_14x14_evk_defconfig
book@100ask: ~/100ask_imx6ull-sdk/Uboot-2017.03$ make -j4
圖
6.1
編譯鏡像文件為具體的執(zhí)行步驟:
編譯完成后生成的文件如圖 6.2 所示。
?編譯完成之后生成 u-boot-dtb.imx,可以燒在 TF 卡、EMMC 上。以下命令是將 文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-815727.html
u-boot-dtb.imx
文件燒寫(xiě)到
EMMC
上:
cp u-boot-dtb.imx /home/book/nfs_rootfs
cp /mnt/u-boot-dtb.imx .
echo 0 > /sys/block/mmcblk1boot0/force_ro //取消讀寫(xiě)保護(hù)
dd if=u-boot-dtb.imx of=/dev/mmcblk1boot0 bs=512 seek=2
echo 1 > /sys/block/mmcblk1boot0/force_ro //恢復(fù)讀寫(xiě)保護(hù)
文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-815727.html
到了這里,關(guān)于IMX6ULLPRO單獨(dú)編譯kernel+dtb內(nèi)核模塊以及uboot的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!
本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!