linux下的initrd问题~
2014-12-16 14:41
113 查看
initrd里面有些驱动程序用已安装驱动的,我对这个驱动这块不明白,主要是平时我们插入硬盘时直接硬盘自动安装驱动为什么在linux里
就不能自动安装驱动还需要把相应的驱动程序拿出来单独放在一个地方?!
首先来说,很多驱动程序并没有被编译进内核,而是作为一个LKM存在,这样减轻了内核的负担也增加了驱动加载的灵活性。
再来,对于initrd---全名init ram disk,它确切的来说使用一个文件模拟的一个磁盘分区,这个文件里面就放了一些必要的程序库,以及驱动程序模块。在linux驱动过程中,它最终要去挂载真正的根分区(物理分区),那么首先就要在内存中加载内核镜像和initrd文件,解压initrd文件以后,然后挂载这个模拟的文件系统,这个时候,就相当于用内存模拟了硬盘,而还没有真正接触到物理硬盘。所以,ram disk由此而来。然后,内核在ramdisk下,加载硬盘驱动,如scsi的,然后才能控制硬盘,挂载分区,并切换到真正的根分区之上……所以,initrd起到一个中间转换的作用,但据我所知,initrd也并非必须,比如ide的硬盘驱动直接编译进内核……你想,假如硬盘驱动没有被编译进内核,那么在启动操作的系统的过程中,需要驱动,但是驱动程序又存放在了硬盘之上,但是你又没有加载硬盘驱动不能访问硬盘,则不是陷入了一个矛盾的问题嘛,所以,用内存模拟硬盘来存放驱动,然后加载就可以访问硬盘了……不能说不佩服这些大神说了个大概,可以多多交流一下 。不明白可以high我追问
我不明白的是平时我们新买的一块硬盘刚插入计算机时会自动安装相关驱动程序,如果是一个新型的硬盘,电脑里没有他的相关驱动而驱动在硬盘里这就是蛋和鸡的问题,可为什么它会自动安装而在linux里就因为蛋与鸡的问题不能安装了?!回答
首先,你要知道。你买的硬盘它只是一个硬件,它其中是一些硬件电路。而驱动程序,是软件,提供驱动程序的是,内核本身以及可加载内核模块。所以,在你安装操作系统的时候,那么内核及其相关的驱动就会被安装拷贝到硬盘。你所谓的自动安装:我的理解,第一:如果机器现在只有一张硬盘,那么你肯定要给它装操作系统,在这个 过程中,驱动(内核)存放在外部介质如光盘之中,安装就可以识别硬盘。第二:你现在机器已经在运行,有一块硬盘,你上第二块硬盘。硬盘不是热插拔的,你要重启,就回到了操作系统启动的加载驱动的过程。你要理解驱动只是一段程序……
相关文章推荐
- Linux下Java程序中中文显示的一些问题的总结
- Linux网络管理员手册(2) 第二章 TCP/IP网络的问题 IP地址 子网(Subnetworks) 域名服务器 解析
- linux下安装java版本的问题
- 有问题?朝这儿看 !!! LINUX 常见问题1000个详细解答[精华版]
- linux常见问题(编程篇)
- 基于linux的嵌入IPv4协议栈的内容过滤防火墙系统(7)-尚未解决的问题
- linux下安装java版本的问题
- 在Linux下解决JBuilderX的中文输入和光标错位问题
- linux下文件和文件夹权限的一些问题
- linux Q&A of I18N and L10N linux中文问题
- Linux问题集
- 朋友的一个问题:Linux开机如何自动运行自己编写好的shell脚本
- vmvware 在linux2.6内核下不能启动本机的问题
- Linux权限问题_10_4:
- 也谈 Windows VS Linux:只有傻瓜才会纠缠不清的问题
- linux经典问题==网络篇【绝对转载】
- Resin安装,配置和在Linux上的自动启动问题
- 在Linux(Fedora Core 2)下编译uC/OS-II的问题!
- linux常见问题(网络篇)
- linux常见问题(网络篇)