Chinaunix首页 | 论坛 | 博客

分类:

2012-09-19 19:47:44

原文地址:编译内核模块 作者:xishuaiya

本文档说明怎么在内核代码树之外编译模块

`kbuild`是linux内核的编译系统
编译内核模块的条件:
1、有一个已经编译好的内核,要包括编译时候用的头文件和配置文件;
2、开启了内核的模块支持功能;
3、如果没有具备上面两个条件,请使用`make modules_prepare`试试;

准备编译模块所需要的代码文件:
所需文件:mod.c、kbuild、Makefile三个文件
---->文件名:mod.c
点击(此处)折叠或打开
  1. #include <linux/module.h>
  2. #include <linux/init.h>

  3. MODULE_AUTHOR("xishuai");//可选
  4. MODULE_LICENSE("GPLv2");//linux内核模块都要有这一行,否则一些函数是不能调用成功的

  5. static int __init mymod_init(void)
  6. {
  7.     printk(KERN_ALERT "mymod initing");

  8.     return 0;
  9. }

  10. static void __exit mymod_exit(void)
  11. {
  12.     printk(KERN_ALERT "mymod exiting");

  13.     //return 0;
  14. }

  15. module_init(mymod_init);//指示加载模块时要执行的函数名
  16. module_exit(mymod_exit);//指示模块卸载时要执行的函数名
--->文件名:kbuild
点击(此处)折叠或打开
  1. obj-m := mymod.o
--->文件名:Makefile

点击(此处)折叠或打开

  1. KDIR ?= /lib/modules/`uname -r`/source
  2. O ?= /lib/modules/`uname -r`/build

  3. default:
  4.     $(MAKE) O=$O -C $(KDIR) M=$$PWD

  5. .PHONY:clean
  6. clean:
  7.     -rm -f *.o *.mod.* *.symvers *.ko *.order .*
有了这三个文件之后,就可以在自己的的源代码目录执行
make
命令了
然后,第一个linux,最简单的内核模块就生成了

insmod xxx.ko加载模块
lsmod | grep xxx查看内核是否加载成功
rmmod xxx卸载模块

一般情况下,kbuild、Makefile文件的内容都不用改变,只用修改源代码文件即可生成完成特定功能的内核模块

阅读(338) | 评论(0) | 转发(0) |
0

上一篇:没有了

下一篇:编写内核模块Makefile的技巧

给主人留下些什么吧!~~