首页 | Linux 基础 | 资讯动态 | Linux 应用 | Linux 服务器 | Linux 开发 | Linux 安全 | 专题 | 联盟论坛
  当前位置:主页>Linux 开发>文章内容
Linux系统单一内核模块编译过程解析
来源:www.unix5.com 作者:riechelr_hl 发布时间:2007-05-21  

单一模块编译

想象两个情况:

如果我的预设核心忘记加入某个功能,而且该功能可以编译成为模块,不过, 预设核心却也没有把该项功能编译成为模块,害我不能使用时,该怎么样是好?

如果 Linux 核心原始码并没有某个硬件的驱动程序 (module) ,但是开发该硬件的厂商有提供给 Linux 使用的驱动程序原始码,那么我又该怎么样把该项功能编进核心模块呢?

很有趣对吧!不过,在这样的情况下其实没有什么好说的,反正就是 『去取得原始码后,重新编译成为系统可以加载的模块』啊!很简单,对吧!^_^ 但是,上面那两种情况的模块编译行为是不太一样的,不过,都是需要 make, gcc 以及核心所提供的 include 标头档与函式库等等。

 硬件开发商提供的额外模块:

 很多时候,可能由于核心预设的核心驱动模块所提供的功能您不满意, 或者是硬件开发商所提供的核心模块具有更强大的功能, 又或者该硬件是新的,所以预设的核心并没有该硬件的驱动模块时,那您只好自行由硬件开发商处取得驱动模块, 然后自行编译啰!

 如果您的硬件开发商有提供驱动程序的话,那么真的很好解决,直接下载该原始码,重新编译, 把他放置到核心模块该放置的地方后,呵呵!就能够使用了!举例来说,如果您不想使用核心原本提供的 Intel 网络卡模块,而想使用 Intel 官方释出的最新模块,例如下面这个例子:

 模块说明与下载:http://downloadfinder.intel.com/ ... l/Detail_Desc.aspx? agr=Y&Inst=Yes&ProductID=993&DwnldID=2896&strOSs=39&OSFullName=Linux*&lang=eng

 您可以利用各种方法把他下载后,假设这个档案放置到 /root ,那么直接把他解压缩吧! 之后就可以读一读 INSTALL/README ,然后找一下 Makefile ,就能够编译了。整体流程有点像这样:

 1. 把档案解压缩:

 [root@linux ~]# cd /usr/local/src

 [root@linux src]# tar -zxvf /root/e100-3.4.14.tar.gz

 [root@linux src]# cd e100-3.4.14

 2. 开始进行编译与安装:

 [root@linux e100-3.4.14]# vi README <==注意查一下该档案内容

 [root@linux e100-3.4.14]# cd src

 [root@linux src]# make

 # 此时您会看到出现如下这一行:

 # make[1]: Entering directory `/usr/src/kernels/2.6.13-1.1532_FC4-i686'

 # 这代表这个驱动程序在编译时,会去读取的核心原始码 include file

 # 的目录所在!有兴趣的朋友,务必查阅一下 Makefile 啦!

 [root@linux src]# ls -l

 -rw-r--r-- 1 root root 77908 Jul 2 08:24 e100.c

 -rw-r--r-- 1 root root 351351 Dec 5 00:48 e100.ko

 -rw-r--r-- 1 root root 4775 Dec 5 00:48 e100.mod.c

 -rw-r--r-- 1 root root 39684 Dec 5 00:48 e100.mod.o

 -rw-r--r-- 1 root root 312564 Dec 5 00:48 e100.o

 -rw-r--r-- 1 root root 21092 Jul 2 08:24 ethtool.c

 -rw-r--r-- 1 root root 43258 Jul 2 08:24 kcompat.h

 -rw-r--r-- 1 root root 9610 Jul 2 08:24 Makefile

 3. 开始把该模块移动到核心目录,并且更新模块相依属性!

 [root@linux src]# cp e100.ko \

 > /lib/modules/`uname -r`/kernel/drivers/net

 [root@linux src]# cd /lib/modules/`uname -r`

 [root@linux 2.6.13-1.1532_FC4]# depmod -a

 有趣吧!透过这样的动作,我们就可以轻易的把模块编译起来,并且还可以把他直接放置到核心模块目录中, 同时以 depmod 把模块建立相关性,未来就能够利用 modprobe 来直接取用啦!^_^ 但是需要提醒您的是,当自行编译模块时, 若您的核心有更新 (例如利用自动更新机制进行线上更新) 时,则您必须要重新编译该模块一次, 重复上面的步骤!才行!因为这个模块仅针对目前的核心来编译的啊!对吧!

共2页: 上一页 1 [2] 下一页
 
如果您对本文有任何疑问或者建议,请到论坛讨论区发表您的意见: >> 论坛入口
[收藏] [推荐] [评论(0条)] [返回顶部] [打印本页] [关闭窗口]  
  热点文章
·嵌入式Linux系统下图形库讲解及
·Qt/Embedded在嵌入式Linux中的应
·Linux系统环境下的Socket编程详
·在 Fedora Core 5 上体验 Aiglx
·使用 Linux 系统调用的内核命令
·Linux 2.6.11内核文件IO系统调用
·在Linux中创建静态库和动态库
·嵌入式Linux:uClinux操作系统移
·Linux操作系统下的多进程编程(
·嵌入式系统 Boot Loader 技术内
·Linux操作系统的源代码目录树结
·Linux用户态与内核态的交互讲解
  相关文章
·细看嵌入式Linux时代发展
·Linux 防火墙在内核中的实现
·剖析RedHat Linux中三个重要内核
·Linux内核源代码的阅读及相关工
·内核空间SMP编程
·一种解读linux内核源码的入门方
·介绍B-SHELL的一些运用方法
·Linux程式设计.Shell Script(bas
·Linux程式设计.Shell Script(bas
·Linux 2.6.11内核文件IO系统调用
·Linux程式设计.Shell Script(bas
·定制Linux内核 充分发挥系统的潜

本站信息源至:互联网络,均为学习,交流所用,如有版权问题,请联系我们.
站长QQ:397422079 E_mail:riechelr_hl@unix5.com
转载本站内容请注明原作者名.谢谢!