Linux的 __setup解析 – 命令行处理
名称:__setup
作用:命令行处理,处理启动命令行(来自dts或者在编译内核的时候写到CONFIG_CMDLINE中)的相关参数
示例:
文件 init/do_mounts.c
中:
static int __init root_dev_setup(char *line)
{
strlcpy(saved_root_name, line, sizeof(saved_root_name));
return 1;
}
__setup("root=", root_dev_setup);
联系 dts文件中的chosen
节点的bootargs参数:
chosen {
bootargs = "root=/dev/mmcblk0p2 rootfstype=ext4 rootwait rw console=ttymxc3,115200n8 lpj=7905280 initroot=10:none,initramfs,/startup/run quiet";
};
经过上面的解析后,/dev/mmcblk0p2
成为 root_dev_setup 的入参执行后续流程
拓展:命令行的来源
- 编译内核的时候写到
CONFIG_CMDLINE
中 - 写到dts中由uboot上传给内核
在menuconfig中设置路径如下:
Boot options ->
Default kernel command string # 设置默认的启动命令
Boot options ->
Kernel command line type
-> () Use bootloader kernel arguments if available # 从bootloader中获取启动参数(如上面的例子)
() Extend bootloader kernel arguments
() Always use the default kernel command string # 使用上面设置的默认启动行