Chinaunix

标题: 编译内核成功,mkinitrd失败。。。。。。 [打印本页]

作者: futuregod    时间: 2006-03-16 11:55
标题: 编译内核成功,mkinitrd失败。。。。。。
我编译了一个FC3的系统,
make mrproper;
make xconfig;
make ;
make modules_install;
cp /usr/src/linux-2.6.9/arc/i386/boot/bzImage /boot/vmlinuz-2.6.9
cp /usr/src/linux-2..9/System.map /boot/System.map-2..9
cd /boot
以上命令都成功。
在mkinitrd initrd-2.6.9.img 2.6.9时出错,错误如下:
No module sata_promise found for kernel 2.6.9.

FC3系统硬盘是SCSI,在/etc/modprobe.conf 中有 alias sata_promise .....
有的不记得了。在mkinitrd 时会加载相应的驱动,在启动的时候为内核服务。
但是make结束后sata_promise.o就在/usr/src/linux-2.6.9/driver/scsi/目录里。
mkinitrd 命令就是找不到。请问这是为什么?
我分别把sata_promise的选项编进内核和作为模块加载,但都出现了以上的错误。请高手指点!谢谢!
作者: egret    时间: 2006-03-16 14:29
你试过用新kernel启动吗?
作者: mageguoshi    时间: 2006-03-16 14:30
LZ是在VMWare下编译的么?
作者: futuregod    时间: 2006-03-16 16:49
我是直接在FC3下编译的.
我没有用新的kernel启动过,因为我认为是起不起来的,我的硬盘是SCSI的.如果这一步不成功的话,新内核在启动时应该没有可能找不到一些驱动程序或模块.这是我想的.因为我在man mkinitrd 时看到
mkinitrd - creates initial ramdisk images for preloading modules

mkinitrd  creates filesystem images which are suitable for use as Linux
       initial ramdisk  (initrd)  images.  Such  images  are  often  used  for
       preloading  the  block device modules (such as IDE, SCSI or RAID) which
       are needed to access the root filesystem. mkinitrd automatically  loads
       filesystem   modules   (such   as  ext3  and  jbd),  IDE  modules,  all
       scsi_hostadapter entries and all modules in a probeall scsi_hostadapter
       ..  line  in  /etc/modules.conf,  and raid modules if the system's root
       partition is on raid, which makes it simple to build  and  use  kernels
       using modular device drivers.
Any  module  options  specified  in /etc/modules.conf are passed to the
       modules as they are loaded by the initial ramdisk.

这段英文应该很易懂,讲的是在mkinitrd 的作用,.img文件在kernel启动时有非常重要的作用.
不过我马上试一下在mkinitrd没有成功的情况下,系统用新的kernel能不能启动.希望各位不吝赐教.
万分感谢!!
作者: futuregod    时间: 2006-03-17 17:34
标题: 有人知道这方面的知识吗?
有人知道这方面的知识吗?
作者: zyzf    时间: 2006-03-17 17:36
不创建这个文件
直接在 root=/dev/你的跟分区就可以了
作者: futuregod    时间: 2006-03-17 17:49
标题: 谢谢你的指点
麻烦你能说清楚一些吗,我是新手.

还有就是关于.img文件,在创建这个文件的时候可以把某个linux没有带的驱动也编进这
个.img文件.我想要利用这个特性来支持linux没有的驱动硬件.所以我以后还是避不了这一步.

谢谢高手的指点!
作者: connet    时间: 2006-03-17 18:59
原帖由 zyzf 于 2006-3-17 17:36 发表
不创建这个文件
直接在 root=/dev/你的跟分区就可以了

不要误导人,这样不行的。

看看 depmod
作者: egret    时间: 2006-03-17 19:05
原帖由 futuregod 于 2006-3-16 16:49 发表
我是直接在FC3下编译的.
我没有用新的kernel启动过,因为我认为是起不起来的,我的硬盘是SCSI的.如果这一步不成功的话,新内核在启动时应该没有可能找不到一些驱动程序或模块.这是我想的.因为我在man mkinitrd 时看到 ...

我自用2.6的kernel以来从未用过mkinitrd,一般将bzImage拷到/boot里便可以启动。所以你不妨一试。
不过
  • Enable loadable module support和
  •    Automatic kernel module loading的选项得编进kernel。
    作者: futuregod    时间: 2006-03-17 19:49
    标题: 谢谢各位高手的指点!!
    谢谢egret,connet,zyzf!
    我会去尝试的!
    作者: lunchan    时间: 2006-03-17 20:23
    2.6好像不用像2.4那般繁複,直接make install,grub和initrd都建立修改好了
    作者: futuregod    时间: 2006-03-18 10:49
    那原来的内核会被覆盖掉吗?
    如果原来可以启动的内核被覆盖,不成功的话岂不是系统就起不来啦.
    看来要先一下.
    谢谢了!!
    作者: lunchan    时间: 2006-03-18 11:29
    原帖由 futuregod 于 2006-3-18 10:49 发表
    那原来的内核会被覆盖掉吗?
    如果原来可以启动的内核被覆盖,不成功的话岂不是系统就起不来啦.
    看来要先一下.
    谢谢了!!

    不會,新內核和舊內核在grub選單中是二個選項,現有的在/boot中的內核亦不會被覆蓋
    作者: futuregod    时间: 2006-03-18 16:04
    非常感谢!
    作者: egret    时间: 2006-03-18 16:21
    原帖由 futuregod 于 2006-3-18 10:49 发表
    那原来的内核会被覆盖掉吗?
    如果原来可以启动的内核被覆盖,不成功的话岂不是系统就起不来啦.
    看来要先一下.
    谢谢了!!

    拷贝的时候改个不同的名称就不会被覆盖了。
    作者: ywergs    时间: 2006-03-18 19:30
    其实,你只要make install
    在boot中的东西就基本有了!
    作者: futuregod    时间: 2006-03-19 18:20
    我用mkinitrd 命令是有目的的,因为我还需要把一个linux中还没有的驱动程序在mkinitrd 的时候当作模块加入到.img文件中,当然要先编译成目标文件,这样就可以在系统启动后就支持该硬件了。

    其实我要完成的功能就是要在新编译好的内核中添加一个特定硬件的驱动,但这个驱动又是linux中的drivers文件夹里没有的。

    请问各位有什么建议吗?

    非常感谢!!
    作者: egret    时间: 2006-03-19 19:02
    什么驱动?是启动必需的吗?
    P.S.SATA_PROMISE内核里有的:
    -> Device Drivers                                                                            │
      │       -> SCSI device support                                                        |
      │         -> SCSI device support (SCSI [=y])                                    │
      │           -> SCSI low-level drivers                                                  │

    [ 本帖最后由 egret 于 2006-3-19 19:20 编辑 ]
    作者: futuregod    时间: 2006-03-20 09:31
    不是启动必须的,但是出于安全性的考虑最好是将它编译进内核.
    我也知道可以将其编译为模块,在启动后用脚本将其带入内核,但是如果有人把脚本改了,那么硬件就不能被支持了.所以最好还是编译进内核.
    各位高手有何高招?
    谢谢!
    作者: yidou    时间: 2006-03-20 12:46
    你明明是kernel 2.6, module名应该是sata_promise.ko, 你只有sata_promise.o. 当然是提示找不到module了
    作者: egret    时间: 2006-03-20 13:44
    原帖由 futuregod 于 2006-3-20 09:31 发表
    不是启动必须的,但是出于安全性的考虑最好是将它编译进内核.
    我也知道可以将其编译为模块,在启动后用脚本将其带入内核,但是如果有人把脚本改了,那么硬件就不能被支持了.所以最好还是编译进内核.
    各位高手有何高招 ...

    既是这样,那就编进去呗,干吗还要mkinitrd?
    作者: futuregod    时间: 2006-03-20 18:30
    标题: 好消息!我的FC3内核编译成功了!
      今天下午我又去编译我的FC3了。
    我的解决方法:
      由于是在mkinitrd 时出现的问题,所以我就根据提示找到了sata_promise所在的目录,里面确实没有sata_promise.ko 出错提示是说没有找到sata_promise的模块。所以我把sata_promise编译成模块。我原来是直接编进内核的。
       后来在mkinitrd 的时候又出现问题,说ata_piix的模块没有找到。我就又重新编译内核,把ata_piix编译成内核,后来我发现在/etc/modprobe.conf的文件里都有这sata_promise和ata_piix,而且ata_piix在sata_promise后,所以我就把/etc/modprobe.conf文件里的提到的都编译成模块,别怕,一共只有四个。:)
          /etc/modprobe.conf文件是模块的配置文件,具体的内容可以man modprobe.conf;
             make install后,启动内核,又有错误提示:
          unable to find device-mapper .....................
    我只好上网在查,一个偶然在一个内核编译的网页发现内核的配置项里有device-mapper support 的选项;我喜出望外,make xconfig 后发现我把这个选项关了。选上后编译成功,make install后reboot.
    OK!!
    在这里我要多谢各位帮忙,不然我还不知道要摸索到什么时候呢!
    万分感谢!
    egret,mageguoshi,zyzf,connect,lunchan,ywergs,yidou.
    感谢你们!我会继续努力!
    作者: weizhishu    时间: 2006-03-21 10:41
    2.6根本不用mkinitrd,编译过N次2.6内核了,编译完生成的System.map拿过去用就行了,如果你在编译时根本就没有选动态插入的模块,连System.map都不用要,只一个内核文件就行。
    作者: futuregod    时间: 2006-03-21 11:20
    多谢指点!

    作者: yidou    时间: 2006-03-22 10:18
    原帖由 weizhishu 于 2006-3-21 10:41 发表
    2.6根本不用mkinitrd,编译过N次2.6内核了,编译完生成的System.map拿过去用就行了,如果你在编译时根本就没有选动态插入的模块,连System.map都不用要,只一个内核文件就行。

    如果把系统安装在scsi设备上, 还是需要mkinitrd.
    作者: 孙轩    时间: 2006-03-22 11:36
    module-init-tools
    作者: keenor    时间: 2006-03-22 15:21
    这跟module-init-tools 两码事
    他是没mkinitrd命令,这个命令不在module-init-tools 中,module-init-tools 包括insmod,rmmod等
    作者: egret    时间: 2006-03-22 19:51
    原帖由 yidou 于 2006-3-22 10:18 发表

    如果把系统安装在scsi设备上, 还是需要mkinitrd.

    编成模组要,编进内核就不需要。
    作者: SkyMoonBoy    时间: 2006-04-02 12:48
    标题: 2.6内核要求升级mkinitrd
    2.6内核要求升级mkinitrd
    在源代码的Document .../Chang 里有说明
    在天网找一个就好了

    [ 本帖最后由 SkyMoonBoy 于 2006-4-2 12:50 编辑 ]
    作者: connet    时间: 2006-04-05 22:12
    原帖由 weizhishu 于 2006-3-21 10:41 发表
    2.6根本不用mkinitrd,编译过N次2.6内核了,编译完生成的System.map拿过去用就行了,如果你在编译时根本就没有选动态插入的模块,连System.map都不用要,只一个内核文件就行。

    你还没搞清楚 initrd 是做什么用的




    欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2