详细说明嵌入式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 的设置方式基本一致,只是具体的串口设备名称和波特率可能因硬件设计不同而有所变化。
相关推荐
自动驾驶小卡12 分钟前
ubuntu 常用操作指令(与域控制器交互相关)
linux·ubuntu·操作指令
计蒙不吃鱼27 分钟前
星闪开发之Server-Client 指令交互控制红灯亮灭案例解析(SLE_LED详解)
嵌入式硬件·物联网·iot·星闪·星闪开发
意如流水任东西37 分钟前
Linux开发工具(apt,vim,gcc)
linux·服务器
XMAIPC_Robot39 分钟前
基于RK3568的多网多串电力能源1U机箱解决方案,支持B码,4G等
linux·fpga开发·能源·边缘计算
程序猿小D41 分钟前
第14节 Node.js 全局对象
linux·前端·npm·node.js·编辑器·vim
想搞嵌入式的小白1 小时前
STM32 NVIC中断控制器
stm32·单片机·嵌入式硬件·nvic
A-花开堪折1 小时前
Android7 Input(十)View 处理Input事件pipeline
android·嵌入式硬件
Antonio9152 小时前
【Linux】 Linux 进程控制
linux·运维·服务器
深圳市尚想信息技术有限公司2 小时前
【深尚想】OPA855QDSGRQ1运算放大器IC德州仪器TI汽车级高速8GHz增益带宽的全面解析
单片机·嵌入式硬件
thinkMoreAndDoMore2 小时前
linux驱动开发(1)-内核模块
linux·运维·驱动开发