嵌入式Linux系列第4篇:Kernel編譯下載
1.引言本篇接上一篇,給大家介紹Linux Kernel的編譯和下載運行,達到的預期效果是都下載到板子后,可以正常通過串口登錄到Linux系統(tǒng)里。2.Linux Kernel編譯NUC972 Linux Kernel下載地址為 github....
1.引言
本篇接上一篇,給大家介紹Linux Kernel的編譯和下載運行,達到的預期效果是都下載到板子后,可以正常通過串口登錄到Linux系統(tǒng)里。
2.Linux Kernel編譯
NUC972 Linux Kernel下載地址為 github.com/OpenNuvoton/NUC970_Linux_Kernel
下載完成后,放到Ubuntu虛擬機的~/nuc972/kernel 文件夾下,解壓縮。
編譯前還記得前兩篇文章說的吧,我們先source /home/topsemic/nuc972/toolchain/environment.sh
進入到內(nèi)核目錄,第一步先執(zhí)行make nuc972_defconfig 生成.config文件,
這一步是不是很眼熟,和上一講uboot編譯是類似的。
第二步執(zhí)行:make uImage,編譯內(nèi)核,報錯了,錯誤是不是和編譯uboot也類似啊。
同樣的我們也是要改Makefile
這次我們用vim來改一次,
提示我們不支持vim這個指令,那我們安裝一下吧,人家都給提示了,輸入sudo apt install vim
下面是安裝過程
OK,安裝完畢,Ubuntu系統(tǒng)安裝個東西真是方便啊,一條指令就搞定了。輸入vim Makefile 顯示如下:
花花綠綠的看著不錯啊,先找到設置交叉編譯鏈的地方,具體方法如下圖1、2、3步驟描述
修改方法第一篇博客介紹的大家還記得嗎?先輸入I,進入到插入模式,然后修改即可
然后ESC退出插入模式,最后輸入:wq保存退出即可。
以后大家多使用vim吧。
修改完Makefile后,再一次make uImage,
靠,什么情況,又報錯了,我記得之前沒遇到這個錯誤啊。
網(wǎng)上查了下,說是和文件系統(tǒng)有關,是權限的問題,使用sudo 編譯就行,于是我激動的sudo make uImage,咦
這個命令找不動,不應該啊,我已經(jīng)source了,而且輸入arm-none- Table鍵也能找到啊,
于是又尋求度娘,有人說Makefile路徑問題,于是我再改一次,把絕對路徑加上
再來一次,
這次倒是沒有剛才arm-none-linux-gnueabi-gcc找不到的問題,不過還是有一開始提示的錯誤:
這是怎么回事? 我靈機一動,上面提示沒有../rootfs
于是,我cd .. ,回到上級目錄,mkdir rootfs 建了一個rootfs文件夾,再次進入到內(nèi)核目錄,輸入sudo make uImage
這一次看起來不太一樣,好像要成功的樣子,
不過最后還是有點小問題,還是目錄沒有的問題,我們再回到上級目錄建個文件夾image
最后再來一次sudo make uImage
怎么還有錯誤,我之前編譯根本沒有這些問題的啊,郁悶了。。。
再次上網(wǎng)搜索,說這個命令是uboot編譯出來的,因為沒有找到它的原因,我看了下我的uboot 里tools目錄,果然是有這個命令的,
有網(wǎng)友說把它復制到交叉編譯鏈的bin目錄里就行了,于是我放進去嘗試,還是有問題,最后又百度,有網(wǎng)友說還得改個名字,前面得加上交叉編譯的名字,于是加上arm-none-linux-gnueabi-,
最后再次編譯,終于大功告成,不容易?。?/p>
在image目錄里的970uimage就是我們需要的文件了。
3.燒寫kernel
1)具體怎么燒錄,上一篇已經(jīng)描述過了,這里要注意燒寫地址:
2)另外上一節(jié)已經(jīng)把uboot燒寫進去了,這里不再重復了
3)這里還要再燒個env.txt
板子里有三個東西就可以了。
4.運行
1)使用debug串口連接上后,會進入如下界面
2)這時參考官方文檔輸入set bootcmd nboot 0x7fc0 0 0x200000\; bootm 0x7fc0
提示如下:
這什么情況,官方文檔逗我玩呢??
后來發(fā)現(xiàn)把set 改為setenv就好了,寫文檔的人得靠點譜啊,不然真是坑人啊。
然后再輸入 saveenv
3)按下復位鍵,這時就呼呼的跑起來了
靠,又出現(xiàn)錯誤了,這個足足卡了我1個多小時今天晚上。
最后也是靈光一現(xiàn),定位到是上面編譯內(nèi)核時提示的rootfs文件夾有問題那里,難道我自己隨便建個空的rootfs就可以嗎?
另外回憶之前我用別人提供好的bsp包沒出現(xiàn)這個問題,那里默認是有rootfs文件目錄的,于是把那里的rootfs搞過來,解壓后,再重新編譯下(先sudo make clean,再sudo make uImage)并重新下載一次就ok了。我猜測內(nèi)核里用到rootfs文件夾里的東西。 原來都沒有考慮過這個問題啊我。
最后成功的現(xiàn)象是:
可以成功登陸進去,輸入指令了!
至于這個rootfs文件夾里東西是怎么來的,我們下篇文章再說。
5.結(jié)束語
本篇文章寫下來,自己收獲了很多,本以為之前調(diào)通的東西,很容易就操作出來了,沒想到遇到這么多新的問題,不過遇到問題是好事,會讓你思考一些原來沒有注意到的地方。
順便提下,這里內(nèi)核默認用的ramdisk根文件系統(tǒng),這個文件系統(tǒng)是存在RAM里的,所以你在里面寫入東西,一斷電就沒有了。這和常規(guī)在NAND上的Yaffs2文件系統(tǒng)不一樣。下一篇介紹如果換成NAND Yaffs2文件系統(tǒng)。
經(jīng)過這一篇的講解,你如果實際動手實現(xiàn)后,應該對嵌入式Linux更加感興趣了吧,相當于我們會重裝系統(tǒng)了。雖然困難重重,但是不要放棄。
有任何問題歡迎大家留言交流討論。
下期會給大家介紹如何改成NAND Yaffs2文件系統(tǒng)。
該系列往期文章見:
1.從單片機轉(zhuǎn)Linux系列第1篇:開發(fā)環(huán)境搭建
推薦閱讀:天秀時尚網(wǎng)