Linux驱动编程-module_platform_driver注册platform_driver
使用platform总线驱动模式编写Linux驱动时,需要注册platform_driver(用于跟.dts文件的platform_device匹配)。下面介绍2种常用注册platform_driver方法:
1、module_init()、module_exit()
/* 定义平台drv,通过.name来比较dev */
struct platform_driver xxx_drv = {.probe = xxx_probe,.remove = xxx_remove,.driver = {.name = "xxx_name", //与platform_device匹配}
};//注册platform_driver驱动
static int xxx_drv_init(void)
{platform_driver_register(&xxx_drv); //注册驱动,最终调用driver_register()return 0;
}//注销platform_driver驱动
static void xxx_drv_exit(void)
{platform_driver_unregister(&xxx_drv);
}module_init(xxx_drv_init); //注册驱动
module_exit(xxx_drv_exit); //注销驱动
最终调用 platform_driver_register() 去注册platform_driver驱动。
2、module_platform_driver 宏
注册Linux驱动时,可以使用 module_init()、module_exit() 等函数实现。LInux提供module_platform_driver() 宏可替代这些步骤,用于简化驱动程序的编写。
先看下module_platform_driver宏定义:
/*********** 路径:include/linux/platform_device.h **********/
#define module_platform_driver(__platform_driver) \module_driver(__platform_driver, platform_driver_register, \platform_driver_unregister)/*********** 路径:include/linux/device.h **********/
#define module_driver(__driver, __register, __unregister, ...) \
static int __init __driver##_init(void) \
{ \return __register(&(__driver) , ##__VA_ARGS__); \
} \
module_init(__driver##_init); \
static void __exit __driver##_exit(void) \
{ \__unregister(&(__driver) , ##__VA_ARGS__); \
} \
module_exit(__driver##_exit);
可以看到, module_platform_driver会使用module_driver来填充platform_driver_register、
platform_driver_unregister。module_platform_driver宏展开就和 module_init()、module_exit()是相同的,最终调用 platform_driver_register() 注册驱动。
举例:
/* 定义平台drv,通过.name来比较dev */
struct platform_driver xxx_drv = {.probe = xxx_probe,.remove = xxx_remove,.driver = {.name = "xxx_name",}
};module_platform_driver(xxx_drv);
相关文章:
Linux驱动编程-module_platform_driver注册platform_driver
使用platform总线驱动模式编写Linux驱动时,需要注册platform_driver(用于跟.dts文件的platform_device匹配)。下面介绍2种常用注册platform_driver方法: 1、module_init()、module_exit() /* 定义平台drv,通过.name来…...
论文解读 --- 《针对PowerShell脚本的有效轻量级去混淆和语义感知攻击检测》
开篇 今天我们继续来解读安全行业优秀论文,通过学习他人的智慧成果,可以不断丰富我们的安全视野,使用它山之石来破解自身的难题。 这次要解读的论文为《Effective and Light-Weight Deobfuscation and Semantic-Aware Attack Detection for…...
在Spring Boot实战中碰到的拦截器与过滤器是什么?
在Spring Boot实战中,拦截器(Interceptors)和过滤器(Filters)是两个常用的概念,它们用于在应用程序中实现一些通用的逻辑,如日志记录、权限验证、请求参数处理等。虽然它们都可以用于对请求进行…...
数据可视化基础与应用-04-seaborn库人口普查分析--如何做人口年龄层结构金字塔
总结 本系列是数据可视化基础与应用的第04篇seaborn,是seaborn从入门到精通系列第3篇。本系列主要介绍基于seaborn实现数据可视化。 参考 参考:我分享了一个项目给你《seaborn篇人口普查分析–如何做人口年龄层结构金字塔》,快来看看吧 数据集地址 h…...
软考之【系统架构设计师】
系统架构设计师 根据原人事部、原信息产业部文件(国人部发[2003]39号)文件规定,计算机软件资格考试纳入全国专业技术人员职业资格证书制度的统一规划,实行统一大纲、统一试题、统一标准、统一证书的考试办法,每年举行…...
LigaAI x 极狐GitLab,共探 AI 时代研发提效新范式
近日,LigaAI 和极狐GitLab 宣布合作,双方将一起探索 AI 时代的研发效能新范式,提供 AI 赋能的一站式研发效能解决方案,让 AI 成为中国程序员和企业发展的新质生产力。 软件研发是一个涉及人员多、流程多、系统多的复杂工程&#…...
如何看待2023年图灵奖
目录 1.概述 2.计算复杂性理论 3.随机性和伪随机性 4.学术生涯和领导力 1.概述 图灵奖(Turing Award),全称A.M.图灵奖(ACM A.M Turing Award),是由计算机领域的最高学术机构——美国计算机协会…...
《云原生安全攻防》-- 云原生攻防矩阵
在本节课程中,我们将开始学习如何从攻击者的角度思考,一起探讨常见的容器和K8s攻击手法,包含以下两个主要内容: 云原生环境的攻击路径: 了解云原生环境的整体攻击流程。 云原生攻防矩阵: 云原生环境攻击路径的全景视图࿰…...
自然语言处理: 第二十七章LLM训练超参数
前言: LLM微调的超参大致有如下内容,在本文中,我们针对这些参数进行解释 training_arguments TrainingArguments(output_dir"./results",per_device_train_batch_size4,per_device_eval_batch_size4,gradient_accumulation_steps2,optim"adamw_8bi…...
Linux使用C语言实现Socket编程
Socket编程 这一个课程的笔记 相关文章 协议 Socket编程 高并发服务器实现 线程池 网络套接字 socket: (电源)插座(电器上的)插口,插孔,管座 在通信过程中, 套接字是成对存在的, 一个客户端的套接字, 一个…...
Swin Transformer——披着CNN外皮的transformer,解决多尺度序列长问题
题目:Swin Transformer: Hierarchical Vision Transformer using Shifted Windows 《Swin Transformer: Hierarchical Vision Transformer using Shifted Windows》作为2021 ICCV最佳论文,屠榜了各大CV任务,性能优于DeiT、ViT和EfficientNet…...
数据结构排序算法
排序也称排序算法(SortAlgorithm),排序是将一组数据,依指定的顺序进行排列的过程。 分类 内部排序【使用内存】 指将需要处理的所有数据都加载到内部存储器中进行排序插入排序 直接插入排序希尔排序 选择排序 简单选择排序堆排序 交换排序 冒泡排序快速…...
【深度剖析】曾经让人无法理解的事件循环,前端学习路线
先自我介绍一下,小编浙江大学毕业,去过华为、字节跳动等大厂,目前阿里P7 深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞…...
Spring 事务失效总结
前言 在使用spring过程中事务是被经常用的,如果不小心或者认识不做,事务可能会失效。下面列举几条 业务代码没有被Spring 容器管理 看下面图片类没有Componet 或者Service 注解。 方法不是public的 Transactional 注解只能用户public上,…...
K8S节点kubectl命令报错x509: certificate signed by unknown authority
K8S节点上执行kubectl get node命令报错证书问题,查看kubelet日志如下 [localhost10 ~]$ journalctl -xeu kubelet --since "2024-04-09" --no-pager 4月 09 00:06:22 10.10.44.23-v7-prod-cams-08 kubelet[2142]: I0409 00:06:22.150535 2142 csi_pl…...
【HTML】制作一个简单的实时字体时钟
目录 前言 HTML部分 CSS部分 JS部分 效果图 总结 前言 无需多言,本文将详细介绍一段HTML代码,具体内容如下: 开始 首先新建文件夹,创建一个文本文档,两个文件夹,其中HTML的文件名改为[index.html]&am…...
servlet的三个重要的类(httpServlet 、httpServletRequst、 httpServletResponse)
一、httpServlet 写一个servlet代码一般都是要继承httpServlet 这个类,然后重写里面的方法 但是它有一个特点,根据之前写的代码,我们发现好像没有写main方法也能正常执行。 原因是:这个代码不是直接运行的,而是放到…...
【软考】设计模式之命令模式
目录 1. 说明2. 应用场景3. 结构图4. 构成5. 优缺点5.1 优点5.2 缺点 6. 适用性7.java示例 1. 说明 1.命令模式(Command Pattern)是一种数据驱动的设计模式。2.属于行为型模式。3.请求以命令的形式被封装在对象中,并传递给调用对象。4.调用对…...
波奇学Linux:ip协议
ip报头是c语言的结构体 报头和有效载荷如何分离? 固定长度四位首部长度 4位版本号就是IPV4 8位服务类型:4位TOS位段和位保留字段 4位TOS分别表示:最小延时,最大吞吐量,最高可靠性,最小成本 给路由器提…...
Efficient Multimodal learning from data-centric perspective
[MLLM-小模型推荐-2024.3.18] Bunny 以数据的眼光看问题 - 知乎近期几天会梳理下多模态小模型相关的论文,做个汇总。为了能够每天更新点啥,先穿插一些小模型算法。等到全部算法都梳理完成后,再发布一篇最终汇总版本的。 3.15 号 BAAI 发布了 …...
探索视频采集技术:OBS Studio实现高效直播录制的创新方法
探索视频采集技术:OBS Studio实现高效直播录制的创新方法 【免费下载链接】obs-studio OBS Studio - 用于直播和屏幕录制的免费开源软件。 项目地址: https://gitcode.com/GitHub_Trending/ob/obs-studio 在当今内容创作领域,视频采集技术是直播与…...
告别龟速下载!手把手教你用Aspera ascp命令高效获取SRA数据(附常见错误排查)
告别龟速下载!手把手教你用Aspera ascp命令高效获取SRA数据(附常见错误排查) 在生物信息学研究中,获取公共数据库中的测序数据是许多分析的第一步。然而,传统的FTP下载方式往往速度缓慢,尤其是当需要下载大…...
RuView:无摄像头环境下人体姿态追踪的创新方法探索
RuView:无摄像头环境下人体姿态追踪的创新方法探索 【免费下载链接】RuView Production-ready implementation of InvisPose - a revolutionary WiFi-based dense human pose estimation system that enables real-time full-body tracking through walls using com…...
5款Umi-OCR插件全解析:让文字识别效率提升300%的实用指南
5款Umi-OCR插件全解析:让文字识别效率提升300%的实用指南 【免费下载链接】Umi-OCR_plugins Umi-OCR 插件库 项目地址: https://gitcode.com/gh_mirrors/um/Umi-OCR_plugins 为什么你的文字识别总是效率低下? 还在为图片转文字耗时过长而抓狂&am…...
门户网站被入侵了怎么办?从紧急止损到重建免疫的完整作战手册
当监控警报响起,发现服务器存在异常进程、网站首页或核心栏目内容被恶意篡改、或数据库出现不明查询时,一个可怕的现实摆在眼前:您的门户网站已经被入侵了。门户网站作为企业或机构的官方形象窗口,一旦被入侵,不仅直接…...
vLLM-v0.17.1GPU算力适配:华为昇腾CANN 7.0与vLLM对接可行性验证
vLLM-v0.17.1 GPU算力适配:华为昇腾CANN 7.0与vLLM对接可行性验证 1. vLLM框架简介 vLLM是一个专为大型语言模型(LLM)设计的高性能推理和服务库,由加州大学伯克利分校的天空计算实验室(Sky Computing Lab)最初开发,现已发展成为学术界和工业…...
实时文本转换:XUnity.AutoTranslator的Unity本地化解决方案
实时文本转换:XUnity.AutoTranslator的Unity本地化解决方案 【免费下载链接】XUnity.AutoTranslator 项目地址: https://gitcode.com/gh_mirrors/xu/XUnity.AutoTranslator 在全球化游戏市场中,语言障碍常常成为玩家体验优质内容的最大阻碍。许多…...
保姆级教程:Windows下GDC-client下载TCGA数据的完整配置流程(含环境变量与配置文件修改)
Windows平台TCGA数据下载全流程:从环境配置到实战避坑指南 在生物信息学研究中,TCGA数据库无疑是癌症基因组学的宝库。但对于刚入门的研究者来说,获取这些数据往往成为第一道门槛。本文将彻底解决Windows用户在使用GDC-client工具时的各种&qu…...
Detectron2特征图热力可视化实战:从Faster R-CNN到自定义网络
1. 为什么需要特征图热力可视化 当你训练一个目标检测模型时,有没有遇到过这样的困惑:模型在某些场景下表现很好,但在另一些场景却频频出错?作为算法工程师,我们往往只能看到最终的检测结果,却不知道模型内…...
基于springboot个人二手书交易平台设计与开发(源码+精品论文+答辩PPT等资料)
博主介绍:CSDN毕设辅导第一人、靠谱第一人、全网粉丝50W,csdn特邀作者、博客专家、腾讯云社区合作讲师、CSDN新星计划导师、Java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和学生毕业项目实战,高校老师/讲师/同行前辈交…...
