移植前的准备
移植前,要做的事情是搭建开发环境以及对U-boot源码的获取。首先说一下开发环境:
1.此次U-boot移植的硬件平台是天嵌的TQ210开发板:
CPU:板载核心是S5PV210(CortexA8),最高1GHz的主频。
FLASH:型号为K9K8G08U,容量大小为1G,为SLC类型的NandFlash。
RAM:内存为DDR2 1GB。
2.移植开发环境:
开发环境的搭建网上有许多资料,天嵌本身的开发板使用手册也有详细的图文介绍,所以在此就不做详细的搭建方法。很多新手在搭建环境上会遇到一些困难,但笔者认为,这是基本工,新手要敢于多亲自实践,多折腾就能熟能生巧,在开发环境的基本搭建上千万不要怕累怕麻烦,因为下面的路还长着。
2.1 Linux环境:天嵌提供的Unbuntu-11.0164bit,笔者安装在真机上,Win8和 Ubuntu双系统。双系统安装方法使用系统引导软件EasyBCD,然后使用天嵌提供的 Ubuntu的安装光盘。具体安装方法见文档《TQ210的开发板使用手册.pdf》。
2.2工具链:使用天嵌提供的交叉工具链,该工具采用gcc-4.4.6版本,针对s5pv210所 采用的CortexA8的ARM核,以及ARMv7指令集和硬件浮点特性做了优化。具体 安装方法见文档《TQ210的开发板使用手册.pdf》。
2.3代码编辑:工程代码编辑笔者采用的是Eclipse,可以自行在Ubuntu软件商店安装 Eclips或者采用天嵌提供的Eclipse,这里使用它仅仅用来查看和编辑U-boot代码。 个人感觉Eclipse还是很好用的!
3.U-boot简介以及源码获取
3.1 U-boot简介
这里对U-boot做简单的介绍,对于新手来说,总不能对这个“敌人”一无所知吧,在此做一个小小的扫盲吧。
U-boot全称UniversalBootLoader,即通用bootloader。它是德国DENX小组的开发用于多种嵌入式CPU的bootloader程序,UBoot不仅仅支持嵌入式Linux系统的引导,当前,它还支持NetBSD,VxWorks,QNX,RTEMS,ARTOS,LynxOS嵌入式操作系统。UBoot除了支持PowerPC系列的处理器外,还能支持MIPS、x86、ARM、NIOS、XScale等诸多常用系列的处理器。
3.2 U-boot源码获取以及解压方法
U-boot的代码可以从官方的FTP服务器上获取,地址是:ftp://ftp.denx.de/pub/u-boot/。当前最新版本是2013.01.01。代码是按照一定时间周期更新的,命名方式由以前的数字命名更换为以时间的方式命名,笔者认为这样更直接更简单。当然,可以拿比较新的版本跟以前的老版本比较,结构和代码的具体实现是有很多差异的,笔者认为新版的U-boot结构更合理,代码更简练,移植更方便。不管工程结构和代码怎么变,不变的是原理和整体框架,只要牢牢抓住这些本质的东西,你就能所向披糜。
下载代码后,在Ubuntu中可以直接鼠标右键,使用归档管理器解压到当前目录下。当然也可以终端中,先使用cd命令切换到代码包的目录下,例如,如果源码包是u-boot-2013.01.01.tar.bz2,那么应该使用:sudotar-xvf u-boot-2013.01.01.tar.bz2,即可解压到当前目录下。
3.3U-boot代码结构介绍
解压后我们看看新版本U-boot的代码结构,如图1所示。那么我们就来逐一介绍一下各个目录的功能和内容。如果需要更详细的目录介绍信息,请参阅U-boot根目录下的README文件。
图1
1.api:一些系统调用,包含有显示用的api,网络部分的api,和一些跟平台相关但独立出来的api。是一个扩展应用的独立的api库。
2.arch:与特定CPU架构相关目录,每一款Uboot下支持的CPU在该目录下对应一个子目录,比如有子目录arm就是我们开发板上使用的硬件体系目录。而arch/arm/目录下的cpu目录就是对应ARM体系的cpu目录,里边的armv7就是我们此次移植的重点对象,s5pv210就是armv7架构的cpu。
3.board:和一些已有开发板有关的文件.每一个开发板都以一个子目录出现在当前目录中。例如,smdkc100就是官方以s5pc100为核心的开发板的相关文件。该目录和上一个arch目录是严重依赖硬件平台的,移植之初要改动最多的也是这两个目录。
4.common目录:主要实现uboot命令行下支持的命令,每一条命令都对应一个文件。例如bootm命令对应就是cmd_bootm.c。
5.disk:对磁盘的支持。
6.doc:文档目录。Uboot的文档还是比较完善的,推荐大家参考阅读。
7.drivers:Uboot支持的设备驱动程序都放在该目录,比如各种网卡、支持CFI的Flash、串口和USB。
8. dts:从u-boot的readme文件中获取到的信息,我的理解是dts = device trees ,有兴趣的可以参考u-boot的readme文件中对
CONFIG_OF_IDE_FIXUP和CONFIG_OF_EMBED这两个宏的描述。
9. examples:一些独立运行的应用程序的例子。
10. fs:支持文件系统的文件,u-boot现在支持cramfs、fat、fdos、jffs2、yaffs和registerfs。
11. Include:头文件,还有对各种硬件平台支持的会变文件,系统的配置文件和对文件系统支持的文件。
12. lib:通用的多功能库函数实现。例如字符串的一些常用函数就在string.c中实现。
13. nand_spl:支持从nand flash启动,但支持的cpu的种类也不是很多。
14.net:与网络有关的代码,BOOTP协议、TFTP协议RARP协议和NFS文件系统的实现。
15. post:上电自检程序。
16. spl:镜像分离的实现,一般用在SD卡启动。
16. test:测试命令的实现,测试系统是否运行正常时使用。
17. tools:创建S-Record格式文件和U-BOOT images的工具。
18. boards.cfg:目标板配置参数文件,里边有很多种目标板的配置参数。
19. config.mk:这个文件里面主要定义了交叉编译器及选项和编译规则。
20. COPYING:软件的使用条款声明。
21. CREDITS:U-boot开发者的联系方式。
22. helper.mk:生成u-boot.list文件,文件包含程序编译对象信息等。
23. MAINTAINERS:各个硬件架构软件维护者的联系方式。
24. MAKEALL:创建多个目标板的配置,一般用不到。
25. Makeflie:U-boot的makefile,主要用来编译链接并生成U-boot镜像。
26. mkconfig:建立工程需要的一些软链接并创建配置文件config.h。
27. README:U-boot的介绍信息,最好能花点时间看看,多了解一些关于U-boot的信息。
28. rules.mk:U-boot工程编译依赖规则。
29.snapshot.commit:U-boot序列号和发布时间的快照。