Welcome 微信登录
编程资源 图片资源库 蚂蚁家优选 PDF转换器

首页 / 操作系统 / Linux / Ubuntu Linux 模块编程

首先需要构建系统内核的源代码树,因为 模块属于kernel编程了,和用户空间的c语言变成不同。他要依附于内核源码树的存在而存在。内核模块一种机制能让内核文件(zImage或bzImage)本身并不包含某组件,而是在该组件需要被使用的时候,动态地添加到正在运行的内核中Linux提供了一种叫做“内核模块”的机制,就可以实现以上效果。特点
•模块本身并不被编译进内核文件(zImage或者bzImage)
• 可以根据需求,在内核运行期间动态的安装或卸载。第一步,创建源代码:hello.croot@Ubuntu:/home/Mydocument/Modules#vi hello.c#include <linux/init.h>
#include <linux/module.h>
MODULE_LICENSE("Dual BSD/GPL");
MODULE_AUTHOR("fudan_abc");static int __init hello_init(void)
{
        printk(KERN_ALERT "Hello, world! ");
        return 0;
}static void __exit hello_exit(void)
{
        printk(KERN_ALERT "Goodbye, cruel workd! ");
}module_init(hello_init);
module_exit(hello_exit); 第二步,创建Makefileroot@ubuntu:/home/Mydocument/Modules#vi Makeile
obj-m += hello.o
all:
        make -C /usr/src/linux-headers-$(shell uname -r) M=$(shell pwd) modulesclean:
        make -C /usr/src/linux-headers-$(shell uname -r) M=$(shell pwd) clean第三步,编译root@ubuntu:/home/Mydocument/Modules#makeroot@ubuntu:/home/Mydocument/Modules#lshello.c      hello.mod.o   Module.symvers hello.ko   
hello.o   Makefile hello.mod.c    modules.order第四步, 安装模块root@ubuntu:/home/Mydocument/Modules# insmod hello.ko
root@ubuntu:/home/Mydocument/Modules# lsmod
Module                  Size  Used by
hello                  12393  0
rfcomm               38408  0
bnep                 17923  2
bluetooth           148839  10 rfcomm,bnep
parport_pc           32114  0 第五步, 查看输出, 卸载模块root@ubuntu:/home/Mydocument/Modules#dmesg[29665.689269] Hello, world!root@ubuntu:/home/Mydocument/Modules# rmmod hello
root@ubuntu:/home/Mydocument/Modules# lsmod