根据cmdline在驱动中加载不同硬件配置

有些时候随着产品的开发迭代硬件配置发生了不同,但是需要使用一套软件来兼容不同的硬件批次,这时候使用dtsi来配置就无法达到我们兼容的目的了,这时候可以在BootLoader阶段检测不同的HWID来区分不同的硬件批次,然后修改不同的cmdline传递给kernel,在kernel驱动注册阶段去检测cmdline中相关关键字来加载不同的配置即可。
内核启动过程中start_kernel中setup_arch中解析tags获取cmdline,复制到boot_command_line中。我们接着往下看start_kernel,调用setup_command_line,将cmdline拷贝2份,放在saved_command_line static_command_line。

在我们的driver中可以解析saved_command_line 中的相关字段获取配置,下面的一段demo代码:

static int get_board_version(void)
{
	char boot[3] = {'\0'};
	int ret = 0;
	char *match = (char *) strnstr(saved_command_line,
				"androidboot.hwid=",
				strlen(saved_command_line));
	if (match) {
		memcpy(boot, (match + strlen("androidboot.hwid=")),
			sizeof(boot) - 1);
		printk("%s: hwid is %s\n", __func__, boot);
		if (!strncmp(boot, "P1", strlen("P1")))
			ret = 1;
		else if (!strncmp(boot, "P2", strlen("P2")))
			ret = 2;
		else if (!strncmp(boot, "P3", strlen("P3")))
			ret = 3;
		else
			ret = 0;
	}
	return ret;
}
发布了27 篇原创文章 · 获赞 18 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/qq_24622489/article/details/100080846