入门内核编程-20220410

今天开始跟着B站学习Linux内核编程,打开一个新世界!
视频地址:https://www.bilibili.com/video/BV1QU4y1n7YD?spm_id_from=333.999.0.0


环境搭建:
1.查看本机的Linux信息


image.png

2.安装对应的包


image.png

3.查看安装内容
image.png

4.build是实际的资源指向(makefile中要用到)

1.目标:在Linux内核中添加一个模块,该模块的用途是打印两条信息
2.具体实现:

//在~/Desktop/Demo/20220410 目录下创建Hello.c文件实现具体功能:
//#include
#include

static int __init hello_init(void){
    printk(KERN_INFO "HELL MY FIRST MODULE TEST");
    return 0;
}

static void __exit hello_exit(void){
    printk(KERN_INFO "GOODBYE MY FIRST MODULE TEST");
}

module_init(hello_init);
module_exit(hello_exit);

MODULE_LICENSE("Dual BSD/GPL");
MODULE_AUTHOR("KGZ");
MODULE_VERSION("V1.0");

//在~/Desktop/Demo/20220410 目录下创建Makefile文件用于编译:
CONFIG_MODULE_SIG=n
KERNELDIR ?= /lib/modules/$(shell uname -r)/build/
//KERNELDIR ?= /lib/modules/4.15.0-142-generic/build/
PWD := $(shell pwd)
obj-m += Hello.o  //注意这里是Hello,要跟源文件名保持一致,否则编不过
all:
    make -C /lib/modules/4.15.0-142-generic/build/ M=$(shell pwd) modules
clean:
    rm -rf *.o *~ core .depend .*.cmd *.ko *.mod.c .tmp_versions *.mod *.order *.symvers

3.编译


image.png

4.编译完成之后加载模块

sudo insmod Hello.ko

5.查看模块是否加载成功


image.png

6.查看打印信息


image.png

7.卸载模块
sudo rmmod Hello

8.清空dmesg信息

sudo dmesg -c

实践中遇到的坑:
1.Makefile中obj-m后面的文件名要和文件夹下的文件名保持一致,否则会编不过
2.第一次加载模块报错:

module verification failed: signature and/or required key missing - tainting kernel

//修复方法参考:https://blog.csdn.net/caoyahong114/article/details/51744748

你可能感兴趣的:(入门内核编程-20220410)