uboot移植详解
46~48行进入include目录,删除asm文件(上一次配置时建立的链接文件),然后再次建立asm文件,并令它链向 asm-$2目录,即asm-arm.
51 rm-fasm-$2/arch
52
53 if[-z"$6"-o"$6"="NULL"];then
54 ln-s${LNPREFIX}arch-$3asm-$2/arch
55 else
56 ln-s${LNPREFIX}arch-$6asm-$2/arch
57 fi
建立符号链接include/asm-arm/arch,若$6(SOC)为空,则使其链接到include/asm-arm/arch-arm920t目录,否则就使其链接到include/asm-arm/arch-s3c24x0目录。(事实上include/asm-arm/arch-arm920t并不存在,因此$6是不能为空的,否则会编译失败)
59 if["$2"="arm"];then
60 rm-fasm-$2/proc
61 ln-s${LNPREFIX}proc-armvasm-$2/proc
62 fi
若目标板是arm架构,则上面的代码将建立符号连接include/asm-arm/proc,使其链接到目录proc-armv目录。
建立以上的链接的好处:编译U-Boot时直接进入链接文件指向的目录进行编译,而不必根据不同开发板来选择不同目录。
(3)创建顶层Makefile包含的文件include/config.mk
64 #
65 #CreateincludefileforMake
66 #
67 echo"ARCH=$2">config.mk
68 echo"CPU=$3">>config.mk
69 echo"BOARD=$4">>config.mk
70
71 ["$5"]&&["$5"!="NULL"]&&echo"VENDOR=$5">>config.mk
72
73 ["$6"]&&["$6"!="NULL"]&&echo"SOC=$6">>config.mk
上面代码将会把如下内容写入文件inlcude/config.mk文件:
ARCH=arm
CPU=arm920t
BOARD=TX2440
SOC=s3c24x0
(4)创建开发板相关的头文件include/config.h
75 #
76 #Createboardspecificheaderfile
77 #
78 if["$APPEND"="yes"] #Appendtoexistingconfigfile
79 then
80 echo>>config.h
81 else
82 >config.h #Createnewconfigfile
83 fi
84 echo"/*Automaticallygenerated-donotedit*/">>config.h
85 echo "#include
创建新的include/config.h文件。若APPEND为yes,则将新的配置内容追加到include/config.h文件后面。由于APPEND的值保持“no”,因此config.h被创建了,内容如下:
/*Automaticallygenerated-donotedit*/
#include
下面总结命令makeTX2440_config执行的结果(仅针对编译目标输出到源代码目录的情况):
(1) 创建开发板名称BOARD_NAME等于$1
(2)创建到目标板相关的文件的链接
ln-sasm-armasm
ln-sarch-$6asm-$2/arch
ln-sproc-armvasm-arm/proc //如果$2不是arm,此行没有
(3)创建i顶层Makefile包含的文件 include/config.mk文件,内容如下所示:
ARCH=$2
CPU=$3
BOARD=$4
VENDOR=$5
SOC=$6
(4)创建与目标板相关的文件include/config.h,如下所示:
/*Automaticallygenerated-donotedit*/
#include
从这四个结果可以知道,如果要在board目录下新建一个开发板
配置文件中有两类宏:一类是选项(option)前缀为“CONFIG_”它们用于选择CPU、SOC、开发板类型、设置系统时钟、选择设备驱动。
如:#define CONFIG_ARM920T1/* This is an ARM920T Core*/
#defineCONFIG_S3C24101/* in a SAMSUNG S3C2410 SoC */
#define CONFIG_SMDK24101/* on a SAMSUNG SMDK2410 Board */
另一类是参数(setting),前缀为“CFG_”,它们用于设置malloc缓冲池的大小、U-BOOT提示符、U-boot下载文件时的默认加载地址、FLASH的起始地址等
如:#defineCFG_LONGHELP/* undef to save memory*/
#defineCFG_PROMPT"SMDK2410 # "/* Monitor Command Prompt*/
#defineCFG_CBSIZE256/* Console I/O Buffer Size*/
#defineCFG_PBSIZE (CFG_CBSIZE+sizeof(CFG_PROMPT)+16) /* Print Buffer Size */
#defineCFG_MAXARGS16/* max number of command args*/
#define CFG_BARGSIZECFG_CBSIZE/* Boot Argument Buffer Size*/
可以这样认为,“CONFIG_”除了设置一些参数外,主要来设置U-Boot的功能、选择使用文件中的哪一部分;而“CFG_”用来设置更细节的参数。
U-Boot的编译、链接过程
配置完后,执行“make all”既可编译,从Makefile中可以了解U-Boot使用了哪些文件、哪个文件首先执行、可执行文件占用内存情况。
若没有执行过“make
Systemnotconfigured-seeREADME
U-Boot是如何知道用户没有执行过“make
ifeq($(obj)include/config.mk,$(wildcard$(obj)include/confi
uboot移植详 相关文章:
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)
- Linux嵌入式系统开发平台选型探讨(11-09)
- Windows CE 进程、线程和内存管理(二)(11-09)
