initramfs概述 
initramfs与initrd类似,也是初始化好了且存在于ram中的,可以压缩也可以不压缩。但是目前initramfs只支持cpio包格式,它会被populate_rootfs->unpack_to_rootfs(&__initramfs_start, &__initramfs_end - &__initramfs_start, 0)函数(解压缩、)解析、安装。

initramfs与initrd区别 
(1) Linux内核只认cpio格式的initramfs文件包(因为unpack_to_rootfs只能解析cpio格式文件),非cpio格式的 initramfs文件包将被系统抛弃,而initrd可以是cpio包也可以是传统的镜像(image)文件,实际使用中initrd都是传统镜像文件。

(2) initramfs在编译内核的同时被编译并与内核连接成一个文件,它被链接到地址__initramfs_start处,与内核同时被 bootloader加载到ram中,而initrd是另外单独编译生成的,是一个独立的文件,它由bootloader单独加载到ram中内核空间外的地址,比如加载的地址为addr(是物理地址而非虚拟地址),大小为8MB,那么只要在命令行加入”initrd=addr,8M”命令,系统就可以找到 initrd(当然通过适当修改Linux的目录结构,makefile文件和相关代码,以上两种情况都是可以相通的)。

(3) initramfs被解析处理后原始的cpio包(压缩或非压缩)所占的空间(&__initramfs_start - &__initramfs_end)是作为系统的一部分直接保留在系统中,不会被释放掉,而对于initrd镜像文件,如果没有在命令行中设置”keepinitd”命令,那么initrd镜像文件被处理后其原始文件所占的空间(initrd_end - initrd_start)将被释放掉。

(4) initramfs可以独立ram disk单独存在,而要支持initrd必须要先支持ram disk,即要配置CONFIG_BLK_DEV_INITRD选项 – 支持initrd,必须先要配置CONFIG_BLK_DEV_RAM – 支持ram disk ,因为initrd image实际就是初始化好了的ramdisk镜像文件,最后都要解析、写入到ram disk设备/dev/ram或/dev/ram0中。 
注: 使用initramfs,命令行参数将不需要”initrd=”和”root=”命令? YES

initramfs利弊:

由于initramfs使用cpio包格式,所以很容易将一个单一的文件、目录、node编译链接到系统中去,这样很简单的系统中使用起来很方便,不需要另外挂接文件系统。 
但是因为cpio包实际是文件、目录、节点的描述语言包,为了描述一个文件、目录、节点,要增加很多额外的描述文字开销,特别是对于目录和节点,本身很小额外添加的描述文字却很多,这样使得cpio包比相应的image文件大很多。

使用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 
    Device Drivers —> 
    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. 内核配置不需要ram disk;也不需要配置initramfs或者initrd 
    [ ] Initial RAM filesystem and RAM disk (initramfs/initrd) support

注: boot的FLASH分区要和kernel的FLASH分区匹配(而非一致),需要进一步解释。

TCP reno registered 停在这里

rootfs太大,检测发现rootfs下有垃圾(里面有包含了一份rootfs)

下面这个大小启动成功了

root@zengxiaolong:/home/zengxiaolong/soft/s3c2410/rootfs# du -h 
4.0K ./dev 
4.0K ./tmp 
8.0K ./etc/init.d 
40K ./etc 
4.0K ./usr 
4.0K ./var 
4.0K ./sbin 
2.1M ./bin 
4.0K ./sys 
116K ./lib/modules 
2.8M ./lib 
4.0K ./proc 
4.9M .

initrd and initramfs

http://blog.sina.com.cn/s/blog_622013d90100fr04.html

#

General setup


… 
CONFIG_BLK_DEV_INITRD=y 
CONFIG_INITRAMFS_SOURCE=”/target_fs>” 
… 
#

UBI - Unsorted block images


… 
CONFIG_BLK_DEV_RAM=y 
CONFIG_BLK_DEV_RAM_COUNT=1 
CONFIG_BLK_DEV_RAM_SIZE=8192 
CONFIG_BLK_DEV_RAM_BLOCKSIZE=1024

Installation initramfs

No special installation like with initrd is necessary. The initramfs is already in the kernel. If you start the kernel, the initramfs is already there. Therefore, there is no root=/dev/ram0 rw initrd=0x87000000,8M bootargs option necessary. Remove this if you still have it!

http://blog.chinaunix.net/uid-488742-id-2113871.html

initramfs 根文件系统相关推荐

  1. Linux——根文件系统的制作(jffs2 and ubifs)

    一.根文件系统简介 根文件系统首先是一种文件系统,该文件系统不仅具有普通文件系统的存储数据文件的功能,但是相对于普通的文件系统而言它还是内核启动时所挂载(mount)的第一个文件系统,系统引导启动程序 ...

  2. 嵌入式Linux根文件系统制作

    嵌入式Linux根文件系统制作 一.根文件系统简介 根文件系统首先是一种文件系统,该文件系统不仅具有普通文件系统的存储数据文件的功能,但是相对于普通的文件系统而言它还是内核启动时所挂载(mount)的 ...

  3. Linux-2.6.32.2内核在mini2440上的移植(四)---根文件系统制作(1)

    移植环境(红色粗字体字为修改后内容,蓝色粗体字为特别注意内容) 1,主机环境:VMare下CentOS 5.5 ,1G内存. 2,集成开发环境:Elipse IDE 3,编译编译环境:arm-linu ...

  4. linux启动根文件系统

    linux根文件系统启动方式 linux目前我所知道有3种启动文件系统的方式 1.从ramdisk根文件系统启动 这种方法需要 制作ramdisk文件系统压缩包 然后将这个文件压缩包通过bootloa ...

  5. UBIFS根文件系统制作

    一.UBIFS文件系统简介 UBIFS(Unsorted Block Image File System)无序区块镜像文件系统是用于固态存储设备上,UBIFS在设计与性能上均较YAFFS2.JFFS2 ...

  6. JFFS2根文件系统制作

    一.根文件系统简介 根文件系统首先是内核启动时所mount的第一个文件系统,内核代码映像文件保存在根文件系统中,系统引导启动程序会在根文件系统挂载之后从中把一些初始化脚本(如inittab.rcS)和 ...

  7. ramdisk根文件系统+initramfs

    这几天做了下ramdisk根文件启动实验,小结下. 测试环境:Ubuntu 12.04 首先我认为先制作根文件系统好,因为配置内核中有一项跟你制作的ramdisk大小有关. 这里我是直接使用原先制作好 ...

  8. 根文件系统(三)——initramfs文件系统制作

    什么是initramfs文件系统? 在 根文件系统分类 章节中讲述了内核会去挂载一个特殊的rootfs,然后再通过解析"root=xxx"命令行,去挂载 /dev/xxx 真正的根 ...

  9. 嵌入式根文件系统制作

    1:文件系统分类:    基于flash的文件系统:flash有两种,一种是NOR,另一种NAND.NOR型 FLASH主要用于存放程序.NAND型 FLASH主要用于存放数据.NOR的特点是可在芯片 ...

  10. Linux内核3.0移植并基于Initramfs根文件系统启动

    Linux内核移植与启动 Target borad:FL2440 Bootloader:U-boot-2010.09 交叉编译器:buildroot-2012.08 1.linux内核基础知识 首先, ...

最新文章

  1. 图像在计算机中通过什么方式表示_万物皆可“计算机视觉”
  2. PAT1036:Boys vs Girls
  3. java数字相减_Java的百日计划(day14)
  4. Windows上的原生Linux容器(盆盆的Kubecon课程分享)
  5. 前端学习(1187):双向数据绑定2
  6. Git 各指令的本质,真是通俗易懂啊
  7. 图片随意移动,可以拖动图片计算
  8. Junit框架使用(4)--JUnit常用断言及注解
  9. mysql建用户无密码_mysql 新建用户,授权,删除用户,修改密码
  10. 二进制搜索树(BSTs) 和AVL 树
  11. DNS劫持使用DNS加速有哪些作用
  12. html5 p 字号,五号字是多少pt?
  13. selenium在爬虫领域的初涉(自动打开网站爬取信息)
  14. 【计算机网络】1、为什么要学习计算机网络基础
  15. pd.concat实现数据合并
  16. Excel中vlookup模糊查找的妙用(模糊匹配)
  17. 【有效】最新爬取音乐,纯接口访问实现。Python3、requests、美丽汤、tqdm实战
  18. spoolsv病毒的清除
  19. 一张图片,根据区域,跳转不同链接
  20. linux系统会流畅,号称流畅且最漂亮的Linux系统,成功让我放弃了windows 10!

热门文章

  1. HD 2177(威佐夫博弈 入门)
  2. Oracle_用户管理
  3. html div 画半圆,css画变形的半圆
  4. mysql8.0.15源码linux_源码安装mysql8.0.20
  5. 普通用户从非80端口启动tomcat,通过端口转发监听80端口
  6. chrome访问不了go语言中文网
  7. 2017-2018-1 20155229 《信息安全系统设计基础》第八周学习总结
  8. Hive学习之六 《Hive进阶— —hive jdbc》 详解
  9. JSON之Asp.net MVC C#对象转JSON,DataTable转JSON,ListT转JSON,JSON转ListT,JSON转C#对象...
  10. 您知道数据中心的最佳温度是多少吗?