Linux内核模块编程
Linux內(nèi)核模塊編程
(作者:Baron_wu 禁止轉(zhuǎn)載)
首先,創(chuàng)建一個內(nèi)核模塊并插入Linux內(nèi)核中。這是實驗第一部分
首先查看當前內(nèi)核模塊使用情概況:lsmod
Module:模塊名
Size:模塊大小
Used by:這些模塊在哪被使用
接下來編寫一個simple.c的程序,當加載和卸載內(nèi)核模塊時給出適當?shù)南ⅰ?/strong>
代碼如下:
Simple_list (模塊入口點) 返回0代表成功 其他值代表失敗
Simple_exit(模塊退出點) 無返回值
兩個函數(shù)都沒有參數(shù)
接下來兩個宏指令是注冊模塊的入口與出口
Module_init()
Module_exit()
printk()
注意入口點與出口點是如何調(diào)用系統(tǒng)函數(shù)printk的。Printk()是內(nèi)核對應(yīng)的printf(),輸出傳給內(nèi)核加載模塊,通過使用命令dmesg來查看他的內(nèi)容。Printk()允許指定優(yōu)先級標志。它的值在包含文件<linux/printk.h>中給出。
在這個實例中KERN_INFO是優(yōu)先的。它就像被定義的一個信號消息。
最后三行屬于軟件許可信息,是內(nèi)核模塊開發(fā)的標準格式。
Simple.c用Makefile這個文件來進行編譯。在終端輸入make進行編譯。
Makefile文件內(nèi)容
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代表編譯后生成的內(nèi)核模塊。
首先在含有simple.c 和Makefile的文件目錄下執(zhí)行make命令(我的這兩個文件在桌面上)
之后將會生成許多文件如下所示:
== Simple.ko是生成的內(nèi)核模塊 ==
接下來便是加載和移除內(nèi)核模塊的演示了。
首先在之前生成的編譯模塊的目錄中執(zhí)行命令:sudo insmod simple.ko 來加載內(nèi)核模塊
緊接著輸入dmesg來查看當前內(nèi)核加載情況。
在最后一行可以看到加載成功的消息。
**之后要進行的便是移除內(nèi)核模塊的操作。**在終端輸入命令:sudo rmmod simple
接著查看是否移除成功。輸入命令:dmesg
可以看到已經(jīng)成功移除。
因為內(nèi)核記錄很快就會填滿 所以定期清除緩沖區(qū)是有必要的。
執(zhí)行命令:sudo dmesg -c
到此,Linux內(nèi)核模塊編程第一部分結(jié)束。
總結(jié)
以上是生活随笔為你收集整理的Linux内核模块编程的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Python多线程豆瓣影评API接口爬虫
- 下一篇: oracle 怎么创建类型,ORACLE