uboot初體驗-----一些關於nand設備啓動的淺顯的認識

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過程相對容易很多。

時間倉促,沒有贅述很多。希望最近能夠儘快完善起來吧。因爲原創,所以進行講點兒跟別人不一樣的。


發佈了104 篇原創文章 · 獲贊 166 · 訪問量 64萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章