基于 Linux 内核驱动模块的简介

news/2025/2/14 0:23:27/

基于 Linux 内核驱动模块的简介


最简内核驱动原理

  内核编程的最简单表现就是内核模块, 它可以作为一段可动态加载的成熟的内核级的代码使用。使用时一般不限制模块个数和类型,即插即用, 高效快捷、 性能稳定。缺点为性能和内存利用缺失, 模块间的依赖关系有着严密的逻辑结构,使用不当可能造成系统崩溃, 因为对于一般程序而言, 内核都会有安全保护机制以防其止造成内核故障。 但是在运行内核级代码的时候, 使用不当可能会出现异常而影响整个系统,造成系统锁定、内存泄漏或引入死循环等问题。 所以在编写内核代码时首先要保证代码的严谨性,其次要遵循内核库的标准, 最后在卸载内核模块时要回收内存和清理系统垃圾。
   在 PC 机上通过交叉编译器编译内核模块时,会根据包含的头文件对源码进行索引, 因此必须要保证代码编译依赖源码和目标机运行内核源码版本相符。此环境中编译的模块才能(也是只能) 被运行于该版本内核系统中,否则一个微小的异常就可能引起内核锁定或模块编译异常失败。 所以编译内核模块必需有相对应的内核源码和相关的编译配置文件以及所需要编译的程序代码。以一个最简驱动模块举例, 其编译时所需的几个主要部分如图所示:
在这里插入图片描述
以一个最简字符驱动代码为例,其主要包含如表 2-1 所示的几项内容。
在这里插入图片描述

  使用 make 命令编译内核驱动模块时,会根据 Makefile 文件中的 KERNELDIR 参数索引到 Linux 内核源码中去编译[5], 结合所需资源, 在当前目录下生成很多临时文件以及驱动模块文件*.ko。 *.ko 文件即所需要的内核驱动模块, 大致编译过程为如图所示。 首先调用 Makefile, 然后分为两条路径进行,一是通过添加的源码路径搜索需要的编译用的源码, 会索引源码相关目录,添加对应头文件等, 然后整合资源信息在 Makefile 同级目录下找到需要编译的.c 文件, 编译需要的.ko 文件。
在这里插入图片描述


http://www.ppmy.cn/news/1264302.html

相关文章

生日备忘录(自定义排序)

题目: 实现简易的生日备忘录。温暖的亲情是前进的动力,别忘记在家人生日时送 去祝福。定义类 Member 描述家庭成员,每位家人有自己的姓名 name 和出生日期 birthday,出生日期应描 述为由 year、month、day 组成的 Date 类。在 ma…

xml文本转Java对象

Java对象转String public static String toData(Object object) throws Exception {JAXBContext jc JAXBContext.newInstance(object.getClass());Marshaller m jc.createMarshaller();StringWriter output new StringWriter(2048);m.marshal(object, output);String data …

如何访问内部网络做内网穿透

项目:https://github.com/ehang-io/nps 有个公网服务器,搭建服务端。 然后客户端使用: -server是服务端的访问方式。-vkey是秘钥。 ./npc -server192.227.19.12:8024 -vkeyoies8gq3wml -typetcp然后在服务端配置TCP隧道即可。

老有所依:TSINGSEE青犀养老院智能视频监管方案

养老院智能监控方案是为了提高养老院内老人的安全和护理质量,利用智能技术与监控设备进行全方位的监控和管理,可以加强对老人的监护和护理,提高养老院的服务质量和安全性。 旭帆科技基于视频技术与AI智能分析技术构建的养老院智能视频监控方…

为什么要用向量检索

之前写过一篇文章,是我个人到目前阶段的认知,所做的判断。我个人是做万亿级数据的搜索优化工作的。一直在关注任何和搜索相关的内容。 下一代搜索引擎会什么?-CSDN博客 这篇文章再来讲讲为什么要使用向量搜索。 在阅读这篇文章之前呢&#xf…

python+pytest接口自动化(12)-自动化用例编写思路 (使用pytest编写一个测试脚本)

经过之前的学习铺垫,我们尝试着利用pytest框架编写一条接口自动化测试用例,来厘清接口自动化用例编写的思路。 我们在百度搜索天气查询,会出现如下图所示结果: 接下来,我们以该天气查询接口为例,编写接口测…

一个Oracle Application Container的示例

本例基本涵盖了Oracle Multitenant功能中application container的以下内容: 创建application container/root创建application PDB创建application SEED在application root中安装application在application root中升级application同步application 整个过程如下 创建…

Nmap脚本的应用场景

网络安全检测和漏洞扫描 Nmap脚本是一种强大的工具,可以用于网络安全检测和漏洞扫描。在渗透测试工程师的角度下,本文将详细阐述Nmap脚本的应用场景,以及如何使用Nmap脚本进行网络安全检测和漏洞扫描。 一、Nmap脚本的应用场景 Nmap脚本在渗…