当前位置: 首页 > article >正文

详细说明嵌入式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 的设置方式基本一致,只是具体的串口设备名称和波特率可能因硬件设计不同而有所变化。

http://www.kler.cn/a/461895.html

相关文章:

  • 四、VSCODE 使用GIT插件
  • Appium 2.0:移动自动化测试的革新之旅
  • scrapy 教程
  • 安卓11 SysteUI添加按钮以及下拉状态栏的色温调节按钮
  • 浏览器选中文字样式
  • ACM算法模板
  • leetcode hot 100 前k个高平元素
  • 线程同步——使用场景区分
  • 【每日学点鸿蒙知识】grid里面的item支持拖动问题、WebView回调问题、获取页面名称、弹幕效果实现、修改App输出路径 |
  • 基础14 C++申请内存的各种方法
  • 自动化测试的心得
  • Singleton: WebRTC中ThreadManager中的单例模式
  • [创业之路-231]:《华为闭环战略管理》-5-企业组织架构、业务架构、技术架构、产品架构等它们有哪些不同的地方,又有哪些是相同的?
  • 数据库的使用09:使用SSMS工具将SQLsever数据导出到Excel
  • 【架构-38】如何选择通信协议和数据格式
  • 视频智能翻译
  • Java List 源码解析——从基础到深度剖析
  • Postman[2] 入门——界面介绍
  • 赛博周刊·2024年度工具精选(图片设计类)
  • 基于STM32的智能床垫控制系统的Proteus仿真
  • 直流开关电源技术及应用二
  • 麒麟信安云在长沙某银行的应用入选“云建设与应用领航计划(2024)”,打造湖湘金融云化升级优质范本
  • python ai ReAct 代理(ReAct Agent)
  • ulimit命令与nginx的联系
  • 【Linux报告】实训六 重置超级用户密码
  • Docker--Docker Network(网络)