原文在我博客:http://blog.csdn.net/andy_wsj/article/details/8515197php
拿到Cubieboard已經蠻久了,平時上班比較忙,只能晚上玩一會,年關將近,週末都要加班呀....
所謂U-boot 移植,其實別人都作好了,我只不過是作了一個啓動卡
系統環境:電腦二臺,臺式機XP;筆記本RHEL5,平時就用這個,懶得整ubuntu
代碼工具:XP上: Source Insight 3.5
RHEL5上: Vim,編譯工具鏈arm-2009q3,這個應該有更高版本;串口工具minicom,個人版本是2.1
資源: 支持Cubieboard的U-boot下載網址:https://github.com/linux-sunxi/u-boot-sunxi ,
我直接從網頁按zip格式下載到XP下
製做方法參考網站:https://github.com/linux-sunxi/u-boot-sunxi/wiki
硬件: 串口線,淘寶Cubieboard自帶USB串口線,RHEL5下不用裝驅動就能使用,XP下能夠用驅動精靈自動安裝
microSD卡一枚,2G,讀卡器一隻,華強北出品,竟然比淘寶貴...
開工:
首先觀察Cubiebord預裝的U-Boot,設置好minicom(具體方法請本身百度),鏈接串口(使用淘寶配的線),連線順序:
黑色 ---- GND
綠色 ---- RX
白色 ---- TX
紅色不接
將串口USB端插入筆記本,打開終端輸入命令「minicom」,啓動minicom以後,再將電源線插入筆記本USB,啓動過程當中按鍵盤任意鍵,進入U-boot,能夠看到:
HELLO! BOOT0 is starting!
boot0 version : 1.5.1
dram size =1024
Succeed in opening nand flash.
Succeed in reading Boot1 file head.
The size of Boot1 is 0x0003c000.
The file stored in 0X00000000 of block 2 is perfect.
Check is correct.
Ready to disable icache.
Succeed in loading Boot1. //第1階段bootloader
Jump to Boot1.
[ 0.133] boot1 version : 1.4.0
[ 0.133] pmu type = 3
[ 0.135] bat vol = 0
[ 0.161] axi:ahb:apb=3:2:2
[ 0.161] set dcdc2=1400, clock=1008 successed
[ 0.163] key
[ 0.175] no key found
[ 0.175] flash init start
[ 0.227] flash init finish
[ 0.228] fs init ok
[ 0.229] fattype FAT16
[ 0.229] fs mount ok
[ 0.236] script finish
[ 0.238] power finish
[ 0.245] BootMain start
[ 0.245] 0
[ 0.264] key value = 0
[ 0.264] recovery key high 6, low 4
[ 0.265] unable to find fastboot_key key_max value
[ 0.274] test for multi os boot with display
[ 0.275] show pic finish
[ 0.278] load kernel start
[ 0.302] load kernel successed
[ 0.302] start address = 0x4a00000
U-Boot 2011.09-rc1 (Nov 26 2012 - 14:01:52) Allwinner Technology //第2階段bootloader
CPU: SUNXI Family
Board: A10-EVB
DRAM: 512 MiB
NAND: 3776 MiB
In: serial
Out: serial
Err: serial
--------fastboot partitions--------
-total partitions:11-
-name- -start- -size-
bootloader : 1000000 1000000
env : 2000000 1000000
boot : 3000000 2000000
system : 5000000 14000000
data : 19000000 20000000
misc : 39000000 1000000
recovery : 3a000000 2000000
cache : 3c000000 8000000
private : 44000000 1000000
sysrecovery : 45000000 14000000
UDISK : 59000000 93000000
-----------------------------------
Hit any key to stop autoboot: 0
sunxi#
輸入命令 version,能夠看到:
sunxi#version
U-Boot 2011.09-rc1 (Nov 26 2012 - 14:01:52) Allwinner Technology
arm-none-linux-gnueabi-gcc (Sourcery G++ Lite 2010.09-50) 4.5.1
GNU ld (Sourcery G++ Lite 2010.09-50) 2.20.51.20100809
sunxi#
使用的編譯器是arm-none-linux-gnueabi-gcc,版本4.5.1,可是俺的是4.3.2版本,爲此我費了了老大勁,換成4.4.1時才編譯成功
有了上面的基本狀況,開始編譯製做,在XP下解壓下載的u-boot-sunxi-sunxi.zip,刪除board文件夾下除了allwinner文件的其餘文件,board/allwinner文件夾內只須要保留common和Cubieboard兩個文件夾,其餘不須要;刪除arch文件夾內除了arm文件的其餘文件,arch/arm/cpu文件夾下只保留armv7和u-boot.lds,arch/arm/cpu/armv7內文件和sunxi文件夾保留,其餘文件夾刪除。這樣作能夠在Source Insight關聯時減小關聯項目,便於查閱,若還想更進一步,將include目錄下與A10無關的頭文件一併刪除,關聯時更加清晰。使用Source Insight 3.5創建一個工程,添加文件時選擇u-boot解壓文件夾,選擇「add tree」,將所有文件加入工程,再選Project->Rebuilt Project...,如此一來,XP下的代碼查閱工程就創建啦。
linux下解壓U-boot到本身工做目錄,不須要刪除操做。
安裝arm-2009q3.tar.bz2,在arm-2009q3.tar.bz2目錄下輸入命令:tar -jxvf arm-2009q3.tar.bz2 -C /usr/local/arm/
將編譯器設置爲默認arm編譯器: vim /etc/profile
在末尾增長一行: export=$PATH:/usr/local/arm/arm-2009q3/bin
保存退出以後執行:source /etc/profile
或者重啓,或者logoout一下,使設置生效。以上設置適合RHEL5,其餘linux系統請百度解決。
編譯U-boot: make cubieboard CROSS_COMPILE=arm-none-linux-gnueabi-
等待.........
生成三個.bin文件,分別是u-boot.bin和spl目錄下的sunxi-spl.bin、u-boot-spl.bin
第1階段bootloader:sunxi-spl.bin
第2階段bootloader:u-boot.bin
u-boot-spl.bin我沒試過,應該也是第一階段的bootloader
SD卡準備(我機器上是/dev/sdb),linux下操做:
前面1M給bootloader使用(爲何?要仔細查查資料,目前我還不明白,望高人指點),先清零:
dd if=/dev/zero of=/dev/sdb bs=1M count=1
後面剩餘的能夠無論,也可分區,具體作法請百度
將u-boot寫入,只寫入第1階段bootloader,在u-boot目錄操做:
dd if=spl/sunxi-spl.bin of=/dev/sdb bs=1024 seek=8
取下SD卡,插到板子上,上電,minicom有輸出以下:
U-Boot SPL 2012.10 (Jan 23 2013 - 21:18:42)
DRAM: 1024MB
SUNXI SD/MMC : 0
U-Boot SPL 2012.10 (Jan 23 2013 - 21:18:42)
而後就死掉了,那是由於沒有寫入第2階段,即u-boot.bin。
將u-boot寫入,寫入第2階段bootloader,在u-boot目錄操做:
dd if=u-boot.bin of=/dev/sdb bs=1024 seek=32
取下SD卡插到板子上,上電,minicom有輸出以下:
U-Boot SPL 2012.10 (Jan 24 2013 - 21:42:50)
DRAM: 1024MB
SUNXI SD/MMC: 0
U-Boot 2012.10 (Jan 24 2013 - 21:42:50) Allwinner Technology
CPU: SUNXI Family
Board: Cubieboard
I2C: ready
DRAM: 1 GiB
MMC: SUNXI SD/MMC : 0
*** Warning - bad CRC, using default environment //沒作參數文件,使用默認參數
In: serial
Out: serial
Err: serial
start main_loop...Hit any key to stop autoboot: 0
sun4i#
輸入ersion命令:
sun4i#version
U-Boot 2012.10 (Jan 24 2013 - 21:42:50) Allwinner Technology
arm-none-linux-gnueabi-gcc (Sourcery G++ Lite 2009q3-67) 4.4.1
GNU ld (Sourcery G++ Lite 2009q3-67) 2.19.51.20090709
sun4i#
能夠看到我使用的編譯器是4.4.1版本的,低於原來板子自帶u-boot編譯器的版本
至此,U-boot的啓動SD卡基本製做完成linux
原文做者:andygit
原文連接:http://forum.cubietech.com/forum.php?mod=viewthread&tid=110&extra=page%3D2github