0%

Ubuntu下开发Linux内核模块

  • 参考链接

    Ubuntu下开发Linux内核模块

  • Linux内核源码头文件位置/usr/src/linux-headers-$(LINUX_KERNEL)

  • 其中的LINUX_KERNEL是Linux内核版本号,使用uname -r获得

    Makefile

    obj-m := test.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

    更新包含文件的目录

  • 远程端安装C/C++等全套插件(不安装的话没有相应的选项

  • Ctrl+Shift+P打开命令

  • 输入C/C++

  • 图 5

  • 然后在输入框里粘贴地址/usr/src/linux-headers-<uname -r的输出>/include/**/usr/src/linux-headers-<uname -r的输出>/arch/x86/include/

  • picture 4

    • 重启设置之后**可能会消失
  • 然后即可找到printk等函数的定义

    • 图 7

但是还是有报错

  • picture 1

代码文件

#include <linux/init.h>
#include <linux/module.h>

MODULE_LICENSE("Dual BSD/GPL");


static int hello_init(void)
{
printk(KERN_ALERT " Hello World enter\n");
return 0;
}
static void hello_exit(void)
{
printk(KERN_ALERT" Hello World exit\n ");
}

module_init(hello_init);
module_exit(hello_exit);

MODULE_AUTHOR("Song Baohua");
MODULE_DESCRIPTION("A simple Hello World Module");

编译结果

  • 图 3
  • insmod安装模块,rmmod移除模块
    • insmod需要sudo
    • 安装的是.ko文件
    • picture 2
  • 使用dmesg查看系统输出
  • 图 4