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

在自定义总线下注册驱动

1、自定义总线下注册驱动

//my_bus_drv.c
#include<linux/module.h>
#include<linux/init.h>
#include<linux/kernel.h>
#include<linux/kobject.h>
#include<linux/slab.h>
#include<linux/sysfs.h>
#include<linux/device.h>
#include "my_bus_drv.h"#if 0
int driver_register(struct device_driver *drv)
struct device_driver {const char		*name;struct bus_type		*bus;struct module		*owner;const char		*mod_name;	/* used for built-in modules */bool suppress_bind_attrs;	/* disables bind/unbind via sysfs */enum probe_type probe_type;const struct of_device_id	*of_match_table;const struct acpi_device_id	*acpi_match_table;int (*probe) (struct device *dev);int (*remove) (struct device *dev);void (*shutdown) (struct device *dev);int (*suspend) (struct device *dev, pm_message_t state);int (*resume) (struct device *dev);const struct attribute_group **groups;const struct dev_pm_ops *pm;struct driver_private *p;
};
#endif
extern struct bus_type my_bus;struct device_driver my_bus_drv = {.name = "my_bus_dev",.bus = &my_bus,.remove = my_bus_drv_remove,.probe = my_bus_drv_probe,
}; 
static int my_bus_drv_probe(struct device *dev)
{printk("this is in my_bus_dev_probe\n");return 0;
}static int my_bus_drv_remove(struct device *dev)
{printk("this is in my_bus_dev_remove\n");return 0;
}static int my_bus_drv_init(void)
{int ret;ret = driver_register(&my_bus_drv);return ret;
}static void my_bus_drv_exit(void)
{driver_unregister(&my_bus_drv);
}module_init(my_bus_drv_init);
module_exit(my_bus_drv_exit);
MODULE_LICENSE("GPL");
//my_bus_drv.h
#ifndef _ATTR_H_
#define _ATTR_H_static int my_bus_drv_remove(struct device *dev);
static int my_bus_drv_probe(struct device *dev);
#endif

在这里插入图片描述

2、一些结构体和api介绍

2.1 driver_register

在这里插入图片描述

2.2 struct device_driver

在这里插入图片描述

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 最优雅的PHP框架 Laravel
  • docker(一)
  • 《Windows API每日一练》8.5 listbox控件
  • spark 中hint使用总结
  • Python:正则表达式相关整理
  • volatile关键字详解
  • 核密度估计KDE和概率密度函数PDF(深入浅出)
  • 智能家居开发新进展:乐鑫 ESP-ZeroCode 与亚马逊 ACK for Matter 实现集成
  • Python高级(四)_内存管理
  • 在VSCode上创建Vue项目详细教程
  • WIN11实现链路聚合/端口聚合
  • 华为HCIP Datacom H12-821 卷38
  • WPF透明置顶窗口wine适配穿透问题解决
  • 【探索LangGraph:构建多专家协作模型】
  • Eureka: Netflix开源的服务发现框架
  • [nginx文档翻译系列] 控制nginx
  • 《剑指offer》分解让复杂问题更简单
  • 《微软的软件测试之道》成书始末、出版宣告、补充致谢名单及相关信息
  • 【划重点】MySQL技术内幕:InnoDB存储引擎
  • input的行数自动增减
  • Linux编程学习笔记 | Linux IO学习[1] - 文件IO
  • PHP面试之三:MySQL数据库
  • Promise初体验
  • Puppeteer:浏览器控制器
  • spring + angular 实现导出excel
  • UEditor初始化失败(实例已存在,但视图未渲染出来,单页化)
  • 产品三维模型在线预览
  • 大数据与云计算学习:数据分析(二)
  • 浮动相关
  • 解决iview多表头动态更改列元素发生的错误
  • 前端
  • 源码之下无秘密 ── 做最好的 Netty 源码分析教程
  • 在 Chrome DevTools 中调试 JavaScript 入门
  • 在Docker Swarm上部署Apache Storm:第1部分
  • 正则表达式小结
  • 翻译 | The Principles of OOD 面向对象设计原则
  • ​【已解决】npm install​卡主不动的情况
  • ###STL(标准模板库)
  • #13 yum、编译安装与sed命令的使用
  • #162 (Div. 2)
  • (13)DroneCAN 适配器节点(一)
  • (6)设计一个TimeMap
  • (7)摄像机和云台
  • (二开)Flink 修改源码拓展 SQL 语法
  • (机器学习-深度学习快速入门)第一章第一节:Python环境和数据分析
  • (转)LINQ之路
  • (转)德国人的记事本
  • (转载)hibernate缓存
  • .net core 实现redis分片_基于 Redis 的分布式任务调度框架 earth-frost
  • .net oracle 连接超时_Mysql连接数据库异常汇总【必收藏】
  • .pings勒索病毒的威胁:如何应对.pings勒索病毒的突袭?
  • .sdf和.msp文件读取
  • @RequestBody与@RequestParam:Spring MVC中的参数接收差异解析
  • [ Python ]使用Charles对Python程序发出的Get与Post请求抓包-解决Python程序报错问题
  • [ vulhub漏洞复现篇 ] JBOSS AS 4.x以下反序列化远程代码执行漏洞CVE-2017-7504