嵌入式Linux驱动开发——常见框架梳理

这篇具有很好参考价值的文章主要介绍了嵌入式Linux驱动开发——常见框架梳理。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言

本文主要介绍了Linux驱动开发中一些常用的驱动框架,platform、input、iic、spi等,硬件平台使用的是正点原子的imx6ull开发板。

一:Pinctrl子系统、Gpio子系统

不管什么框架最后都是要追溯到配置IO的电气属性和复用功能

嵌入式Linux驱动开发——常见框架梳理,Linux,linux,驱动开发,运维,笔记,arm开发

嵌入式Linux驱动开发——常见框架梳理,Linux,linux,驱动开发,运维,笔记,arm开发

如果要使用外部中断,设备树节点中还需添加相关信息,什么边沿触发

嵌入式Linux驱动开发——常见框架梳理,Linux,linux,驱动开发,运维,笔记,arm开发

嵌入式Linux驱动开发——常见框架梳理,Linux,linux,驱动开发,运维,笔记,arm开发

二:最简单字符驱动框架(不包含什么总线)

1:module_init和module_exit,驱动的入口和出口

嵌入式Linux驱动开发——常见框架梳理,Linux,linux,驱动开发,运维,笔记,arm开发

2:习惯性构建一个结构体来管理相关资源(主次设备号、cdev、class、device、设备节点等)

嵌入式Linux驱动开发——常见框架梳理,Linux,linux,驱动开发,运维,笔记,arm开发

3:file_operations结构体里面包含了该设备驱动的操作函数集合,可以按需进行实现

file_operations结构体的原型,里面都是一些函数指针

嵌入式Linux驱动开发——常见框架梳理,Linux,linux,驱动开发,运维,笔记,arm开发

驱动实现部分操作函数 

嵌入式Linux驱动开发——常见框架梳理,Linux,linux,驱动开发,运维,笔记,arm开发

嵌入式Linux驱动开发——常见框架梳理,Linux,linux,驱动开发,运维,笔记,arm开发

4:init函数实现字符设备相关初始化

分配设备号、cdev_init、cdev_add、class_create、device_create

嵌入式Linux驱动开发——常见框架梳理,Linux,linux,驱动开发,运维,笔记,arm开发

嵌入式Linux驱动开发——常见框架梳理,Linux,linux,驱动开发,运维,笔记,arm开发

获取节点、获取gpio编号、申请gpio、设置输入输出模式

嵌入式Linux驱动开发——常见框架梳理,Linux,linux,驱动开发,运维,笔记,arm开发

如果在某一过程申请资源失败要释放之前已经申请成功的资源

嵌入式Linux驱动开发——常见框架梳理,Linux,linux,驱动开发,运维,笔记,arm开发

5:exit函数释放相关资源

嵌入式Linux驱动开发——常见框架梳理,Linux,linux,驱动开发,运维,笔记,arm开发

三:定时器、中断配置

定时器和中断在驱动设备中要添加的内容

嵌入式Linux驱动开发——常见框架梳理,Linux,linux,驱动开发,运维,笔记,arm开发 

定时器初始化

嵌入式Linux驱动开发——常见框架梳理,Linux,linux,驱动开发,运维,笔记,arm开发

重新修改定时器计数,使得可以多次定时

嵌入式Linux驱动开发——常见框架梳理,Linux,linux,驱动开发,运维,笔记,arm开发

外部中断

嵌入式Linux驱动开发——常见框架梳理,Linux,linux,驱动开发,运维,笔记,arm开发

四:platform总线驱动框架

1:首先是module_init和module_exit,初始化一个platform_driver结构体,主要初始化匹配列表和probe、remove函数

嵌入式Linux驱动开发——常见框架梳理,Linux,linux,驱动开发,运维,笔记,arm开发

嵌入式Linux驱动开发——常见框架梳理,Linux,linux,驱动开发,运维,笔记,arm开发

驱动中对应的compatible字段

嵌入式Linux驱动开发——常见框架梳理,Linux,linux,驱动开发,运维,笔记,arm开发

设备树中设备对应的compatible字段

嵌入式Linux驱动开发——常见框架梳理,Linux,linux,驱动开发,运维,笔记,arm开发

当加载驱动后就会通过compatible字段查找,驱动和设备就可通过platform总线进行匹配。后面就和最简单没有总线的框架一样、其实就是套了一层皮。

五:MISC杂项驱动框架(主设备号是10)

大框架还是platform驱动框架,要添加一个miscdevice类型结构体

嵌入式Linux驱动开发——常见框架梳理,Linux,linux,驱动开发,运维,笔记,arm开发

在probe中注册、remove中销毁,减少了分配设备号、cdev、class、device那繁琐的一套

嵌入式Linux驱动开发——常见框架梳理,Linux,linux,驱动开发,运维,笔记,arm开发

嵌入式Linux驱动开发——常见框架梳理,Linux,linux,驱动开发,运维,笔记,arm开发

六:INPUT(主设备都是13)子系统驱动框架

嵌入式Linux驱动开发——常见框架梳理,Linux,linux,驱动开发,运维,笔记,arm开发

设备结构体中要添加一个输入设备

嵌入式Linux驱动开发——常见框架梳理,Linux,linux,驱动开发,运维,笔记,arm开发

在init中申请和注册、exit中取消注册和释放

嵌入式Linux驱动开发——常见框架梳理,Linux,linux,驱动开发,运维,笔记,arm开发

嵌入式Linux驱动开发——常见框架梳理,Linux,linux,驱动开发,运维,笔记,arm开发

设置事件和值(type、code、value)

嵌入式Linux驱动开发——常见框架梳理,Linux,linux,驱动开发,运维,笔记,arm开发

使用input_event函数上报事件

嵌入式Linux驱动开发——常见框架梳理,Linux,linux,驱动开发,运维,笔记,arm开发

上报的数据可以使用hexdump观察

嵌入式Linux驱动开发——常见框架梳理,Linux,linux,驱动开发,运维,笔记,arm开发

应用层可以使用一个input_event结构体变量来接收上报的数据

嵌入式Linux驱动开发——常见框架梳理,Linux,linux,驱动开发,运维,笔记,arm开发

七:IIC驱动框架

首先module_init和module_exit,添加一个i2c_driver,对应init完成i2c_add_driver,exit中完成i2c_del_driver

嵌入式Linux驱动开发——常见框架梳理,Linux,linux,驱动开发,运维,笔记,arm开发

嵌入式Linux驱动开发——常见框架梳理,Linux,linux,驱动开发,运维,笔记,arm开发

同样的,设备和驱动匹配还是要靠compatible属性

嵌入式Linux驱动开发——常见框架梳理,Linux,linux,驱动开发,运维,笔记,arm开发

 ​​​嵌入式Linux驱动开发——常见框架梳理,Linux,linux,驱动开发,运维,笔记,arm开发

当设备树节点和驱动文件匹配之后,执行probe函数,会传入i2c_client类型的一个结构体指针,可以使用一个指针变量保存下来,当在i2c读写寄存器的时候会用得到。

嵌入式Linux驱动开发——常见框架梳理,Linux,linux,驱动开发,运维,笔记,arm开发

设备中定义一个指针进行保存

嵌入式Linux驱动开发——常见框架梳理,Linux,linux,驱动开发,运维,笔记,arm开发

嵌入式Linux驱动开发——常见框架梳理,Linux,linux,驱动开发,运维,笔记,arm开发

I2C读数据

嵌入式Linux驱动开发——常见框架梳理,Linux,linux,驱动开发,运维,笔记,arm开发

I2C写数据

嵌入式Linux驱动开发——常见框架梳理,Linux,linux,驱动开发,运维,笔记,arm开发

八:SPI驱动框架

首先module_init和module_exit,创建一个spi_driver类型的结构体变量,init中spi_register_driver、exit中spi_unregister_driver

嵌入式Linux驱动开发——常见框架梳理,Linux,linux,驱动开发,运维,笔记,arm开发

嵌入式Linux驱动开发——常见框架梳理,Linux,linux,驱动开发,运维,笔记,arm开发

设备树相关信息

嵌入式Linux驱动开发——常见框架梳理,Linux,linux,驱动开发,运维,笔记,arm开发

 ​​​​嵌入式Linux驱动开发——常见框架梳理,Linux,linux,驱动开发,运维,笔记,arm开发

当执行到probe函数的时候会传入一个spi_device类型的结构体,像i2c驱动一样找一个变量存起来

嵌入式Linux驱动开发——常见框架梳理,Linux,linux,驱动开发,运维,笔记,arm开发

设备中定义一个指针用来接收spi_device类型的指针

嵌入式Linux驱动开发——常见框架梳理,Linux,linux,驱动开发,运维,笔记,arm开发

嵌入式Linux驱动开发——常见框架梳理,Linux,linux,驱动开发,运维,笔记,arm开发

设置spi设备的工作模式

嵌入式Linux驱动开发——常见框架梳理,Linux,linux,驱动开发,运维,笔记,arm开发

嵌入式Linux驱动开发——常见框架梳理,Linux,linux,驱动开发,运维,笔记,arm开发

spi读写寄存器可以使用内核自带的spi_read和spi_write,其中都要传入类型为spi_device的参数,就是在调用probe传入的那个。

嵌入式Linux驱动开发——常见框架梳理,Linux,linux,驱动开发,运维,笔记,arm开发

嵌入式Linux驱动开发——常见框架梳理,Linux,linux,驱动开发,运维,笔记,arm开发

总结

以上只是对学习驱动这段时间的一个梳理和回顾,想系统学习可以阅读正点的教程。文章来源地址https://www.toymoban.com/news/detail-612424.html

到了这里,关于嵌入式Linux驱动开发——常见框架梳理的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 正点原子嵌入式linux驱动开发——Linux CAN驱动

    CAN是目前应用非常广泛的现场总线之一,主要应用于汽车电子和工业领域 ,尤其是汽车领域,汽车上大量的传感器与模块都是通过CAN总线连接起来的。CAN总线目前是自动化领域发展的热点技术之一,由于其高可靠性,CAN总线目前广泛的应用于工业自动化、船舶、汽车、医疗和

    2024年02月06日
    浏览(78)
  • 正点原子嵌入式linux驱动开发——Linux WIFI驱动

    WIFI的使用已经很常见了,手机、平板、汽车等等,虽然可以使用有线网络,但是有时候很多设备存在布线困难的情况,此时WIFI就是一个不错的选择。 正点原子STM32MP1开发板支持USB和SDIO这两种接口的WIFI ,本章就来学习一下如何在STM32MP1开发板上使用USB和SDIO这两种WIFI。 正点原

    2024年02月05日
    浏览(71)
  • 【嵌入式Linux内核驱动】SPI子系统 | 硬件原理 | 应用编程 | 内核驱动 | 总体框架

    1.1 SPI通信协议 SPI(Serial Peripheral Interface)是由Motorola公司开发的一种通用数据总线 四根通信线:SCK(Serial Clock)、MOSI(Master Output Slave Input)、MISO(Master Input Slave Output)、SS(Slave Select) 同步,全双工 支持总线挂载多设备(一主多从) 1.2 硬件连接 多NSS独立片选方式 菊花

    2024年02月16日
    浏览(66)
  • 嵌入式Linux驱动开发 04:基于设备树的驱动开发

    前面文章 《嵌入式Linux驱动开发 03:平台(platform)总线驱动模型》 引入了资源和驱动分离的概念,这篇文章将在前面基础上更进一步,引入设备树的概念。 在平台总线驱动模型中资源和驱动已经从逻辑上和代码组织上进行了分离,但每次调整资源还是会涉及到内核,所以现

    2024年02月16日
    浏览(69)
  • 正点原子嵌入式linux驱动开发——Linux 网络设备驱动

    网络驱动是linux里面驱动三巨头之一 ,linux下的网络功能非常强大,嵌入式linux中也常常用到网络功能。前面已经讲过了字符设备驱动和块设备驱动,本章就来学习一下linux里面的 网络设备驱动 。 本次笔记中讨论的都是有线网络! 提起网络,一般想到的硬件就是“网卡”。在

    2024年01月17日
    浏览(70)
  • 【嵌入式Linux驱动】驱动开发调试相关的关系记录

    https://www.processon.com/mindmap/64537772b546c76a2f37bd2f

    2024年02月02日
    浏览(56)
  • 嵌入式Linux驱动开发系列六:Makefile

    Makefile是什么? gcc hello.c -o hello gcc aa.c bb.c cc.c dd.c ... make工具和Makefile make和Makefile是什么关系? make工具:找出修改过的文件,根据依赖关系,找出受影响的相关文件,最后按照规则单独编译这些文件。 Makefile文件:记录依赖关系和编译规则。 必须要学精Makefile吗? 怎么学习Makefi

    2024年02月13日
    浏览(58)
  • 嵌入式Linux驱动开发(LCD屏幕专题)(三)

    1. 硬件相关的操作 LCD驱动程序的核心就是: 分配fb_info 设置fb_info 注册fb_info 硬件相关的设置 硬件相关的设置又可以分为3部分: 引脚设置 时钟设置 LCD控制器设置 2. 在设备树里指定LCD参数 3. 编程 3.1 从设备树获得参数 时序参数、引脚极性等信息,都被保存在一个display_timi

    2024年02月09日
    浏览(62)
  • 嵌入式Linux驱动开发(LCD屏幕专题)(一)

    总的分辨率是 yres*xres。 以下三种方式表示颜色 每个屏幕都有一个内存(framebuffer)如下图,内存中每块数据对用屏幕上的一个像素点,设置好LCD后,只需把颜色数据写入framebuffer即可。 Framebuffer驱动属于字符设备驱动,我们先说字符设备驱动框架如下图: 驱动主设备号 构造

    2024年02月09日
    浏览(61)
  • 嵌入式linux驱动开发篇之设备树

    设备树(Device Tree)是一种用于描述嵌入式系统硬件组件及其连接关系的数据结构。它被广泛用于嵌入式 Linux 系统,尤其是针对使用多种不同架构和平台的嵌入式系统。它是一种与硬件描述相关的中间表示形式,将硬件信息抽象成一种可移植的格式,使得操作系统和引导加载

    2024年02月22日
    浏览(68)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包