深入理解bootargs

您所在的位置:网站首页 黑苹果bootargs参数怎么设置 深入理解bootargs

深入理解bootargs

2024-07-17 18:00:36| 来源: 网络整理| 查看: 265

一、bootargs参数

在嵌入式系统中,bootargs是非常重要的参数。它保存着Linux内核启动的相关信息,如启动参数和控制台信息等。而在ARM架构的系统中,bootargs参数则是在U-Boot引导时设置的。

bootargs参数通常包括以下几个方面:

1. 内核命令行参数

内核命令行参数是Linux内核启动时必要的参数,它们会告诉内核应该如何进行初始化和配置。常见的内核命令行参数包括rootfs、serial等。

root=/dev/mmcblk0p2 rootwait rw console=ttyS0,115200n8 2. 内存分配参数

内存分配参数通常由Linux内核自动处理,但在某些情况下需要手动设置。它们包括mem等。

mem=256MB 3. U-Boot环境变量

U-Boot环境变量是指在U-Boot引导时设置的全局变量。常见的U-Boot环境变量包括bootdelay、bootcmd等。

bootdelay=3 bootargs=root=/dev/mmcblk0p2 rootwait rw console=ttyS0,115200n8 bootcmd=run bootargs; bootm ${kernel_addr_r} - ${fdt_addr_r} 二、机顶盒bootargs是什么意思

机顶盒bootargs参数和嵌入式系统中的bootargs参数基本相同,也是由U-Boot引导时设置的命令行参数。其主要作用是为Linux内核初始化和配置提供必要的信息。常见的机顶盒bootargs参数包括:

1. rootfs

rootfs参数指定Linux内核的根文件系统,即Linux内核启动后挂载的根文件系统。在机顶盒中,通常指定为NFS、TFTP或者SD卡等。

bootargs=root=/dev/nfs nfsroot=192.168.0.10:/nfs/rootfs ip=dhcp rw 2. serial

serial参数指定Linux内核使用的串口设备,用于调试和输出控制台信息。

bootargs=console=ttyS0,115200n8 三、参数

init: 用来指定内核启动后执行的第一个程序,比如 init=/linuxrc 表示执行 /linuxrc 程序1。

mem: 用来指定内核使用的内存大小,比如 mem=64M 表示使用 64M 的内存1。

ip: 用来指定网络相关的参数,比如 ip=192.168.0.2::192.168.0.1:255.255.255.0::eth0:on 表示设置 IP 地址、网关、子网掩码和网络设备1。

video: 用来指定显示相关的参数,比如 video=omapfb:vram:2M,vram:4M 表示设置显存大小2。

mtdparts: 用来指定 flash 的分区情况,比如 mtdparts=hi_sfc:1M(boot);hinand:4M(baseparam),4M(pqparam),4M(logo),8M(kernel),96M(rootfs),-(others) 表示使用 hi_sfc 和 hinand 两个设备,并且分别指定了各自的分区大小和名称2。

mmz: 用来指定内存管理区域,比如 mmz=ddr,0,0,300M 表示使用 ddr 设备,并且从地址 0 开始,分配 300M 的内存空间。

panic: 用来指定内核发生崩溃时的行为,比如 panic=10 表示在内核崩溃后等待 10 秒后重启3。

quiet: 用来减少内核启动时的打印信息,只显示重要的错误信息3。

console: 用来指定使用的串口设备和波特率,比如 console=ttyPS0,115200 表示使用 ttyPS0 设备,并且设置波特率为 11520023。

earlyprintk: 用来打印早期启动信息,比如 earlyprintk 表示打印内核解压缩和设备树加载等信息2。

rootfstype: 用来指定 rootfs 的文件系统类型,比如 rootfstype=yaffs2 表示使用 yaffs2 文件系统2。

initrd: 用来指定使用 ramdisk 启动系统时的 ramdisk 镜像文件,比如 initrd=0x80000000,8M 表示从地址 0x80000000 开始,加载大小为 8M 的 ramdisk 镜像文件2。

四、举个例子 mtdparts=fc000000.nor_flash:1920k(linux),128k(fdt),20M(ramdisk),4M(jffs2),38272k(user),256k(env),384k(uboot) bootargs=noinitrd root=/dev/nfs rw nfsroot=192.168.0.1:/home/tekkaman/working/nfs/rootfs ip=192.168.0.2:192.168.0.1::255.255.255.0 console=ttySAC0,115200 init=/linuxrc mem=64M bootcmd=nfs 0x30008000 192.168.0.1:/home/tekkaman/working/nfs/zImage.img;bootm bootdelay=1 baudrate=115200 ethaddr=08:08:11:18:12:27 ipaddr=192.168.0.2 serverip=192.168.0.1 gatewayip=192.168.0.1 netmask=255.255.255.0 tekkaman=bmp d 70000 stdin=serial stdout=serial stderr=serial ethact=dm9000 Environment size: 470/131068 bytes console

console=ttyS0,115200 表示终端为ttyS0,串口波特率为115200

root

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

root=/dev/mtdblock5 表示根文件系统在第五分区

root=/dev/ram rw root=/dev/ram0 rw 请注意上面的这两种设置情况是通用的,我做过测试甚至root=/dev/ram1rw和root=/dev/ram2 rw也是可以的,网上有人说在某些情况下是不通用的,即必须设置成ram或者ram0,但是目前还没有遇到,还需要进一步确认,遇到不行的时候可以逐一尝试。此种方法用的也很少,因为大多数是用nandflash。

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全部擦出,重新烧写。

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中了。

root 参数 存储介质大小标识描述举例nor flash16MByte~32MBytemtdXnone (built-in)nand Flash128MByte+mtdblockX(X:0,1,2,3…)root=/dev/mtdblock1 rw root=/dev/mtdblock2 rwemmc~mmcblkXpY(X=0~ n,Y=1~ n具体要看系统识别出来哪些)root=/dev/mmcblk0p1 rw root=/dev/mmcblk0p2 rwSD/TF卡~mmcblkXpY(X=0~ n,Y=1~ n具体要看系统识别出来哪些)SD/TF卡本质上就是emmcroot=/dev/mmcblk0p1 rw root=/dev/mmcblk0p2 rw内存~ram内存文件系统网络网络文件系统 firmware_class.path

指定驱动放置的位置,一些不开源的驱动

rootfstype

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

eg:rootfstype=yaffs2

root=/dev/mtdblock5 表示根文件系统在第五分区

mtdparts

分区情况:内核目录/drivers/mtd/cmdlinepart.c文件中有介绍。

rootwait rw

root 后面有“rootwait rw”,rootwait 表示等待 mmc 设备初始化完成以后再挂载,否则的话mmc 设备还没初始化完成就挂载根文件系统会出错的。

rw 表示根文件系统是可以读写的,不加 rw 的话可能无法在根文件系统中进行写操作,只能进行读操作。

earlycon

ARM64,在kernel未建立console之前,使用earlycon,实现打印。在bootargs中,要加入如下选项:

earlycon=pl011,0x70000000

pl011表示针对pl011这个串口设备,0x70000000是串口的起始地址。

no_console_suspend

在kernel启动参数里面加上no_console_suspend,这个是最基本的,因为kernel在把console suspend掉以后,不管里面出了什么事情,从串口上都看不到。大部分在suspend/resume时候的死机都可以通过串口看到kernel Panic的信息,这样才会知道是哪里出了问题。因为有的时候resume出错,或者suspend到很后面出错的console不加这个参数都看不到。 bootargs中找到console在其后添加no_console_suspend例如

"console=ttyO0,115200n8 no_console_suspend"

或者在Uboot中直接设置后boot:

setenv console ttyO0,115200n8 no_console_suspend

initcall_debug 这个也许知道的人不多, 其实有的时候你不知道哪个driver在suspend/resume的时候出错的时候,很迷茫, 就想在哪里加上一些调试信息来看看是哪里的driver, 其实有些时候加的不合适的话, 会看不到很多有用的信息。其实kernel本身已经有这样的功能了(只不过不是很人性化)。

echo 1 > /sys/module/kernel/parameters/initcall_debugecho 9 > /proc/sys/kernel/printk

PCI Express支持两类中断:INTx使用传统的IRQ中断,可以与现行的PCI总线的驱动程序和操作 系统兼容;MSI则是通过inbound Memory Write触发和发送中断,更适合多CPU系统. 可以使用"pci=nomsi"内核引导参数关闭 在内核启动时,用 ‘pci=nomsi’选项可以禁用PCI MSI中断。这将在整个系统禁用MSI。

否:[PCIE]如果启用了PCIEAER内核配置参数,则可以使用此内核引导选项来禁用对PCIE高级错误报告的使用。nomsi:[MSI]如果启用了PCI_MSI内核配置参数,则此内核引导选项可用于在系统范围内禁用MSI中断的使用。

该指令旨在抑制此类宝贵的错误消息。

环境变量 环 境 变 量解 释 说 明bootdelay执行自动启动(bootcmd中的命令)的等候秒数baudrate串口控制台的波特率netmask以太网的网络掩码ethaddr以太网的MAC地址bootfile默认的下载文件名bootargs传递给Linux内核的启动参数bootcmd自动启动时执行命令serveripTFTP服务器端的IP地址ipaddr本地的IP地址stdin标准输入设备,一般是串口stdout标准输出,一般是串口,也可是LCD(VGA)stderr标准出错,一般是串口,也可是LCD(VGA) 参考资料 https://aijishu.com/a/1060000000136710https://blog.csdn.net/qq_28877125/article/details/120785133https://blog.csdn.net/skywalkzf/article/details/7913887https://www.51c51.com/baike/xinxi/5/327083.html


【本文地址】

公司简介

联系我们

今日新闻


点击排行

实验室常用的仪器、试剂和
说到实验室常用到的东西,主要就分为仪器、试剂和耗
不用再找了,全球10大实验
01、赛默飞世尔科技(热电)Thermo Fisher Scientif
三代水柜的量产巅峰T-72坦
作者:寞寒最近,西边闹腾挺大,本来小寞以为忙完这
通风柜跟实验室通风系统有
说到通风柜跟实验室通风,不少人都纠结二者到底是不
集消毒杀菌、烘干收纳为一
厨房是家里细菌较多的地方,潮湿的环境、没有完全密
实验室设备之全钢实验台如
全钢实验台是实验室家具中较为重要的家具之一,很多

推荐新闻


    图片新闻

    实验室药品柜的特性有哪些
    实验室药品柜是实验室家具的重要组成部分之一,主要
    小学科学实验中有哪些教学
    计算机 计算器 一般 打孔器 打气筒 仪器车 显微镜
    实验室各种仪器原理动图讲
    1.紫外分光光谱UV分析原理:吸收紫外光能量,引起分
    高中化学常见仪器及实验装
    1、可加热仪器:2、计量仪器:(1)仪器A的名称:量
    微生物操作主要设备和器具
    今天盘点一下微生物操作主要设备和器具,别嫌我啰嗦
    浅谈通风柜使用基本常识
     众所周知,通风柜功能中最主要的就是排气功能。在

    专题文章

      CopyRight 2018-2019 实验室设备网 版权所有 win10的实时保护怎么永久关闭