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="<path_to>/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启动分析之Initramfs

    在前面已经分析了rootfs的挂载,解决了VFS架构下原始挂载点的问题,也提到了Initramfs文件包的填充,这里记下如何实现Initramfs填充 一.Initramfs概述 1.initrd 在 ...

  2. initramfs/initrd

    initramfs概述 initramfs与initrd类似,也是初始化好了且存在于ram中的,可以压缩也可以不压缩.但是目前initramfs只支持cpio包格式,它会被populate_rootf ...

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

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

  4. Linux系统Initramfs机制

    概述 现代Linux系统都使用到了一种功能比较特殊的微型系统,作为Linux内核初始化完成但未进入最终系统时的过渡系统,主要的目的是为了将最终系统载入到根文件系统上,辅助内核启动最终系统,可以称之为& ...

  5. 高通平台启动log概述(PBL log、sbl1 log、kernel log)

    高通平台启动log概述(PBL log.sbl1 log.kernel log) 在嵌入式linux的调试过程中log有着至关重要的地位,等同于医生的CT报告.能够熟悉启动各个阶段的log,如PBL阶 ...

  6. u盘版linux initramfs,探索Linux系统的启动过程

    阅读目录 引言 Linux启动过程概述 Grub加载Linux内核和initramfs 探索initramfs文件的方法 基于systemd的init系统 进入图形界面 这篇文章有点长,我花了大约两个 ...

  7. Linux系统内核概述

    Linux 内核是一种开源的类 Unix 操作系统宏内核. Linux 内核是 Linux 操作系统的主要组件,也是计算机硬件与其进程之间的核心接口.它负责两者之间的通信,还要尽可能高效地管理资源.之 ...

  8. Java 多线程概述

    多线程技术概述 1.线程与进程 进程:内存中运行的应用程序,每个进程都拥有一个独立的内存空间. 线程:是进程中的一个执行路径,共享一个内存空间,线程之间可以自由切换.并发执行,一个进程最少有一个线程, ...

  9. 【SpringMVC】概述

    概述: SpringMVC:是基于spring的一个框架, 实际上就是spring的一个模块, 专门是做web开发的.                       理解是servlet的一个升级 Sp ...

最新文章

  1. centos装oracle6,CentOS-6.7下安装Oracle11g
  2. SQL改變字符串標識符
  3. BZOJ5137lg4081(广义后缀自动机,set启发式合并)
  4. javascript中涉及到汉字的比较
  5. 《IBM-PC汇编语言程序设计》(第2版)【沈美明 温冬婵】——自编解析与答案
  6. golang mysql demo
  7. 作者:陈卫, 男, 微软亚洲研究院高级研究员, 清华大学客座教授。
  8. 10-200-022-使用-概念-并行度Parallelism
  9. matlab jar包,Matlab 將m文件打包成jar包 (二)使用jar包
  10. vim 添加到右键 windows
  11. mysql 痛点_2017年五个最常见Linux的痛点,你了解吗?
  12. oracle中外键的使用方法,Oracle数据库中外键的相关操作整理
  13. windows2003——工作组和域控制器
  14. 微分方程和差分方程的区别与联系
  15. 游戏编程入门步骤,想不到吧.
  16. 推贴B2B/B2C订货商城系统 V3.0版
  17. 电子邮件邮箱怎么设置签名?手机邮箱签名设置攻略
  18. 2020最新注册卡密微信在线充值购卡功能(适用于各种网络验证开发)【易语言源码】
  19. 学习笔记-部署和管理DPM 2016-04文件和应用程序保护
  20. 一个近乎完美的Unity全平台原生c#热更方案

热门文章

  1. 【STM32】NVIC 中断优先级管理,抢占优先级,响应优先级,中断寄存器
  2. 【Qt网络编程】实现TCP协议通信
  3. 损失函数 - 交叉熵损失函数
  4. linux下安装安装jdk和安装android studio
  5. win10如何修改锁屏(欢迎界面)的用户名
  6. matlab对信号的滤波方法
  7. 关于CreateParams的参数
  8. 打印、报表和文档-家谱树
  9. RISC-V指令集架构特点及其总结
  10. fgets函数的用法