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 ###

我擦,出错了。

只是还好顺藤摸瓜非常easy找到问题所在。FDTand ATAGS support not compiled in - hanging这个说明选择的參数传递方式就是“没选择”,那就选择吧。

选择ATAGS吧,由于RTFSC之后,发现这个比較简单。

之后就……启动成功了。

4 写NFC驱动

话不多说,动手就干。由于和kernel的架构基本同样。仅仅是须要时间进行debug。保证数据读写的正确性。

5 uboot从nand上引导系统启动

本人恰好也负责烧写工具的编写,因此比較自由的掌控整个空间规划一些结构体的定义。debug过程相对easy非常多。

时间仓促,没有赘述非常多。

希望近期可以尽快完好起来吧。

由于原创,所以进银行说跟别人有点不同。


版权声明:本文博客原创文章。博客,未经同意,不得转载。

posted on 2015-07-18 21:11  gcczhongduan  阅读(820)  评论(0编辑  收藏  举报