1. 程式人生 > >一步步學習基於Linux4.4的TINY4412開發--uboot的移植

一步步學習基於Linux4.4的TINY4412開發--uboot的移植

開發板:tiny4412-1506 儲存4G、記憶體1G

系統:ubuntu16.04 虛擬機器

u-boot: u-boot 2010.12

compiled tool: arm-none-linux-gnueabi-gcc (gcc version 4.8.3 20140320 (prerelease) (Sourcery CodeBench Lite 2014.05-29))

參考:

1、https://www.cnblogs.com/pengdonglin137/p/5137941.html

2、https://www.cnblogs.com/pengdonglin137/articles/4161084.html

3、http://www.cnblogs.com/kevinhwang/p/5617629.html

感謝兩位的分享!

uboot 下載:https://github.com/friendlyarm/uboot_tiny4412

dnw 下載:https://github.com/xxxdk/tiny4412_kernel4.4

第零步交叉編譯鏈的安裝不在這裡說明了。編譯時提示沒有arm-linux-gcc等錯誤,針對該問題,1、對Makefile進行修改。2、處理arm-linux-*與arm-none-linux-gnueabi-*不對等的問題。即對arm-2014.05/bin中的檔案進行軟連線,然後將軟連線的名字由arm-none-linux-gnueabi-*改為arm-linux-*即可,這裡可以直接使用rename進行操作。

第一步就是根據彭東林部落格對友善之臂在github的程式碼進行修改,然後再根據Kevin_Hwang的部落格進行修改。彭的修改主要是為了實現MMU的關閉、支援uImage、支援裝置樹,Kevin的修改主要對tiny4412-1506更改了記憶體方案的支援,具體的說明請看具體博文。

第二步DNW的注意點,1、需要注意下載地址和校驗,2、需要安裝libusb環境。網上DNW大概有兩個版本libusb和secbulk,libusb編譯、使用便捷。4412-1506記憶體只有1G,uboot也關閉了MMU,所以記憶體地址為0x40000000--0x80000000,如果按照彭的博文進行操作會遇到錯誤地址之類的錯誤提示!校驗是對傳輸的資料進行校驗和,放在資料流的最末傳輸給板子的dnw接收程式。正常的傳輸過程是板子的dnw接受完資料後會提示接收完成,自動退出板子端的dnw。之前試過幾個PC端的dnw是沒有這個情況的,也是比較坑。

第三步emmc write大小計算,將uboot下載到記憶體後,就需要寫入emmc中了。具體燒寫操作可以看彭的博文,但是需要注意,燒寫的塊數要根據實際情況修改,具體可以根據dnw傳輸量進行計算。例如E4412_tzsw.bin大小為94208位元組,根據算式94208/512 = 184,184的hex為B8,則 mmc write 1 0x50000000 0x2c0 0xB8。如果計算有小數,直接向上取整在取hex。