weiqi7777

cortex-a8 uboot系列: 第三章 uboot初体验

0
阅读(2409)

一、  配置

1.    Ubootlinux

Ubootkernel等复杂项目,都不能直接编译,都要先配置才能编译。

2.    Uboot配置

第一步:cd进入uboot源码的根目录

第二步:make x210_sd_config

clip_image002

    后面的x210_sd_config,是在uboot源码根目录下的Makefile中得到的,,make后,就会生成针对于x210开发板的配置文件,这些配置文件会被uboot调用,最终生成在x210开发板上运行的uboot.bin

clip_image004

3.    Uboot编译得到uboot.bin

编译之前一定要检查交叉编译工具arm-gcc是否安装正确,检查分两步:

第一步:检查当前编译环境中有没有安装合适的arm-linux-gcc,装的是arm-2009q3,因为这个是三星官方、九鼎官方开发uboot时使用的。

第二步:检测uboot根目录下的Makefile中编译器的设置是否正确。在工程的总Makefile中有设置交叉编译工具链的路径和名字,必须确保路径和名字和系统安装的一致。

clip_image006

确保以上两点,即可编译。

直接make编译就行了。

make –j2(多线程编译,主机如果是多核心电脑,可以尝试多线程编译,会快一些,后面的数字和你的电脑的几核有关系)

编译完成后,查看u-boot.bin大小。

clip_image008

 

二、  Uboot

1.    Uboot文件介绍

1)           .gitignore git工具的忽略文件,git是一个版本管理工具。uboot代码是利用git来进行管理的。

2)           arm_config.mk 后缀是.mk,是一个Makefile文件,将来在某个Makefile中会去调用它

3)           三个Changelog文件,修改记录文件,该文件记录了这个uboot项目的版本变迁以及每个版本较上个版本修改的记录。主要给维护uboot的人使用。

4)           config.mk:和arm_config.mk性质一样,提供调用

5)           COPYING 版权声明,uboot本身是GPL许可证的。

6)           CREDITS 鸣谢,里面记录了对uboot有贡献的人。

7)           image_split bash脚本,对镜像进行分割,从u-boot.bin中分割出bl2.bin

8)           MAINTAINERS 维护者,当前参与维护uboot源码的社区工作者

9)           MAKEALL bash脚本,帮助编译uboot的脚本

10)       Makefile 编译uboot生成uboot.binmakefile

11)       mk      快速编译脚本,直接./mk就可以编译uboot

12)       mkconfig uboot配置阶段的主要配置脚本。Uboot的可移植性很大程序就是靠这个配置脚本。

13)       mkmovi 也是一个脚本,生成iNanduboot.bin

14)       README 使用说明书

15)       rules.mk ubootMakefile使用规则

总结:以上这些文件中,比较重要的是Makefilemkconfig这两个文件,一个负责编译,一个负责uboot的配置。

2.    uboot文件夹介绍

1)           api 硬件无关的功能函数的apiuboot移植时不需要修改,这些函数是uboot本身使用的。

2)           api_examples api相关的测试实例代码

3)           board board文件夹下每一个文件都代表一个具体的开发板,这个文件夹下面放的文件就是用来描述这一个开发板的信息。为了使编译能够使用开发板的信息,需要进行配置。

Uboot的配置(其实就是根目录下的mkconfig脚本和Makefile中配置相关的部分)主要解决的问题就是在可移植性领域能够帮助我们确定具体的文件夹的路径,然后编译时可以找到应该找到的文件,才能编译成功。

4)           common 通用的目录,文件夹下放的是与硬件无关的通用使用的代码。一种是cmd开头c代码(用来实现uboot的命令系统),一种是env开头的c代码(用来实现环境变量的 ),还有一些其他的。

5)           CPU Soc相关的,里面的代码都是与Soc相关初始化和控制代码,如CPU的中断、串口、内存控制、FLASH控制等,还包括其实的start.Sx210使用的是s5pc11x

这个文件夹是严格和硬件相关的,移植的时候要注意。但是因为这个和soc相关的,不同的开发板只要使用的核心soc一样,那自己移植的时候,基本上不用修改,

6)           disk:磁盘相关的代码

7)           doc uboot的相关文档

8)           drivers 里面放的就是linux源代码中提取出来的linux设备驱动,主要是开发板上必须用到的一些驱动,如网卡驱动,flash驱动等。

Uboot中的驱动就是linux中的驱动,uboot在一定程序上移植了linux的驱动给自己用。

9)           example 示例代码

10)       fs 文件系统,从linux中移植过来,用来管理flash等资源。

11)       include 头文件目录

ubootlinux kernel管理头文件是采用同一个思路,就是把所有的头文件全部集中存放在include目录下,而不是头文件跟着自己对应的c文件。所以uboot中头文件包含时路径结构就在这个include目录中找。

12)       lib_xxx xxx的头文件,典型的lib_armlib_generic,架构相关的库文件。lib_arm里面是arm架构使用的库文件,官方会写好,不需要自己修改。lib_generic里面是所有架构通用的库文件。

13)       libfdt 设备树有关的,linux内核在3.4左右的版本的时候更改了启动传参的机制,改用设备树来启动传参,进行硬件信息的描述。

14)       nand_spl nand相关的代码

15)       net      网络相关的代码

16)       onenand_xxx onenand相关的代码,三星自己加的。

17)       post          

18)       sd_fusing 刷写SD卡,实现烧录uboot镜像到SD卡的代码。

19)       tools   uboot有关的工具代码,如mkimage

 

总结:文件夹里面重要的有:boardcommoncpudriversincludelib_armlib_genericsd_fusing