首页 > 代码库 > uboot初体验-----一些关于nand设备启动的浅显的认识

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过程相对容易很多。

时间仓促,没有赘述很多。希望最近能够尽快完善起来吧。因为原创,所以进行讲点儿跟别人不一样的。