openwrt 15.05 branch (Chaos Calmer)编译出的固件bootargs被覆盖

在编译的openwrt 15.05 Chaos Calmer固件中,发现bootargs参数在启动过程中被内核代码覆盖。问题源于内核不使用uboot传递的参数,而是从arch/mips/ath79/prom.c的prom_init函数开始,通过ath79_prom_init_cmdline和ath79_use_image_cmdline,最终在汇编文件head.S中的__image_cmdline导致bootargs被替换。

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

编译出的固件

bootargs参数被内核覆盖

内核不使用uboot传来的参数


查看代码发现在

内核代码\linux-3.18.27\arch\mips\ath79\prom.c中

调用prom_init => ath79_prom_init_cmdline => ath79_use_image_cmdline

进入了ath79_use_image_cmdline

在函数ath79_use_image_cmdline中使用了__image_cmdline

#ifdef CONFIG_IMAGE_CMDLINE_HACK
extern char __image_cmdline[];

static int __init ath79_use_image_cmdline(void)
{
	char *p = __image_cmdline;
	int replace = 0;

	if (*p == '-') {
		replace = 1;
		p++;
	}

	if (*p == '\0')
		return 0;

	if (replace) {
		strlcpy(arcs_cmdline, p, sizeof(arcs_cmdline));
	} else {
		strlcat(arcs_cmdline, " ", sizeof(arcs_cmdline));
		strlcat(arcs_cmdline, p, sizeof(arcs_cmdline));
	}
	
	return 1;
}
#else
static inline int ath79_use_image_cmdline(void) { return 0; }
#endif


__image_cmdline

在汇编文件linux-3.18.27/arch/mips/kernel/head.S中导出

#ifdef CONFIG_IMAGE_CMDLINE_HACK
        .ascii  "CMDLINE:"
EXPORT(__image_cmdline)
        .fill   0x400
#endif /* CONFIG_IMAGE_CMDLINE_HACK */


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值