歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> Linux編程

Ubuntu 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