1.編寫模塊
#include <linux/init.h> /*包含__init, __exit, module_init, module_exit等宏定義*/
#include <linux/module.h> /*包含MODULE_LICENSE, MODULE_AUTHOR, MODULE_DESCRIPTION等宏定義*/
#include <linux/kernel.h> /*包含基本的API聲明*/
static int __init hello_init(void)
{
printk("call hello_init\n");
return 0;
}
static void __exit hello_exit(void)
{
printk("call hello_exit\n");
}
module_init(hello_init); /*模塊入口*/
module_exit(hello_exit); /*模塊出口*/
MODULE_LICENSE("GPL"); /*聲明模塊許可證*/
MODULE_AUTHOR("Mr.Wu"); /*聲明作者*/
MODULE_DESCRIPTION("A simple test module driver"); /*模塊的描述*/
2.編寫Makefile
obj-m := hello.o
KERNELDIR := /lib/modules/$(shell uname -r)/build
default:
$(MAKE) -C $(KERNELDIR) M=$(PWD) modules
clean:
rm *.order *.symvers *.mod.c *.ko *.o .*.o.cmd .*.cmd .tmp_versions -rf
3.編譯模塊
make
4.加載模塊
sudo insmod hello.ko
5.查看模塊
sudo lsmod | grep -C5 hello
Module Size Used by
hello 16384 0
rfcomm 77824 2
vmnet 49152 13
vmw_vsock_vmci_transport 28672 0
vsock 36864 1 vmw_vsock_vmci_transport
vmw_vmci 69632 1 vmw_vsock_vmci_transport
6.卸載模塊
sudo rmmod hello
7.查看內核信息
dmesg | tail
[ 8123.247375] CPU0: Package temperature/speed normal
[ 8123.247376] CPU4: Package temperature/speed normal
[ 8123.247376] CPU2: Package temperature/speed normal
[ 8123.247377] CPU7: Package temperature/speed normal
[ 8123.247378] CPU3: Package temperature/speed normal
[ 8123.247411] CPU5: Package temperature/speed normal
[ 8123.247411] CPU1: Package temperature/speed normal
[ 8166.020816] call hello_init
[ 8172.364705] call hello_exit