移植u-boot-1.3.4到qq2440开发板(1)
作者:makethyme
以前曾经将u-boot-1.1.6移植到QQ2440 (cpu为S3c2440)开发板,前几天有空闲时,计划重新将新的u-boot-1.3.4移植到开发板上,cross toolchain就用ELDK(Embedded Linux Development Kit)。
经过一通merge后,编译时发现qq2440.h提示包含的头文件<cmd_confdefs.h>找不到。在u-boot-1.1.6中,头文件<cmd_confefs.h>定义了一些command,如下所示:
#define CFG_CMD_BDI 0x00000001ULL /* bdinfo */
#define CFG_CMD_LOADS 0x00000002ULL /* loads */
然后将需要支持的command通过逻辑或( | )的形式汇聚在CONFIG_COMMANDS中,如下:
#define CONFIG_COMMANDS /
(CONFIG_CMD_DFL | /
CFG_CMD_CACHE | /
…
而最后在源文件中,通过逻辑与(&)判断CONFIG_COMMANDS是否包含某个命令,从而决定是否编译该命令相关的代码。例如在common/cmd_bdinfo.c中:
#if (CONFIG_COMMANDS & CFG_CMD_BDI)
static void print_num(const char *, ulong);
…
#endif
在u-boot-1.3.4中,采用了另一种策略。不再有头文件cmd_confdefs.h,取而代之的是config_cmd_all.h和config_cmd_default.h。而CONFIG_CMD_XXXX也不定义成具体的值,只需要用define定义即可。
#define CONFIG_CMD_BDI /* bdinfo */
在源文件中则根本不对CONFIG_CMD_XXXX是否存在进行判断,转而通过对Makefile进行控制,来决定CONFIG_CMD_XXXX对应的代码是否链接进库中。例如在common/Makefile中,
COBJS-y += cmd_autoscript.o
COBJS-$(CONFIG_CMD_BDI) += cmd_bdinfo.o
COBJS-$(CONFIG_CMD_BEDBUG) += cmd_bedbug.o
COBJS-$(CONFIG_CMD_BMP) += cmd_bmp.o
COBJS-y += image.o
这样就能决定该相应代码是否链接进库中。