美文网首页程序媛&程序猿云计算技术我用 Linux
Linux内核模块的加载和卸载实验

Linux内核模块的加载和卸载实验

作者: SophieSg | 来源:发表于2017-03-24 19:26 被阅读252次

    linux提供了module机制,能够动态的加载内核模块。本实验在centOS7下执行。

    hello kernel代码

    hello.c

    #include<linux/module.h>
    #include<linux/kernel.h>
    #include<linux/init.h>
    
    static int __init hello_init(void)
    {
            printk("<1>Hello Kernel!\n"); /*立即输出信息*/
            return 0;
    }
    
    static void __exit hello_cleanup(void)
    {
            printk("<1>See you,Kernel!\n");
    }
    
    module_init(hello_init);        /*进入内核的时候,调用hello_init        */
    module_exit(hello_cleanup);     /*离开内核的时候,调用hello_cleanup     */
    MODULE_LICENSE("GPL");          /*协议*/
    

    Makefile

    obj-m += hello.o                         #由此目标文件生成模块 
    CURRENT_PATH := $(shell pwd)             #当前所在的路径
    LINUX_KERNEL := $(shell uname -r)        #内核的版本号
    
    #内核代码所在的路径    
    LINUX_KERNEL_PATH := /usr/src/kernels/$(LINUX_KERNEL)
    
    #编译
    all:
      make -C $(LINUX_KERNEL_PATH) M=$(CURRENT_PATH) modules   
    
    #清除编译生成的文件
    clean:
      make -C $(LINUX_KERNEL_PATH) M=$(CURRENT_PATH) clean
    

    执行make

    [root@controller hello]# make
    make -C /usr/src/kernels/3.10.0-514.10.2.el7.x86_64         M=/usr/src/kernels/3.10.0-514.10.2.el7.x86_64/hello              modules   
    make[1]: Entering directory `/usr/src/kernels/3.10.0-514.10.2.el7.x86_64'
      CC [M]  /usr/src/kernels/3.10.0-514.10.2.el7.x86_64/hello/hello.o
      Building modules, stage 2.
      MODPOST 1 modules
      CC      /usr/src/kernels/3.10.0-514.10.2.el7.x86_64/hello/hello.mod.o
      LD [M]  /usr/src/kernels/3.10.0-514.10.2.el7.x86_64/hello/hello.ko
    make[1]: Leaving directory `/usr/src/kernels/3.10.0-514.10.2.el7.x86_64'
    

    执行insmod加载内核模块

    sudo insmod hello.ko
    

    lsmod 可以查看到自己的模块

    lsmod | grep hello
    

    dmesg可以看到打印的log

    [root@controller hello]# dmesg | tail -1
    [88012.521835] <1>Hello Kernel!
    

    执行rmmod卸载内核模块

    sudo rmmod hello.ko
    

    dmesg可以看到打印的log

    [root@controller hello]# dmesg | tail -1
    [88108.264491] <1>See you,Kernel!
    

    相关文章

      网友评论

        本文标题:Linux内核模块的加载和卸载实验

        本文链接:https://www.haomeiwen.com/subject/jtzfottx.html