bootargs常用属性项【转】

转自:https://blog.csdn.net/weixin_42418557/article/details/89220785

bootargs可以在DTS中生成,chosen里有属性项bootargs,启动linux时,内核会使用chosen中定义的bootargs,如果没有定义bootargs,linux会使用kernel默认的bootcmdline。
如果bootcmdline为空,那么内核会使用UBOOT的环境变量bootargs。

格式是
由很多个键值对用空格隔开依次排列,
每个参数中都是:
参数名=参数值
整个 Kernel command line会被内核启动时解析,
解析成一个一个的参数名=参数值的字符串。
这些字符串会被内核处理成启动参数列表,从而影响启动过程。

bootargs=console=ttyPS0,115200n8 root=/dev/ram rw initrd=0x800000,8M earlyprintk rootfstype=ext4 rootwait devtmpfs.mount=0
这是zedboard最常用的启动参数字符串

(1)console
使用特定的串口,常见的有:
console=ttyPS0,115200
console=ttyS0,115200n8

(2)earlyprintk
打印早期启动信息。

(3)root
用来指定rootfs的位置, 常见的情况有:
root=/dev/ram rw rootwait
root=/dev/ram0 rw
(请注意上面的这两种设置情况是通用的.)
root=/dev/mtdblockx rw rootwait
root=/dev/mtdblock/x rw
(mtdblock是块设备)
root=/dev/mtdblockx只是告诉内核,root fs从第x个(x=0,1,2…)MTD分区挂载,mtdblock0对应第一个分区,mtdblock1对应第二个分区,以此类推.
rootwait
指定内核在所有设备节点都加载后,再检查rootfs的合法性。

(4)rootfstype
跟root一起配合使用,常见的情况有:
rootfstype=jffs2
rootfstype=squashfs
(如果是jffs2,squashfs等文件系统的话,就需要rootfstype指明文件系统的类型,不然会无法挂载根分区.一般如果根文件系统是ext2的话,有没有这个选项是无所谓的)

(5)mem=xxM
指定内存的大小,不是必须的
例如:
mem=64M
mem=1G

(6)ramdisk_size
ramdisk_size=xxM
告诉ramdisk 驱动,创建的ramdisk的size,默认情况下是4M,
例如:
ramdisk_size=8M

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

ramdisk: 是一种基于内存的虚拟磁盘技术,采用ext2文件系统, 把内存当磁盘用。
initrd是另外单独编译生成的,是一个独立的文件,它由bootloader单独加载到ram中内核空间外的地址,
例如
加载的地址为0x800000(是物理地址而非虚拟地址),大小为8MB,
那么只要在命令行加入
initrd=0x800000,8M
系统就可以找到 initrd。

initrd依赖ram disk,需要配置
CONFIG_BLK_DEV_RAM
CONFIG_BLK_DEV_INITRD选项 – 支持initrd,
1。配置initrd
General setup —>
[] Initial RAM filesystem and RAM disk (initramfs/initrd) support
() Initramfs source file(s) //清空根文件系统的目录配置
2。配置ramdisk
Block devices —>
<
> RAM disk support
(16) Default number of RAM disks // 内核在/dev/目录下生成16个ram设备节点
(4096) Default RAM disk size (kbytes)
(1024) Default RAM disk block size (bytes)

例如:
使用 initrd的内 核启动参数:
initrd=addr,0x400000 root=/dev/ram rw
注:
addr是根文件系统的下载地址;
0x400000是根文件系统的大小,该大小需要和内核配置的ramdisk size 4096 kbytes相一致;
/dev/ram是ramdisk的设备节点,rw表示根文件系统可读、可写;

(8)init
init指定的是内核启起来后,进入系统中运行的第一个脚本,一般是
init=/linuxrc

(9)ip
指定系统启动之后网卡的ip地址,如果你使用基于nfs的文件系统,那么必须要有这个参数,其他的情况下就看你自己的喜好了。设置ip有两种方法:
ip = ip_addr
ip=ip_addr:server_ip_addr:gateway:netmask:[<hostname>]:which netcard:off

例如:
ip=192.168.0.5:192.168.0.3:192.168.0.3:255.255.255.0::eth0:off’
省略了hostname,所以两个冒号之间保留为空。

(10)mtdparts,blkdevparts
要想这个参数起作用,内核中的mtd驱动必须要支持,
即内核配置时需要选上
Device Drivers
—> Memory Technology Device (MTD) support
—> Command line partition table parsing y

mtdparts的格式如下:
使用的时候需要按照下面的格式来设置:
mtdparts=mtd-id:<size1>[@<offset1>](<name1>)[ro],<size2>[@<offset2>](<name2>)[ro]…,-(others)

这里面有几个必须要注意的:
a. mtd-id 必须要跟你当前平台的flash的mtd-id一致,不然整个mtdparts会失效
b. size在设置的时候可以为实际的size(xxM,xxk,xxG),也可以为’-’,这表示剩余的所有空间。

例如:
I)mtdparts=sa1100:-
flash 的mtd-id是sa1100,只有一个分区。

II)mtdparts=sa1100:256k(ARMboot)ro,-(root)
flash 的mtd-id是sa1100,有两个分区。其中第一个分区是readonly的。

III)mtdparts=fc000000.nor_flash:1920k(linux),128k(fdt),20M(ramdisk),4M(jffs2),38272k(user),256k(env),384k(uboot)
flash有七个分区。

如果是FLASH,按照FLASHTYPE来进行描述。
mtdparts=flashtype1:size(name),size(name),
…,-(others);flashtype2:size(name),size(name),
…,-(others);flashtype3:size(name),size(name),…,-(others);…

flashtype表示Flash类型。
SPI Flash对应取值hi_sfc,
Nand Flash对应取值hinand,

例如:mtdparts=hi_sfc:1M(boot);hinand:4M(baseparam),4M(pqparam),4M(logo),8M(kernel),96M(rootfs),-(others)
系统中的MTD,一块是SPIFLASH,一块是NANDFLASH。

如果是eMMC,那么分区划分格式是: blkdevparts=mmcblk0:size(name),size(name),…,-(others)
系统中有一个块设备,可以找到的设备名是/dev/block/mmcblk0。
这个mmcblk0,我们需要描述它的分区,那么就是用上述语句来描述。
分区的设备名就是/dev/block/mmcblk0p1,/dev/block/mmcblk0p2,/dev/block/mmcblk0p1…
以此类推。

注意:
当rootfstype为ext3/ext4时, rootfs分区的大小必须与文件系统镜像大小保持完全一致。

我们来讨论平常我经常使用的几种组合
(a)bootargs=initrd=0x800000,0xa00000 console=ttySAC0
root=/dev/ram0 rw mem=64M init=/linuxrc
启动盘是RAMDISK格式镜像,且直接就在内存中,位置在0x800000,大小是10M。
控制台使用ttySAC0,默认波特率。
rootfs挂载点是/dev/ram0,也就是我们的memory image。可读可写。
kernel mem限制为64M。
启动后,从rootfs中寻找第一个初始化脚本执行,文件是/linuxrc。

(b) bootargs=mem=32M console=ttyS0,115200n8
root=/dev/ram rw init=/linuxrc
kernel mem限制为32M。
控制台使用ttyS0,波特率115200。
rootfs挂载点是/dev/ram。可读可写。由于没有指定initrd,所以这个RAMDISK镜像存在FLASH中。
启动后,从rootfs中寻找第一个初始化脚本执行,文件是/linuxrc。
注意,这种情况下你应该要在bootm命令中指定ramdisk镜像在flash中的地址。

(c)bootargs=mem=32M console=ttyS0,115200n8
noinitrd root=/dev/mtdblock2 rw rootfstype=jffs2 init=/linuxrc
kernel mem限制为32M。
控制台使用ttyS0,波特率115200。
启动盘不是ramdisk格式镜像,而是别的文件系统类型。
rootfs挂载点是/dev/mtdblock2。可读可写。文件系统是jffs2类型的。
启动后,从rootfs中寻找第一个初始化脚本执行,文件是/linuxrc。

(d)bootargs=console=ttyPS0,115200n8 noinitrd
root=/dev/mmcblk0p2 rw rootfstype=ext4 rootwait
控制台使用ttyPS0,波特率115200,无校验,8比特。
启动盘不是ramdisk格式镜像,而是别的文件系统类型。
rootfs挂载点是/dev/mmcblk0p2,eMMC的第二个分区,文件系统是ext4。启动时,等待设备节点启动后,再挂载rootfs。

(e)bootargs=mem=64M console=ttySAC0
noinitrd root=/dev/nfs nfsroot=192.168.0.3:/nfs ip=192.168.0.5:192.168.0.3:192.168.0.3:255.255.255.0::eth0:off
kernel mem限制为64M。
控制台使用ttySAC0,波特率默认。
启动盘不是ramdisk格式镜像,而是别的文件系统类型。
rootfs挂载点是/dev/nfs。nfsroot地址是192.168.0.3:/nfs。
IP是192.168.0.5
SERVERIP是192.168.0.3
GATEWAY是192.168.0.3
NETMASK是255.255.255.0
HOSTNAME是NULL
NETIF是eth0
off描述结束

(f)bootargs=noinitrd mem=64M console=ttySAC0
root=/dev/nfs nfsroot=192.168.0.3:/nfs
ip=192.168.0.5
同上,简化版,只设置IP,其他未设置。

(g)bootargs=noinitrd mem=64M console=ttySAC0
root=/dev/nfs nfsroot=192.168.0.3:/nfs
ip=:::::eth0:dhcp
同上,简化版,设置IP获取方式为DHCP。

(h)bootargs=noinitrd console=ttySAC0
root=/dev/nfs nfsroot=192.168.1.88:/home/le/workspace/rootfs ip=192.168.1.70:192.168.1.88:192.168.1.88:255.255.255.0:linux.arm9.net:eth0:off
各参数的含义如下:
nfsroot 是开发主机的NFS服务文件夹。
“ip=”后面:
第一项(192.168.1.70)是目标板的临时 IP(注意不要和局域网内其他 IP 冲突);
第二项(192.168.1.104)是开发主机的 IP;
第三项(192.168.1.104)是目标板上网关(GW)的设置;
第四项(255.255.255.0)是子网掩码;
第五项是开发主机的名字(一般无关紧要,可随便填写)
eth0 是网卡设备的名称。

原文地址:https://www.cnblogs.com/sky-heaven/p/13750875.html