找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 1906|回復(fù): 0
打印 上一主題 下一主題
收起左側(cè)

移植5.4內(nèi)核到迅為I.MX6ULL開(kāi)發(fā)板

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
本篇推文會(huì)加到后續(xù)的文檔里面,另外等QT視頻錄制完成以后,就開(kāi)始更新終結(jié)者驅(qū)動(dòng)和系統(tǒng)移植的視頻,后續(xù)的驅(qū)動(dòng)移植教程和視頻也全部會(huì)在本次移植的5.4內(nèi)核上進(jìn)行講解和錄制。大家也可以趁著端午節(jié)親手移植感受下。
獲取Linux內(nèi)核源碼
NXP官方提供了I.MX6ULL的Linux內(nèi)核源碼,我們可以使用git來(lái)獲取Linux 5.4.3的內(nèi)核源碼(為了大家學(xué)習(xí)方便我們給大家提供了下載好的核源碼,后續(xù)會(huì)保存在光盤(pán)資料的“i.MX6UL終結(jié)者光盤(pán)資料\05_uboot linux源碼”目錄下“i.MX6ULL_Kernel_5.4.3.tar.bz2”)。

下面我們通過(guò)git下載5.4.3內(nèi)核源碼。輸入以下命令獲取源碼:
下載完成會(huì)在當(dāng)前目錄下生成“l(fā)inux-imx”文件,如下圖所示:
然后我們使用“cd linux-imx”命令進(jìn)入到下載的內(nèi)核目錄下,我們可以打開(kāi)當(dāng)前目錄下的“Makefile“文件,查看下現(xiàn)在的內(nèi)核版本,運(yùn)行結(jié)果如下圖所示:
從上圖我們可以看到下載的內(nèi)核版本并不是5.4.3,那么我們是不是下載錯(cuò)了呢?答案是:我們沒(méi)有下載錯(cuò)的。因?yàn)槲覀兿螺d的NXP提供的這套Linux源碼,里面包含了所有版本的分支,我們需要使用命令檢索出對(duì)應(yīng)的版本。下面我們開(kāi)始講解如何檢索出我們想要的版本。首先我們可以使用git命令查看都有哪些分支,我們可以輸入“git branch -a”查看所有的分支。
我們需要檢索出“5.4.3”版本的內(nèi)核源碼,我們可以輸入命令“git checkout origin/imx_5.4.3_2.0.0”(其中的origin/imx_5.4.3_2.0.0是我們要檢索出的分支,大家如果想要檢索出其它分支,只需要把這個(gè)名字改成對(duì)應(yīng)的分支名字就可以),運(yùn)行結(jié)果如下圖所示:
從上圖我們可以看到已經(jīng)檢索出了“5.4.3”的分支,我們?cè)俅未蜷_(kāi)內(nèi)核源碼目錄下的“Makefile”文件,如下圖所示:
從上圖我們可以看到當(dāng)前的內(nèi)核版本是“5.4.3”了。

搭建編譯環(huán)境
Linux 5.4.3的編譯環(huán)境和默認(rèn)4.1.15用的交叉編譯器一樣,也是“gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf.tar.xz”,關(guān)于交叉編譯器的搭建,可以參考“i.mx6ull終結(jié)者開(kāi)發(fā)板使用手冊(cè)”的4.3章節(jié)“搭建交叉編譯環(huán)境”和29.1章節(jié) 安裝第三方庫(kù)。

編譯內(nèi)核
為了編譯方便,我們可以創(chuàng)建一個(gè)腳本,我們?cè)诿钚休斎搿皏i create.sh”,并輸入以下內(nèi)容:
#!/bin/bash
export ARCH=arm
export CROSS_COMPILE=arm-linux-gnueabihf-
make imx_v7_defconfig
make zImage -j8
給腳本一個(gè)執(zhí)行權(quán)限,然后我們運(yùn)行“./create.sh”腳本,開(kāi)始編譯Linux內(nèi)核,如下圖所示:
編譯完成,會(huì)在“arch/arm/boot”目錄下生成“zImage”鏡像文件,如下圖所示:

編譯生成了鏡像文件以后,接下來(lái)我們需要編譯設(shè)備樹(shù)文件。首先我們進(jìn)到“arch/arm/boot/dts”目錄,這里面保存著imx6ull的默認(rèn)設(shè)備樹(shù)配置文件。然后我們輸入“l(fā)s imx6ull*”命令,查看與i.MX6ULL處理器相關(guān)的設(shè)備樹(shù)文件,運(yùn)行結(jié)果如下圖所示

在上圖中列出的所有與i.MX6ULL處理器相關(guān)的設(shè)備樹(shù)文件,我們只需要關(guān)注其中的四個(gè),分別是:
“imx6ull.dtsi”,
“imx6ul-14x14-evk.dtsi”,
“imx6ull-14x14-evk.dts”,
“imx6ull-14x14-evk-emmc.dts”
“imx6ull-14x14-evk-gpmi-weim.dts”。
其中的“imx6ull.dtsi”文件是i.MX6ULL處理器的核心配置文件,里面定義了i.MX6ULL處理器所有的內(nèi)部資源。
文件“imx6ul-14x14-evk.dtsi”里面定義了一些與外設(shè)相關(guān)的驅(qū)動(dòng)。
文件“imx6ull-14x14-evk.dts”會(huì)包含“imx6ull.dtsi”和“imx6ul-14x14-evk.dtsi”這兩個(gè)文件。
文件“imx6ull-14x14-evk-emmc.dts”會(huì)包含“imx6ull-14x14-evk.dts”,該文件是針對(duì)EMMC存儲(chǔ)的。
文件“imx6ull-14x14-evk-gpmi-weim.dts”會(huì)包含“imx6ull-14x14-evk.dts”,該文件是針對(duì)NAND FLASH存儲(chǔ)的。
通過(guò)上面的分析,實(shí)際我們最終需要編譯的就兩個(gè)文件“imx6ull-14x14-evk-emmc.dts”(EMMC存儲(chǔ))和“imx6ull-14x14-evk-gpmi-weim.dts”(NAND FLASH存儲(chǔ))。
使用過(guò)迅為電子提供的4.1.15內(nèi)核的朋友可能會(huì)注意到我們的燒寫(xiě)工具在燒寫(xiě)鏡象的時(shí)候設(shè)備樹(shù)文件會(huì)有好幾個(gè)(針對(duì)不同屏幕的)。如果這些文件缺少任意一個(gè),燒寫(xiě)工具打開(kāi)就會(huì)失敗。同時(shí)這幾個(gè)文件的名字在uboot里面也會(huì)用到(uboot里面這幾個(gè)文件的名字也是固定的),所以為了能夠繼續(xù)使用4.1.15的燒寫(xiě)工具,我們需要在5.4.3內(nèi)核里面創(chuàng)建對(duì)應(yīng)的這幾個(gè)設(shè)備樹(shù)名字:
topeet_emmc_10_1.dts
topeet_emmc_1024x600.dts
topeet_emmc_4_3.dts
topeet_emmc_5_0.dts
topeet_emmc_7_0.dts
topeet_emmc_9_7.dts
topeet_emmc_hdmi.dts
topeet_nand_10_1.dts
topeet_nand_1024x600.dts
topeet_nand_4_3.dts
topeet_nand_5_0.dts
topeet_nand_7_0.dts
topeet_nand_9_7.dts
topeet_nand_hdmi.dts
在上面的這些設(shè)備樹(shù)文件中,以“topeet_emmc”開(kāi)頭的是支持商業(yè)級(jí)核心板 (EMMC存儲(chǔ))的,以“topeet_nand”開(kāi)頭的是支持工業(yè)級(jí)核心板(NAND FLASH存儲(chǔ))的。
我先們創(chuàng)建商業(yè)級(jí)核心板(EMMC存儲(chǔ))的這幾個(gè)設(shè)備述文件,上面我們講到了默認(rèn)設(shè)備樹(shù)文件里面的“imx6ull-14x14-evk-emmc.dts”是針對(duì)EMMC存儲(chǔ)的配置文件,我們以該文件為模板,創(chuàng)建商業(yè)級(jí)核心板(EMMC存儲(chǔ))對(duì)應(yīng)的幾個(gè)設(shè)備樹(shù)文件,使用下面的命令:
cp imx6ull-14x14-evk-emmc.dts topeet_emmc_10_1.dts
cp imx6ull-14x14-evk-emmc.dts topeet_emmc_1024x600.dts
cp imx6ull-14x14-evk-emmc.dts topeet_emmc_4_3.dts
cp imx6ull-14x14-evk-emmc.dts topeet_emmc_5_0.dts
cp imx6ull-14x14-evk-emmc.dts topeet_emmc_7_0.dts
cp imx6ull-14x14-evk-emmc.dts topeet_emmc_9_7.dts
cp imx6ull-14x14-evk-emmc.dts topeet_emmc_hdmi.dts
然后我們繼續(xù)創(chuàng)建工業(yè)級(jí)核心板(NAND FLASH存儲(chǔ))相關(guān)的幾個(gè)設(shè)備樹(shù)文件,上面我們講到了默認(rèn)設(shè)備樹(shù)文件里面的“imx6ull-14x14-evk-gpmi-weim.dts”是針對(duì)NAND FLASH存儲(chǔ)的配置文件,我們以該文件為模板,創(chuàng)建工業(yè)級(jí)核心板(NAND FLASH存儲(chǔ))對(duì)應(yīng)的幾個(gè)設(shè)備樹(shù)文件,使用下面的命令:
cp imx6ull-14x14-evk-gpmi-weim.dts topeet_nand_10_1.dts
cp imx6ull-14x14-evk-gpmi-weim.dts topeet_nand_1024x600.dts
cp imx6ull-14x14-evk-gpmi-weim.dts topeet_nand_4_3.dts
cp imx6ull-14x14-evk-gpmi-weim.dts topeet_nand_5_0.dts
cp imx6ull-14x14-evk-gpmi-weim.dts topeet_nand_7_0.dts
cp imx6ull-14x14-evk-gpmi-weim.dts topeet_nand_9_7.dts
cp imx6ull-14x14-evk-gpmi-weim.dts topeet_nand_hdmi.dts
至此,關(guān)于設(shè)備樹(shù)的文件我們都創(chuàng)建完成了,由于NAND FLASH和EMMC的 核心板,Uboot在獲取設(shè)備數(shù)文件的時(shí)候不一樣(EMMC是按照分區(qū)的方式訪問(wèn),NAND FLASH是按照偏移地址讀取數(shù)據(jù)),所以在NAND FLASH的核心板,我們需要把對(duì)應(yīng)的幾個(gè)設(shè)備樹(shù)文件拼接成一個(gè)文件(按照固定的偏移大小拼接),我們?cè)?.1.15的內(nèi)核里面提供了這個(gè)拼接程序,衛(wèi)浴內(nèi)核源碼的“arch/arm/boot/dts”目錄下,文件名字是“create_dtb”,如下圖所示:


我們拷貝該文件到5.4.3內(nèi)核的“arch/arm/boot/dts”目錄下面,如下圖所示:

然后我們使用“chmod 777 create_dtb”命令,給文件“create_dtb”可執(zhí)行權(quán)限,運(yùn)行結(jié)果如下圖所示:

然后我們回到5.4.3內(nèi)核源碼的根目錄下,如下圖所示:

然后我們修改內(nèi)核編譯腳本(在里面添加設(shè)備樹(shù)文件的編譯),我們添加下面的腳本到“create.sh”腳本里面:
make topeet_emmc_4_3.dtb
make topeet_emmc_5_0.dtb
make topeet_emmc_7_0.dtb
make topeet_emmc_1024x600.dtb
make topeet_emmc_9_7.dtb
make topeet_emmc_10_1.dtb
make topeet_emmc_hdmi.dtb

make topeet_nand_4_3.dtb
make topeet_nand_5_0.dtb
make topeet_nand_7_0.dtb
make topeet_nand_1024x600.dtb
make topeet_nand_9_7.dtb
make topeet_nand_10_1.dtb
make topeet_nand_hdmi.dtb

cd ./arch/arm/boot/dts/
./create_dtb imx6ul_topeet_nand.dtb topeet_nand_4_3.dtb topeet_nand_7_0.dtb topeet_nand_10_1.dtb topeet_nand_1024x600.dtb topeet_nand_5_0.dtb topeet_nand_9_7.dtb topeet_nand_hdmi.dtb
上面的腳本主要是使用make命令編譯出對(duì)應(yīng)的設(shè)備樹(shù)文件(比如我們要編譯“topeet_emmc_4_3.dts”這個(gè)設(shè)備樹(shù)文件,那我們直接輸入“make topeet_emmc_4_3.dtb”命令即可,其它設(shè)備樹(shù)文件的編譯與此類(lèi)似,這里不再一一描述)。編譯出所有的設(shè)備樹(shù)文件(EMMC存儲(chǔ)和NAND FLASH存儲(chǔ))以后,我們使用“./create_dtb imx6ul_topeet_nand.dtb topeet_nand_4_3.dtb topeet_nand_7_0.dtb topeet_nand_10_1.dtb topeet_nand_1024x600.dtb topeet_nand_5_0.dtb topeet_nand_9_7.dtb topeet_nand_hdmi.dtb”命令把NAND FLASH的設(shè)備樹(shù)文件拼接成一個(gè)文件,即“topeet_nand_hdmi.dtb”文件(也就是上面添加的腳本的最后一條)。添加完以后的腳本如下圖所示:
添加完成設(shè)備樹(shù)的編譯腳本以后,我們直接運(yùn)行內(nèi)核編譯腳本“./create.sh”開(kāi)始編譯內(nèi)核和設(shè)備樹(shù),如下圖所示:
編譯過(guò)程如下圖所示:
我們可以看到在“arch/arm/boot”目錄下生成了“zImage”內(nèi)核鏡像,在“arch/arm/boot/dts”目錄下生成了設(shè)備樹(shù)文件:如下圖所示:
接下來(lái)我們開(kāi)始燒寫(xiě)編譯生成的鏡像到i.MX6ULL終結(jié)者開(kāi)發(fā)板。Uboot我們依然使用開(kāi)發(fā)板光盤(pán)資料里面的“i.MX6UL終結(jié)者光盤(pán)資料\08_開(kāi)發(fā)板系統(tǒng)鏡像\01_Uboot”目錄下的對(duì)應(yīng)鏡像,文件系統(tǒng)我們使用“i.MX6UL終結(jié)者光盤(pán)資料\08_開(kāi)發(fā)板系統(tǒng)鏡像\03_文件系統(tǒng)鏡像\03_Yocto文件系統(tǒng)”目錄下的對(duì)應(yīng)文件系統(tǒng)鏡像。內(nèi)核和設(shè)備樹(shù)我們根據(jù)自己使用的核心板類(lèi)型(工業(yè)級(jí)或商業(yè)級(jí)),選擇5.4.3內(nèi)核編譯生成的對(duì)應(yīng)鏡像和設(shè)備樹(shù)文件(關(guān)于i.MX6ULL終結(jié)者開(kāi)發(fā)板鏡像的燒寫(xiě),大家可以參考開(kāi)發(fā)板使用手冊(cè)的:第六章 I.MX6ULL鏡像燒寫(xiě))。這里我們不在詳細(xì)介紹。
使用MFG燒寫(xiě)完成以后,如果我們有4.3寸屏,可以連接好4.3寸屏幕(內(nèi)核默認(rèn)的設(shè)備樹(shù)配置支持4.3寸屏顯示),然后開(kāi)發(fā)板正常啟動(dòng),我們可以看到串口的打印的內(nèi)核啟動(dòng)信息,如下圖所示:
從上圖我們可以看到內(nèi)核的版本是5.4.3。文件系統(tǒng)起來(lái)以后,我們也可以在調(diào)試串口輸入“uname -a”命令,查看系統(tǒng)版本的信息,運(yùn)行結(jié)果如下圖所示:
從上圖我們同樣也可以看到內(nèi)核的版本是5.4.3。同時(shí)我們可以看到4.3寸屏幕也會(huì)有QT綜合例程在運(yùn)行,由于默認(rèn)的內(nèi)核沒(méi)有配置觸摸驅(qū)動(dòng),我們可以使用鼠標(biāo)來(lái)操作。在后續(xù)的章節(jié)我們將會(huì)逐步完善開(kāi)發(fā)板上的外設(shè)驅(qū)動(dòng)。
至此基于官方5.4.3的內(nèi)核經(jīng)過(guò)我們的修改,編譯,已經(jīng)可以在迅為電子的iMX6ULL終結(jié)者開(kāi)發(fā)板上運(yùn)行起來(lái)了。


分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表