【NanoPi T2】 2.uboot 離線燒錄(S5P4418)


前一陣想在nanopi t2的uboot上添加網卡驅動來加載內核開發驅動,結果無奈編譯出來的uboot沒辦法燒錄運行。官方製作SD鏡像的工具也是缺胳膊少腿的,並且我也不想玩個uboot做個幾G的鏡像。官方提供的資料實在太少,對於一個愛折騰的人來說這怎麼行呢,於是乎就有了下面這邊文章。

通過對nanopi官方提供的uboot2016.1 一陣子的研究終於弄清楚了最新版本uboot的內存分佈,實現了編譯燒寫到SD卡運行。

新版本的uboot跟以前的版本有很大的不同,uboot的內容和內存分佈跟之前不一樣了,之前的佈局:傳送門

1.2016版uboot內存佈局

現在的內存佈局及內容大致猜測如下:

塊地址 內容
Block 0 Sd/emmc卡信息
Block1 Nsih.bin
Block2-BlocK3841 2ndboot.bin
Block3842-BlockXX u-boot.bin

以上除了可以確定u-boot的位置無誤以外其他的純屬猜測,目前還沒心思鑽研彙編代碼的含義,2nboot部分都是不開源的,現在搞得這麼大也不知道在做什麼。確定了u-boot.bin的位置之後就可以動手了。

2.離線燒錄步驟

1.下載uboot最新源碼:
git clone https://github.com/friendlyarm/u-boot.git
git checkout nanopi2-v2016.01

2.編譯前的準備:

官方傳送門

3.配置uboot

導出默認配置:

make s5p4418_nanopi2_defconfig

添加自定義配置:

make menuconfig

編譯:

make -j16 CROSS_COMPILE=arm-linux-

4.燒錄鏡像

編譯會獲得u-boot.bin和bootloader.img
編譯結果
bootloader.img是寫入Nish參數以及簽了名的uboot,這個纔是可以直接用來燒錄的uboot,可以看到最後編譯完有句提示:
編譯信息
最後一行提示我們bootloader的生成跟tools/nexell/nish/nanopi2.txt有關,nanopi2.txt就是配置了一些啓動代碼和參數,其中就包括uboot的加載地址加載大小,啓動地址等等。
在這裏插入圖片描述
格式的含義如下:

<值> // <寫入鏡像的地址> : <註釋>

通過查看bootloader.img的二進制發現確實如此
在這裏插入圖片描述
最後只需要提取官方鏡像中的前3841個塊接上編譯輸出的bootloader.img就可以了,刷寫腳本代碼:

sudo dd if=bootloader.img of=uboot2016.bin bs=512 seek=3841
sudo dd if=uboot2016.bin of=/dev/sdx

整個文件大小4M不到,下面就可以愉快的掛接NFS和網絡加載內核了

3.附上資源

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章