24.4.1
编译前注意事项
由于我们的核心原本就有提供很多的核心工具给硬件开发商来使用,
而硬件开发商也需要针对核心
所提供的功能来设计他们的驱动程序模块,因此,
我们如果想要自行使用硬件开发商所提供的模块
来½行编译时,就需要使用到核心所提供的原始档当中,
所谓的头文件案
(header include file)
来取
得驱动模块所需要的一些函式库或标头的定义啦!
也因此我们常常会发现到,如果想要自行编译核
心模块时,就得要拥有核心原始码嘛!
那核心原始码我们知道他是可能放置在
/usr/src/
底下,早期的核心原始码被要求一定要放置到
/usr/src/linux/
目录下,不过,如果你有多个核心在一个
Linux
系统当中,而且使用的原始码并不相
同时,
呵呵~问题可就大了!所以,在
2.6
版以后,核心使用比½有趣的方法来设计他的原始码放
置目录,
那就是以
/lib/modules/$(uname -r)/build
/lib/modules/$(uname -r)/source
这两个连½档来
指向正确的核心原始码放置目录。如果以我们刚刚由
kernel 3.10.89vbird
½立的核心模块来说,
么他的核心模块目录底下有什么咚咚?
[root@study ~]#
ll
-
h /lib/modules/3.10.89vbird/
lrwxrwxrwx. 1 root root 30 Oct 20 14:27 build
-
> /usr/src/kernels/linux
-
3.10.89
drwxr
-
xr
-
x. 11 root root 4.0K Oct 20 14:29 kernel
-
rw
-
r
--
r
--
. 1 root roo
t 668K Oct 20 14:29 modules.alias
-
rw
-
r
--
r
--
. 1 root root 649K Oct 20 14:29 modules.alias.bin
-
rw
-
r
--
r
--
. 1 root root 5.8K Oct 20 14:27 modules.builtin
-
rw
-
r
--
r
--
. 1 root root 7.5K Oct 20 14:29 modules.builtin.bin
-
rw
-
r
--
r
--
. 1 root root 208K Oct 20 14
:29 modules.dep
-
rw
-
r
--
r
--
. 1 root root 301K Oct 20 14:29 modules.dep.bin
-
rw
-
r
--
r
--
. 1 root root 316 Oct 20 14:29 modules.devname
-
rw
-
r
--
r
--
. 1 root root 81K Oct 20 14:27 modules.order
-
rw
-
r
--
r
--
. 1 root root 131 Oct 20 14:29 modules.softdep
-
rw
-
r
-
-
r
--
. 1 root root 269K Oct 20 14:29 modules.symbols
-
rw
-
r
--
r
--
. 1 root root 339K Oct 20 14:29 modules.symbols.bin
lrwxrwxrwx. 1 root root 30 Oct 20 14:27 source
-
> /usr/src/kernels/linux
-
3.10.89
比½有趣的除了那两个连½档之外,还有那个
modules.dep
文件也挺有趣的,
那个文件是记录了核
心模块的相依属性的地方,依据该文件,我们可以简单的使用
modprobe
这个指令来加载模块呢!至
于核心原始码提供的头文件,在上面的案例当中,
则是放置到
/usr/src/kernels/linux-3.10.89/include/
目录中,当然就是½由
build/source
这两个链½文件来取得目录所在的啦!
^_^
由于核心模块的编译其实与核心原本的原始码有点关系的,因此如果你需要重新编译模块时,
那除
make, gcc
等主要的编译软件工具外,
你还需要的就是
kernel-devel
这个软件
!记得一定要安装喔!
而如果你想要在预设的核心底下新增模块的话,那么就得要找到
kernel
SRPM
文件了!
½该文
件给他安装,并且取得
source code
后,才能够顺利的编译喔!
24.4.2
单一模块编译
想象两个情况: