linux内核如何解析uboot传入的bootargs
时间: 2023-10-03 17:02:57 浏览: 212
当-Boot 启动内核时,会将一些参数传递给内核,这些参数被称为 "bootargs",它们包含了 U-Boot 和内核之间的通信信息,例如内核启动时需要的命令行参数,root文件系统的位置,以及其他的一些配置信息。
在 Linux 内核启动过程中,它会解析这些参数并将其存储在一个名为 `struct boot_params` 的结构体中。这个结构体定义在文件 `include/linux/bootparam.h` 中,其中的 `setup_data` 成员保存了传递给内核的所有参数。
具体的解析过程是在 `arch/x86/boot/header.S` 中完成的,该文件定义了一个名为 `setup_header` 的结构体,其中包含了 Boot Protocol 的头部信息和 U-Boot 传递的参数。内核启动时,会先检查 `setup_header` 是否有效,然后将参数传递给内核。
在 `setup_header` 中,`cmdline_ptr` 指向了 `bootargs` 的起始地址,内核会解析 `bootargs` 中的命令行参数,并将其传递给相应的模块进行处理。例如,如果 `bootargs` 中指定了 root 文件系统的位置,内核会使用相应的驱动程序挂载 root 文件系统。
总的来说,通过解析 U-Boot 传递的 `bootargs` 参数,Linux 内核可以获取启动时的配置信息,从而正确地初始化系统环境。
相关问题
uboot添加bootargs结点
为了在U-Boot中添加bootargs节点,你需要编辑U-Boot配置文件并重新编译U-Boot。按照以下步骤进行操作:
1. 打开U-Boot源代码目录,并找到`include/configs`目录。
2. 在该目录下找到与你的目标板型号相关的配置文件,通常以`<board_name>.h`的形式命名。
3. 打开该配置文件,找到`#define CONFIG_BOOTARGS`行。如果不存在该行,请在文件的合适位置添加以下内容:
```
#define CONFIG_BOOTARGS <your_bootargs>
```
`<your_bootargs>`是你要添加的bootargs参数。
4. 保存并关闭配置文件。
5. 在U-Boot源代码根目录,运行以下命令重新编译U-Boot:
```
make clean
make <board_name>_config
make
```
`<board_name>`是你的目标板型号。
6. 编译完成后,在U-Boot源代码根目录会生成更新后的U-Boot镜像文件(通常以`u-boot.bin`命名)。
7. 将生成的U-Boot镜像文件烧录到目标设备中。
完成以上步骤后,你的U-Boot就会包含你添加的bootargs节点了。请确保在添加bootargs之前,你已经了解并熟悉了U-Boot的配置和编译过程。
uboot删除bootargs参数
在uboot中删除bootargs参数,可以通过以下步骤:
1. 进入uboot命令行界面,使用printenv命令查看当前的bootargs参数。
2. 使用setenv命令将bootargs参数清空,即:
setenv bootargs ""
3. 使用saveenv命令保存修改后的环境变量。
4. 重启设备,此时bootargs参数已经被删除。
需要注意的是,删除bootargs参数可能会影响设备的启动和运行,建议在删除之前先备份bootargs参数,并在删除后进行测试和验证。
阅读全文