linux 内核模块的编写和安装

linux 内核模块的编写和安装

1. 查看自己系统的内核版本号:
uname -r 

查看系统版本号

2.centos 需要下载安装源码包

uname -r 是你的系统的版本号,比如我的是6.2.7-1.el7.elrepo.x86_64,那么我需要下载这个包kernel-ml-devel-6.2.7-1.el7.elrepo.x86_64.rpm

下载网址: ELRepo | HomePage
找到你对应的rpm安装包,我这里是
https://elrepo.org/linux/kernel/el7/x86_64/RPMS/kernel-ml-devel-6.2.7-1.el7.elrepo.x86_64.rpm

wget https://elrepo.org/linux/kernel/el7/x86_64/RPMS/kernel-ml-devel-6.2.7-1.el7.elrepo.x86_64.rpm
rpm -ivh kernel-ml-devel-6.2.7-1.el7.elrepo.x86_64.rpm

安装后位于:/usr/src/kernels/6.2.7-1.el7.elrepo.x86_64,这个路径后面Makefile中会用到。

3. 升级GCC

参考这篇博客
将gcc 4.7升级到gcc 9.3

yum -y install centos-release-scl
yum -y install devtoolset-9-gcc devtoolset-9-gcc-c++ devtoolset-9-binutils
scl enable devtoolset-9

bash需要注意的是scl命令启用只是临时的,退出shell或重启就会恢复原系统gcc版本。如果要长期使用gcc 9.3的话:

echo "source /opt/rh/devtoolset-9/enable" >>/etc/profile
4. 编写内核模块helloworld.c
#include <linux/init.h>
#include <linux/kernel.h>
#include <linux/module.h>


static int __init lkm_init(void)
{
        printk("Hello World![--ed3276--]2023-03-17\n");
        return 0;
}


static void __exit lkm_exit(void)
{
        printk("Goodbye!\n");
}


module_init(lkm_init);
module_exit(lkm_exit);


MODULE_LICENSE("GPL");


5. 编写Makefile文件
obj-m:=helloworld.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

6. 编译make
[zhangxiuli@special-hats-2 Mooc]$ make
make -C /usr/src/kernels/6.2.7-1.el7.elrepo.x86_64 M=/home/zhangxiuli/Mooc modules
make[1]: Entering directory `/usr/src/kernels/6.2.7-1.el7.elrepo.x86_64'
  CC [M]  /home/zhangxiuli/Mooc/helloworld.o
  MODPOST /home/zhangxiuli/Mooc/Module.symvers
  CC [M]  /home/zhangxiuli/Mooc/helloworld.mod.o
  LD [M]  /home/zhangxiuli/Mooc/helloworld.ko
make[1]: Leaving directory `/usr/src/kernels/6.2.7-1.el7.elrepo.x86_64'

7. 安装内核模块
sudo insmod helloworld.ko
8. 查看安装后的内核模块,可以看到helloworld
lsmod
9. 卸载内核模快
sudo rmmod helloworld
10. 查看内核模块中打印
dmesg
9. 卸载内核模快
sudo rmmod helloworld
10. 查看内核模块中打印
dmesg

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值