目錄
拿到nanopi t2很長一段時間了,一直沒什麼時間寵她,喫灰好久,哈哈哈!
廢話不多說,接下來進入主題:
首先s5p4418是IROM啓動方式,SD卡啓動條線nanopi已經爲我們準備好了。
ARM-cortex A 系列芯片一般的的啓動過程是iROM(bl0)->bl1->uboot
4418的啓動方式有所不同:iROM->Nsih.bin->2ndboot.bin->uboot
bl1階段被三星硬生生分成了兩個部分,對應SD卡中的地址如下:
塊地址 | 內容 |
---|---|
Block 0 | Sd/emmc卡信息 |
Block 1 | Nsih.bin |
Block2-Block63 | 2ndboot.bin |
Block64 | Nsih.bin(boot.TBI) |
Block65-BlockX | u-boot.bin |
啓動過程:iROM ⇒ Nsih.bin ⇒ 2ndboot.bin(讀取boot.TBI,拷貝u-boot.bin) ⇒ u-boot.bin
由於iROM和2ndboot.bin都是閉源的,所以考慮先複製鏡像包中的二進制機器碼暫時使用。
1.擦除sd卡
sudo dd if=/dev/zero of=/dev/sdd
2.查看uboot可用空間
#fdisk /dev/sdd
#p
可以看到第一個分區起始塊爲2048,所以可以先複製2048個塊吧MBR+啓動代碼+uboot完整複製下來
3.提取MBR+啓動代碼+uboot保存成complete-boot.bin
dd if=s5p4418-kitkat-sd8g-20171017.img of=complete-boot.bin bs=512 count=2048
4.寫入sd卡測試啓動
dd if=complete-boot.bin of=/dev/sdd
可以看到啓動正常,不能讀取內核
bl
5.獲取鏡像包中Block 0~Block 65的內容保存成uboot-bl1.bin
dd if=s5p4418-kitkat-sd8g-20171017.img of=uboot-bl1.bin bs=512 count=65
6.寫入bl1啓動
啓動正常,不能加載uboot
7.提取Nish寫入(記得擦除SD卡數據)
dd if=s5p4418-kitkat-sd8g-20171017.img of=Nish.bin bs=512 count=2
運行結果很相似
8.編寫裸機代碼插入運行
先保留2nboot,將裸機代碼插到這後面運行,等於是替換了uboot
結果不管替換2nboot還是uboot都可以順利電燈,替換uboot需要將連接地址設爲0x42C00000
.text
.global _start
_start:
b _test_start
b _test_start
b _test_start
b _test_start
b _test_start
b _test_start
b _test_start
b _test_start
b _test_start
_test_start:
ldr r1, =0x80000000
ldr r0, =0xc001b004
str r1, [r0]
ldr r0, =0xc001b000
_my_loop:
str r1, [r0]
b _my_loop
loop:
b loop
9.提取Nish.bin
dd if=s5p4418-kitkat-sd8g-20171017.img of=Nish.bin bs=512 count=1 skip=1
10.提取2ndboot.bin
dd if=s5p4418-kitkat-sd8g-20171017.img of=2ndboot.bin bs=512 count=62 skip=2
11.提取boot.TBI
dd if=s5p4418-kitkat-sd8g-20171017.img of=2ndboot.bin bs=512 count=62 skip=2