1 選擇Uboot版本
2 移植uboot到console能夠正常work
3 製作uImage並使用uboot引導
4 寫NFC驅動
5 uboot從nand上引導系統啓動
1 選擇Uboot版本
正所謂“工欲善其事,必先利其器”,如果在整個過程中能夠有一套友好的軟硬件開發環境整個過程就比較順利了。戳中痛點……
對於選擇Uboot的版本,一般人都會選擇最新版本。但是新版本必然會有些結構上的差異,因此在選擇好版本之後,一定要仔細分析一下現在的uboot tree。然後選擇合適的位置併合理規劃文件的存放位置。具體情況見網上分析,或者自己分析。當然最重要的幾個目錄下面的文件還是一定要去看的。
a 根目錄下的readme和Makefile這些文件會說明你需要進行的操作和自動化操作。
b include\configs\下面需要添加整個系統的頭文件,當然可以參考三星的一些配置,並進行DIY。
c board,在這個目錄下添加自己需要的board定義。
d arch目錄下定義了一些跟架構相關的東西。
2 移植uboot到console能夠正常work
對於移植uboot,主要是對上面的目錄和文件進行改造,並且添加串口驅動,讓系統能夠正常進入控制檯。一般情況下串口只要ok了,下面的各種命令也就都是可以正常work的。
3 製作uImage並使用uboot引導
製作uImage文件可以直接使用命令的方式也可以在kernel中使用make uImage命令完成。
命令方式:
mkimage -A arm -O linux -T kernel -C gzip \
-a 0 -e 0 -n "Linux Kernel Image" \
-d linux.bin.gz uImage
注:mkimage存放在uboot\tools目錄下。使用make uImage的log信息爲:
GEN usr/initramfs_data.cpio
AS usr/initramfs_data.o
LD usr/built-in.o
CC drivers/mtd/nand/nand_bbt.o
LD drivers/mtd/nand/nand.o
LD drivers/mtd/nand/built-in.o
LD drivers/mtd/built-in.o
LD drivers/built-in.o
LD vmlinux.o
MODPOSTvmlinux.o
GEN .version
CHK include/generated/compile.h
UPD include/generated/compile.h
CC init/version.o
LD init/built-in.o
LD .tmp_vmlinux1
KSYM .tmp_kallsyms1.S
AS .tmp_kallsyms1.o
LD .tmp_vmlinux2
KSYM .tmp_kallsyms2.S
AS .tmp_kallsyms2.o
LD vmlinux
SYSMAP System.map
SYSMAP .tmp_System.map
OBJCOPYarch/arm/boot/Image
Kernel:arch/arm/boot/Image is ready
GZIP arch/arm/boot/compressed/piggy.gzip
AS arch/arm/boot/compressed/piggy.gzip.o
LD arch/arm/boot/compressed/vmlinux
OBJCOPY arch/arm/boot/zImage
Kernel:arch/arm/boot/zImage is ready
UIMAGE arch/arm/boot/uImage
ImageName: Linux-3.4.55-vimicro+
Created:
Fri Jun 6 09:15:222014
ImageType: ARM Linux Kernel Image(uncompressed)
DataSize:
3082344 Bytes = 3010.10 kB = 2.94 MB
LoadAddress: 0x80008000
EntryPoint: 0x80008000
Imagearch/arm/boot/uImage is ready
製作完成uImage之後,需要使用移植好的uboot在命令行下進行測試。測試方法可以使用ICE將文件download到指定內存處,使用bootm $address。
* kernel: cmdline image address = 0x80008000
beforecopy from dataflash img_addr = 0x80008000
beforecopy from dataflash img_addr = 0x80008000
##Booting kernel from Legacy Image at 80008000 ...
ImageName: Linux 3.5.15
ImageType: ARM Linux Kernel Image(uncompressed)
DataSize:
3082344 Bytes = 2.9 MiB
LoadAddress: 80008000
EntryPoint: 80008040
VerifyingChecksum ... OK
XIPKernel Image ... OK
FDTand ATAGS support not compiled in - hanging
###ERROR ### Please RESET the board ###
我擦,出錯了。不過還好順藤摸瓜很容易找到問題所在。FDTand ATAGS support not compiled in - hanging這個說明選擇的參數傳遞方式就是“沒選擇”,那就選擇吧。
選擇ATAGS吧,因爲RTFSC之後,發現這個比較簡單。
之後就……啓動成功了。
4 寫NFC驅動
話不多說,動手就幹。因爲和kernel的架構基本相同。只是需要時間進行debug,保證數據讀寫的正確性。
5 uboot從nand上引導系統啓動
本人恰好也負責燒寫工具的編寫,因此比較自由的掌控整個空間規劃一些結構體的定義,debug過程相對容易很多。
時間倉促,沒有贅述很多。希望最近能夠儘快完善起來吧。因爲原創,所以進行講點兒跟別人不一樣的。