天天看點

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

導航

      • 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

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

bootloader.img是寫入Nish參數以及簽了名的uboot,這個才是可以直接用來燒錄的uboot,可以看到最後編譯完有句提示:

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

最後一行提示我們bootloader的生成跟tools/nexell/nish/nanopi2.txt有關,nanopi2.txt就是配置了一些啟動代碼和參數,其中就包括uboot的加載位址加載大小,啟動位址等等。

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

格式的含義如下:

<值> // <寫入鏡像的位址> : <注釋>
           

通過檢視bootloader.img的二進制發現确實如此

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

最後隻需要提取官方鏡像中的前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.附上資源

資源打包