放個編譯上面模塊的 Makefile
obj-m := hello.o all: make -C /lib/modules/$(shell uname -r )/build M=$(shell pwd) modules clean: make -C /lib/modules/$(shell uname -r )/build M=$(shell pwd) clean |
給 Makefile 放到上面 hello.c 的相同的目錄中(如果上面寫的模塊代碼叫 hello.c 的話)。然后使用 make 就能編譯了。
insmod lsmod rmmod
調用 insmod 時會給需要的模塊加載進內核,會給 ko 的文件以目標代碼加載。裝載時會調用 module_init 指定的函數。退出也調用相應的 module_exit.
lsmod 可以顯示你寫的模塊,其實是讀 /proc/modules 。接下來我寫寫怎么樣自己通過內核來建 proc 文件。
模塊加載參數
如果在模塊加載時,想指定參數,也提供了相應的頭文件
#include <linux/moduleparam.h> static int test; module_param(test, int , 0644); |
這樣以后,直接在內核模塊內使用 test 的變量就行了。
模塊的信息
在程序中可以為模塊加一些描述,發行版權聲明,和作者。
MODULE_LICENSE( "GPL" ); MODULE_DESCRIPTION( "Test" ); MODULE_AUTHOR( "xxx" ); |
模塊的符號導出
在 Perl 中,模塊是可以導出變量和方法到其它的模塊中的。在 Linux 內核中也有這樣的方法。
EXPORT_SYMBOL(name); EXPORT_SYMBOL_GPL(name); |
這二個可以導出指定的全局變量,也可以是方法。這個要加載 的頭文件,不要忘記了。
其它的模塊要使用這個,直接使用 extern void name(void); 就可以使用了。這些導出的函數只能內核和內核模塊使用。不能用戶調用,可以由 /proc/kallsyms 來查看導出的變量和方法
實例
寫個內核模塊,通過 proc 可以見到一些信息,通過 proc 的讀和寫的功能。來實現設置和讀取信息。
proc 介紹
proc 是一個非常方便的用來動態的向 Linux 內核加入和禁用代碼的一個方法。
proc/sys 中是用來配置內核的參數,可以通過 sysctl -w key=value
象普通文件可以支持 open,read,write,close
原文轉自:http://blogread.cn/it/article/4630