日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > linux >内容正文

linux

Linux内核模块编程

發布時間:2023/12/10 linux 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Linux内核模块编程 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Linux內核模塊編程

(作者:Baron_wu 禁止轉載)
首先,創建一個內核模塊并插入Linux內核中。這是實驗第一部分
首先查看當前內核模塊使用情概況:lsmod

Module:模塊名
Size:模塊大小
Used by:這些模塊在哪被使用
接下來編寫一個simple.c的程序,當加載和卸載內核模塊時給出適當的消息。
代碼如下:

#include <linux/init.h> #include <linux/module.h> #include <linux/kernel.h>/* This function is called when the module is loaded. */ int simple_init(void) {printk(KERN_INFO "Loading Module\n");return 0; }/* This function is called when the module is removed. */ void simple_exit(void) {printk(KERN_INFO "Removing Module\n"); }/* Macros for registering module entry and exit points. */ module_init( simple_init ); module_exit( simple_exit );MODULE_LICENSE("GPL"); MODULE_DESCRIPTION("Simple Module"); MODULE_AUTHOR("SGG");

Simple_list (模塊入口點) 返回0代表成功 其他值代表失敗
Simple_exit(模塊退出點) 無返回值
兩個函數都沒有參數
接下來兩個宏指令是注冊模塊的入口與出口
Module_init()
Module_exit()

printk()

注意入口點與出口點是如何調用系統函數printk的。Printk()是內核對應的printf(),輸出傳給內核加載模塊,通過使用命令dmesg來查看他的內容。Printk()允許指定優先級標志。它的值在包含文件<linux/printk.h>中給出。
在這個實例中KERN_INFO是優先的。它就像被定義的一個信號消息。
最后三行屬于軟件許可信息,是內核模塊開發的標準格式。
Simple.c用Makefile這個文件來進行編譯。在終端輸入make進行編譯。

Makefile文件內容

obj-m += simple.o all:make -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules clean:make -C /lib/modules/$(shell uname -r)/build M=$(PWD) clean

編譯后將會生成多個文件, 文件simple.ko代表編譯后生成的內核模塊。
首先在含有simple.c 和Makefile的文件目錄下執行make命令(我的這兩個文件在桌面上)

之后將會生成許多文件如下所示:

== Simple.ko是生成的內核模塊 ==
接下來便是加載和移除內核模塊的演示了。
首先在之前生成的編譯模塊的目錄中執行命令:sudo insmod simple.ko 來加載內核模塊

緊接著輸入dmesg來查看當前內核加載情況。

在最后一行可以看到加載成功的消息。
**之后要進行的便是移除內核模塊的操作。**在終端輸入命令:sudo rmmod simple

接著查看是否移除成功。輸入命令:dmesg

可以看到已經成功移除。
因為內核記錄很快就會填滿 所以定期清除緩沖區是有必要的。
執行命令:sudo dmesg -c
到此,Linux內核模塊編程第一部分結束。

總結

以上是生活随笔為你收集整理的Linux内核模块编程的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。