内核组件用__setup宏来注册关键字及相关联的处理函数,__setup宏在include/linux/init.h中定义,其原型如下:
__setup(string, function_handler)
其 中:string是关键字,function_handler是关联处理函数。__setup只是告诉内核在启动时输入串中含有string时,内核要去执行function_handler。String必须以“=”符结束以使parse_args更方便解析。紧随“=”后的任何文本都会作为输入传给 function_handler。
(1)如果是读取数据,用如下方式:
static int g_ledCurrPulseCount = 1; //bklt pulse count from u-boot
static int __init bklt_pulse_get(char *str)
{
int len = 0;
if (str != NULL)
len = kstrtou32(str, 10, &g_ledCurrPulseCount);
pr_info("[LED] bklt pulse from uboot: %d\n", g_ledCurrPulseCount);
return 0;
}
__setup(“bklt_pulse=”, bklt_pulse_get);
(2)如果是读取字符串,可以用如下方式:
static unsigned int pinctrl_autotest;
static __init int sprd_pinctrl_autotest_mode(char *str)
{
if (strcmp(str, "autotest"))
pinctrl_autotest = 0;
else
pinctrl_autotest = 1;
return 0;
}
__setup(“androidboot.mode=”, sprd_pinctrl_autotest_mode);
这样就可以在驱动的probe函数中去使用pinctrl_autotest了。