bootargs概要介绍
在U-Boot启动过程中,bootargs
是传递给Linux内核的一个关键参数,它包含了内核启动时所需要的各种配置选项。U-Boot通过设置环境变量bootargs
来指定这些启动参数。
bootargs
的作用
bootargs
的作用是将内核启动所需的参数传递给内核,通常包括以下内容:
- **根文件系统(Root Filesystem)**的路径及类型。
- 内核启动时的设备信息,比如CPU架构、内存、串口等。
- 调试信息,例如内核启动时输出的日志级别、串口设置等。
- 其他驱动或功能的启用/禁用配置。
常见的bootargs
参数格式
bootargs
一般以空格分隔多个键值对,常见的启动参数包括:
-
根文件系统:
root=/dev/mmcblk0p2
: 指定根文件系统所在的分区,这里假设根文件系统位于/dev/mmcblk0p2
(比如SD卡的第二个分区)。rootfstype=ext4
: 指定根文件系统的类型,这里是ext4
。
-
根文件系统的挂载方式:
rootwait
: 在根文件系统未准备好时,内核会等待直到设备准备好。
-
启动模式和控制台配置:
console=ttyS0,115200
: 配置内核的控制台,表示使用串口ttyS0
,波特率为115200。console=tty1
: 指定内核使用tty1
作为控制台,通常用于显示登录界面。
-
内核调试:
quiet
: 关闭大部分内核启动时的日志输出,减少调试信息。loglevel=3
: 设置内核日志级别,3
表示普通的错误日志输出。
-
内存配置:
mem=512M
: 指定内核可用的内存大小,通常用于调试或内存受限的环境。
-
CPU架构信息:
arch=arm
: 用于指定CPU架构,arm
表示ARM架构的处理器。
-
其他内核选项:
earlyprintk
: 启用早期内核打印功能,用于调试早期启动过程。
-
驱动相关配置:
rootdelay=10
: 根文件系统设备启动延迟时间,通常用来等待存储设备的初始化。
-
网络配置:
ip=dhcp
: 启动时自动获取IP地址,通常用于通过网络启动(比如TFTP)。
配置bootargs
U-Boot会根据环境变量bootargs
来传递这些参数给Linux内核,通常的步骤是:
-
通过
setenv
命令设置bootargs
变量。- 例如,在U-Boot命令行中输入:
setenv bootargs "root=/dev/mmcblk0p2 rootfstype=ext4 console=ttyS0,115200 rootwait"
- 例如,在U-Boot命令行中输入:
-
在U-Boot中启动内核时,U-Boot会将
bootargs
传递给内核,通常是通过bootm
或bootz
命令将bootargs
的内容传递给内核。- 例如,使用:
其中bootm ${kernel_addr} - ${fdt_addr}
kernel_addr
是内核镜像的加载地址,fdt_addr
是设备树文件的加载地址。
- 例如,使用:
传递给内核的参数
内核在启动时会解析这些bootargs
参数,并根据参数的值来配置系统。例如,内核会根据root=
参数找到根文件系统,使用console=
参数配置控制台输出,利用mem=
参数设置内存。
小结
bootargs
是一个非常重要的环境变量,用于在启动过程中向Linux内核传递关键配置参数。通过在U-Boot中正确设置bootargs
,可以影响内核的启动行为、调试输出、文件系统挂载、控制台配置等多个方面。在嵌入式开发中,理解并灵活配置这些参数,对于调试和优化启动过程至关重要。
如何查看u-boot的环境变量bootargs
的内容是什么?
在U-Boot的命令行界面,可以使用printenv
命令查看所有环境变量,包括bootargs
。执行以下命令会输出当前设置的bootargs
值:
printenv bootargs
我对我的1号开发板运行命令printenv bootargs
,结果如下:
这说明并没有设置这个环境变量。
如何设置u-boot的环境变量bootargs
可以使用setenv
命令来设置u-boot的环境变量,比如下面这条命令:
setenv bootargs "console=ttyS0,115200 root=/dev/mmcblk0p2 rootfstype=ext4 rootwait"
但是要注意,由于u-boot的运行机制,很有可能你这个设置会无效,具体的原因见博文 https://blog.youkuaiyun.com/wenhao_ir/article/details/145902134 【搜索关键词“而不是直接去修改环境变量”】
如何保存自己设置的环境变量值
参看博文 https://blog.youkuaiyun.com/wenhao_ir/article/details/145902134 【搜索“如何对修改后的环境变量进行保存”】