chosen { bootargs = "earlycon=uart8250,mmio32,0xff690000 vmalloc=496M"; };
时间: 2024-05-17 09:18:10 浏览: 206
这段代码是什么?如果我理解得正确,这是设备树文件中的一部分,它指定了 Linux 内核启动时的启动参数。具体来说,它指定了 earlycon(早期控制台)选项,以及 vmalloc(虚拟内存分配)选项。
- earlycon=uart8250,mmio32,0xff690000:指定早期控制台使用的串口类型和地址。这里使用的是 UART8250 (一种常见的串口芯片),MMIO(内存映射 I/O)物理地址为 0xff690000。
- vmalloc=496M:指定内核虚拟内存分配的大小。在这种情况下,内核能够使用的最大虚拟内存大小为 496 MB。
请注意,这些选项可能因不同的设备和操作而有所不同。
相关问题
rk3588s芯片中,使用UART8250作为控制台输出,UART8250在设备树的哪个文件配置的
在Rockchip RK3588S芯片上,UART8250作为控制台输出的配置通常在设备树(Device Tree)的dts文件中进行。具体来说,在dts文件中需要配置以下内容:
1. 在"chosen"节点下,设置"stdout-path"属性为UART的设备树路径,例如:
```
chosen {
stdout-path = "serial0:115200n8";
};
```
其中,"serial0"表示UART设备的名称,"115200"表示波特率,"n8"表示数据位为8位,无校验位和停止位。
2. 在UART设备节点下,设置"compatible"属性为"ns16550a",并配置"reg"属性为UART控制器的基地址和地址范围,例如:
```
&uart0 {
compatible = "ns16550a";
reg = <0xff130000 0x1000>;
};
```
其中,"uart0"表示UART设备的名称,"ns16550a"是UART控制器的兼容性字符串,"0xff130000"是UART控制器的基地址,"0x1000"是地址范围。
另外,还需要根据实际情况配置UART的中断号、时钟等属性,以确保UART能够正常工作。
内核读取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的值
要获取 `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` 的值。
阅读全文
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20241231044930.png)
![rar](https://img-home.csdnimg.cn/images/20241231044955.png)
![-](https://img-home.csdnimg.cn/images/20241226111658.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)