根据顶层Readme文件的说明,可以知道如果要使用开发板board/<board_name>,就先执行“make <board_name>_config”命令进行配置,然后执行“make all”,就可以生成如下3个文件:
u-boot.bin:二进制可执行文件,它就是可以直接烧入ROM、NOR Flash的文件。
对于S3C2410的开发板,执行“make smdk2410_config”、“make all”后生成的u-boot.bin可以烧入NOR Flash中运行。启动后可以看到串口输出一些信息后进入控制界面,等待用户的输入。
//======================== 现在总结一下,配置命令“make smdk2410_config”,实际的作用就是执行“./mkconfig smdk2410 arm arm920t smdk2410 NULL s3c24x0”命令。假设执行“./mkconfig $1 $2 $3 $4 $5 $6”命令,则将产生如下结果: (1)开发板名称BOARD_NAME等于$1; (2)创建到平台/开发板相关的头文件的链接: ln -s asm-$2 asm ln -s arch-$6 asm-$2/arch ln -s proc-armv asm-$2/proc# 如果$2不是arm的话,此行没有 (3) 创建顶层Makefile包含的文件include/config.mk。 ARCH = $2 CPU = $3 BOARD = $4 VENDOR = $5# $5为空,或者是NULL的话,此行没有 SOC = $6# $6为空,或者是NULL的话,此行没有 (4)创建开发板相关的头文件include/config.h。 /* Automatically generated - do not edit */ #include <configs/$1.h>"
配置文件中有两类宏: (1)一类是选项(Options),前缀为“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 */ #define CONFIG_SYS_CLK_FREQ12000000/* the SMDK2410 has 12MHz input clock */ #define CONFIG_DRIVER_CS89001/* we have a CS8900 on-board */
#define CFG_MALLOC_LEN(CFG_ENV_SIZE + 128*1024) #defineCFG_PROMPT"100ASK> "/* Monitor Command Prompt*/ #defineCFG_LOAD_ADDR0x33000000/* default load address*/ #define PHYS_FLASH_10x00000000 /* Flash Bank #1 */ 从下面的编译、连接过程可知,U-Boot中几乎每个文件都被编译和连接,但是这些文件是否包含有效的代码,则由宏开关来设置。比如对于网卡驱动drivers/cs8900.c,它的格式为: #include <common.h>/* 将包含配置文件include/config/<board_name>.h */ …… #ifdef CONFIG_DRIVER_CS8900 /* 实际的代码 */ …… #endif/* CONFIG_DRIVER_CS8900 */ 如果定义了宏CONFIG_DRIVER_CS8900,则文件中包含有效的代码;否则,文件被注释为空。 可以这样粗糙地认为,“CONFIG_”除了设置一些参数外,主要用来设置U-Boot的功能、选择使用文件中的哪一部分;而“CFG_”用来设置更细节的参数。 |
|