驱动注册

关键点

  • 驱动注册结构体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 函数,且这两步是分开的,一般来说都是在平台文件中统一处理的

嵌入式学习笔记(五)- 驱动注册相关推荐

  1. cortex_m3_stm32嵌入式学习笔记(十五):待机唤醒实验(WK_UP外部中断)

    cortex_m3_stm32嵌入式学习笔记(十五):待机唤醒实验(WK_UP外部中断) https://blog.csdn.net/qq_16255321/article/details/43086 ...

  2. 嵌入式学习笔记--misc

    嵌入式学习笔记–misc 一.内核自带MISC驱动简介 misc 的意思是混合.杂项的,因此 MISC 驱动也叫做杂项驱动,也就是当我们板子上的某些外设无法进行分类的时候就可以使用 MISC 驱动. ...

  3. 嵌入式学习笔记——STM32的USART通信概述

    文章目录 前言 常用通信协议分类及其特征介绍 通信协议 通信协议分类 1.同步异步通信 2.全双工/半双工/单工 3.现场总线/板级总线 4. 串行/并行通信 5. 有线通信.无线通信 STM32通信 ...

  4. 嵌入式学习笔记--jlink 工具RTT使用笔记

    嵌入式学习笔记–jlink 工具RTT 使用笔记 最近有调试一个ethcat板卡的需求,板卡设计的很简洁,没有多余的调试串口,正准备飞线到单片机针脚上的时候发现了RTT 的这个工具,记录一下使用的方法 ...

  5. 嵌入式学习笔记——使用寄存器编程操作GPIO

    使用寄存器编程操作GPIO 前言 GPIO相关的寄存器 GPIO 端口模式寄存器 (GPIOx_MODER) (x = A..I) 位操作 GPIO 端口输出类型寄存器 (GPIOx_OTYPER) ...

  6. 华清远见fs4412开发板学习笔记(五)

    fs4412开发板学习笔记(五) 作业1: 输入10个整数,按从小到大的顺序输出(选择排序) 每轮排序在未排序的集合中找到(最小/最大),将找到的数与未排序的 第一个数交换位置. 5 4 3 2 1 ...

  7. 【K210】K210学习笔记五——串口通信

    [K210]K210学习笔记五--串口通信 前言 K210如何进行串口通信 K210串口配置 K210串口发送相关定义 K210串口接收相关定义 K210串口发送接收测试 完整源码 前言 本人大四学生 ...

  8. muduo网络库学习笔记(五) 链接器Connector与监听器Acceptor

    目录 muduo网络库学习笔记(五) 链接器Connector与监听器Acceptor Connector 系统函数connect 处理非阻塞connect的步骤: Connetor时序图 Accep ...

  9. python函数是一段具有特定功能的语句组_Python学习笔记(五)函数和代码复用

    本文将为您描述Python学习笔记(五)函数和代码复用,具体完成步骤: 函数能提高应用的模块性,和代码的重复利用率.在很多高级语言中,都可以使用函数实现多种功能.在之前的学习中,相信你已经知道Pyth ...

  10. Ethernet/IP 学习笔记五

    Ethernet/IP 学习笔记五 Accessing data within a device using a non-time critical message (an explicit mess ...

最新文章

  1. React Native 与 嵌入Android原生与Activity页面互相跳转
  2. 图解.Net Telerik 控件教程
  3. Java Web使用数据库连接池
  4. K-均值聚类算法对未标注数据分组(1)
  5. html弹窗中的layer,ModalLayer弹窗控件(原创)
  6. [转载]-如何向妻子解释OOD
  7. redis 分布式锁的 5个坑,真是又大又深
  8. mtk2503 新增物联网卡apn
  9. 数字转换成金额大写的小程序
  10. Java返回机动车的功率_上季度平均功率BI
  11. Udacity CH2中.bag 文件解析
  12. 马来西亚留学回国人员证明
  13. 百度云服务器BCC购买
  14. 怎样导出ZBrush中的模型和贴图
  15. cocos2dx使用TiledMap模拟3D地图场景----斜45度2D地图的靠墙直线移动
  16. libmodbus协议栈4—— 总结
  17. 两天价网站背后重重迷雾:做个网站究竟要多少钱
  18. 【网页设计】HTML做一个属于我的音乐页面(纯html代码)
  19. Dwarves(拓扑排序+字符串使用map量化表示)
  20. Solr--Solr 使用SolrJ 完成添加,删除,查询

热门文章

  1. 夫妻之间是否能够形成雇佣关系
  2. python 3.6.6安装fake_Python3 fake_useragent 模块的使用和报错解决方案
  3. 使用EwoMail搭建属于自己的个人邮件服务器——超详细图文教程
  4. ResNet50《pytorch学习篇》
  5. JSLint,JSHint,ESLint的区别
  6. 《率土之滨论文研赏大赛》参赛文章
  7. 彻底讲透xposed原理
  8. 程序员被女朋友拉黑之后...该怎么办?
  9. 北京供销大数据集团参与撰写的《数据管理实践白皮书》正式发布
  10. iPhone手机变卡怎么办?五个解决方法你需要知道