Bootargs参数详解

嵌入式 linux下arm平台的环境变量bootargs使用注意事项 1、setenv bootargs noinitrd mem=192M console=ttyAMA0,115200 root=/dev/mtdblock2 rw rootfstype=yaffs2 mtdparts=hinand:1M(boot)ro,5M(kernel),125M(firstfs),125M(secondfs);saveenv;reset 2、setenv bootargs 阅读详情

Bootargs参数详解

 

U-boot的环境变量值得注意的有两个: bootcmd 和bootargs。

 

一:bootcmd

bootcmd是自动启动时默认执行的一些命令,因此你可以在当前环境中定义各种不同配置,不同环境的参数设置,然后设置bootcmd为你经常使用的那种参数,而且在bootcmd中可以使用调用的方式,方便修改。

 eg:setenv bootcmd ‘setenv bootargs $(bootargs)root=$(rootfs) nfsroot=$(serverip):$(nsworkdir) ;nboot 0x80800000 0x4000000x200000;bootm 0x80800000’


二:bootargs


bootargs是环境变量中的重中之重,甚至可以说整个环境变量都是围绕着bootargs来设置的。bootargs的种类非常非常的多,我们平常只是使用了几种而已。bootargs非常的灵活,内核和文件系统的不同搭配就会有不同的设置方法,甚至你也可以不设置 bootargs,而直接将其写到内核中去(在配置内核的选项中可以进行这样的设置),正是这些原因导致了bootargs使用上的困难。
下面介绍一下bootargs常用参数,bootargs的种类非常的多,而且随着kernel的发展会出现一些新的参数,使得设置会更加灵活多样。

A. root


用来指定rootfs(文件系统)的位置, 常见的情况有:

1.
root=/dev/ram rw
root=/dev/ram0 rw
请注意上面的这两种设置情况是通用的,我做过测试甚至root=/dev/ram1rw和root=/dev/ram2 rw也是可以的,网上有人说在某些情况下是不通用的,即必须设置成ram或者ram0,但是目前还没有遇到,还需要进一步确认,遇到不行的时候可以逐一尝试。此种方法用的也很少,因为大多数是用nandflash。2.
root=/dev/mtdx rw
root=/dev/mtdblockx rw
root=/dev/mtdblock/x rw
上面的这几个在一定情况下是通用的,当然这要看你当前的系统是否支持,不过mtd是字符设备,而mtdblock是块设备,有时候你的挨个的试到底当前的系统支持上面那种情况下,不过root=/dev/mtdblockxrw比较通用。此外,如果直接指定设备名可以的话,那么使用此设备的设备号也是可以的。这个地方要看你的系统启动时MTD分区情况确认是哪个分区存放文件系统,如下图。或者在内核源码的arch/arm/mach-davinci/board-dm365.evm.或者arch/am/plat-s3c24xx/common-smdk.c中的smdk_default_nand_part结构数组中查看,注意是从mtdblock0开始的

这种配置是在nand中已经拷贝好文件系统时这样配置(如果nand中没有,此参数这样配置会找不到文件系统的,出现的错误很多,可能会说unmount….或者panic –not syncing:VFS:unable timount root fs on unknown-block)

此时的解决方法最好是把板子nand全部擦出,重新烧写。
3.
root=/dev/nfs
在文件系统为基于nfs的文件系统的时候使用,也就是说文件系统不在板子上,而是用NFS共享的服务器上的。当然指定root=/dev/nfs之后,还需要指定nfsroot=serverip:nfs_dir,serverip是服务器的IP,dir即指明文件系统存在那个主机的那个目录下面。

注意:要确保在服务器中把此路径下的文件添加到NFS共享,添加上共享的文件会有个小插头的样子。
用NFS共享服务器上的文件系统这种方法很好,这样板子上的系统就可以起来了,可以再板子的终端里输入命令了,在班子中将存放文件系统的分区挂载一下eg:mount /dev/mtdblock4 /mnt,这样将服务器上做好的文件系统直接拷贝到/mnt文件下就好了eg:cp –rm * /mnt ,*代表当前路径下的所有内容,无需再用maketools将文件系统制作成二进制文件的形式用tftp或者NFS烧写到nand中了。


B. rootfstype
这个选项需要跟root一起配合使用,一般如果根文件系统是ext2的话,有没有这个选项是无所谓的,但是如果是jffs2,squashfs等文件系统的话,就需要rootfstype指明文件系统的类型,不然会无法挂载根分区.(具体是怎样无法挂载的这个还待测,是无法挂载nand中的还是虚拟机中的,待测)

eg:rootfstype=yaffs2

C. console

1.
console=tty 使用虚拟串口终端设备 .
console=ttyS[,options] 使用特定的串口,options可以是这样的形式bbbbpnx,这里bbbb是指串口的波特率,p是奇偶位(从来没有看过使用过),n是指的bits。

2.
console=ttySAC[,options] 同上面。
eg:DM365中:console=ttySAC0,115200n8


看你当前的环境,有时用ttyS,有时用ttySAC,网上有人说,这是跟内核的版本有关,2.4用ttyS,2.6用ttySAC,但实际情况是官方文档中也是使用ttyS,所以应该是跟内核版本没有关联的。可以查看Documentation/serial-console.txt找到相关描述。

D. mem
mem=xxM 指定内存的大小,不是必须的

E. ramdisk_size (一般不用)
ramdisk=xxxxx 不推荐
ramdisk_size=xxxxx 推荐
上 面这两个都可以告诉ramdisk 驱动,创建的ramdisk的size,默认情况下是4m(s390默认8M),你可以查看Documentation/ramdisk.txt找到相关的描述,不过ramdisk=xxxxx在新版的内核都已经没有提了,不推荐使用。

F. initrd, noinitrd 
当你没有使用ramdisk启动系统的时候,你需要使用noinitrd这个参数,但是如果使用了的话,就需要指定initrd=r_addr,size,r_addr表示initrd在内存中的位置,size表示initrd的大小。

G. init
init 指定的是内核启起来后,进入系统中运行的第一个脚本,一般init=/linuxrc, 或者init=/etc/preinit,preinit的内容一般是创建console,null设备节点,运行init程序,挂载一些文件系统等等操作。请注意,很多初学者以为init=/linuxrc是固定写法,其实不然,/linuxrc指的是/目录下面的linuxrc脚本,一般是一个连接罢了。

此参数一般不需要设置,以为内核源码中有一定的启动项,内核如何启动init进程在内核的init/main.c  static init noinline init_post(void)
若出现No init found Try passing init=这种错误的时候可能原因是内核找不到文件系统或者无法挂载文件系统,不用考虑是init参数设置的错误。

Eg:   kernelpanic-nosyncing :no init found.Tying init= option to know

此错误的原因是因为在root=/dev/mtdblock4但是nand中根本就没有烧写文件系统,而不是因为init参数设置不对
H. mtdparts mtdparts=fc000000.nor_flash:1920k(linux),128k(fdt),20M(ramdisk),4M(jffs2),38272k(user),256k(env),384k(uboot)
要 想这个参数起作用,内核中的mtd驱动必须要支持,即内核配置时需要选上Device Drivers ---> Memory Technology Device (MTD) support---> Command line partition table parsing

mtdparts的格式如下:
mtdparts=[;
:= :[,]
:= [@offset][][ro]
:= unique id used in mapping driver/device
:= standard linux memsize OR "-" to denote all remaining space
:= (NAME)
因此你在使用的时候需要按照下面的格式来设置:
mtdparts=mtd-id:@(),@()
这里面有几个必须要注意的:
a. mtd-id 必须要跟你当前平台的flash的mtd-id一致,不然整个mtdparts会失效
b. size在设置的时候可以为实际的size(xxM,xxk,xx),也可以为'-'这表示剩余的所有空间。
举例:
假设flash 的mtd-id是sa1100,那么你可以使用下面的方式来设置:
mtdparts=sa1100:- → 只有一个分区
mtdparts=sa1100:256k(ARMboot)ro,-(root) → 有两个分区
可以查看drivers/mtd/cmdlinepart.c中的注释找到相关描述。

I. ip
指定系统启动之后网卡的ip地址,如果你使用基于nfs的文件系统,那么必须要有这个参数,其他的情况下就看你自己的喜好了。设置ip有两种方法:
ip = ip addr
ip=ip addr:server ip addr:gateway:netmask::which netcard:off
这两种方法可以用,不过很明显第二种要详细很多,请注意第二种中which netcard 是指开发板上的网卡,而不是主机上的网卡。

说明一下,如果用NFS或者为了ping通的话只需设置三个就可以了,ipaddr、serverip、eth就好了。

 

J.

总结:bootcmd可以使用调用的方式,方便以后的修改,bootargs我试着用同样的方式的时候系统起不来。

下面附上DM365能够用NFS挂载虚拟机中的文件系统时候参数设置

DM365能够成功挂载nandflash中的文件系统时的设置只需要把root=dev/nfs  改为root=/dev/mtdblock4就好


H:常见的几种形式
说完常见的几种bootargs,那么我们来讨论平常我经常使用的几种组合:
1). 假设文件系统是ramdisk,且直接就在内存中,bootargs的设置应该如下:
setenv bootargs ‘initrd=0x32000000,0xa00000 root=/dev/ram0 console=ttySAC0mem=64M init=/linuxrc’

2). 假设文件系统是ramdisk,且在flash中,bootargs的设置应该如下:
setenv bootargs ‘mem=32M console=ttyS0,115200 root=/dev/ram rw init=/linuxrc’
注意这种情况下你应该要在bootm命令中指定ramdisk在flash中的地址,如bootm kernel_addr ramdisk_addr(fdt_addr)

3). 假设文件系统是jffs2类型的,且在flash中,bootargs的设置应该如下
setenv bootargs ‘mem=32M console=ttyS0,115200 noinitrd root=/dev/mtdblock2 rwrootfstype=jffs2 init=/linuxrc’

4). 假设文件系统是基于nfs的,bootargs的设置应该如下
setenv bootargs ‘noinitrd mem=64M console=ttySAC0 root=/dev/nfsnfsroot=192.168.0.3:/nfsip=192.168.0.5:192.168.0.3:192.168.0.3:255.255.255.0::eth0:off’
或者
setenv bootargs ‘noinitrd mem=64M console=ttySAC0 root=/dev/nfsnfsroot=192.168.0.3:/nfs ip=192.168.0.5’


上面就是我们经常使用的几种bootargs的组合,老实说,bootargs非常非常的灵活,所以设置的方法有很多中形式,具体的还应该根据你的平台具体的情况来设置。


版权声明:本文为优快云博主「zhangjikuan」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.youkuaiyun.com/zhangjikuan/article/details/22091335

【二】6.关于bootcmd和bootargs的设置 本文介绍了在嵌入式系统中配置bootcmd和bootargs的两种方式。bootcmd用于设置启动命令,支持从MMC存储设备或网络(TFTP/NFS)加载镜像文件并启动系统。具体命令包括从MMC加载镜像、从TFTP服务器获取镜像以及通过NFS挂载镜像。bootargs用于设置启动参数,支持从MMC或NFS挂载根文件系统,并配置控制台、网络等参数。通过合理配置这些命令和参数,可以灵活实现系统的启动和挂载方式。 阅读详情

相关推荐

uboot 中的bootargs 如何 修改 内核的 cmdline和 linux 内核如何生成 /proc/cmdline

总结:在U-Boot中,可以通过修改环境变量 “bootargs” 来修改内核的启动参数(cmdline)。因此,/proc/cmdline文件中的内容是由引导加载程序或启动参数配置文件传递给内核的命令行参数生成的。在Linux内核启动时,内核会根据引导加载程序(如GRUB)或启动参数配置文件(如U-Boot中的环境变量)等信息生成/proc/cmdline文件。在<新的启动参数>中,可以指定要传递给内核的任何启动参数,如rootfs的位置、调试选项、内核参数等。找到名为 “bootargs” 的变量。

sunfanup的博客 3092

uboot的环境变量——bootargs简介

以下内容源于网络资源的学习与整理,如有侵权请告知删除。

主要记录嵌入式学习与开发过程。 9409

Flink实战项目——城市交通实时监控平台

本项目是与公安交通管理综合应用平台、机动车缉查布控系统等对接的,并且基于交通部门现有的数据平台上,进行的数据实时分析项目。

yangwei2048的博客 837

Linux启动方式设置(bootargs 和 bootcmd 环境变量)

bootargs bootargs 保存着 uboot 传递给 Linux 内核的参数。 bootargs 环境变量设置:console=ttymxc0,115200 root=/dev/mmcblk1p2 rootwait rw 参数 含义 console=ttymxc0 设置 linux 终端,串口 1 的设备文件是/dev/ttymxc0 115200 设置串口的波特率 root=/dev/mmcblk1p2 根文件系统存放在 mmcblk1 设备的分区 2 ,即EMMC

丨晋丨 1万+

Word | 简单可操作的快捷公式编号、右对齐和引用方法

在理工科论文的写作中,涉及到大量的公式输入,我们希望能够按照章节为公式进行编号,并且实现公式居中,编号右对齐的效果。网上有各种各样的方法来实现,操作繁琐和简单的混在一起,让没有接触过公式编号的人感觉比较混乱。笔者自己博览相关博客,亲身实践,总结出一套自认为比较简便的公式编号、对齐和引用方法,在这里分享给大家~

qq_43466146的博客 3万+

硬件工程师入门进阶,一文搞懂,看这篇就对了

每家公司的datasheet都有严格的规范,及独特的风格,有时候还会穿插一些原理性的介绍,比如ADI公司的一些ADC/DAC器件资料里面,还会包含AD/DA转换的原理性讲解内容,Datasheet既可以是我们设计上的好帮手,也是学习的好资料。在出货量大的产品中,尽量减少物料种类,比如开头说的,1%的电阻不得不用,那么5%的替换成1%的,物料种类就减少一种,量就大了,能不能争取更优的价格呢?如果说前面学的是内功,那这一关,是招式、是工具的使用,原理图和PCB设计都有对应的工具,教程也很多,且比较容易上手。

一路带飞的博客 5万+

Bootargs 参数

bootargs 的参数还有以下一些。

Jarvis的博客 1479

VSCode配置C/C++开发环境:从零安装MinGW-w64并运行第一个C程序

在Windows系统上搭建C语言开发环境时,很多初学者混淆编辑器、编译器与调试器的分工,导致配置过程屡屡受挫。理解VSCode作为轻量级编辑器的定位,以及MinGW-w64提供的gcc编译器在源码编译中的核心作用,是顺利完成环境配置的关键。环境变量的正确设置直接影响gcc命令能否全局调用,而C/C++插件则赋予编辑器语法高亮与智能提示能力。通过安装VSCode、配置MinGW-w64、安装插件、汉化界面并运行一个最简单的hello.c程序,就能系统掌握这套开源工具链的完整工作流。无论是用于课程学习、算法练习

weixin_42531923的博客 533

Linux uboot中Bootargs参数详解

Bootargs参数详解   U-boot的环境变量值得注意的有两个: bootcmd 和bootargs。   一:bootcmd bootcmd是自动启动时默认执行的一些命令,因此你可以在当前环境中定义各种不同配置,不同环境的参数设置,然后设置bootcmd为你经常使用的那种参数,而且在bootcmd中可以使用调用的方式,方便修改。  eg:setenv bootcmd ‘setenv bootargs $(bootar...

L1643319918的博客 6798

yolov7目标追踪:基于自定义数据集完成检测

目标追踪包含两个阶段:(1)基于自定义数据集,训练yolo目标检测模型;(2)基于检测模型,将实时检测结果传递到StrongSORT追踪算法中,该算法在OSNet基础上结合运动和外观信息,可以跟踪yolo模型检测到的任何物体。

📷 图像处理践行者 | 传统算法 · 深度学习 · 多模态 | 分享实战经验与技术洞见,探索从像素到智能的无限可能。 2306

MIMIC数据库简介

一 、MIMIC简介 MIMIC(Medical Information Mart for Intensive Care),是一个大型的公开数据库。该数据库记录了2001年至2019年期间贝斯以色列女狄肯斯医疗中心重症监护病房患者的相关数据,拥有4万多名患者的医疗健康数据和记录。 MIMIC数据库记录了人口统计学信息,如病人的性别、身高、宗教等情况。记录了实验室检验信息,如血常规,肝功能,肾功能等实验室检测数据。记录了患者的用药信息,如高血压患者服用了治疗高血压类药物等。记录了护理人员以及患者的护理级别等。

越努力 越幸运 1万+

uboot bootcmd 和bootargs参数详解

U-boot的环境变量值得注意的有两个: bootcmd 和bootargs。(http://www.cnblogs.com/cornflower/archive/2010/03/27/1698279.html) u-bootcmd     前面有说过bootcmd是自动启动时默认执行的一些命令,因此你可以在当前环境中定义各种不同配置,不同环境的参数设置,然后设置bootcmd为你经常使用的那

android_lee的专栏 2571

YOLOv8【第十一章:视频追踪与流处理篇·第16节】一文搞懂,DeepStream 部署入门:NVIDIA 视频分析 SDK 与 YOLOv8 结合!

🏆 本文收录于 《YOLOv8实战:从入门到深度优化》 专栏。该专栏系统复现并梳理全网各类 YOLOv8 改进与实战案例(当前已覆盖分类 / 检测 / 分割 / 追踪 / 关键点 / OBB 检测等方向),坚持持续更新 + 深度解析,质量分长期稳定在 97 分以上,可视为当前市面上 覆盖较全、更新较快、实战导向极强 的 YOLO 改进系列内容之一。

**My Coding Family** 839

bootcmd和bootargs参数

u-boot的环境参数中有两个和内核启动相关的,它们是bootcmd和bootargs 1.u-boot中和环境参数有关的命令        printenv:打印当前环境参数        setenv param_name "value":设置环境参数

奋斗 1万+

Serial RapidIO Gen2 IP 说明(一)

概述 高速IO(RapidIO)互联架构,用来兼容当前最流行的集成通信处理器、主处理器、联网的数字信号处理器,是一种高性能、分组交换(报文交换)的互联技术。它解决了高性能嵌入式产业稳定性、高带宽以及系统内部更快的总线速率的需求。 高速IO(RapidIO)标准由三层定义:逻辑层、传输层、物理层。逻辑层定义了所有的协议内容和报文格式。这些是终端发起和完成一次传输所必需的信息。传输层提供了报文从一个端点传输到另外一个端点必要的路线信息。物理层则描述了设备级的端口声明,如报...

记录所学,分享知识,结识挚友 1497

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

【uboot】设置uboot下的bootargs参数

关键字: 【bootargs】、【uboot】、【boot】、【bootloader】、【】、【】、【】、【】、【】、【】、 描述: 因为项目需要,常常要修改uboot代码。 其中比较重要的就有“bootargs”参数 什么是bootargs? 简单来说:bootargs就是传递给内核的启动参数。 在uboot加载内核时,会将bootargs参数传递给内核(指定内存地址)。 在内核启动过程中,会获取bootargs参数,并解析其中的信息。用于启动过程中用于配置相关的驱动模块信息。 如何设置bo

诸葛一帆丶的博客 6919

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

Linux启动bootargs参数分析

<br />Linux启动bootargs参数分析<br />Written by leeming<br />这几天刚好在看linux c语言启动,现在就顺便把内核在启动时解析bootargs这一块单独拎出来讲解下,内核对于bootargs的解析分为几块:<br />1.      setup_arch(&command_line);<br />综述:在这个函数中,系统会获得bootargs参数,并对其做简单的初步分析。并将bootargs的参数保存在command_line这个地址中。<br />详解:<

babyfans的专栏 3707

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

BusyBox根文件系统中bootargs命令的设置详解(rw参数)

BusyBox根文件系统中bootargs命令的设置详解(rw参数)

a_zxswer的博客 1178

bootargs参数详解

U-boot的环境变量值得注意的有两个: bootcmd 和bootargs。 u-bootcmd     前面有说过bootcmd是自动启动时默认执行的一些命令,因此你可以在当前环境中定义各种不同配置,不同环境的参数设置,然后设置bootcmd为你经常使用的那种参数。 u-bootargs     bootargs是环境变量中的重中之重,甚至可以说整个环境变量都是围绕着bootargs来

WXXGoodJob的博客 2069

bootargs参数意义

原文地址:[转]bootargs参数意义作者:YingRu_bupt U-boot的环境变量值得注意的有两个: bootcmd 和bootargs。 u-bootcmd     前面有说过bootcmd是自动启动时默认执行的一些命令,因此你可以在当前环境中定义各种不同配置,不同环境的参数设置,然后设置bootcmd为你经常使用的那种参数。 u-bootargs     bootarg

zhangjikuan的专栏 690

Linux下bootargs引导参数说明

本文是学习hisi芯片启动过程,不同的芯片启动方式不一样,但都大同小异。   ========================================= 设置系统启动参数 =========================================    必须正确设置bootargs参数或者烧写bootargs镜像才能保证系统正常启动               这个参数

peng_fp的博客 1万+

常用的bootargs参数设置备忘录

常用的bootargs参数设置备忘录set bootargs root=/dev/ram0 rw console=ttySAC0,115200 mem=64M ramdisk=32768 initrd=0x30800000,20M init=/linuxrcsetenv bootcmd tftpboot 0x33000000 uImage-rtc/; tftpboot 0x3080

dongliqiang2006的专栏 3456
上一篇: 内核编译时, 到底用make clean, make mrproper还是make distclean
下一篇: nuc977 使用 ubifs
oshan2012
博客等级 码龄15年 300粉丝 91原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值