开发环境:FC9 内核为2.6.27.25-78.2.56.fc9.i686 ,
GCC为:4.3.0
在编译之前首先在FC9中安装内核和内核头文件
通过yum可以轻松的搞定
yum install -y kernel-headers kernel-devel
这里将写一个基础的“hello world”字符设备驱动,代码如下:
编译过程:
Makefile (注意不是makefile, 否则会报错找不到Makefile )
Makefile
002 # Makefile for Linux Kernel Primer module skeleton (2.6.7)
003 obj-m += hellomod.o
在终端输入:
]#make -C make -C /usr/src/kernels/2.6.27.25-78.2.56.fc9.i686/ SUBDIRS=$PWD modules
我的内核位于/usr/src/kernels/2.6.27.25-78.2.56.fc9.i686/这个目录中
输出:
make: Entering directory `/usr/src/kernels/2.6.27.25-78.2.56.fc9.i686'
CC [M] /root/mystudy/linux/example/hellomod/hellomod.o
Building modules, stage 2.
MODPOST 1 modules
CC /root/mystudy/linux/example/hellomod/hellomod.mod.o
LD [M] /root/mystudy/linux/example/hellomod/hellomod.ko
make: Leaving directory `/usr/src/kernels/2.6.27.25-78.2.56.fc9.i686'
# insmod hellomod.ko
# lsmod
Module Size Used by
hellomod 2696 0
..................
[root@localhost hellomod]# tail /var/log/messages
.....
.....
Nov 25 15:57:14 localhost kernel: Hello, world!form the kernel space ...
[root@localhost hellomod]# rmmod hellomod
[root@localhost hellomod]# tail /var/log/messages
....
....
Nov 25 15:57:14 localhost kernel: Hello, world!form the kernel space ...
Nov 25 15:58:13 localhost kernel: Goodbye, world!leaving the kernel space ...
常见错误: Invalid module format
可以编译通过当事不用加载,提示:-1 invalid module format
我遇到的问题是: 所用内核源码版本与机器使用的内核版本不同
在编译生成.ko文件后加载提示如下错误:
insmod: error inserting 'hellomod.ko': -1 Invalid module format
然后查看系统日志,有如下信息
Nov 25 15:56:30 localhost kernel: hellomod: version magic '2.6.27.25 SMP mod_unload 686 4KSTACKS ' /
should be '2.6.27.25-78.2.56.fc9.i686 SMP mod_unload 686 4KSTACKS '
通过yum安装内核过后,使用系统的内核来编译就不活发成错误了