移植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
#define CFG_CMD_LOADS 0x00000002ULL
然後将需要支援的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
在源檔案中則根本不對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
這樣就能決定該相應代碼是否連結進庫中。