Advertisement

linux-自定义Linux内核模块

阅读量:

自定义Linux内核模块

  • 开发平台
    • 构建源代码模块

    • 配置编译指令文件

    • 执行构建操作

    • 部署软件组件

    • 检查安装结果

    • 卸载模块

      • 验证是否成功

开发环境

Linux系统版本:Ubuntu 18.04
工具:vim、make
注:其他linux系统也可以

编写模块文件

源码文件为helloworld.c
内容如下:

复制代码
    #include <linux/init.h>
    #include <linux/kernel.h>
    #include <linux/module.h>
    
    static int __init lkm_init(void){
        printk("hello world\n");
        return 0;
    }
    
    static void __exit lkm_exit(void){
        printk("Goodbye\n");
    }
    
    module_init(lkm_init);
    module_exit(lkm_exit);
    
    MODULE_LICENSE("GPL");

尽管文件扩展名为.c(即.Composer),但仍需注意其语法遵循的是C语言规范而非完全的标准C语言。此外,在编写模块时是以内核为框架进行组织的

编写Makefile

在helloworld.c相同目录下新建Makefile文件,内容如下:

复制代码
    obj-m:=helloworld.o
    
    CURRENT_PATH:=$(shell pwd)
    LINUX_KERNEL:=$(shell uname -r)
    LINUX_KERNEL_PATH:=/usr/src/linux-headers-$(LINUX_KERNEL)
    
    all:
        make -C $(LINUX_KERNEL_PATH) M=$(CURRENT_PATH) modules
    
    clean:
        make -C $(LINUX_KERNEL_PATH) M=${CURRENT_PATH) clean

编译模块文件

执行命令

复制代码
    make

得到helloworld.ko文件,即为模块文件

安装模块

执行命令

复制代码
    sudo insmod helloworld.ko

验证是否成功

执行命令

复制代码
    dmsg

查看输出了我们代码中打印的 hello world

执行

复制代码
    lsmod | grep helloworld

可以看到我们的模块已经出现了

卸载模块

执行

复制代码
    sudo rmmod helloworld

验证是否成功

执行命令

复制代码
    dmsg

查看输出了我们代码中打印的 Goobye

执行

复制代码
    lsmod | grep helloworld

可以看到我们的模块已经不在了

全部评论 (0)

还没有任何评论哟~