UBOOT发展到现在,架构已经发生了不少的变化。现在不少开发学习板子上都在用1.1.6版本的。不过发展到现在,UBOOT经历了不少改进,变得越来越标准。
从版本发布的命名上来看,现在的UBOOT不再用以前版本号的方式进行描述。而采用日期的方式进行发布(例如这次最新版本命名为uboot-2011.03)。
第一次用UBOOT的时候是从uboot-2010.06入手的,没想到那个版本之后到现在UBOOT的架构已经发生了一个结构上的新转变,主要就是Makefile的功能更加专一化了,板子的配置被移出了Makefile,放到了一个叫做boards.cfg的文件中,文件格式如下:
Target(目标) |
ARCH(平台) |
CPU(芯片) |
Board name(板子名字) |
Vendor(生产商) |
SoC(CPU类型) |
Options(功能) |
smdk2410 |
arm |
arm920t |
- |
samsung |
s3c24x0 |
|
和以前的老版本比,配置更加规范化了,其实这些就是相关文件分类的一个文件夹的描述。依照这个层次关系,一些S3C24x0系列的学习开发板就可以利用这个来进行配置(比如说tq2440)。
还有一个显著变化的地方就是修改增加了一些宏。该版本按照以前的方法组建smdk2410会报错,主要就是几个宏没有定义。添加的一些宏如下:
#define CONFIG_SYS_SDRAM_BASE 0x30000000 /*SDRAM Bank #1*/
#define CONFIG_SYS_GBL_DATA_SIZE 128
#define CONFIG_SYS_INIT_SP_ADDR (CONFIG_SYS_SDRAM_BASE + SZ_4K \
- CONFIG_SYS_GBL_DATA_SIZE)
这样,编译就能通过了。出错的原因在于arm920t体系的start.S和board.c被重写了,估计是已经修改了arm920t体系中的一些cpu板子。不过arm920t体系的cpu在UBOOT中有多种型号,可能还没有修改到smdk2410上来。不过从宏的定义上可以看出,内存的配置和环境的配置将会更加的规范化(以CONFIG_SYS开头的都是UBOOT中规定的专用宏,意义和重用都很明确)。
上面新增的宏定义当中CONFIG_SYS_SDRAM_BASE含义是配置板子sdram内存的基地址;CONFIG_SYS_GBL_DATA_SIZE是配置全局数据的尺寸;CONFIG_SYS_INIT_SP_ADDR配置了堆栈的地址(看来堆栈的地址小于4K啊,可能后面还要根据具体情况进行优化)。这些参数都取自其他修改过的板子的大部分板子使用的配置(其他板子也多是如此定义),应该算是默认的。
就smdk2410来说,现存的配置文件多多少少还是有些不规范,很多宏都没有按照规范书写,配置顺序也比较乱。不过这都不是问题,毕竟还需要时间。下一步的准备就是仿造smdk2410建立自己的bootloader工程,按照规范生成一个标准的固件。
说实话,固件程序开发其实也没啥太神秘的地方,它的主要作用就是检测调试硬件,完成这个任务后,它就只有引导系统的作用了。tq2440自己也扩展了一个bootloader,也能引导LINUX系统。不过UBOOT是个伟大的开源项目,而且已有了相当好的规范性和知名度。作为开源软件的受益者,我们应该继续帮助UBOOT不断的发展。只有UBOOT发展好了,我们的现在的学习才更有意义:)