bootargs--内核启动参数介绍

bootargs--内核启动参数介绍


bootargs 是 bootloader 传递给内核的启动字符串。

****************************************
甲:bootargs,常用的几种组合:
****************************************
1). 假设文件系统是ramdisk,且直接就在内存中,bootargs的设置应该如下:
setenv bootargs ‘initrd=0x32000000,6M root=/dev/ram0 console=ttySAC0 init=/linuxrc’

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


3). 假设文件系统是jffs2类型的,且在flash中,bootargs的设置应该如下
setenv bootargs ‘noinitrd root=/dev/mtdblock2 rw rootfstype=jffs2 init=/linuxrc console=ttyS0,115200’
文件系统默认是ext2, 就不用写了

4). 假设文件系统是基于nfs的,bootargs的设置应该如下
setenv bootargs ‘noinitrd mem=64M console=ttySAC0 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’
或者
setenv bootargs ‘noinitrd mem=64M console=ttySAC0 root=/dev/nfs nfsroot=192.168.0.3:/nfs ip=192.168.0.5’


****************************************
乙: initramfs 和 initrd
****************************************
1.initramfs在编译内核的同时被编译并与内核连接成一个文件,它被链接到地址__initramfs_start处,与内核同时被 bootloader加载到ram中
使用initramfs,命令行参数将不需要"initrd="和"root="命令.

initrd是另外单独编译生成的,是一个独立的文件,它由bootloader单独加载到ram中内核空间外的 地址,
例如加载的地址为addr(是物理地址而非虚拟地址),大小为8MB,
那么只要在命令行加入"initrd=addr,8M"命令,系统就可以找到 initrd

2.Linux内核只认cpio格式的initramfs文件包

3.

initramfs不依赖单独ramdisk,

initrd依赖ram disk,需要配置

CONFIG_BLK_DEV_RAM

CONFIG_BLK_DEV_INITRD选项 -- 支持initrd,



------------------------------------------------------
使用initramfs的内核配置(使用initramfs做根文件系统):
------------------------------------------------------
General setup  --->
[*] Initial RAM filesystem and RAM disk (initramfs/initrd) support
(/rootfs_dir) Initramfs source file(s)   //输入根文件系统的所在目录

使用initramfs的内核启动参数
不需要"initrd="和"root="参数,但是必须在initramfs中创建/init文件或者修改内核启动代码
(init 文件是软连接,指向什么? init -> bin/busybox,否则内核启动将会失败)

链接入内核的initramfs文件在linux-2.6.24/usr/initramfs_data.cpio.gz


------------------------------------------------------
使用initrd的内核配置(使用网口将根文件系统下载到RAM -- tftp addr ramdisk.gz):
------------------------------------------------------
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
注:
(1) addr是根文件系统的下载地址;
(2) 0x400000是根文件系统的大小,该大小需要和内核配置的ramdisk size 4096 kbytes相一致;
(3) /dev/ram是ramdisk的设备节点,rw表示根文件系统可读、可写;


------------------------------------------------------
根文件系统存放在FLASH分区:
------------------------------------------------------
1. 内核启动参数不需要"initrd="(也可以写成"noinitrd");
root=/dev/mtdblock2 (/dev/mtdblock2 -- 根文件系统所烧写的FLASH分区)

2. 内核配置不需要ramdisk;也不需要配置initramfs 或者initrd
[ ] Initial RAM filesystem and RAM disk (initramfs/initrd) support

****************************************
丙: initramfs 利弊
****************************************
1. 利 -- > 简单, 不需要其他文件了
2. 弊 -- > 浪费内存
a. cpio包实际是文件、目录、节点的描述语言包,为了描述一个文件、目录、节点,要增加很多额外的描述文字开销,
特别是对于目录和节点,本身很小 额外添加的描述文字却很多,这样使得cpio包比相应的image文件大很多
b. initramfs 占用内存不能被释放, initrd 占用内存可以被释放


----------------------------------------
补充: 内存盘技术
----------------------------------------
把Linux系统完全嵌入到内存中,而不依赖于任何其他硬盘。现在PC机内存至少128M,而根文件系统所用的只有 30MB,
因此不仅不会使整机性能下降,反而有很大的提高

ramdisk: 是一种基于内存的虚拟磁盘技术,采用ext2文件系统, 把内存当磁盘用
initrd:  bootloader可以把一个比较小的根文件系统的映象装载在内存的某个指定位置,
姑且把这段内存称为initrd,然后通过传递参数的方式告诉内核initrd的起始地址和大小(也可以把这些参数编译在内核中),
在启动阶段就可以暂时的用initrd来mount根文件系统
initramfs: 支持cpio格式文件, 直接把镜像编译进内核的方式。


  • 2
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值