|
发表于 2002-8-29 11:20:23
|
显示全部楼层
什么是 modules﹖ 什么又是 kerneld﹖
发件人: Hanky@FruitTea1
什么是 modules﹖
这是一个很重要的功能了, modules 意思就是模块嘛,在此指的是
kernel modules;简单来说,一个 kernel module 就提供了一个功能,
如 isofs、minix、nfs、lp 等等,如此一来就可以把它们独立出来,不
必预先『绑』在 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-1.3.57.tar.gz, 这是 modules 一定要用到的系统程序。
另有 beta 版的 modules-1.3.69f.tar.gz。
注意您的 kernel 版本,千万不要低于您抓回来的 module-util 版本。
但反过来则否 (不要差太多就好了)。
把抓回来的 modules-x.x.xx.tar.gz 解至您呷意的位置去,然后把它
们 make 出来。在此呼吁大家在这个步骤若遇到问题请自己解决,也可
借机增加功力。
make 完后,应该有一堆系统程序: modprobe、depmod (这是一个
symbolic link 至 modprobe)、genksyms、makecrc32、insmod、
rmmod(symbolic link to insmod)、lsmod(a shell script in 1.3.69f)
、ksyms(symbolic link to insmod)、以及 kerneld。
其中以 insmod、rmmod(=insmod)、lsmod、 depmod(=modprobe)、
kerneld 最重要:
lsmod
把现在 kernel 中插入的 modules 列出来
insmod
把某个 module 插入 kernel 中
rmmod
把某个没在用的 module 拔出 kernel
depmod
制造 module dependency file,以告诉将来的 insmod 要去
哪儿抓 modules 来插。 这个 dependency file 就在
/lib/modules/[您的kernel版本]/modules.dep
kerneld
一个 daemon,可负责自动呼叫 insmod 插入 module,是一个
很方便的 daemon。它也同时查看,若某 module 插入后但很久
没人在用了,就会把它 拔出来,以省内存。
如果 make 没什么问题了,请 make install。 如此一来就完成第一个
准备工作了。
把 depmod、kerneld 加入您的 /etc/rc.d/rc.S (SysVinit2.6 是
在 /etc/init.d/boot 里)
kerneld: 请加在很开头的位置:
(请回头看我在 SysV init 2.6 中的 init.d/boot 范例)
depmod 及 modprobe: 请加在 "remount /" 之后,很开头的位置,
或是独立一个 modules scripts 出来:
===========[/etc/init.d/modules 例]===================================
# 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 -f /lib/modules/current
ln -s /lib/modules/`uname -r` /lib/modules/current
if [ -r /lib/modules/current/modules.dep ]
then
echo "Module dependencies file exists, refresh it."
else
echo "No current module dependencies? creating it."
fi
/sbin/depmod -a
/sbin/modprobe -a -t boot \*
==========[# end of /etc/init.d/modules]==============================
有一件很重要的事是,如果您的 /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
记下来。
* 使用哪一种 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 啰,请您在前三个选项:
=======[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) [N/y/?]
=======[例毕]============================================================
分别回答 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 才对。
最后一道手续是 depmod -a [您 compile 出来的 kernel 版本]
例如:
depmod -a 1.99.7
reboot,如果没什么问题的话,就应该是 OK 了。
使用了 modules 后可能会不太习惯一些事情,久了就熟悉这个东西了。 |
|