在Linux环境下编译.ko内核驱动文件(运行于本linux系统,非嵌入式),需要保证/lib/modules/xxx的版本与内核版本保持一致,否则编译后的驱动无法运行!

1.更新内核版本及headers

/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命令可以看到内核版本发生了改变。

![在这里插入图片描述](https://img-blog.csdnimg.cn/912dff3e9d58444a85dc7c0089dcaf64.png)


安装linux-image-6.0.0-kali6-amd64更新内核后,/lib/modules/下会出现两个文件夹,分别是6.0.0-kali3-amd646.0.0-kali6-amd64
只有在执行sudo apt-get install linux-headers-6.0.0-kali6-amd64安装内核头文件后,6.0.0-kali6-amd64文件夹下才会出现build文件夹。

2.编写并编译测试ko驱动文件

  1. 测试代码:first.c
#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

3.驱动的加载与卸载

生成first.ko文件后,执行如下命令:

sudo insmod first        # 安装first.ko驱动模块
lsmod                   # 显示内核驱动模块列表
sudo rmmod first        # 卸载该模块
dmesg                   # 打印printk输出的信息

kali2022编译Linux内核驱动ko文件相关推荐

  1. 编译linux内核生成.ko,Linux内核编译完整过程

    通过网上的资料我自己的实际内核编译,我把对Linux内核编译的过程写在这里,也许对其他的Linux爱好者的编译学习有些帮助,其中很大部分是网上的资料,另外就是我在实际编译过程中的一些实际经验. 内核简 ...

  2. 树莓派Linux内核编译、文件系统、Linux内核驱动基础框架、驱动测试步骤、总线地址

    树莓派高阶开发课程 1. ubuntu18.04版本安装          让程序猿搭建环境太搞笑了,轻松easy! ========================================= ...

  3. 如何编译Linux内核文件

    如何编译Linux内核文件 参考:朱有鹏Uboot的全集 前言:我们的Linux内核文件动则数万个文件,很多个子文件夹,当然是使用Makefile管理了,但是是不是真的仅仅只是make一下就可以了呢? ...

  4. 如何解决编译linux内核(解决声卡问题),遭遇fatal error: linux/limits.h: 没有那个文件或目录

    如何解决编译linux内核(解决声卡问题),遭遇fatal error: linux/limits.h: 没有那个文件或目录 参考文章: (1)如何解决编译linux内核(解决声卡问题),遭遇fata ...

  5. 树莓派基于Linux内核驱动开发详解

    一.驱动认知 首先理解Linux内核框图 文件系统认知,Linux内核框图 1.什么是驱动 linux内核驱动.软件层面上的驱动 广义上是指:这一段代码操作了硬件去动,所以这一段代码就叫硬件的驱动程序 ...

  6. 嵌入式 Linux 内核驱动开发【The first day: 36093万字】

    嵌入式 Linux 内核驱动开发[1] 嵌入式 Linux 内核驱动开发前言 第1章 Linux 内核裁剪和定制 [1]Linux 内核开发简介 [2] Linux 源码阅读工具 [1.2.1]Sou ...

  7. Linux内核开发_1_编译LInux内核

    目录 1. 准备工作 1.1 学习环境 1.2 下载Linux内核源码 1.3 解压Linux内核 1.4 目录结构介绍 2. Linux内核配置 2.1 配置选项 1. make config 2. ...

  8. debian 编译linux内核源码,安装debian总结以及编译linux内核

    1. 安装debian 使用unetbootin(http://unetbootin.sourceforge.net/)来创建启动盘,并且下载debian的基本包. 将磁盘进行压缩操作,并且保留出一个 ...

  9. 安装debian总结以及编译linux内核

    1. 安装debian 使用unetbootin(http://unetbootin.sourceforge.net/)来创建启动盘,并且下载debian的基本包. 将磁盘进行压缩操作,并且保留出一个 ...

最新文章

  1. Lancet:支持奋战在疫情一线的中国科研技术工作者
  2. php 判断上传的是否是图片,php图片上传检测是否为真实图片格式
  3. 阿里云mysql数据库引擎_在阿里云RDS数据库服务器中将MySQL InnoDB引擎表转为压缩格式...
  4. [Android Pro] Android源码编译后,再重编译所需要做的清理工作
  5. 实际部署遇到的一些问题
  6. ios 上运行linux,你可曾想过在iOS上跑Linux?
  7. Java黑皮书课后题第6章:**6.31(金融应用:信用卡号的合法性验证)和**6.32 编写程序,提示用户输入一个long型整数的信用卡号码,显示这个数字是合法的还是非法的
  8. 获取列表中的最大的N项和最小的N项
  9. eclipse类文件无法找到_「Revit技巧」新建项目和族时无法找到样板文件(丢失)?...
  10. 洪学海(1967-),男,博士,中国科学院计算技术研究所研究员。
  11. Bootstrap 模态框插件modal的调用方式
  12. python多大学_用Python看看你的大学A4纸还剩多少!
  13. 基于Jenkins的嵌入式软件持续集成方法
  14. 基于JAVA+SpringMVC+Mybatis+MYSQL的驾校预约系统
  15. 2016项目经验总结
  16. stagefright_StageFright:Android操作系统中最易受攻击的错误
  17. stm32c6t6硬件iic接口的使用--以0.96寸oled为例
  18. 使用Mysql函数生成指定的自增序列号
  19. Oracle修改SEQUENCE起始值
  20. SpringBoot整合thymeleaf及常用th:标签使用方法

热门文章

  1. 安装Mac版Mysql卡在Installation阶段,彻底清理mysql并重装mysql
  2. TTGO T-Watch-2020 编程系列(一)基于ESP32可编程手表简介
  3. JWT和token以及MD5
  4. 使用PHP与SQL搭建可搜索的加密数据库
  5. 信用卡逾期项目初探(数据清洗与特征选择)
  6. 好看的css阴影效果
  7. 靶中化合物设计/靶点及信号通路验证之酶抑制剂靶点预测
  8. animate.css 自定义动画
  9. 独家 | 使用Python了解分类决策树(附代码)
  10. 英语发音规则---(e)s和-(e)d的读音规则