linux启动挂载rootfs的分析

(2009-11-07 21:54:52)

标签:

杂谈

1。linux启动时,经过一系列初始化之后,需要mount 根文件系统,为最后运行init进程等做预备,mount

根文件系统有这么几种方式: 字串4

1)文件系统已经存在于硬盘(或者类似的设备)的某个分区上了,kernel根据启动的命令行参数(root=/dev/xxx),直接进行mount。

这里有一个问题,在root文件系统本身还不存在的情况下,kernel如何根据/dev/xxx来找到对应的设备呢?注重:根文件系统和其他文件系统的

mount方式是不一样的,kernel通过直接解析设备的名称来获得设备的主、从设备号,然后就可以访问对应的设备驱动

了。所以在init/main.c中有很长一串的root_dev_names(如

hda,hdab,sda,sdb,nfs,ram,mtdblock……),通过这个表就可以根据设备名称得到设备号。注重,bootloader或内

核中设定的启动参数(root=/dev/xxx)只是一个代号,实际的根文件系统中不一定存在这个设备文件! 字串4

2)从软驱等比较慢的设备上装载根文件系统,假如kernel支持ramdisk,在装载root文件系统时,内核判定到需要从软盘(fdx)mount

(root=/dev/fd0),就会自动把文件系统映象复制到ramdisk,一般对应设备ram0,然后在ram0上mount

根文件系统。 从源码看,假如kernel编译时没有支持ramdisk,而启动参数又是root=/dev/fd0,

系统将直接在软盘上mount,除了速度比较慢,理论上是可行的(没试过,不知道是不是这样?) ARM开发论坛

3)启动时用到initrd来mount根文件系统。注重理解ramdisk和initrd这两个概念,其实ramdisk只是在ram上实现的块设备,

类似与硬盘操作,但有更快的读写速度,它可以在系统运行的任何时候使用,而不仅仅是用于启动;initrd(boot loader

initialized RAM

disk)可以说是启动过程中用到的一种机制,具体的实现过程也使用ramdisk技术。就是在装载linux之前,bootloader可以把一个比较

小的根文件系统的映象装载在内存的某个指定位置,姑且把这段内存称为initrd(这里是initrd所占的内存,不是ramdisk,注重区别),然后

bootloader通过传递参数的方式告诉内核initrd的起始地址和大小(也可以把这些参数编译在内核中),在启动阶段就可以暂时的用initrd

来mount根文件系统。initrd的最初的目的是为了把kernel的启动分成两个阶段:在kernel中保留最少最基本的启动代码,然后把对各种各

样硬件设备的支持以模块的方式放在initrd中,这样就在启动过程中可以从initrd所mount的根文件系统中装载需要的模块。这样的一个好处就是

在保持kernel不变的情况下,通过修改initrd中的内容就可以灵活的支持不同的硬件。在启动完成的最后阶段,根文件系统可以重新mount到其他

设备上,但是也可以不再 重新mount(很多嵌入式系统就是这样)。

initrd的具体实现过程是这样的:bootloader把根文件系统映象装载到内存指定位置,把相关参数传递给内核,内核启动时把initrd中的内

容复制到ramdisk中(ram0),把initrd占用的内存释放掉,在ram0上mount根文件系统。从这个过程可以看出,内核需要对同时对

ramdisk和initrd的支持(这种需要都编入内核,不能作为模块)。 ARM

2。嵌入式系统根文件系统的一种实现方法:对于kernel和根文件系统都存储在flash中的系统,一般可以利用linux启动的initrd的机制。

具体的过程前面已经比较清楚了,还有一点就是在启动参数中传递root=/dev/ram0,这样使得用initrd进行mount的根文件系统不再切

换,因为这个时候实际的设备就是ram0。还有就是initrd的起始地址参数为虚拟地址,需要和bootloader中用的物理地址对应。

分享:

喜欢

0

赠金笔

加载中,请稍候......

评论加载中,请稍候...

发评论

登录名: 密码: 找回密码 注册记住登录状态

昵   称:

评论并转载此博文

发评论

以上网友发言只代表其个人观点,不代表新浪网的观点或立场。

Linux中rootfs的作用,linux启动挂载rootfs的分析相关推荐

  1. Linux中写入union作用,Linux进程描述符中union的用法

    首先,它是 union thread_union { struct thread_info thread_info; unsigned long stack[THREAD_SIZE/sizeof(lo ...

  2. linux中感叹号的作用,Linux - 感叹号

    在Linux命令行下令人惊叹的惊叹号(!) ! 符号在 Linux 中不但可以用作否定符号,还可以用来从历史命令记录中取出命令或不加修改的执行之前运行的命令.下面的所有命令都已经在 Bash Shel ...

  3. Linux中kobject的作用,Linux设备驱动模型-- 数据结构Kset/KObject

    前言 Kset和kobject是Linux设备驱动模型中的核心数据结构,其主要作用是将系统中的设备抽象出来,以树状结构组织,方便系统统一管理. 而这个统一管理的地方,就是sysfs,先放一张示例图,阐 ...

  4. linux中umask的作用,LINUX UMASK详解

    一 权限掩码umask umask是chmod配套的,总共为4位(gid/uid,属主,组权,其它用户的权限),不过通常用到的是后3个,例如你用chmod 755 file(此时这文件的权限是属主读( ...

  5. linux中timer的作用,linux - linux / timer.h setup_timer()到期功能不起作用? - 堆栈内存溢出...

    因此,我的setup_timer()中的TimerExpire函数会引起巨大的恐慌(将在下面发布),而对TimerExpire()的常规函数​​调用实际上将输出我的输入. void TimerExpi ...

  6. linux中var的作用,linux中var是什么意思

    在搭建Kubernetes集群过程中,安装了kube-dns插件后,运行一个ubuntu容器,发现容器内无法解析集群外域名,一开始可以解析集群内域名,一段时间后也无法解析集群内域名. $ nslook ...

  7. linux中giep命令作用,Linux查看硬件信息以及驱动设备的命令

    用硬件检测程序kuduz探测新硬件:service kudzu start ( or restart) 查看CPU信息:cat /proc/cpuinfo 查看板卡信息:cat /proc/pci 查 ...

  8. linux中ifconfig命令作用,Linux下ifconfig命令详解

    Linux下网卡命名规律:eth0,eth1.第一块以太网卡,第二块.lo为环回接口,它的IP地址固定为127.0.0.1,掩码8位.它代表你的机器本身.相关文件在/etc/sysconfig/net ...

  9. linux中eq的作用,Linux shell中比较操作符“==”与“-eq”对比

    在Linux shell编程中,经常会用到判断字符串是否相等,可用于判断字符串是否相等的操作符有'-eq'(相等), '-ne'(不等于), '-lt'(小于), '-le'(小于或等于), '-gt ...

最新文章

  1. .NET引用类型与值类型
  2. 计算机仿真在机械应用,浅谈计算机仿真在机械的应用.doc
  3. ISDN与PSTN的区别是什么?
  4. Python如何在循环语句中加入两个变量_Python基础知识
  5. mysql 5.5 中创建的数据库名称全都是小写
  6. YOLO3实现对自身数据集的训练-YOLO3代码学习资料
  7. 关于python的闭包与装饰器的实验
  8. 2002. [HNOI2010]弹飞绵羊【LCT】
  9. 【数学建模】基于matlab GUI最小二乘法曲线拟合【含Matlab源码 492期】
  10. 传智黑马java基础学习——day14
  11. java微信公众号百度地图,微信企业号开发之微信考勤百度地图定位
  12. 快速JD获取eid和fp
  13. C# PDF的创建,替换文本,插入图片
  14. ad7606驱动及仿真
  15. Latex将文中的某一行设置成左对齐、右对齐
  16. 昨天,我的大学学习[5]--转载自:www.cstc.net.cn
  17. 计算机开机后黑屏 只有鼠标,电脑开机后一直黑屏只有一个鼠标,重启也是.怎么处理...
  18. 蓝桥杯 试题 算法训练 无聊的逗 C++ 详解 - 未完善
  19. Db2 load 导致表空间pengding
  20. “温莎当下 麦克成风”2021赛季杭州赛区决赛精彩收官

热门文章

  1. win10下samba提示windows无法访问
  2. 使用C#winform封装chrome浏览器
  3. java设置标签艺术字体颜色_Java 在Word文档中添加艺术字
  4. windows提示“你可能是盗版软件受害者”的解决方法
  5. 如何使用appletviewer
  6. s3550(config-if)#switchport mode access 的解释
  7. 什么是蓝牙适配器?它有哪些性能特点?-道合顺大数据Infinigo
  8. B75对应的服务器芯片组,两代主力 编辑带你看B75和H61相差多少
  9. 【前端知识体系】浏览器
  10. 有趣的CSS实现“勾号”