您的位置:首页 > 运维架构 > Linux

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里就因为蛋与鸡的问题不能安装了?!
回答
首先,你要知道。你买的硬盘它只是一个硬件,它其中是一些硬件电路。而驱动程序,是软件,提供驱动程序的是,内核本身以及可加载内核模块。所以,在你安装操作系统的时候,那么内核及其相关的驱动就会被安装拷贝到硬盘。你所谓的自动安装:我的理解,第一:如果机器现在只有一张硬盘,那么你肯定要给它装操作系统,在这个             过程中,驱动(内核)存放在外部介质如光盘之中,安装就可以识别硬盘。第二:你现在机器已经在运行,有一块硬盘,你上第二块硬盘。硬盘不是热插拔的,你要重启,就回到了操作系统启动的加载驱动的过程。你要理解驱动只是一段程序……
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: