Linux kernel cmdline,_setup宏和core_param代码分析

本文深入分析了Linux内核启动过程中cmdline参数的处理,探讨了gcc的内存对齐规则,并详细解释了_setup宏和core_param在配置参数传递给内核过程中的作用。通过代码解析,展示了从dts到内核初始化函数的过程,涉及的关键结构体、函数和宏的使用。
摘要由CSDN通过智能技术生成

cmdline代码分析

先介绍gcc的两个属性__attribute__aligned
1. __attribute__ 为修饰对象的属性以及改变其类型;aligned(m),为m字节对齐。
sizeof(int) = 4sizeof(char) = 1sizeof (char *) = 8

 	struct stu {
   
    char name[5];
    int length;
    //char *sex;                                                                                                                                                  
};//__attribute__((aligned(8)));

上述sizeof(stu) = 12,结构体储存有一条规则是按照成员变量最大的对齐,由于int为4字节,因此4个char储存为4个字节,另外一个char也要储存为4个字节(即其它3个字节padding)。

 	struct stu {
   
    char name[5];
    int length;
    //char *sex;                                                                                                                                                  
} __attribute__((aligned(8)));

上述sizeof(stu) = 16

 	struct stu {
   
    char name[13];
    int length;
    //char *sex;                                                                                                                                                  
} __attribute__((aligned(8)));

上述sizeof(stu) = 24

2.cmdline代码分析
下面是以kernel 4.14版本进行分析,在现有的版本cmdline都是在kernel CONFIG里面配置,比如:
CONFIG_CMDLINE="mem=128M console=tty0 console=ttySC0,115200 ip=bootp root=/dev/nfs nfsroot=192.168.0.1:/home/rootfs"
那么这个参数,怎么传递给kernel呢?
先上几个常见的宏:

#define __init		__section(.init.text) __cold notrace
#define __initdata	__section(.init.data)
#define __initconst	__section(.init.rodata)
#define __exitdata	__section(.exit.data)
#define __exit_call	__used __section(.exitcall.exit)

init/main.c中定义了一个全局变量char __initdata boot_command_line[COMMAND_LINE_SIZE];,该变量储存在section中的.init.data数据段中,COMMAND_LINE_SIZE =2048,这个boot_command_line会在init/main.c里面去解析,做出相应的load函数。
而在解析dtb的源文件中的drivers/of/fdt.c,可以找到boot_command_line该变量;然后改变量可以得到dts里面的CONFIG_CMDLINE字符串值。
代码分析如下:

#ifdef CONFIG_CMDLINE
static const char *
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值