赞
踩
在Linux环境下编译.ko
内核驱动文件(运行于本linux系统,非嵌入式),需要保证/lib/modules/xxx
的版本与内核版本保持一致,否则编译后的驱动无法运行!
如/lib/modules/xxx/build
文件夹缺失,需要进行此步骤。
命令如下:
uname -a # 获取当前内核版本
apt-cache search linux-image # 搜索相关版本
sudo apt-get install linux-image-6.0.0-kali6-amd64 # 更新内核
sudo apt-get install linux-headers-6.0.0-kali6-amd64 # 安装内核头文件
注:本机的Linux内核原版本为
6.0.0-kali3-amd64
,更新内核版本后重启,使用uname
命令可以看到内核版本发生了改变。
安装linux-image-6.0.0-kali6-amd64
更新内核后,/lib/modules/
下会出现两个文件夹,分别是6.0.0-kali3-amd64
和6.0.0-kali6-amd64
。
只有在执行sudo apt-get install linux-headers-6.0.0-kali6-amd64
安装内核头文件后,6.0.0-kali6-amd64文件夹下才会出现build
文件夹。
#include <linux/module.h> #include <linux/kernel.h> #include <linux/init.h> // 当驱动被加载的时候,执行此函数 static int __init hello_init(void) { printk(KERN_ALERT, "welcome, walker!\n"); return 0; } // 当驱动被卸载的时候,执行此函数 static void __exit hello_exit(void) { printk(KERN_ALERT, "bye!\n"); } // 版权声明 MODULE_LICENSE("GPL"); // 以下两个函数属于 Linux 的驱动框架,只要把驱动两个函数地址注册进去即可。 module_init(hello_init); module_exit(hello_exit);
Makefile文件
obj-m := first.o
KERNELDIR := /lib/modules/`uname -r`/build
PWD := $(shell pwd)
modules:
$(MAKE) -C $(KERNELDIR) M=$(PWD) modules
clean:
rm -rf *.o *.mod.c *.order *.symvers
sudo insmod first # 安装first.ko驱动模块
lsmod # 显示内核驱动模块列表
sudo rmmod first # 卸载该模块
dmesg # 打印printk输出的信息
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。