LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 969|回复: 9

在论坛里看到不少关于用了最新的module-init-tools后,模块挂不上的问题,到底什么原因

[复制链接]
发表于 2005-3-3 14:28:36 | 显示全部楼层 |阅读模式
安装最新的module-init-tools3.1,
在./generate-modprobe.conf /etc/modprobe.conf这一步,生成的/etc/modprobe.conf里面乱七八糟,重启机器后,新内核的模块挂不上,搜搜坛子里,不止我一个遇上这事,
该怎么解决?

听说最新module-init-tools已经不再用modprobe.conf了,那挂载模块所需的/etc/modprobe.conf 怎么生成?
 楼主| 发表于 2005-3-4 17:42:29 | 显示全部楼层
如果想手动编写modprobe.conf,
有什么规则没有?能不能详细说说。
man modprobe.conf说的好象很简单。
回复 支持 反对

使用道具 举报

发表于 2005-3-4 18:02:33 | 显示全部楼层
似乎就写成 alias char-major-195* nvidia
这样就可以了。
就把/lib/modules/2.6.10-lvm/modules.alias
中要加载的模块写到/etc/modprobe.conf

如果lfs的话就写到/etc/sysconfig/modules :
soundcore
snd_intel8x0
snd
snd_seq_oss
snd_pcm_oss
snd_mixer_oss
rtc
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-3-4 20:39:23 | 显示全部楼层
自从2.6.X以后,我的modules.alias就是下面这样的内容:
alias char-major-14-* soundcore
alias pci:v00008086d00002415sv*sd*bc*sc*i* snd_intel8x0
alias pci:v00008086d00002425sv*sd*bc*sc*i* snd_intel8x0
alias pci:v00008086d00002445sv*sd*bc*sc*i* snd_intel8x0
alias pci:v00008086d00002485sv*sd*bc*sc*i* snd_intel8x0
alias pci:v00008086d000024C5sv*sd*bc*sc*i* snd_intel8x0
alias pci:v00008086d000024D5sv*sd*bc*sc*i* snd_intel8x0
alias pci:v00008086d000025A6sv*sd*bc*sc*i* snd_intel8x0
alias pci:v00008086d0000266Esv*sd*bc*sc*i* snd_intel8x0
alias pci:v00008086d00007195sv*sd*bc*sc*i* snd_intel8x0
alias pci:v00001039d00007012sv*sd*bc*sc*i* snd_intel8x0
alias pci:v000010DEd000001B1sv*sd*bc*sc*i* snd_intel8x0
alias pci:v000010DEd0000003Asv*sd*bc*sc*i* snd_intel8x0
alias pci:v000010DEd0000006Asv*sd*bc*sc*i* snd_intel8x0
alias pci:v000010DEd00000059sv*sd*bc*sc*i* snd_intel8x0
alias pci:v000010DEd0000008Asv*sd*bc*sc*i* snd_intel8x0
alias pci:v000010DEd000000DAsv*sd*bc*sc*i* snd_intel8x0
................................

再往下还有很长很长,其中也有象下面这样看起来正常的东东:
alias char-major-116-* snd
alias char-major-116-* snd
alias sound-service-?-1 snd_seq_oss
alias sound-service-?-8 snd_seq_oss
alias sound-service-?-3 snd_pcm_oss
alias sound-service-?-12 snd_pcm_oss
alias sound-service-?-0 snd_mixer_oss
alias net-pf-15 af_key
alias char-major-10-187 irnet
alias net-pf-23 irda
alias char-major-161-* ircomm_tty
alias net-pf-4 ipx
alias net-pf-10 ipv6
alias net-pf-12 decnet
alias net-pf-5 appletalk
alias nls_big5 nls_cp950
alias nls_gb2312 nls_cp936
alias nls_sjis nls_cp932
alias iso9660 isofs
但大多数行是下面和上面红色部分这样乱七八糟的东东:
alias usb:v045Ep04CAdl*dh*dc*dsc*dp*ic*isc*ip* ipaq
alias usb:v045Ep04CBdl*dh*dc*dsc*dp*ic*isc*ip* ipaq
alias usb:v045Ep04CCdl*dh*dc*dsc*dp*ic*isc*ip* ipaq
alias usb:v045Ep04CDdl*dh*dc*dsc*dp*ic*isc*ip* ipaq
alias usb:v045Ep04CEdl*dh*dc*dsc*dp*ic*isc*ip* ipaq
alias usb:v045Ep04D7dl*dh*dc*dsc*dp*ic*isc*ip* ipaq
alias usb:v045Ep04D8dl*dh*dc*dsc*dp*ic*isc*ip* ipaq
alias usb:v045Ep04D9dl*dh*dc*dsc*dp*ic*isc*ip* ipaq
alias usb:v045Ep04DAdl*dh*dc*dsc*dp*ic*isc*ip* ipaq
alias usb:v045Ep04DBdl*dh*dc*dsc*dp*ic*isc*ip* ipaq
alias usb:v045Ep04DCdl*dh*dc*dsc*dp*ic*isc*ip* ipaq
alias usb:v045Ep04DDdl*dh*dc*dsc*dp*ic*isc*ip* ipaq
alias usb:v045Ep04DEdl*dh*dc*dsc*dp*ic*isc*ip* ipaq
alias usb:v045Ep04DFdl*dh*dc*dsc*dp*ic*isc*ip* ipaq
alias usb:v045Ep04E0dl*dh*dc*dsc*dp*ic*isc*ip* ipaq

不知道/etc/modprobe.conf该怎样写。

我的LFS里没有/etc/sysconfig/modules,自己建一个是否可行,是不是只把模块名写到里面就行了?
其它发行版能不用这个/etc/sysconfig/modules 的办法?
回复 支持 反对

使用道具 举报

发表于 2005-3-4 22:11:32 | 显示全部楼层
你的lfs是什么版本?
我的lfs-6.0是这样写的,需要模块名写在里面,一行一个。

/etc/modprobe.conf格式就是modules.alias这样的。
直接把需要加载的模块写进去就可以了。
如:
/etc/modprobe.conf :

alias char-major-10-187 irnet
alias net-pf-23 irda
alias char-major-161-* ircomm_tty
alias net-pf-4 ipx
alias net-pf-10 ipv6

其他的发行版都有各自加载模块的办法,看看系统启动脚本里加载模块是怎么写的
好象都是用一些侦测硬件的服务自动加载模块。

其实自己想加载什么模块,直接写到系统启动脚本中就可以了,所有发行版通用

lfs中看看你的/etc/rc.d/rcsysinit.d/SXXmodules
这个脚本决定启动时都加载什么模块。
我的/etc/rc.d/rcsysinit.d/S05modules :
[PHP]

[ -e /proc/ksyms -o -e /proc/modules ] || exit 0

case "$1" in
        start)
                # Only try to load modules if the user has actually given us
                # some modules to load.
                if egrep -qv '^(#|$)' /etc/sysconfig/modules 2>/dev/null; then

                        # Read in the configuration file.
                        exec 9>&0 < /etc/sysconfig/modules

                                echo -n "Loading modules:"

                                while read module args ; do
                                        # Ignore comments and blank lines.
                                        case "$module" in
                                                ""|\#*) continue ;;
                                        esac

                                        # Attempt to load the module, making
                                        # sure to pass any arguments provided.
                                        modprobe $module $args

                                        # Print the module name if successful,
                                        # otherwise take note.
                                        if [ $? -eq 0 ]; then
                                                echo -n " $module"
                                        else
                                                failedmod="$failedmod $module"
                                        fi
                                done

                                # Print a message about successfully loaded
                                # modules on the correct line.
                                echo ; print_status success

                                # Print a failure message with a list of any
                                # modules that may have failed to load.
                                if [ "$failedmod" ]; then
                                        echo "Failed to load modulesfailedmod"
                                        print_status failure
                                fi

                        exec 0>&9 9>&-

                fi
                ;;
        *)
                echo "Usage: $0 {start}"
                exit 1
                ;;
esac

# End $rc_base/init.d/modules

[/PHP]
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-3-4 22:36:20 | 显示全部楼层
我用的是LFS5.1.1,可是我看了看,/etc/rc.d/rcsysinit.d/下没有S**modules这个东西,看来和你说的那个/etc/sysconfig/modules有关,要是没有就两个都没有。
其实自己想加载什么模块,直接写到系统启动脚本中就可以了,所有发行版通用

这个办法以前用过,总觉得不太正规。
最近在另一台机器上装了个RH9,升级内核后同样也是有这个问题,而且RH9启动时读取/etc/fstab加载vfat分区时加载不上,因为需要先挂载nls_cp437等模块,一个也挂不上,如果不能解决,只好去修改那个加载filesystem的脚本,让它先modprobe所需模块再加载vfat分区吧。


只是不知道/etc/modprobe.conf 为什么会这样,以前用module-init-tools-0.9*那些版本升级2.6.0、2.6.1、2.6.2.........等内核没这问题的,看看坛子里同样的提问也没有人给出原因,难道是module-init-tools的BUG?
回复 支持 反对

使用道具 举报

发表于 2005-3-5 21:01:29 | 显示全部楼层
看来lfs-5.1.1的启动脚本和6.0是不同的,不过5.1.1里是怎么加载模块的呢 :ask

RedHat里的kudzu服务不是自动加载模块吗?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-3-6 18:22:36 | 显示全部楼层
不会写/etc/modprobe.conf,对于大部分模块可以写在系统启动脚本里或分区挂载脚本里,系统也能正常工作。
但对于使用initrd.img启动的系统,例如REDHAT默认的那样,不把ext3打入内核,而是先用initrd.img启动,然后再挂载ext3.o(ext3.ko)模块,它是怎么实现的?
现在我就是解决不了这个问题,我现在在REDHAT上编译内核,iinitrd.img正常生成,但启动时就是挂不上ext3.ko和jbd.ko,启动失败。有的资料说要把EXT3选项设为Y,其实以前用REDHAT9.0(2.6.4...以前)我设成M也能正常启动,而且REDHAT默认的选项就是用模块。

不知道怎么回事。
回复 支持 反对

使用道具 举报

发表于 2005-3-6 21:15:10 | 显示全部楼层
cat initrd.img |gzip -d >initrd
mount -o loop -t ext2 initrd tmp/
这样就能查看initrd.img里的东西了。

这是MDK实现使用模块加载ext3的initrd.img里的linuxrc:
我前几天装的RHEL4中的linuxrc也类似这样的

[PHP]

#!/bin/nash

echo "Loading jbd.ko module"
insmod /lib/jbd.ko
echo "Loading ext3.ko module"
insmod /lib/ext3.ko
echo Mounting /proc filesystem
mount -t proc /proc /proc
echo Mounting sysfs
mount -t sysfs none /sys
echo Creating device files
mountdev size=1M,mode=0755
echo starting udev
udevstart
echo -n /sbin/hotplug > /proc/sys/kernel/hotplug
echo Creating root device
mkrootdev /dev/root
echo Mounting root filesystem
mount -o defaults --ro -t ext3 /dev/root /sysroot
echo 0x0100 > /proc/sys/kernel/real-root-dev
pivot_root /sysroot /sysroot/initrd
umount /initrd/sys
umount /initrd/proc
echo Initrd finished

[/PHP]
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-3-6 21:20:43 | 显示全部楼层
LFS下没有mkinitrd能不能生成initrd.img ? 怎么做?
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表