📄 00000004.htm
字号:
<HTML><HEAD> <TITLE>BBS水木清华站∶精华区</TITLE></HEAD><BODY><CENTER><H1>BBS水木清华站∶精华区</H1></CENTER>发信人: Hanky@FruitTea1 (骗谁啊?), 信区: Linux <BR>标 题: 什麽是 modules? 什麽又是 kerneld? <BR>发信站: 果茶小站 (Thu May 30 02:02:50 1996) <BR> <BR>什麽是 modules? <BR> <BR> 这是一个很重要的功能了, modules 意思就是模组嘛,在此指的是 <BR>kernel modules;简单来说,一个 kernel module 就提供了一个功能, <BR>如 isofs、minix、nfs、lp 等等,如此一来就可以把它们独立出来,不 <BR>必预先『绑』在 kernel codes 中。这样子的话我们可以有两大享受! <BR> <BR>第一: 将来修改 kernel 时,不必全部重新 compile,可节省不少时间。 <BR>第二: 若有新的 modules 需要用到,不必重新 compile kernel,只要 <BR> 插入 (这是一个指令,我们等一下再介绍) 对应的 modules 即可。 <BR> <BR> <BR>什麽是 kerneld? <BR> <BR> kerneld 是一个 daemon,很聪明的 daemon,它主动把您需要的 <BR>modules 自动插入 kernel,没用到的 module 拔出 kernel,省去您的麻 <BR>烦。若少了这个 kerneld,您只好在 /etc/rc.d/ 下加一个 rc.modules <BR>了 (把开机後要用的 modules 加入这个 shell script 中也算是自动加 <BR>入,但比较麻烦不是吗?)。 <BR> <BR> <BR>如何使用 Modules ? <BR> <BR> Step 1: 准备工作 <BR> <BR> 去抓 modules-1.3.57.tar.gz, 这是 modules 一定要用到的系统程式。 <BR> 另有 beta 版的 modules-1.3.69f.tar.gz。 <BR> <BR> 注意您的 kernel 版本,千万不要低於您抓回来的 module-util 版本。 <BR> 但反过来则否 (不要差太多就好了)。 <BR> <BR> 把抓回来的 modules-x.x.xx.tar.gz 解至您呷意的位置去,然後把它 <BR> 们 make 出来。在此呼吁大家在这个步骤若遇到问题请自己解决,也可 <BR> 藉机增加功力。 <BR> <BR> make 完後,应该有一堆系统程式: modprobe、depmod (这是一个 <BR> symbolic link 至 modprobe)、genksyms、makecrc32、insmod、 <BR> rmmod(symbolic link to insmod)、lsmod(a shell script in 1.3.69f) <BR> 、ksyms(symbolic link to insmod)、以及 kerneld。 <BR> <BR> 其中以 insmod、rmmod(=insmod)、lsmod、 depmod(=modprobe)、 <BR> kerneld 最重要: <BR> <BR> lsmod <BR> 把现在 kernel 中插入的 modules 列出来 <BR> insmod <BR> 把某个 module 插入 kernel 中 <BR> rmmod <BR> 把某个没在用的 module 拔出 kernel <BR> depmod <BR> 制造 module dependency file,以告诉将来的 insmod 要去 <BR> 哪儿抓 modules 来插。 这个 dependency file 就在 <BR> <BR> /lib/modules/[您的kernel版本]/modules.dep <BR> <BR> kerneld <BR> 一个 daemon,可负责自动呼叫 insmod 插入 module,是一个 <BR> 很方便的 daemon。它也同时查看,若某 module 插入後但很久 <BR> 没人在用了,就会把它 拔出来,以省记忆体。 <BR> <BR> 如果 make 没什麽问题了,请 make install。 如此一来就完成第一个 <BR> 准备工作了。 <BR> <BR> 把 depmod、kerneld 加入您的 /etc/rc.d/rc.S (SysVinit2.6 是 <BR> 在 /etc/init.d/boot □) <BR> <BR> kerneld: 请加在很开头的位置: <BR> <BR> (请回头看我在 SysV init 2.6 中的 init.d/boot □例) <BR> <BR> depmod 及 modprobe: 请加在 "remount /" 之後,很开头的位置, <BR> 或是独立一个 modules scripts 出来: <BR> <BR> <BR>===========[/etc/init.d/modules 例]=================================== <BR># Create a generic link to the modules for the current kernel <BR># <BR># You can have generic symbolic links in /lib/modules/boot <BR># if you create links to: "../current/subsystem/module.o" <BR># <BR>rm -f /lib/modules/current <BR>ln -s /lib/modules/`uname -r` /lib/modules/current <BR>if [ -r /lib/modules/current/modules.dep ] <BR>then <BR> echo "Module dependencies file exists, refresh it." <BR>else <BR> echo "No current module dependencies? creating it." <BR>fi <BR>/sbin/depmod -a <BR>/sbin/modprobe -a -t boot \* <BR> <BR>==========[# end of /etc/init.d/modules]============================== <BR> <BR> <BR> 有一件很重要的事是,如果您的 /usr 是在另一个 file system 上, <BR> 之後才 mount 进来的话,请先在 depmod 之前 mount 进来,因为 <BR> modules-1.3.57 要用到 /usr/bin/nm 这个系统程式。 但 <BR> modules-1.3.69f 因为它内建了 nm 的功能,所以可以不用管我刚才 <BR> 说的......。 <BR> <BR> <BR> Step 2: 计画 <BR> <BR> 首先,请先列出一张清单,看看您的 kernel 有哪些选项是非有不可的; <BR> 也就是说,这些东西是不可以 compile 成为 module 的。 <BR> <BR> * root system 所在: <BR> <BR> * 使用哪一种硬碟界面? <BR> * IDE 的话,就把 ide 的选项记下来。 <BR> * SCSI 的话,请把您的界面 low level driver 及 SCSI Disk <BR> 记下来。 <BR> <BR> * 使用哪一种 file system? <BR> * 我看多半都是 ext2 吧?那麽把它记下来。 <BR> <BR> * 您的 kernel binary 格式? <BR> * elf?那麽 ELF support 不可以 compile 成 module 。 <BR> * a.out?那麽 AOUT support 不可以 compile 成 module。 <BR> <BR> 大概就这些吧,是不可以 compile 成 module 的。而原本没有提供 M 的 <BR> kernel config 选项者,要用到的话当然只能乖乖地回答 Y 罗! <BR> <BR> <BR> Step 3: 新的 kernel 及 modules 来了 <BR> <BR> 好了,那就开始重新 make config 罗,请您在前三个选项: <BR> <BR>=======[make config 例]================================================== <BR>* <BR>* Loadable module support <BR>* <BR>Enable loadable module support (CONFIG_MODULES) [Y/n/?] <BR>Set version information on all symbols for modules (CONFIG_MODVERSIONS) [N/y/?] <BR>Kernel daemon support (e.g. autoload of modules) (CONFIG_KERNELD) [N/y/?] <BR>=======[例毕]============================================================ <BR> <BR> 分别回答 Y,N,Y 的值就对了。其中 CONFIG_KERNELD 的 default 值是 N, <BR> 所以要注意一下。 <BR> <BR> 其他的 kernel config 如果遇到现在不能 compile 成 Module 的 (依您 <BR> 自己上面所记录的,这是因人而异),请 (也只能) 回答 Y;其他的请回答: <BR> <BR> M: 若有提供这个选项。 <BR> Y: 没有提供 M 选项,但又必须使用的话。 <BR> N: 根本就用不到这个功能的话。 <BR> <BR> make config 完後,仍旧是 make dep; make clean <BR> <BR> 再来就有点不太一样;在 make zlilo 或 make zImage 之後,是产生出 <BR> 没有 module 的 kernel image,所以之後要再 make modules ; <BR> make modules_install 才对。 <BR> <BR> 最後一道手续是 depmod -a [您 compile 出来的 kernel 版本] <BR> 例如: <BR> depmod -a 1.99.7 <BR> <BR> reboot,如果没什麽问题的话,就应该是 OK 了。 <BR> <BR> 使用了 modules 後可能会不太习惯一些事情,久了就熟悉这个东西了。 <BR> <BR><CENTER><H1>BBS水木清华站∶精华区</H1></CENTER></BODY></HTML>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -