linux驱动—在自己的总线目录下创建属性文件

        在总线目录下创建属性文件以扩展其功能。 通过创建属性文件, 我们可以为总线添加额外的信息和控制选项, 以便与设备和驱动进行交互。 简单就是,属性文件,可以完成用户空间和内核空间的数据交互, 比如在应用层快速修改gpio引脚的电平。

        介绍一下API

        bus_create_file() 函数用于在总线的 sysfs 目录下创建一个属性文件。

        参数说明:​

        bus: 指向总线类型结构体 struct bus_type 的指针, 表示要在这个目录下创建属性文件的                    总线。​

         attr:指向属性 struct bus_attribute的指针, 表示要创建的属性文件的属性。

函数原型:

int bus_create_file(struct bus_type *bus,struct bus_attribute *attr);

        在调用 bus_create_file()函数之前, 需要先定义好属性结构体 struct bus_attribute *attr, 并将其相关字段填充好。 通常, 属性结构体会包含以下字段:

        第一个字段,attr

static ssize_t my_show (struct bus_type *bus, char *buf)
{// 在 sysfs 中显示总线的值​return sprintf(buf, "%s\n", "mybus_show");
}static ssize_t my_store(struct bus_type *bus, const char *buf, size_t count)
{// 在 sysfs 中显示总线的值​return sprintf(buf, "%s\n", "mybus_show");
}
struct bus_attribute mybus_attr = {/*属性文件的名字和操作权限*/.attr = {.name = "value",.mode = 0664,},.show = my_show,.store= my_store,};

         代码编写

#include <linux/module.h>
#include <linux/init.h>
#include <linux/slab.h>
#include <linux/configfs.h>
#include <linux/kernel.h>
#include <linux/kobject.h>
#include <linux/device.h>
#include <linux/sysfs.h>int mybus_match(struct device *dev, struct device_driver *drv)
{// 检查设备名称和驱动程序名称是否匹配return (strcmp(dev_name(dev), drv->name) == 0);
}int mybus_probe(struct device *dev)
{struct device_driver *drv = dev->driver;if(drv->probe){drv->probe(dev);}return 0;
}static ssize_t my_show (struct bus_type *bus, char *buf)
{// 在 sysfs 中显示总线的值​return sprintf(buf, "%s\n", "mybus_show");
}static ssize_t my_store(struct bus_type *bus, const char *buf, size_t count)
{// 在 sysfs 中显示总线的值​return sprintf(buf, "%s\n", "mybus_show");
}struct bus_attribute mybus_attr = {/*属性文件的名字和操作权限*/.attr = {.name = "value",.mode = 0664,},.show = my_show,.store= my_store,};struct bus_type mybus ={.name  = "mabus",        // 总线的名称.match =  mybus_match,   // 设备和驱动程序匹配的回调函数.probe =  mybus_probe,   //设备探测的回调函数
}EXPORT_SYMBOL_GPL(mybus);             // 导出总线符号static int bus_attr_init (void)
{int ret;ret = bus_register(&mybus);      // 注册总线buf_create_file(&mybus, &mybus_attr);return 0;
}static void bus_attr_exit (void)
{bus_remove_file(&mybus, &mybus_attr);  // 从 sysfs 中移除属性文件​bus_unregister(&mybus);                // 取消注册总线
}/* 加载和卸载*/
module_init(bus_attr_init);
module_eixt(bus_attr_exit );
MODULE_LICENSE("GPL");
MODULE_AUTHOR("xiaoyang");

        看现象

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

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

相关文章

R向量运算数组矩阵

向量的运算 向量的加减乘除可以直接进运行&#xff0c;不用循环 向量之间的运算&#xff1a;分别对应计算&#xff0c;不用循环 两个运算的向量可以不是长度相等&#xff0c;但是一定长度要成整数倍。 每种运算都可以返回逻辑值T或F 取整函数 保留小数位用round&#xff1a; …

2024熵密杯初始题2

问题简要&#xff1a; 已知 counter 0x7501E6EA token 0xF4CE927C79B616E8E8F7223828794EEDF9B16591AE572172572D51E135E0D21A 伪造出另一个可以通过验证的counter和token。 给出token生成及验证代码如下&#xff1a; import binascii from gmssl import sm3# 读取HMAC ke…

Python入门之基础语法

第1关&#xff1a;行与缩进 任务描述 本关任务&#xff1a;改正代码中不正确的缩进&#xff0c;使其能够正常编译&#xff0c;并输出正确的结果。 相关知识 缩进 Python 与 C/C、Java 这些 C 类语言不同&#xff0c;Python 使用缩进来表示代码块&#xff0c;缩进的空格数量可…

WebSocket与Socket

一、定义与用途 Socket Socket&#xff08;套接字&#xff09;是一个抽象层&#xff0c;用于在网络上执行进程间的通信。它为应用程序提供了发送和接收数据的机制&#xff0c;通过IP和端口号来标识网络中唯一的位置。Socket可以使用TCP进行面向连接的可靠通信&#xff0c;也可以…

[Python学习日记-54] Python 中的日志模块 —— logging

[Python学习日记-54] Python 中的日志模块 —— logging 简介 基础用法 日志写入到文件 自定义日志格式 日志同时输出到屏幕和写入到文件 简介 在程序的运行过程中会执行很多操作或者进行很多的交互&#xff0c;也有的时候可能你开发出来的网站会遭到黑客的攻击&#xff0…

10.30Python随堂考试

1.&#xff08;12分&#xff09;使用Python的NumPy库&#xff0c;创建一个形状为(4,4)的二维数组&#xff0c;并且初始化所有元素为其行索引与列索引之和。 import numpy as np arr np.array([[i j for j in range(4)] for i in range(4)]) print(arr)2.&#xff08;8分&…

C++关键字noexcept应用及案例

文章目录 使用场景&#xff1a;注意事项&#xff1a; noexcept在C中的应用和重要性&#xff1a;与标准库的交互与异常安全相关的编程模式与C标准的关系与性能的关系示例代码 综合案例扩展后的代码新增功能解释异常安全性能优化 在C中&#xff0c; noexcept是一个关键字&#x…

STM32F103HAL库实现低功耗(睡眠模式、停止模式和待机模式)

STM32F103HAL库实现低功耗&#xff08;睡眠模式、停止模式和待机模式&#xff09; 1. STM32电源结构2. 电源管理器2.1 上电复位和掉电复位2.2 可编辑电压监测器&#xff08;PVD&#xff09; 3. 低功耗模式介绍3.1 睡眠模式3.2 停止模式3.3 待机模式 4. 低功耗相关寄存器5. 低功…

Windows: 如何实现CLIPTokenizer.from_pretrained`本地加载`stable-diffusion-2-1-base`

参考&#xff1a;https://blog.csdn.net/qq_38423499/article/details/137158458 https://github.com/VinAIResearch/Anti-DreamBooth?tabreadme-ov-file 联网下载没有问题&#xff1a; import osos.environ["HF_ENDPOINT"] "https://hf-mirror.com" i…

从0学习React(9)

代码解析 const changeOrg (orgId) > {queryData.orgId orgId;delete queryData.deviceClassifyId;setQueryData(queryData);actionRef.current?.reset();loadTreeData(orgId); };1. const changeOrg (orgId) > { ... }; 这是一个箭头函数&#xff08;arrow functi…

【vue】14.插槽:构建可复用组件的关键

今天看代码的时候碰到了插槽&#xff0c;有些看不懂&#xff0c;所以写下这篇文章&#xff0c;系统地梳理一下关于插槽的内容&#xff0c;也希望给大家带来一些帮助。 // 我碰到的插槽长这样 <template #default"scope">... </template> 一.什么是插槽…

阿里巴巴店铺商品API返回值中的商品分类与筛选条件

阿里巴巴店铺商品API返回值中的商品分类与筛选条件对于电商平台的运营和用户购物体验至关重要。以下是对这两个方面的详细解析&#xff1a; 一、商品分类 商品分类是指将商品按照其属性、用途、材质等因素进行归类&#xff0c;以便商家和用户更好地管理和查找商品。在阿里巴巴…

Electron 是一个用于构建跨平台桌面应用程序的开源框架

Electron 是一个用于构建跨平台桌面应用程序的开源框架。它结合了 Chromium&#xff08;用于网页渲染的浏览器引擎&#xff09;和 Node.js&#xff08;用于后端开发的 JavaScript 运行时&#xff09;&#xff0c;允许开发者使用熟悉的 HTML、CSS 和 JavaScript 技术来开发桌面应…

影刀RPA与Python作为爬虫的对比

1.概要 RPA&#xff08;Robotic Process Automation&#xff0c;机器人流程自动化&#xff09;是一种业务流程自动化技术&#xff0c;它通过软件机器人或“虚拟劳动力”来模拟和集成人类用户与数字系统之间的交互。RPA工具可以自动执行重复性的、基于规则的任务&#xff0c;这…

camera和lidar外参标定

雷达和相机的外参标定&#xff08;外部参数标定&#xff09;指的是确定两者之间的旋转和平移关系&#xff0c;使得它们的坐标系可以对齐。 文章目录 无目标标定livox_camera_calibdirect_visual_lidar_calibration 有目标标定velo2cam_calibration 无目标标定 livox_camera_ca…

如何帮助8502万残障人士驶出「孤岛」?

【潮汐商业评论/原创】 对于残障人士来说&#xff0c;“出行”无异于从一座孤岛跳到另一座孤岛。 正常人乘坐的出租车&#xff0c;对于行动不便的乘客来说&#xff0c;或如同“受难场”&#xff1a;从下轮椅到坐上出租车后座的咫尺距离&#xff0c;尽管只需迈出几步&#xff…

数据结构和算法-动态规划(3)-经典问题

动态规划常见问题 打家劫舍 题目 [力扣198] 198. 打家劫舍 - 力扣&#xff08;LeetCode&#xff09; 题目描述 你是一个专业的小偷&#xff0c;计划偷窃沿街的房屋。每间房内都藏有一定的现金&#xff0c;影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统&…

深入理解Redis的四种模式

Redis是一个内存数据存储系统&#xff0c;支持多种不同的部署模式。以下是Redis的四种主要部署模式。 1、单机模式 单机模式是最简单的部署模式&#xff0c;Redis将数据存储在单个节点上。这个节点包括一个Redis进程和一个持久化存储。单机模式非常适合小型应用程序或者开发和…

[NeetCode 150] Foreign Dictionary

Foreign Dictionary There is a foreign language which uses the latin alphabet, but the order among letters is not “a”, “b”, “c” … “z” as in English. You receive a list of non-empty strings words from the dictionary, where the words are sorted lex…

Flutter实战短视频课程

1、课程导学 一套代研运行多蜡 体州一致&#xff0c;目胜能优昇 未来大趋势 不改交原生项目的基础上&#xff0c;扩展Flutter能力 Flutter原生灵话切涣 0入侵 最简单、最通用 最新Flutter 3,x新特性讲解 大量flutter官方组件和api学习 最常用的第三方库使用及原理解析 自研组…