initramfs是什么_hdfs工作原理

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

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

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

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/169675.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 常用渗透测试工具(数据包渗透测试)

    BurpSuiteBurpSuite能高效率地与多个工具一起工作,例如:一个中心站点地图是用于汇总收集到的目标应用程序信息,并通过确定的范围来指导单个程序工作。在一个工具处理HTTP请求和响应时,它可以选择调用其他任意的Burp工具。例如:代理记录的请求可被Intruder用来构造一个自定义的自动攻击的准则,也可被Repeater用来手动攻击,也可被Scanner用来分析漏洞,或者被Spider(网络爬虫)用来自动搜索内容。应用程序可以是“被动地”运行,而不是产生大量的自动请求。Burp

    2022年4月18日
    121
  • java.lang.String cannot be cast to java.lang.Integer错误解决

    java.lang.String cannot be cast to java.lang.Integer错误解决java.lang.Stringcannotbecasttojava.lang.Integer错误解决当遇到t.service()forservlet[springmvc]incontextwithpath[]threwexception…java.lang.Stringcannotbecasttojava.lang.Integer上面是原来的代码,但是这里出现错与不能将object类型的数据库转成integer类型,可以使用Integer.valueOf(S

    2022年7月16日
    30
  • php页面最大执行时间 set_time_limit函数不起作用

    php页面最大执行时间 set_time_limit函数不起作用

    2021年10月18日
    36
  • 整理:数据库设计的六个阶段详解

    整理:数据库设计的六个阶段详解按照规范设计,我们将数据库的设计过程分为六个阶段:1、系统需求分析阶段;2、概念结构设计阶段;3、逻辑结构设计阶段;4、物理结构设计阶段;5、数据库实施阶段;6、数据库运行与维护阶段;每个阶段的详细解析如下:(资料来自:数据库设计(百度文库))一、系统需求分析阶段1、需求分析的任务2、需求分析的两种方法:自顶向下和自底向上二、概念结构设计三、逻辑结构设计

    2025年6月6日
    4
  • linux 刷流量ip,程序员同事问shell脚本刷流量,不讨巧帮他填了一个巨坑

    linux 刷流量ip,程序员同事问shell脚本刷流量,不讨巧帮他填了一个巨坑程序员同事闲来无事问我可以用shell脚本写个刷微博访问量的没。于是脑海里想起了病毒营销或者fork×××这些词。依稀操刀稀松吧啦的写了起来。并测试了下,脚本内容是下面这样的:脚本跑起来的样子当然仅仅是为了展示shell脚本威力。当然还是希望大家靠实际的阅读量。拿微信公众号来说,刷量增粉的很多。同样笔者手里也有些软件。但一次都没有使用过。以来防止被中马,二来做人如果都急功近利.光追求虚妄的东西而没…

    2022年9月29日
    2
  • typora文章同步(跨平台)

    typora文章同步(跨平台)typora实现备份个人博客一、图片上传PicGo有提供默认的图床,可以直接使用,但是有上传的限制,有特定要求的可以自己配置github图床。1.配置github图床利用github搭建图床2.安装PicGo下载链接windows选择exe结尾文件即可mac选择dmg为后缀的文件安装的时候一路next即可。3.在picGo中配置使用github图床4.picGo设置开启时间戳重名防止图片上传出错ps:我当时一直传输失败,修改代理,重新生成厂库,toke

    2022年5月19日
    132

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号