当前位置: 首页 > news >正文

linux内核驱动-在内核代码里添加设备结点

linux中,一切皆文件

我们在用户层用一些系统函数(如:fopen等等)时,会进入内核,内核会在字符注册了的设备号链表中查找。如果找到就运行我们写的设备文件的(驱动)函数

我们在前面已经讲了怎么创建一个内核程序,我们在驱动文件的目录下创建我们自己的驱动程序

比如我们创建一个test.c,代码如下

其实都是套模版,可以看到用不同颜色标出来的三个部分。

绿色(设备号):主设备号(最大值4095)与次设备号。(框选失误,52-54行为其他东西)

系统给我们定一个一个宏,如下。我们只需要调用它

蓝色(方法):

系统给我们定义了以下函数指针

我们只需要去重定义他们,就可以在用户层调用它。

方法结构体里的.open = open是结构体的一种特殊用法。我们只需要生命我们要调用的方法。类似于部分赋值。

红色:这是最基础的两个函数,缺一不可,一个初始化函数,一个注销函数。

来看看里面的一些东西

1.struct cdev结构体(链式)

操作系统给我们,方便管理维护驱动程序的结构体

2.cdev_add   添加设备号到cdev结构体

3.cdev_init   把方法结构体file_operations添加进cdev结构体

4.register_chrdev_region   注册设备驱动到操作系统

最后demo_exit就是一些注销的函数, 我们可以看到,这两个函数开始有一些不一样的东西

这是我们在编写内核驱动代码时特别的写法,目的就是告诉操作系统这个函数是内核的初始化以及追销的函数。在编写内核驱动代码时,很多函数都和用户层不一样,这时的代码编写更为谨慎。

出错处理

由于每一步出错都需要把前面产生的新空间全部释放,所以越后面的错误需要释放的就越多,使用goto语句把错误处理都放在后面,看起来没那么冗余

添加下载驱动

1.在同层目录(linux-2.6.32.2/drivers/char)下修改Kconfig文件

按模版修改即可

2.Makefile添加新建驱动文件

2.menuconfig(不懂的可以去搜一下)

它被称为内核活地图,可以根据可视化图形修改我们的驱动开关

我们直接在linux-2.6.32.2(解压出来的顶层目录)下make menuconfig    如图

根据以上路径找到我们的test

也可以直接  /  进入搜索我们的搜索。

上图  *  代表开启,可以通过Tab键或者  y/n选择是否开启,相应的在我们的顶层Makefile里就会改变

接下来直接Makefile编译就行了

 还是和以前的步骤一样

到这里我们的内核就添加了一个我们自己的驱动,但这个驱动文件里只有一些打印,我们想要实现硬件功能怎么办呢。

其实还是对寄存器的操作,然后把这些操作再移植到之前提到的系统给我们提供的函数(指针),最后去调用这些函数就行了。这里就不多说了,直接上代码。

在与板子挂载的nfs目录下创建程序

另一端链接板子,还是通过tftp下载,bootm命令运行uImage内核

然后在创建设备结点

就会发现我们/dev/目录下多了一个led的设备

我们在电脑客户端编译arm版可执行程序,此时板子也共享了这个程序,然后就可以直接运行了

相关文章:

linux内核驱动-在内核代码里添加设备结点

linux中,一切皆文件 我们在用户层用一些系统函数(如:fopen等等)时,会进入内核,内核会在字符注册了的设备号链表中查找。如果找到就运行我们写的设备文件的(驱动)函数 我们在前面已经…...

【算法优选】 动态规划之简单多状态dp问题——贰

文章目录 🎋前言🌴[买卖股票的最佳时机含冷冻期](https://leetcode.cn/problems/best-time-to-buy-and-sell-stock-with-cooldown/description/)🚩题目描述🚩算法思路:🎈状态表示:🎈…...

【算法刷题 | 二叉树 06】4.10( 路径总和、路径总和 || )

文章目录 13.路径总和13.1问题13.2解法一:递归13.2.1递归思路(1)确定递归函数参数以及返回值(2)确定终止条件(3)确定递归逻辑 13.2.2代码实现 14.路径总和 ||14.1问题14.2解法一:递归…...

代码学习记录37----动态规划

随想录日记part37 t i m e : time: time: 2024.04.06 主要内容:今天开始要学习动态规划的相关知识了,今天的内容主要涉及四个方面: 完全背包;零钱兑换 II ;组合总和 Ⅳ 和单词拆分 …...

Spring Boot:Web开发之三大组件的整合

Spring Boot 前言Spring Boot 整合 ServletSpring Boot 整合 FilterSpring Boot 整合 Listener前言 在 Web 开发中,Servlet 、Filter 和 Listener 是 Java Web 应用中的三大组件。Servlet 是 Java 代码,通过 Java 的 API 动态的向客户端输出内容。Filter 是处于客户端与服务…...

2024.3.15力扣每日一题——卖木头块

2024.3.15 题目来源我的题解方法一 记忆化搜索(自顶向下)方法二 动态规划(自底向上) 题目来源 力扣每日一题;题序:2312 我的题解 方法一 记忆化搜索(自顶向下) 用 f(x,y)表示当木…...

vue快速入门(七)内联语句

注释很详细&#xff0c;直接上代码 上一篇 新增内容 button点击事件绑定内联语句写法与要求 源码 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-wid…...

Docker实战教程 第2章 Docker基础

3-1 Docker介绍 什么是Docker 虚拟化&#xff0c;容器 Docker 是一个开源的应用容器引擎&#xff0c;基于 Go 语言 并遵从Apache2.0协议开源。 Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中&#xff0c;然后发布到任何流行的 Linux 机器上&…...

【S32K3 MCAL配置】-3.2-CANFD配置-发送“经典CAN/CANFD标准帧“和“经典CAN/CANFD扩展帧“(基于MCAL+FreeRTOS)

"><--返回「Autosar_MCAL高阶配置」专栏主页--> 目录 实现的架构:基于MCAL层 前期准备工作: 1 评估板S32K312EVB-Q172中CAN外设...

【airtest】自动化入门教程(四)Poco元素定位

目录 一、基础操作 1、通过属性名等方式 2、通过属性组合 3、子节点方式 4、子节点加属性组合方式 5、孙节点offspring 6、兄弟节点sibling 7、父节点parent 8、正则表达式 9、直到某个元素出现 10、直到某个元素消失 二、通过局部坐标定位 1、使用局部坐标系的cli…...

Go语言中如何处理goroutine和循环变量

对goroutine和循环变量处理不当可能是Go开发人员在编写并发应用程序时最常犯的错误之一。让我们看一个具体的例子,然后我们将定义发生此类错误的条件以及如何防止发生这类错误。 在下面的示例中,我们初始化一个切片,然后在作为新goroutine执行的闭包中访问这个元素: s := …...

Pytest教程:一文了解如何使用 pytest_runtest_makereport 修改 Pytest 测试报告内容

在软件测试过程中&#xff0c;生成清晰、易读的测试报告对于团队交流、问题追踪和项目进度评估至关重要。Pytest 是一个功能强大的 Python 测试框架&#xff0c;它不仅支持丰富的断言和测试用例组织方式&#xff0c;还提供了灵活的插件系统和钩子函数&#xff0c;可以帮助我们定…...

《高通量测序技术》分享,生物信息学生信流程的性能验证,以肿瘤NGS基因检测为例。

这是这本书&#xff0c;第四章第五节的内容&#xff0c;这一部分是以NGS检测肿瘤基因突变为例&#xff0c;描述了其原理和大概流程&#xff0c;这和以前我分享的病原宏基因组高通量测序性能确认方案可以互相补充&#xff0c;大家可以都看一下&#xff0c;但是想要真正的弄懂&am…...

Django+Celery框架自动化定时任务开发

本章介绍使用DjCelery即DjangoCelery框架开发定时任务功能&#xff0c;在Autotestplat平台上实现单一接口自动化测试脚本、业务场景接口自动化测试脚本、App自动化测试脚本、Web自动化测试脚本等任务的定时执行、调度、管理等&#xff0c;从而取代Jenkins上的定时执行脚本和发送…...

解决element-plus table组件 fixed=“right“(left)浮动后横向滚动文字穿透的问题

BUG 版本&#xff1a;element-plus 2.6.1 浏览器&#xff1a;360极速浏览器22.1 (Chromium内核) 组件&#xff1a;el-table组件 问题&#xff1a;在头部/尾部浮动加上斑马条纹后&#xff0c;横向滚动存在文字穿透的问题。具体如图&#xff1a; 白色背景行的文字&#xff0c…...

【opencv】示例-distrans.cpp 距离变换

stuff.jpg #include <opencv2/core/utility.hpp> // 包含OpenCV中的核心功能支持库 #include "opencv2/imgproc.hpp" // 包含OpenCV中的图像处理库 #include "opencv2/imgcodecs.hpp" // 包含OpenCV中的图像编解码库 #include "open…...

LVGL V8 代码细读——极致的链表使用

极致的链表的使用 序章碎碎念从redis源码里掏出来的adlist极致的精简的list.hlvgl对链表的巧思lv_ll尾记 序章碎碎念 对于链表&#xff0c;大家应该都不陌生。学过数据结构的&#xff0c;都知道它作为链式储存的基础&#xff0c;重要性不言而喻。 由于本人自动化专业&#xff…...

蓝桥杯第十二届c++大学B组详解

目录 1.空间 2.直线 3.路径 4.卡片 5.货物摆放 6.时间显示 7.砝码称重 8.杨辉三角 9.双向排序 10.括号序列 1.空间 题目解析&#xff1a;1Byte 8bit 1kb 1024B 1MB 1024kb; 先将256MB变成Byte 256 * 1024 * 1024; 再将32位 变成Byte就是 32 / 8 4&#xff1b;…...

Tubi 十岁啦!

Tubi 今年十岁了&#xff0c;这十年不可思议&#xff0c;充满奇迹&#xff01; 从硅谷一个名不见经传的创业小作坊&#xff0c;转变成为四分之一美国电视家庭提供免费流媒体服务的北美领先的平台&#xff1b; 从费尽心力终于签下第一笔内容合作协议&#xff0c;到现在与 450 …...

Qt C++ 实现文件监视源码

以下是使用Qt C++实现文件监视的一个简单示例代码: #include <QCoreApplication> #include <QFileSystemWatcher> #include <QDebug>int main(int argc, char *argv[...

避坑指南:Webots 2022a在Windows安装后,为什么打不开示例项目?手把手教你排查与修复

Webots 2022a Windows安装避坑指南&#xff1a;示例项目无法加载的终极解决方案 当你满怀期待地在Windows上安装好Webots R2022a&#xff0c;准备开始机器人仿真之旅时&#xff0c;却发现内置的示例项目一片空白或频繁报错——这种挫败感我深有体会。作为一款功能强大的机器人仿…...

革命性超分辨率突破:OptiScaler让任何显卡实现4K级画质与帧率双提升

革命性超分辨率突破&#xff1a;OptiScaler让任何显卡实现4K级画质与帧率双提升 【免费下载链接】OptiScaler DLSS replacement for AMD/Intel/Nvidia cards with multiple upscalers (XeSS/FSR2/DLSS) 项目地址: https://gitcode.com/GitHub_Trending/op/OptiScaler 在…...

使用LingBot-Depth优化Git版本控制中的3D模型管理

使用LingBot-Depth优化Git版本控制中的3D模型管理 1. 引言 在3D设计和游戏开发领域&#xff0c;版本控制一直是个头疼的问题。传统的Git系统擅长处理代码和文本文件&#xff0c;但面对3D模型这种二进制文件就显得力不从心了。每次修改模型后&#xff0c;你只能看到"文件…...

Neeshck-Z-lmage_LYX_v2真实生成:‘赛博长安,霓虹古建,未来主义’提示词多LoRA适配效果

Neeshck-Z-lmage_LYX_v2真实生成&#xff1a;‘赛博长安&#xff0c;霓虹古建&#xff0c;未来主义’提示词多LoRA适配效果 1. 引言&#xff1a;当古都长安遇见赛博霓虹 想象一下&#xff0c;你站在一座宏伟的古代宫殿前&#xff0c;飞檐斗拱&#xff0c;雕梁画栋&#xff0c…...

软开关电路设计:从原理到实战,打造智能电源管理方案

1. 软开关电路设计基础 第一次接触软开关电路是在一个电池供电的智能门锁项目里。当时产品经理提了个需求&#xff1a;用户按下按键后设备要立即唤醒&#xff0c;但待机功耗必须控制在10μA以下。传统机械开关方案要么漏电流大&#xff0c;要么响应慢&#xff0c;直到我发现软开…...

Pixel Mind Decoder 前端交互设计:基于 JavaScript 的情绪看板开发

Pixel Mind Decoder 前端交互设计&#xff1a;基于 JavaScript 的情绪看板开发 1. 情绪看板的应用场景与价值 在现代数字化产品中&#xff0c;理解用户情绪变得越来越重要。无论是社交媒体监测、客服系统优化&#xff0c;还是心理健康应用开发&#xff0c;能够实时分析并可视…...

前端HTML精讲01:别再乱 div 一把抓,吃透语义化标签才是进阶第一步

前端HTML精讲01&#xff1a;别再乱 div 一把抓&#xff0c;吃透语义化标签才是进阶第一步 文章目录前端HTML精讲01&#xff1a;别再乱 div 一把抓&#xff0c;吃透语义化标签才是进阶第一步一、什么是HTML语义化&#xff1f;二、为什么要做HTML语义化&#xff1f;1\. 提升代码可…...

DeepSeek-OCR-2功能测评:多语言支持、复杂背景识别,实测好用

DeepSeek-OCR-2功能测评&#xff1a;多语言支持、复杂背景识别&#xff0c;实测好用 1. 引言&#xff1a;OCR技术的新标杆 在数字化时代&#xff0c;文字识别技术已经成为连接物理世界与数字世界的重要桥梁。DeepSeek-OCR-2作为最新一代的开源OCR模型&#xff0c;凭借其创新的…...

Qwen3-ForcedAligner-0.6B实战:基于CNN的语音特征提取优化

Qwen3-ForcedAligner-0.6B实战&#xff1a;基于CNN的语音特征提取优化 如果你做过语音相关的项目&#xff0c;比如给视频加字幕、做语音分析&#xff0c;肯定遇到过这样的问题&#xff1a;模型识别出的文字&#xff0c;怎么才能和音频里的时间点对上号&#xff1f;这就是“强制…...

IndexTTS 2.0情感控制效果:用自然语言描述生成对应语气语音

IndexTTS 2.0情感控制效果&#xff1a;用自然语言描述生成对应语气语音 1. 引言&#xff1a;语音合成的革命性突破 想象一下这样的场景&#xff1a;你正在制作一部动画短片&#xff0c;主角需要说一句"我受够了&#xff01;"——但你不只是想让它"说出来"…...