Linux Misc 驱动-编写驱动例程基于iTOP-STM32P157开发板

news2024/11/26 9:58:56

首先我们回想一下注册杂项设备的三大流程,我们在 Windows 上面新建 misc.c 文件,并用 sourceinsight

打开。我们可以将上次编写的 helloworld.c 里面的代码拷贝到 misc.c 文件,并修改为如下图所示

添加头文件

/*注册杂项设备头文件*/

#include <linux/miscdevice.h>

/*注册设备节点的文件结构体*/

#include <linux/fs.h>

填充 miscdevice 结构体

struct miscdevice misc_dev = {

.minor = MISC_DYNAMIC_MINOR, .name = "hello_misc", .fops = &misc_fops, };

上述代码第 2 行的 minor 为 MISC_DYNAMIC_MINOR,miscdevice 核心层会自动找一个空闲的次设备号,

否则用 minor 指定的次设备号。上述代码第 3 行 name 是设备的名称,我们自定义为"hello_misc" 填充 file_operations 结构体

struct file_operations misc_fops={

.owner = THIS_MODULE

};

THIS_MODULE 宏是什么意思呢?它在 include/linux/module.h 里的定义是

#define THIS_MODULE (&__this_module)

它是一个 struct module 变量,代表当前模块,可以通过 THIS_MODULE 宏来引用模块的 struct module

结构,比如使用 THIS_MODULE->state 可以获得当前模块的状态。这个 owner 指针指向的就是你的模块。

注册杂项设备并生成设备节点

在 misc_init()函数中填充 misc_register()函数注册杂项设备,并判断杂项设备是否注册成功。

static int misc_init(void){

int ret;

ret = misc_register(&misc_dev); //注册杂项设备

if(ret<0) //判断杂项设备是否注册成功

{

printk("misc registe is error \n"); //打印杂项设备注册失败

}

printk("misc registe is succeed \n"); //打印杂项设备注册成功

return 0;

}

在 misc_exit()函数中填充 misc_deregister()函数注销杂项设备。

static void misc_exit(void){

misc_deregister(&misc_dev); //注销杂项设备

printk("misc gooodbye! \n"); //打印杂项设备注销成功

}

完整的代码如下图所示:

/*

* @Descripttion: 最简单的杂项设备驱动

* @version: 1.0

* @Author: topeet */

#include <linux/init.h> //初始化头文件

#include <linux/module.h> //最基本的文件,支持动态添加和卸载模块。

#include <linux/miscdevice.h> /*注册杂项设备头文件*/

#include <linux/fs.h> /*注册设备节点的文件结构体*/

struct file_operations misc_fops = { //文件操作集

.owner = THIS_MODULE};

struct miscdevice misc_dev = {

//杂项设备结构体

.minor = MISC_DYNAMIC_MINOR, //动态申请的次设备号

.name = "hello_misc", //杂项设备名字是 hello_misc

.fops = &misc_fops, //文件操作集

};

static int misc_init(void)

{ //在初始化函数中注册杂项设备

int ret;

ret = misc_register(&misc_dev);

if (ret < 0)

{

printk("misc registe is error \n");

}

printk("misc registe is succeed \n");

return 0;

}

static void misc_exit(void)

{ //在卸载函数中注销杂项设备

misc_deregister(&misc_dev);

printk(" misc gooodbye! \n");

}

module_init(misc_init);

module_exit(misc_exit);

MODULE_LICENSE("GPL");

现在最简单的杂项设备的驱动就写完了,那么接下来我们可以把这个驱动编译一下,然后放到我们的

开发板上面运行。我们编译驱动,可以将它编译进内核里面,也可以将它编译成模块。

更多内容可以B站搜索:北京迅为

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/780640.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

辅助驾驶功能开发-功能规范篇(23)-2-Mobileye NOP功能规范

5.2 状态机要求 5.2.1 NOP/HWP 状态机 NOP/HWP状态机如下所示&#xff1a; 下表总结了这些状态&#xff1a; 状态描述Passive不满足功能条件&#xff0c;功能无法控制车辆执行器。Standby满足功能条件。该功能不是由驾驶员激活的。功能不控制车辆执行器。Active - Main功能由…

海盗王基于golang重制版的商城服务端

海盗王原始的商城服务端&#xff0c;附带有很多其他功能&#xff08;如GM留言管理&#xff0c;商品管理接口&#xff09;&#xff0c;配置起来非常麻烦&#xff0c;而且运行时问题也很多&#xff0c;经常会出现弹出停止响应&#xff0c;无法正常提供服务。 在很早的时候&#x…

NTFS SSD USB 硬盘盒写入未结束拔出后Linux可识别,Windows不识别,报错无法访问

windows平台修复过程&#xff1a; 故障 管理员权限打开cmd&#xff0c;执行指令 chkdsk.exe /F /R f: C:\Windows\system32>chkdsk.exe /F /R f: 文件系统的类型是 NTFS。 卷标是 YeQiang-Data。 阶段 1: 检查基本文件系统结构... 已处理 2520 个文件记录。 文件验证完…

zabbix安装Grafana

一、web访问 https://s3-us-west-2.amazonaws.com/grafana-releases/release/grafana-4.6.1-1.x86_64.rpm [rootserver ~] yum localinstall -y grafana-4.6.1-1.x86_64.rpm //yum方式安装本地rpm并自动解决依赖关系 [rootserver ~] grafana-cli plugins install alexanderzob…

探秘Spring中Bean的注解宝典:解读存取Bean的相关注解及用法

目录 存储Bean对象Controller(控制器存储)Service(服务存储)Repository(仓库存储)Component(组件存储)Configuration(配置存储)Bean重命名Bean 获取Bean对象属性注入构造方法注入Setter注入Resource(注入关键字) 存储Bean对象 将对象存储在 Spring 中&#xff0c;有两种注解类…

00_ubuntu_开发环境的搭建

ubuntu 的版本22.04 2023-07-21 1.卸载firefox dpkg --get-selections |grep firefox // 查看安装包的信息 sudo apt-get purge firefox firefox-locale-en firefox-locale-zh-hans // 卸载相应的包 2.下载google安装包并安装 wget https://dl.google.com/linux/direct/goo…

【Window系统】安装FFmpeg教程

目录 1、下载FFmpeg 2、配置环境变量 3、检验和测试 1、下载FFmpeg 两个下载路径&#xff1a; Github直链下载&#xff1a;Releases BtbN/FFmpeg-Builds (github.com)蓝奏云下载&#xff1a;ffmpeg-n5.0-latest-win64-lgpl-shared-5.0.zip - 蓝奏云 2、配置环境变量 将…

15matlab数据分析多项式的相乘和相除(matlab程序)

1.简述 xlsread和xlswrit函数 在MATLAB中经常会用到数据的读取&#xff0c;首先是从Excel中读取数据到MATLAB中去。下面给出原始Excel数据内容&#xff1a; 在MATLAB读取结果如下&#xff1a; mxlsread(fanjufei.xls,1,A1:C3)m 1 2 3 4 5 6 …

yum镜像源更新很慢,不管是阿里源还是清华源

今天想要再Centos7上安装docker测试&#xff0c;但是发现不管是阿里源还是清华源 yum makecache都更新的特别慢。有大佬知道啥原因不&#xff1f; 坐标成都&#xff0c;联通宽带300M

W801 ADC功能,基于CDK Demo以及Arduino平台测试

W801 ADC功能&#xff0c;基于CDK Demo以及Arduino平台测试 &#x1f33c;W801开发板&#xff08;HLK-W801 详细资料见&#xff1a;https://h.hlktech.com/Mobile/download/fdetail/170.html&#xff09; &#x1f4d3;W801 ADC简介 &#x1f4d1;集成 4 路 12 比特 ADC&…

华为eNSP:ospf的配置

一、拓扑图 二、路由器的配置 1、路由器依据规划配置接口IP AR1: <Huawei>system-view [Huawei]int g0/0/0 [Huawei-GigabitEthernet0/0/0]ip add 10.10.10.1 24 [Huawei-GigabitEthernet0/0/0]qu AR2: <Huawei>system-view [Huawei]int g0/0/0 [Huawei-Gi…

sql:是否在时间段内

判断给定时间是否在区间内&#xff0c;由于结束时间可能为空&#xff0c;若为空表示长期&#xff1b;希望在 end_date 可以延长180天作为最终的 end_date -- okAND ((ic.price_end_date is null and ic.price_start_date < 2022-01-22) or (ic.price_end_date is not null …

C++ GDAL找出多时相遥感影像缺失的日期并自动生成新的全零图像作为替补

本文介绍基于C 语言的GDAL库&#xff0c;基于一个存储大量遥感影像的文件夹&#xff0c;依据每一景遥感影像的文件名中表示日期的那个字段&#xff0c;找出这些遥感影像中缺失的成像日期&#xff0c;并新生成多个像元值全部为0的栅格文件&#xff0c;作为这些缺失日期当日的遥感…

PHP8知识详解:PHP语言优势

PHP起源于自由软件&#xff0c;并且得到了不断的迭代更新&#xff0c;在web开发领域独领风骚&#xff0c;得到了广大使用者的喜爱&#xff0c;PHP作为一款优秀的脚本语言&#xff0c;具有以下优势&#xff1a; 1、源码开源&#xff1a;所有的PHP源代码&#xff0c;你都能从PHP官…

HTTP 什么样的响应才会被缓存

下面来讨论什么样的响应会被缓存&#xff0c;以及使用好已经缓存好的条件是什么。 缓存分为两步&#xff0c;首先将响应缓存下来&#xff0c;第二步将要发起一个请求的时候检查当前缓存是否可以使用缓存了的响应。 (1) 请求方法可以被缓存理解&#xff08;不只于 GET 方法&…

【游戏行业部】反外挂技术的革新:如何有效应对 FPS 外挂的威胁

FPS 游戏外挂现状和泛滥原因 在线多人的 FPS 游戏是实时性要求最高的游戏类型之一。在这种游戏中&#xff0c;玩家的一瞬间判断和反应能力会直接决定胜负。然而&#xff0c;网络延迟和实时加载的问题经常会导致游戏卡顿&#xff0c;这会极大地影响玩家的游戏体验。为了解决这个…

Java-WebSocket

请点击下面工程名称&#xff0c;跳转到代码的仓库页面&#xff0c;将工程 下载下来 Demo Code 里有详细的注释 TestWebSocket

解读Lawyer LLaMA,延申专业领域大模型微调:数据集构建,模型训练

解读Lawyer LLaMA&#xff0c;延申自己领域大模型微调&#xff1a;数据集构建&#xff0c;模型训练 项目地址link 自己领域的大模型微调&#xff0c;实现思路大都和这篇文章是一样的&#xff0c;有的是基于LLaMA,或者有的是基于Chinese-LLaMA,或者是其他开源的大模型&#xf…

对话网心科技李浩| 携“边缘云+AI”之势,深入拓展算力业务场景落地

// 以ChatGPT为代表的人工智能的应用正加快改变人们的生活和工作方式&#xff0c;各种AI的应用引发了新一轮的音视频内容的生产力革命。而伴随着海量的音视频内容的生成&#xff0c;大量的内容会在边侧创建和存储&#xff0c;并在边端完成计算和分发。网心科技持续专注边缘云…

【论文阅读】2020ECCV-DFDNet

Blind Face Restoration via Deep Multi-scale Component Dictionaries 中文&#xff1a;基于深度多尺度分量字典的盲人脸复原 paper&#xff1a; code&#xff1a;https://github.com/csxmli2016/DFDNet 摘要&#xff1a; 近年来&#xff0c;基于参考的人脸恢复方法因其在真…