Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1351711
  • 博文数量: 245
  • 博客积分: 10021
  • 博客等级: 上将
  • 技术积分: 3094
  • 用 户 组: 普通用户
  • 注册时间: 2008-05-12 14:51
文章存档

2011年(2)

2009年(152)

2008年(91)

我的朋友

分类: LINUX

2009-01-24 14:58:42

  核心与核心模组:
  谈完了整个开机的流程,您应该会知道,在整个开机的过程当中,是否能够成功的驱动我们主机的硬体配备, 是核心 (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 , 如此一来,核心就能够认识该模组啰!够简单吧! ^_^ (关于核心模组的编译,请参考 核心编译 一文!)

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