详细说明嵌入式linux中bootcmd与bootargs差异

bootcmdbootargs 是在嵌入式系统开发,特别是基于U-Boot(一个广泛应用的开源引导加载程序)环境中常见的两个重要参数,它们的区别如下:

功能用途

  • bootcmd
    • 定义bootcmd 是U-Boot中的一个环境变量,用于定义一系列在启动过程中自动执行的命令。这些命令通常用于初始化硬件设备、设置内存参数、加载内核镜像和设备树文件等操作,引导系统进入内核启动阶段。

    • 示例场景 :在开发板启动时,bootcmd 可能会包含设置网络参数以通过网络加载内核镜像的命令,或者从NAND Flash、SD卡等存储设备读取内核镜像到内存的操作。例如,对于通过网络加载内核镜像的情况,bootcmd 可能类似如下设置:

      setenv bootcmd 'tftpboot 0x80007FC0 uImage; tftpboot 0x80F00000 my - dtb.dtb; bootm 0x80007FC0 - 0x80F00000'

此命令首先通过TFTP协议将内核镜像 uImage 下载到内存地址 0x80007FC0,然后将设备树文件 my - dtb.dtb 下载到内存地址 0x80F00000,最后使用 bootm 命令启动内核,指定内核镜像地址以及设备树文件地址。

  • bootargs
    • 定义bootargs 同样是U-Boot的环境变量,它主要用于传递内核启动参数给Linux内核。这些参数告知内核如何初始化硬件设备、挂载根文件系统以及配置系统运行时的各种设置等。

    • 示例场景 :比如要设置内核启动时的根文件系统类型为 ext4,根文件系统所在设备为 /dev/mmcblk0p2,并启用串口控制台输出,bootargs 可以设置为:

      setenv bootargs 'console = ttyS0,115200 root = /dev/mmcblk0p2 rootfstype = ext4 rw'

这里 console = ttyS0,115200 表示使用串口 ttyS0 作为控制台,波特率为115200;root = /dev/mmcblk0p2 指明根文件系统位于 mmcblk0 设备的第二个分区;rootfstype = ext4 说明根文件系统类型是 ext4rw 表示以读写方式挂载根文件系统。

执行时机与作用对象

  • bootcmd
    • 执行时机 :在U-Boot启动流程中,当U-Boot完成自身初始化后,会检查并执行 bootcmd 中定义的命令序列。它在U-Boot环境内执行,目的是为内核启动做准备工作,比如初始化硬件设备、准备内存空间等。
    • 作用对象:其操作主要针对U-Boot自身以及底层硬件设备,为内核的加载和启动创造条件。
  • bootargs
    • 执行时机 :当 bootcmd 执行完加载内核镜像和设备树文件等操作,并通过特定命令(如 bootm)启动内核时,U-Boot会将 bootargs 中设置的参数传递给内核。所以它是在内核启动阶段起作用。
    • 作用对象:直接作用于Linux内核,影响内核的启动配置和运行时的一些基本设置。

配置内容特点

  • bootcmd
    • 内容特点 :包含一系列U-Boot命令,这些命令以字符串形式存储在 bootcmd 变量中,命令之间通常用分号(;)分隔。命令内容围绕硬件初始化、数据传输(如从存储设备读取数据到内存)、网络操作等与U-Boot引导流程紧密相关的操作。
    • 可变性bootcmd 的配置可能因硬件平台不同而有较大差异,例如不同的存储设备接口(NAND Flash、SD卡、eMMC等)需要不同的命令来读取数据;不同的网络芯片可能需要不同的网络参数设置命令。同时,开发人员也可能根据项目需求,如调试需求、特定的启动流程定制,对 bootcmd 进行灵活修改。
  • bootargs
    • 内容特点:是一组以键值对形式组成的内核启动参数,参数之间用空格分隔。这些参数主要涉及内核如何识别和配置硬件设备、文件系统挂载方式、系统运行模式等内核层面的设置。
    • 可变性 :虽然也会因硬件平台和项目需求有所不同,但相对来说,在同一类硬件平台上,bootargs 的基本参数结构和大部分参数内容较为相似。例如,对于基于ARM架构的开发板,串口控制台参数 console 的设置方式基本一致,只是具体的串口设备名称和波特率可能因硬件设计不同而有所变化。
相关推荐
jingshaoqi_ccc11 分钟前
stm32的USART使用DMA配置成循环模式时发送和接收有着本质区别
stm32·单片机·嵌入式硬件
snoopyfly~33 分钟前
Ubuntu 24.04 LTS 服务器配置:安装 JDK、Nginx、Redis。
java·服务器·ubuntu
独行soc40 分钟前
#渗透测试#批量漏洞挖掘#HSC Mailinspector 任意文件读取漏洞(CVE-2024-34470)
linux·科技·安全·网络安全·面试·渗透测试
BD_Marathon44 分钟前
Ubuntu下Tomcat的配置
linux·ubuntu·tomcat
pumpkin845141 小时前
Rust 调用 C 函数的 FFI
c语言·算法·rust
饥饿的半导体1 小时前
Linux快速入门
linux·运维
BD_Marathon1 小时前
Ubuntu:Tomcat里面的catalina.sh
linux·ubuntu·tomcat
BD_Marathon1 小时前
设置LInux环境变量的方法和区别_Ubuntu/Centos
linux·ubuntu·centos
Me4神秘1 小时前
Linux国产与国外进度对垒
linux·服务器·安全
2401_858286112 小时前
125.【C语言】数据结构之归并排序递归解法
c语言·开发语言·数据结构·算法·排序算法·归并排序