嵌入式学习笔记(五)- 驱动注册
驱动注册
关键点
- 驱动注册结构体platform_driver 在 include/linux/platform_device.h中
- 驱动注册platform_driver_register,驱动卸载函数platform_driver_unregister 也在这个头文件中这两个函数的参数都只有结构体platform_deriver
- 驱动常见的状态有,初始化,移除,休眠,复位
- probe函数
–platform_match 函数匹配之后,驱动调用的初始化函数 - remove 函数
–移除驱动函数 - suspend函数
–悬挂(休眠)驱动函数 - resume函数
-休眠后恢复驱动 - device_driver 数据结构的两个参数
-name和注册设备的name 要一致
-owner一般赋值THIS_MODULE
源码
#defind DRIVER_NAME "hello_ctl";
#include <linux/init.h>
#include <linux/module.h>
// 驱动注册的头文件和设备注册的头文件和卸载函数
#include <linux/platform_device.h>MODULE_LICENSE("Dual BSD/GPL");
MODULE_AUTHOR("xubaipei")struct platform_driver_hello_driver={.probe = hello_probe,
.remove = hello_remove,
.suspend = hello_suspend,
.shutdown = hello_shutdown,
.resume = hello_resume,
.driver = {.name = DRIVER_NAME,.owner = THIS_MODULE,
}
};
static int hello_probe(struct platform_device *pdv)
{printk(DRIVER_NAME,"\t initialized \n");return 0;
}
static int hello_remove(struct platform_device *pdv)
{return 0;
}
static int hello_suspend(struct platform_device *pdv)
{return 0;
}
static void hello_shutdown(struct platform_device *pdv)
{}
static int hello_resume(struct platform_device *pdv)
{return 0;
}module_init(hello_init);
module_exit(hello_exit);static int hello_init(void)
{int driverstate = -1;printk(KERN_EMERG "HELLO_WORD init enter~\n");driverstate = platform_driver_register(&hello_driver);printk(DRIVER_NAME,"\t driver_state is:%d\n ",driverstate);return 0;
}static int hello_exit(void)
{// 紧急权限打印,超级终端中查看printk(KERN_EMERG "HELLO_WORD exit enter~\n"); platform_driver_unregister(&hello_driver);return 0;
}
编译生成新的ko 文件
总结
设备必须提前注册,然后才是注册驱动,才能够执行probe 函数,且这两步是分开的,一般来说都是在平台文件中统一处理的
嵌入式学习笔记(五)- 驱动注册相关推荐
- cortex_m3_stm32嵌入式学习笔记(十五):待机唤醒实验(WK_UP外部中断)
cortex_m3_stm32嵌入式学习笔记(十五):待机唤醒实验(WK_UP外部中断) https://blog.csdn.net/qq_16255321/article/details/43086 ...
- 嵌入式学习笔记--misc
嵌入式学习笔记–misc 一.内核自带MISC驱动简介 misc 的意思是混合.杂项的,因此 MISC 驱动也叫做杂项驱动,也就是当我们板子上的某些外设无法进行分类的时候就可以使用 MISC 驱动. ...
- 嵌入式学习笔记——STM32的USART通信概述
文章目录 前言 常用通信协议分类及其特征介绍 通信协议 通信协议分类 1.同步异步通信 2.全双工/半双工/单工 3.现场总线/板级总线 4. 串行/并行通信 5. 有线通信.无线通信 STM32通信 ...
- 嵌入式学习笔记--jlink 工具RTT使用笔记
嵌入式学习笔记–jlink 工具RTT 使用笔记 最近有调试一个ethcat板卡的需求,板卡设计的很简洁,没有多余的调试串口,正准备飞线到单片机针脚上的时候发现了RTT 的这个工具,记录一下使用的方法 ...
- 嵌入式学习笔记——使用寄存器编程操作GPIO
使用寄存器编程操作GPIO 前言 GPIO相关的寄存器 GPIO 端口模式寄存器 (GPIOx_MODER) (x = A..I) 位操作 GPIO 端口输出类型寄存器 (GPIOx_OTYPER) ...
- 华清远见fs4412开发板学习笔记(五)
fs4412开发板学习笔记(五) 作业1: 输入10个整数,按从小到大的顺序输出(选择排序) 每轮排序在未排序的集合中找到(最小/最大),将找到的数与未排序的 第一个数交换位置. 5 4 3 2 1 ...
- 【K210】K210学习笔记五——串口通信
[K210]K210学习笔记五--串口通信 前言 K210如何进行串口通信 K210串口配置 K210串口发送相关定义 K210串口接收相关定义 K210串口发送接收测试 完整源码 前言 本人大四学生 ...
- muduo网络库学习笔记(五) 链接器Connector与监听器Acceptor
目录 muduo网络库学习笔记(五) 链接器Connector与监听器Acceptor Connector 系统函数connect 处理非阻塞connect的步骤: Connetor时序图 Accep ...
- python函数是一段具有特定功能的语句组_Python学习笔记(五)函数和代码复用
本文将为您描述Python学习笔记(五)函数和代码复用,具体完成步骤: 函数能提高应用的模块性,和代码的重复利用率.在很多高级语言中,都可以使用函数实现多种功能.在之前的学习中,相信你已经知道Pyth ...
- Ethernet/IP 学习笔记五
Ethernet/IP 学习笔记五 Accessing data within a device using a non-time critical message (an explicit mess ...
最新文章
- React Native 与 嵌入Android原生与Activity页面互相跳转
- 图解.Net Telerik 控件教程
- Java Web使用数据库连接池
- K-均值聚类算法对未标注数据分组(1)
- html弹窗中的layer,ModalLayer弹窗控件(原创)
- [转载]-如何向妻子解释OOD
- redis 分布式锁的 5个坑,真是又大又深
- mtk2503 新增物联网卡apn
- 数字转换成金额大写的小程序
- Java返回机动车的功率_上季度平均功率BI
- Udacity CH2中.bag 文件解析
- 马来西亚留学回国人员证明
- 百度云服务器BCC购买
- 怎样导出ZBrush中的模型和贴图
- cocos2dx使用TiledMap模拟3D地图场景----斜45度2D地图的靠墙直线移动
- libmodbus协议栈4—— 总结
- 两天价网站背后重重迷雾:做个网站究竟要多少钱
- 【网页设计】HTML做一个属于我的音乐页面(纯html代码)
- Dwarves(拓扑排序+字符串使用map量化表示)
- Solr--Solr 使用SolrJ 完成添加,删除,查询
热门文章
- 夫妻之间是否能够形成雇佣关系
- python 3.6.6安装fake_Python3 fake_useragent 模块的使用和报错解决方案
- 使用EwoMail搭建属于自己的个人邮件服务器——超详细图文教程
- ResNet50《pytorch学习篇》
- JSLint,JSHint,ESLint的区别
- 《率土之滨论文研赏大赛》参赛文章
- 彻底讲透xposed原理
- 程序员被女朋友拉黑之后...该怎么办?
- 北京供销大数据集团参与撰写的《数据管理实践白皮书》正式发布
- iPhone手机变卡怎么办?五个解决方法你需要知道