嵌入式 u-boot裁剪备忘

本文介绍了U-Boot裁剪的基本方法,通过修改配置文件中的宏定义实现命令的增删,详细展示了如何移除NAND相关功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

刚才小研究了下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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值