boot配置和编译过程详解(2)

./include/asm --> asm-$2 (asm-arm)

# create link for s5pc11x SoC if [ "$3" = "s5pc11x" ] ; then rm -f regs.h ln -s $6.h regs.h rm -f asm-$2/arch ln -s arch-$3 asm-$2/arch fi

regs.h --> $6.h (s5pc110.h)
asm-$2/arch --> arch-$3(arch-s5pc11x)

u-boot支持很多种开发板,很多种类型的CPU,所以要有一种通用得配置方式来方便移植; u-boot甚至linux内核都采用了这种方式:针对不同的处理器或者板子都有自己的头文件和文件夹,但是真正的编译过程却不直接使用,而是在配置阶段创建这些头文件或者文件夹的软连接,并命名为一种通用的名字。在编译的时候通过这些软连接访问真正需要的文件。 例如,在u-boot的include目录下有一个asm的目录,此目录就是在配置完后生成的一个软连接,当配置的是arm架构时,此文件是asm-arm的软连接。 创建make时用到的包含文件 config.mk # # Create include file for Make # echo "ARCH = $2" > config.mk echo "CPU = $3" >> config.mk echo "BOARD = $4" >> config.mk [ "$5" ] && [ "$5" != "NULL" ] && echo "VENDOR = $5" >> config.mk [ "$6" ] && [ "$6" != "NULL" ] && echo "SOC = $6" >> config.mk 创建开发板特定的头文件 config.h # # Create board specific header file # if [ "$APPEND" = "yes" ] # Append to existing config file then echo >> config.h else > config.h # Create new config file fi echo "/* Automatically generated - do not edit */" >>config.h #forlinx add if [ "$7" = "linux" ] then echo "#define CONFIG_LINUX_FORLINX 1" >>config.h else echo "#define CONFIG_ANDROID_FORLINX 1" >>config.h fi #echo "#include <configs/$1.h>" >>config.h #forlinx change for linux and android echo "#include <configs/smdkv210single.h>" >>config.h

因为上边已经把APPEND设置为NO,所以执行> config.h 即创建config.h头文件,并向config.h中写入
/* Automatically generated - do not edit */
"#define CONFIG_LINUX_FORLINX 1
以及#include <configs/smdkv210single.h>
同样是OK210的工程师加入的
#include <configs/$1.h> 即#include <configs/forlinx_linux.h>
注意:创建软连接的操作全都是在u-boot根目录的include子目录中执行的。

配置脚本mkconfig结束。

mkconfig脚本小结

一共创建了三个连接文件,
./include/asm --> asm-$2 (asm-arm)
regs.h --> $6.h (s5pc110.h)
asm-$2/arch --> arch-$3(asm-arm -> arch-s5pc11x)
以及include/config.mk和include/config.h,其中include/config.mk文件中记录着u-boot的版本信息,include/config.h中包含了 configs/$1.h,此文件里记录着是很多很多以CONFIG_开头的宏,是开发板u-boot的主配置信息。

主Makefile 版本号相关 VERSION = 1 PATCHLEVEL = 3 SUBLEVEL = 4 EXTRAVERSION = U_BOOT_VERSION = $(VERSION).$(PATCHLEVEL).$(SUBLEVEL)$(EXTRAVERSION) VERSION_FILE = $(obj)include/version_autogenerated.h

Makefile刚开始的时候仍然是定义当前使用的u-boot的版本,此版本和linux内核版本类似都由多个字段组成,各字段意义如下:
VERSION : 主版本号
PATCHLEVEL :次版本号
SUBLEVEL : 修正版本号
EXTRAVERSION:扩展版本号 (可以自己定义,用于区别自己移植的版本号 )
U_BOOT_VERSION 就是以上几个字段的组合字符串。
VERSION_FILE 保存的是u-boot版本号的文件,其中obj变量在后边定义。version_autogenerated.h文件也在后边生成(此文件不是u-boot源码目录本身有的文件,是由配置过程自动生成的),其内容如下:
#define U_BOOT_VERSION "U-Boot 1.3.4"

HOSTARCH := $(shell uname -m | \ sed -e s/i.86/i386/ \ -e s/sun4u/sparc64/ \ -e s/arm.*/arm/ \ -e s/sa110/arm/ \ -e s/powerpc/ppc/ \ -e s/ppc64/ppc/ \ -e s/macppc/ppc/) HOSTOS := $(shell uname -s | tr '[:upper:]' '[:lower:]' | \ sed -e 's/\(cygwin\).*/cygwin/') export HOSTARCH HOSTOS

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/0a14559f5f7a7ea10a97317d2dcbf9ed.html