歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> Ubuntu Linux 模塊編程

Ubuntu Linux 模塊編程

日期:2017/3/1 10:08:35   编辑:Linux編程

首先需要構建系統內核的源代碼樹,因為 模塊屬於kernel編程了,和用戶空間的c語言變成不同。他要依附於內核源碼樹的存在而存在。

內核模塊

一種機制能讓內核文件(zImage或bzImage)本身並不包含某組件,而是在該組件需要被使用的時候,動態地添加到正在運行的內核中Linux提供了一種叫做“內核模塊”的機制,就可以實現以上效果。

特點
•模塊本身並不被編譯進內核文件(zImage或者bzImage)
• 可以根據需求,在內核運行期間動態的安裝或卸載。

第一步,創建源代碼:hello.c

root@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!\n\n\n");
return 0;
}

static void __exit hello_exit(void)
{
printk(KERN_ALERT "Goodbye, cruel workd!\n\n\n");
}

module_init(hello_init);
module_exit(hello_exit);

第二步,創建Makefile

root@ubuntu:/home/Mydocument/Modules#vi Makeile


obj-m += hello.o
all:
make -C /usr/src/linux-headers-$(shell uname -r) M=$(shell pwd) modules

clean:
make -C /usr/src/linux-headers-$(shell uname -r) M=$(shell pwd) clean

第三步,編譯

root@ubuntu:/home/Mydocument/Modules#make

root@ubuntu:/home/Mydocument/Modules#ls

hello.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

Copyright © Linux教程網 All Rights Reserved