我在前面已經(jīng)編譯好了Linux內(nèi)核,UBoot,還有根文件系統(tǒng)(根文件系統(tǒng)是直接用現(xiàn)成的)虫蝶,當然這些都是華清遠見已經(jīng)移植好了的,我先用他們移植好的來進行測試倦西,如果沒有問題了能真,后面自己移植的時候相對來說就有個參照,遇到問題或者不會的地方可以看看他們怎么做的扰柠。
我這里使用從網(wǎng)絡加載Linux內(nèi)核和掛載根文件系統(tǒng)的方式來測試粉铐,因為我們在學習的過程中,會不斷的修改代碼卤档,編譯代碼蝙泼,然后測試運行,如果每次都燒錄到SD卡或者EMMC的話劝枣,會很麻煩汤踏,所以直接從網(wǎng)絡上加載是最方便的倡缠,等所有代碼都沒有問題了之后,再固化到板子上去茎活。
這里從網(wǎng)絡加載的意思是昙沦,UBoot在引導Linux系統(tǒng)的時候,不是從板子上的SD卡载荔,或者EMMC去找內(nèi)核鏡像文件和設備樹盾饮,而是通過TFTP網(wǎng)絡協(xié)議,從局域網(wǎng)主機上(也就是我用于開發(fā)的Ubuntu)去下載鏡像文件(uImage)和設備樹文件(exynos4412-fs4412.dtb)懒熙。通過NFS網(wǎng)絡協(xié)議丘损,從局域網(wǎng)主機(也就是我用于開發(fā)的Ubuntu)去掛載根文件系統(tǒng)。我們會把uImage,設備樹文件和根文件系統(tǒng)提前放到Ubuntu上工扎,然后在uboot里面通過一些命令來設置內(nèi)核啟動的參數(shù)徘钥,讓UBoot能夠從局域網(wǎng)主機上加載這些東西到內(nèi)存里面去運行,也就是通常說的肢娘,從網(wǎng)絡啟動和掛載呈础。
我在以前學習Linux驅動的時候,就已經(jīng)搭建好了一套網(wǎng)絡加載的環(huán)境橱健,包括TFTP和NFS這些服務而钞,我的Ubuntu上都已經(jīng)安裝好了,相應的文件夾以及屬性那些都已經(jīng)設置好了拘荡,我就不再記錄了臼节,需要的可以參考正點原子出的Linux驅動課程。所以珊皿,我只需要把uImage网缝,exynos4412-fs4412.dtb復制到TFTP的加載目錄下,根文件系統(tǒng)(rootfs.tar.xz)復制到NFS的加載目錄里面就可以了蟋定。
注意粉臊,rootfs.tar.xz需要進行解壓縮。
好了溢吻,東西準備好了维费,接下來就是在UBoot里面配置一些跟網(wǎng)絡相關的環(huán)境變量,以及設置啟動命令了促王。跟網(wǎng)絡相關的環(huán)境變量有如下幾個:
ipaddr犀盟,表示板子的IP地址,需要和Ubuntu主機處于同一個局域網(wǎng)內(nèi)蝇狼。
ethaddr阅畴,表示板子的網(wǎng)卡地址,也就是MAC地址迅耘,隨意設置贱枣,符合MAC地址格式即可监署。
gatewayip,網(wǎng)關地址纽哥。
netmask钠乏,子網(wǎng)掩碼,要保證板子和主機處于同一個局域網(wǎng)內(nèi)春塌。
serverip晓避,服務器的IP地址,這里的服務器就是Ubuntu主機只壳。
我的板子和Ubuntu主機連到了同一個無線路由器(192.168.1.1)俏拱,Ubuntu的IP是192.168.1.8。我們通過使用 setenv 命令來設置環(huán)境變量吼句,首先板子上電锅必,倒計時結束前按下Enter,進入uboot交互控制臺惕艳,使用如下命令:
setenv ipaddr 192.168.1.100
setenv ethaddr 00:04:9f:04:d2:35
setenv gatewayip 192.168.1.1
setenv netmask 255.255.255.0
setenv serverip 192.168.1.8
最后搞隐,使用 saveenv ,保存設置尔艇,不然上電后設置會丟失尔许,如下圖所示:
我們還可以使用 printenv 命令,查看環(huán)境變量的值终娃。
設置好這些變量之后,我們的UBoot就可以通過網(wǎng)絡訪問到Ubuntu主機了蒸甜,接下來就需要設置啟動命令和啟動參數(shù)棠耕,讓UBoot從網(wǎng)絡加載內(nèi)核和設備樹,并且從網(wǎng)絡掛載根文件系統(tǒng)柠新。啟動命令通過變量 bootcmd 來設置窍荧,啟動參數(shù)通過變量 bootargs?來設置,大概像下面這樣子恨憎。
setenv bootargs 'console=ttymxc0,115200 root=/dev/nfs rw nfsroot=192.168.1.8:/samba/nfs/rootfs ip=192.168.1.100:192.168.1.8:192.168.1.1:255.255.255.0::eth0:off'
setenv bootcmd 'tftp 80800000 zImage; tftp 83000000 imx6ull-alientek-emmc.dtb; bootz 80800000 - 83000000'
這兩個命令是我之前使用正點原子的板子的時候使用的蕊退,4412這個板子肯定要做一些更改,至于要怎么改憔恳,我明天在群里問下老師瓤荔,然后在下篇文章的時候再貼出來,順便解釋下這兩條命令钥组。這個可不能自己摸索输硝,先測試過了再說,反正也是八九不離十程梦。