Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1412845
  • 博文数量: 1334
  • 博客积分: 645
  • 博客等级: 上士
  • 技术积分: 5762
  • 用 户 组: 普通用户
  • 注册时间: 2012-07-25 16:56
文章分类

全部博文(1334)

文章存档

2014年(108)

2013年(1059)

2012年(169)

分类: LINUX

2013-01-18 19:34:36

原文地址:linux中modules的使用 作者:futter521

什麽是 modules

这是一个很重要的功能了,modules 意思 就是模组嘛,在此指的是 kernel modules;简单来说,一个 kernel module 就提供了一个功能,如 isofsminixnfslp 等等,如此一来就可以把它们独立出来,不必预先『绑』在 kernel codes 中。这样子的话我们可以有两大享受! 第一: 将来修改 kernel 时,不必全部重新 compile,可节省不少 时间。第二: 若有新的 modules 需要用到,不必重新 compile kernel,只要插入 (这是一个指令,我们等一下再介绍) 对应的 modules 即可。

 

什麽是 kerneld

kerneld 是一个 daemon,很聪明的 daemon,它主动把您需要的 modules 自动插入 kernel,没用到的 module 拔出 kernel,省去您的麻烦。若少了这个 kerneld,您只好在 /etc/rc.d/ 下加一个 rc.modules (把开机後要用的 modules 加入这个 shell script 中也算是自动加入,但比较麻烦不是吗?)

 

如何使用 Modules

Step 1: 准备工作

去抓 , 这是 modules 一定要用到的系统程式。另有 beta 版的 及最新版的 注意您的 kernel 版本,千万不要低於您抓回来的 module-util 版本。 但反过来则否 (不要差太多就好了)

把抓回来的 modules-x.x.xx.tar.gz 解至您呷意的位置去,然後把它们 make 出来。在此呼吁大家在这个步骤若遇到问题请自己解决,也可藉机增加功力。

make 完後,应该有一堆系统程式: modprobedepmod(这是一个 symbolic link modprobe)genksymsmakecrc32insmodrmmod(symbolic link to insmod)lsmod(a shell script in 1.3.69f)ksyms(symbolic link to insmod)、以及 kerneld

其中以 insmodrmmod(=insmod)lsmod depmod(=modprobe)kerneld 最重要:

 

lsmod     把现在 kernel 中插入的 modules 列出来

insmod    把某个 module 插入 kernel

rmmod    把某个 module 插入 kernel

depmod   制造 module dependency file,以告诉将来的 insmod 要去哪儿抓modules 来插。这个 dependency file 就在/lib/modules/[您的kerne版本]/modules.dep

kerneld   一个 daemon,可负责自动呼叫 insmod 插入 module,是一个很方便 daemon。它也同时查看,若某 module 插入後但很久没人在用了,就会把它拔出来,以省记忆体。

如果 make 没什麽问题了,请 make install 如此一来就完成第一个准备工作了。

depmodkerneld 加入您的 /etc/rc.d/rc.S:

kerneld: 请加在 swapon -a 之後,很开头的位置:

 

PATH=/sbin:/usr/sbin:/bin:/usr/bin

# enable swapping

/sbin/swapon -a

 

# Start update.

/sbin/update &

 

#

# Now, start kerneld as soon as possible, so that any disk

# driver modules can be loaded "automagically"

if [ -x /sbin/kerneld ]

then

        /sbin/kerneld

fi

 

depmod modprobe: 请加在 "remount /" 之後,很开头的位置:

#

# If everything went well, we remount the root filesystem read/write

#

echo "Re-mounting root file system read-write"

/sbin/mount -w -n -o remount /

 

#

# Then do some standard clean-up:

#

rm -f /etc/mtab~ /etc/fastboot /etc/nologin

#这部份可能和您的系统 rc.S 不太一样, 请不要照抄!

#cat /dev/null > /etc/mtab

cat /dev/null > /var/adm/utmp

 

# 以下才是我们要加的第二部份

# The code from here, down to "#=========" can be put in a separate script

#

# Create a generic link to the modules for the current kernel

#

# You can have generic symbolic links in /lib/modules/boot

# if you create links to: "../current/subsystem/module.o"

#

rm /lib/modules/current

ln -s /lib/modules/`uname -r` /lib/modules/current

if [ /! -r /lib/modules/current/modules.dep ]

then

        echo "Creating module dependencies"

        /sbin/depmod -a

fi

 

#

# Load the boot modules

#

if [ -x /sbin/kerneld ]

then

        if find /lib/modules/boot -type f -o type l > /dev/null 2>&1

        then

                echo "Loading boot-time modules"

                /sbin/modprobe -a -t boot /*

        fi

else

        echo "Loading modules"

        /sbin/modprobe -a /*

fi

 

#===============================================

 

有一件很重要的事是,如果您的 /usr 是在另一个 file system 上,之後才 mount 进来的话,请先在 depmod 之前 mount 进来,因为 modules-1.3.57 要用到 /usr/bin/nm 这个系统程式。 modules-1.3.69f 因为它内建了 nm 的功能,所以可以不用管我刚才说的......

 

Step 2: 计划

首先,请先列出一张清单,看看您的 kernel 有哪些选项是非有不可的;也就是说,这些东西是不可以 compile 成为 module 的。

root system 所在:

使用哪一种硬碟界面?

IDE 的话,就把 ide 的选项记下来。

SCSI 的话,请把您的界面 low level driver SCSI Disk (sd) 记下来。

使用哪一种 file system

我看多半都是 ext2 吧?那麽把它记下来。

 

您的 kernel binary 格式

elf那麽 ELF support 不可以 compile module

a.out那麽 AOUT support 不可以 compile module

大概就这些吧,是不可以 compile module 的。而原本没有提供 M kernel config 选项者,要用到的话当然只能乖乖地回答 Y !

 

Step 3: 新的 kernel modules 来了

好了,那就开始重新 make config 罗,请您在前三个选项:

*

* Loadable module support

*

Enable loadable module support (CONFIG_MODULES) [Y/n/?]

Set version information on all symbols for modules (CONFIG_MODVERSIONS) [N/y/?]

Kernel daemon support (e.g. autoload of modules) (CONFIG_KERNELD) [Y/n/?]

分别回答 Y,N,Y 的值就对了。其中 CONFIG_KERNELD default 值是 N 所以要注意一下。

其他的 kernel config 如果遇到现在不能 compile Module (依您自己上面所记录的,这是因人而异),请 (也只能) 回答 Y;其他的请回答:

M: 若有提供这个选项。

Y: 没有提供 M 选项,但又必须使用的话。

N: 根本就用不到这个功能的话。

make config 完後,仍旧是 make dep; make clean

再来就有点不太一样;在 make zlilo make zImage 之後,是产生出 没有 module kernel image,所以之後要再 make modules ; make modules_install 才对。

reboot,如果没什麽问题的话,就应该是 OK 了。

使用了 modules 後可能会不太习惯一些事情,久了就熟悉这个东西了。

建议您不妨开始订阅国外的 news group 来看,会比国内一些 bbs 的讨论来得更有时效性。

阅读(474) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~