編寫第一個驅動模塊

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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章