導航
-
-
- 1.2016版uboot記憶體布局
- 2.離線燒錄步驟
-
-
- 1.下載下傳uboot最新源碼:
- 2.編譯前的準備:
- 3.配置uboot
- 4.燒錄鏡像
-
- 3.附上資源
-
前一陣想在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.附上資源
資源打包