參考資訊:
https://www.kernel.org/doc/html/latest/admin-guide/kernel-parameters.html
在Kernel command line加上"--",代表"--"後面的參數是要傳遞給init用的,如下範例:
CONFIG_CMDLINE="console=ttyS1,115200 rootwait root=/dev/mmcblk0p1 ro fstype=vfat init=/mininit -- test1=0 test2=1"
init/main.c
/* Anything after -- gets handed straight to init. */ static int __init set_init_arg(char *param, char *val, const char *unused, void *arg) { unsigned int i; if (panic_later) return 0; repair_env_string(param, val, unused, NULL); for (i = 0; argv_init[i]; i++) { if (i == MAX_INIT_ARGS) { panic_later = "init"; panic_param = param; return 0; } } argv_init[i] = param; printk("%s, param %d: %s\n", __func__, i, param); return 0; }
set_init_arg()會解析"--"後面的參數
把傳遞給init的參數列印出來
static int run_init_process(const char *init_filename) { argv_init[0] = init_filename; printk("argv[1]: %s\n", argv_init[1]); printk("argv[2]: %s\n", argv_init[2]); return do_execve(getname_kernel(init_filename), (const char __user *const __user *)argv_init, (const char __user *const __user *)envp_init); }
結果
[ 0.000000] Kernel command line: console=ttyS1,115200 rootwait root=/dev/mmcblk0p1 ro fstype=vfat init=/mininit -- test1=0 test2=1 [ 0.000000] set_init_arg, param 1: test1=0 [ 0.000000] set_init_arg, param 2: test2=1 ... [ 1.320000] argv[1]: test1=0 [ 1.320000] argv[2]: test2=1