内核读取bootargs值为rootfstype=ramfs init=/init console=ttyS0,115200 no_console_suspend earlyprintk=aml-uart,0xc81004c0 ramoops.pstore_en=1 ramoops.record_size=0x8000 ramoops.console_size=0x4000 use_cma_first=1 androidboot.selinux=disabled logo=osd1,loaded,0x3d800000,576cvbs vout=576cvbs,enable hdmimode=720p50hz cvbsmode=576cvbs hdmitx= cvbsdrv=0 androidboot.firstboot=1 jtag=apee quiet androidboot.hardware=amlogic androidboot.boardid=5 androidboot.serialno=00440454F6C5131060T954F6C5269F5C mac=54:F6:C5:26:9F:5C androidboot.mac=54:F6:C5:26:9F:5C,怎么获取boardid的值
时间: 2023-08-11 08:06:09 浏览: 204
要获取 `boardid` 的值,可以在内核启动参数字符串中查找该参数并解析它的值。
在你提供的启动参数字符串中,`boardid` 的值为 `5`,可以通过以下步骤来获取:
1. 使用 `strsep()` 函数来分解启动参数字符串,以等号 (`=`) 为分隔符,将参数名和参数值分开。
2. 对每个参数名和参数值进行比较,找到 `boardid` 参数。
3. 如果找到 `boardid` 参数,将其对应的参数值转换成整数值。
以下是一个示例代码,可以在 Linux 内核中获取 `boardid` 的值:
```c
#include <linux/string.h>
...
const char *bootargs = NULL;
char *arg, *value;
int boardid = -1;
struct device_node *chosen = NULL;
chosen = of_find_node_by_path("/chosen");
if (chosen) {
bootargs = of_get_property(chosen, "bootargs", NULL);
if (bootargs) {
while ((arg = strsep((char **)&bootargs, " ")) != NULL) {
if (strlen(arg) == 0) {
continue;
}
if ((value = strchr(arg, '=')) != NULL) {
*value = '\0';
value++;
if (strcmp(arg, "boardid") == 0) {
boardid = simple_strtol(value, NULL, 10);
break;
}
}
}
}
}
if (boardid >= 0) {
// 处理 boardid 值
...
}
```
在上面的代码中,我们使用 `strsep()` 函数来分解启动参数字符串,并使用 `strcmp()` 函数比较参数名是否为 `boardid`。如果找到 `boardid` 参数,我们使用 `simple_strtol()` 函数将其对应的参数值转换成整数值。如果转换成功,我们就可以在代码中使用 `boardid` 的值。
阅读全文