前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Question:如何写一个外设驱动?

Question:如何写一个外设驱动?

作者头像
董哥聊技术
发布2023-09-01 15:32:28
1840
发布2023-09-01 15:32:28
举报
文章被收录于专栏:嵌入式艺术嵌入式艺术

如何写一个外设驱动?

1、编写外设驱动流程

该问题为基础问题,也是大家基本功的表现,下面一起来看一下吧

写一个常见的字符设备外设驱动,主要遵循以下流程

  1. 了解硬件和接口:查看外设用户手册,了解该外设使用的是什么通信接口,IICSPIUART等。
  2. 设备树配置:遵循设备树语法,在设备树中添加该外设的设备属性信息。
  3. 外设driver结构体配置:遵循Linux驱动框架,创建外设driver结构体,并设定相应的回调函数,包括proberemove、外设driverdevice的匹配规则id_table,驱动名称等信息。
  4. devicedriver匹配:通过insmod来将外设驱动加载到总线上,按照定义好的匹配规则,触发probe函数。
  5. probe实现:创建字符设备,以供用户层使用。字符设备创建流程如下:
    1. 分配字符设备的主设备号和次设备号,并为字符设备创建内存空间。
    2. 关联字符设备结构体与文件操作结构体ops,创建openreadwrite函数
    3. 添加字符设备到虚拟文件系统中,包括:profssysfs
    4. 将外设驱动注册进入子系统中,实现统一管理。
  6. 完善文件操作接口openreadwrite为暴漏在用户层的文件操作接口,我们一般通过该接口实现对外设的功能操作。
    1. open函数:一般用于初始化外设
    2. read函数:一般用于用户层读取外设信息,通过调用copy_to_user将数据搬运到用户空间
    3. write函数:一般用于用户层向外设写入数据,通过调用copy_from_user将用户数据搬运到内核层。
  7. 卸载驱动rmmod驱动后,会调用remove接口负责卸载驱动,包括:sysfsprofs的节点删除,字符设备结构体的注销,外设驱动结构体的注销。

以上就是一个简单的外设驱动的编写流程,示例外设驱动程序以及更多嵌入式知识可以看这里:https://t.zsxq.com/0eUcTOhdO

2、常见问题

img

Q:设备编号的分配方式有哪些?

A:设备号的分配方式主要有两种:动态分配和静态分配。

  • 动态分配:系统自动为其分配一个未被占用的设备号
  • 静态分配:自行定义设备号,注册进入系统中。

Q:主设备号和次设备号有什么意义?

A:设备号是用来标识设备的关键信息,主设备号用于标识设备的类型,次设备号用于区分同类型的不同设备。

Q:设备树匹配方式有哪些?

Adevicedriver匹配方式有4种,如下:

  • 设备树(OF)匹配方式:通过设备树中的compatible属性匹配
  • ACPI匹配方式ACPI(Advanced Configuration and Power Interface),通过设备ID编号和驱动ID编号来匹配
  • ID Table匹配方式:驱动提供ID Table,设备提供一个ID变量进行匹配
  • Name匹配方式:通过比较设备名称和驱动名称来进行匹配。

嵌入式艺术

MEET SPRING

万物更生,新岁开启

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2023-08-30,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 嵌入式艺术 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 如何写一个外设驱动?
    • 1、编写外设驱动流程
      • 2、常见问题
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档