1、下載系統內核版本對應的源碼包,版本查看方式:uname -r。

 

我的是Linux 2.6.32

 

下載命令:apt-get install linux-source-2.6.32

 

我下載的是linux-source-2.6.32.tar.bz2

 

2、配置內核:

 

tar jxvf linux-source-2.6.32.tar.bz2

 

cd linux-source-2.6.32

 

make oldconfig #配置原版

 

3、編譯內核(此過程耗時長,編譯完後在linux-source-2.6.32多出一個vmlinux)

 

make

 

4、編譯模組

 

make modules

 

5、安裝模組(操作結束後多出目錄/lib/modules/2.6.32.61+drm33.26)

 

make modules_install

 

6、測試

 

①、hellomod.c

 

#include<linux/init.h> //初始換函數
#include<linux/kernel.h> //內核標頭檔
#include<linux/module.h> //模組的標頭檔

 

MODULE_LICENSE("GPL");//提示可能沒有GNU許可證

 

static int lkp_init(void)//初始化
{
printk("Hello, world\n"); 模組運行在內核態,不能使用使用者態C庫函數中的printf函數,而要使用printk函數
return 0;
}

 

static int lkp_cleanup(void)//退出和清理函數
{
printk("Goodbye,Hello world\n");
}
module_init(lkp_init);//驅動程式初始化進入點
module_exit(lkp_cleanup);//會調用cleanup_module()函數

 

②、Makefile

 

obj-m :=hellomod.o
KERNELDIR=/lib/modules/2.6.32.61+drm33.26/build
PWD :=$(shell pwd)
modules:
$(MAKE) -C $(KERNELDIR) M=$(PWD) modules
modules_install:
$(MAKE) -C $(KERNELDIR) M=$(PWD) modules_install

 

③執行make

 

輸出:

 

root@master:~/Downloads/.1/lken# make
make -C /lib/modules/2.6.32.61+drm33.26/build M=/root/Downloads/.1/lken modules
make[1]: Entering directory `/usr/src/linux-source-2.6.32'
&nbsp; Building modules, stage 2.
&nbsp; MODPOST 1 modules
&nbsp; CC &nbsp; &nbsp; &nbsp;/root/Downloads/.1/lken/hellomod.mod.o
&nbsp; LD [M] &nbsp;/root/Downloads/.1/lken/hellomod.ko
make[1]: Leaving directory `/usr/src/linux-source-2.6.32'

 

會在目錄下生成hellomod.ko檔

 

④、插入內核並查看

 

insmod hellomod.ko

 

root@master:~/Downloads/.1/lken# lsmod |grep hellomod

 

hellomod 679 0

 

⑤移除模組

 

rmmod hellomod

 

查看日記

 

tail /var/log/message

 

輸出:

 

Jan 5 16:18:49 master kernel: [161488.154792] Hello, world
Jan 5 16:19:20 master kernel: [161519.197040] Goodbye,Hello world
創作者介紹

資訊園

shadow 發表在 痞客邦 PIXNET 留言(0) 人氣()