核心与核心模组:
谈完了整个开机的流程,您应该会知道,在整个开机的过程当中,是否能够成功的驱动我们主机的硬体配备, 是核心 (kernel) 的工作!而核心一般都是压缩档,因此在使用核心之前,就得要将他解压缩后, 才能载入主记忆体当中。
另外,为了应付日新月异的硬体,目前的核心都是具有‘可读取模组化驱动程式’的功能, 亦即是所谓的‘ modules (模组化)’的功能啦!所谓的模组化可以将他想成是一个‘外挂程式’, 该外挂程式可能由硬体开发厂商提供,也有可能我们的核心本来就支援~不过,较新的硬体, 通常都需要硬体开发商提供驱动程式模组啦!
那么核心与核心模组放在哪?
* 核心: /boot/vmlinuz 或 /boot/vmlinuz-version;
* 核心解压缩所需 RAM Disk: /boot/initrd (/boot/initrd-version);
* 核心模组: /lib/modules/version/kernel 或 /lib/modules/`uname -r`/kernel;
* 核心原始码: /usr/src/linux (要安装才会有!否则预设不安装的!)
如果该核心被顺利的载入系统当中了,那么就会有几个资讯纪录下来:
* 核心版本: /proc/version
* 系统核心功能: /proc/sys/kernel
问题来啦,如果我有个新的硬体,偏偏我的作业系统不支援,该怎么办?很简单啊!
* 重新编译核心,并加入最新的硬体驱动程式原始码;
* 将该硬体的驱动程式编译成为模组,在开机时载入该模组
上面第一点还很好理解,反正就是重新编译核心就是了。不过,核心编译很不容易啊! 我们会在后续章节约略介绍核心编译的整个程序。比较有趣的则是将该硬体的驱动程式编译成为模组啦! 关于编译的方法,可以参考后续的 原始码与 tarball 那一章的介绍。 我们这个章节仅是说明一下,如果想要载入一个已经存在的模组时,该如何是好?
核心模组与相依性:
既然要处理核心模组,自然就得要瞭解瞭解我们核心提供的模组之间的相关性啦! 基本上,核心的放置处是在 /lib/modules/`uname -r`/kernel 当中,里面主要还分成几个目录:
arch :与硬体平台有关的项目,例如 CPU 的等级等等;
crypto :核心所支援的加密的技术,例如 md5 或者是 des 等等;
drivers :一些硬体的驱动程式,例如显示卡、网路卡、PCI 相关硬体等等;
fs :核心所支援的 filesystems ,例如 vfat, reiserfs, nfs 等等;
lib :一些函式库;
net :与网路有关的各项协定资料,还有防火墙模组 (net/ipv4/netfilter/*) 等等;
sound :与音效有关的各项模组;
如果要我们一个一个的去检查这些模组的主要资讯,然后定义出他们的相依性, 我们可能会疯掉吧!所以说,我们的 Linux 当然会提供一些模组相依性的解决方案啰~ 对啦!那就是检查 /lib/modules/`uname -r`/modules.dep 这个档案啦!他记录了在核心支援的模组的各项相依性。
那么这个档案如何建立呢?挺简单!利用 depmod 这个指令就可以达到建立该档案的需求了!
[root@linux ~]# depmod [-Ane]
参数:
-A :不加任何参数时, depmod 会主动的去分析目前核心的模组,并且重新写入
/lib/modules/`uname -r`/modules.dep 当中。若加入 -A 参数时,则 depmod会去搜寻比 modules.dep 还要新的模组,如果真找到新模组,才会更新。
-n :不写入 modules.dep ,而是将结果输出到萤幕上(standard out);
-e :显示出目前已载入的不可执行的模组名称
范例:
范例一:若我已经做好一个网路卡驱动程式,假设档名为 a.ko,该如何更新核心相依性?
[root@linux ~]# cp /full/path/a.ko /lib/modules/`uname -r`/kernel/drivers/net
[root@linux ~]# depmod
难就难在将那个新的驱动程式模组编译出来,如果编译出来之后, 依据核心模组放置的目录去放置好,然后输入 depmod 后,去更新好 modules.dep , 如此一来,核心就能够认识该模组啰!够简单吧! ^_^ (关于核心模组的编译,请参考 核心编译 一文!)
阅读(1368) | 评论(0) | 转发(0) |