嵌入式 u-boot裁剪备忘

刚才小研究了下u-boot的裁剪,很简单的东西,记录备忘一下。

include/configs/smdk6410.h
include/cmd_confdefs.h
u-boot主要是通过对其上两个文件中的CONFIG_COMMANDS及CFG_CMD_NONSTD宏的内容进行增添来实现裁剪
比如cmd_confdefs.h中:
×××××××××××××××××××××××××××××××××××××××××××××××××××
#define CFG_CMD_ALL 0xFFFFFFFFFFFFFFFFULL

#define CFG_CMD_NONSTD (CFG_CMD_ASKENV | \
CFG_CMD_BEDBUG | \
CFG_CMD_BMP | \
CFG_CMD_BSP | \
CFG_CMD_CACHE | \
CFG_CMD_CDP | \
CFG_CMD_DATE | \
CFG_CMD_DHCP | \
CFG_CMD_DIAG | \
CFG_CMD_DISPLAY | \
CFG_CMD_DOC | \
CFG_CMD_DTT | \
CFG_CMD_EEPROM | \
CFG_CMD_ELF | \
CFG_CMD_EXT2 | \
CFG_CMD_FDC | \
CFG_CMD_FAT | \
CFG_CMD_FDOS | \
CFG_CMD_HWFLOW | \
CFG_CMD_I2C | \
CFG_CMD_IDE | \
CFG_CMD_IMMAP | \
CFG_CMD_IRQ | \
CFG_CMD_JFFS2 | \
CFG_CMD_KGDB | \
CFG_CMD_MII | \
CFG_CMD_MMC | \
CFG_CMD_NAND | \
CFG_CMD_MOVINAND| \
CFG_CMD_ONENAND | \
CFG_CMD_PCI | \
CFG_CMD_PCMCIA | \
CFG_CMD_PING | \
CFG_CMD_PORTIO | \
CFG_CMD_REGINFO | \
CFG_CMD_REISER | \
CFG_CMD_SAVES | \
CFG_CMD_SCSI | \
CFG_CMD_SDRAM | \
CFG_CMD_SNTP | \
CFG_CMD_SPI | \
CFG_CMD_UNIVERSE | \
CFG_CMD_USB | \
CFG_CMD_VFD )


#define CONFIG_CMD_DFL (CFG_CMD_ALL & ~CFG_CMD_NONSTD)

#ifndef CONFIG_COMMANDS
#define CONFIG_COMMANDS CONFIG_CMD_DFL
#endif
×××××××××××××××××××××××××××××××××××××××××××××××××××××
对于一般情况,cmd_confdefs.h中如果当前CONFIG_COMMANDS未定义,则CONFIG_COMMANDS等于CONFIG_CMD_DFL,而CONFIG_CMD_DFL等于CFG_CMD_ALL & ~CFG_CMD_NONSTD。从这里可以看出,比如我们将CFG_CMD_NAND添加到CFG_CMD_NONSTD,则nand部分将不会被编入u-boot。

而对于6410,则看smdk6410.h。类似的,有:
×××××××××××××××××××××××××××××××××××××××××××××××××××××

#define CONFIG_COMMANDS \
(CONFIG_CMD_DFL | \
CFG_CMD_CACHE | \
CFG_CMD_FAT | \
CFG_CMD_REGINFO | \
CFG_CMD_LOADS | \
CFG_CMD_LOADB | \
CFG_CMD_ENV | \
CFG_CMD_NAND | \
CFG_CMD_MOVINAND| \
CFG_CMD_ONENAND | \
CFG_CMD_DATE | \
CFG_CMD_PING | \
CFG_CMD_ELF) \
& ~(CFG_CMD_AUTOSCRIPT | \
CFG_CMD_DATE | \
CFG_CMD_PING | \
CFG_CMD_BOOTD | \
CFG_CMD_ONENAND | \
CFG_CMD_IMI | \
CFG_CMD_RUN | \
CFG_CMD_CONSOLE | \
CFG_CMD_DOCG3P3 | \
CFG_CMD_EEPROM | \
CFG_CMD_USB | \
CFG_CMD_REGINFO | \
CFG_CMD_LOADS | \
CFG_CMD_LOADB | \
CFG_CMD_I2C | \
CFG_CMD_MOVINAND| \
CFG_CMD_ELF | \
CFG_CMD_BDI | \
CFG_CMD_CACHE | \
CFG_CMD_IMLS | \
CFG_CMD_ITEST | \
CFG_CMD_MISC | \
CFG_CMD_NAND | CFG_CMD_NET | CFG_CMD_ECHO | \
0)


#include
×××××××××××××××××××××××××××××××××××××××××××××××××××××
这里直接对CONFIG_COMMANDS进行了定义,包括加入及~掉的部分,并且在定义后面直接跟了cmd_confdefs.h,所以在cmd_confdefs.h中的CONFIG_COMMANDS定义就不会被使用,起作用的是smdk6410中的CONFIG_COMMANDS定义

打开nand.c 最前面有这么一行:
#if (CONFIG_COMMANDS & CFG_CMD_NAND) && !defined(CFG_NAND_LEGACY)
很明显,以我们的定义,这部分(NAND)是不会被编进u-boot的。同样的 其他被包含在& ~操作中的一样。
参考文献:
http://www.eefocus.com/myspace/blog/show_77755.html
http://blog.mcuol.com/User/lvembededsys/Article/4355_1.htm

你可能感兴趣的:(嵌入式 u-boot裁剪备忘)