IMXULL驱动学习——通过总线设备驱动模型点亮野火开发板小灯【参考韦东山老师教程】

本文主要是介绍IMXULL驱动学习——通过总线设备驱动模型点亮野火开发板小灯【参考韦东山老师教程】,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

参考:【IMX6ULL驱动开发学习】11.驱动设计之面向对象_分层思想(学习设备树过渡部分)-CSDN博客

韦东山课程:LED模板驱动程序的改造_总线设备驱动模型

我使用的开发板:野火imx6ull pro

欢迎大家一起讨论学习

实现了总线设备驱动模型实现LED驱动并能够控制三个LED灯的亮灭

参照博客和韦老师的代码梳理了思路,图片可去我的gitee仓库中下载,在linux_driver_study/led_drv_template_bus_dev_drv中,链接:我的gitee

驱动分层框架图-导出

驱动分层思想

1、首先是驱动程序(leddrv.c)中的file_operations结构体,该结构体关联了应用层的文件IO函数和驱动层的函数
在这里插入图片描述

2、硬件操作分离程序(chip_demo_gpio.c)中的platform_driver结构体,加载完.ko(驱动文件)后,内核会自动去匹配platform_driver和platform_device,如果匹配成功,则platform_driver的probe函数会自动执行,在probe函数中获取platform_device中的硬件资源,完成设备节点的创建【device_create】

PS:创建设备节点需要驱动框架层的设备类对象,所以这里需要在设备框架层中为硬件操作层提供对应函数

Untitled

3、硬件资源定义程序中platform_device 结构体,该结构体中定义了与硬件操作层中platform_driver 对应的 name 成员和硬件引脚资源 resource 等,

4、硬件资源层中硬件资源的定义,硬件资源有个特定的结构体 resource ,可以参照Linux内核中其他文件对其的定义来写。
在这里插入图片描述

PS:注意要设置 dev 成员下的 release 属性,如果不加的话卸载驱动时会报警告

执行顺序:

  • insmod leddrv.ko,执行相应的入口函数,完成file_operations的注册、类注册

Untitled

  • insmod chip_demo_chip.ko,执行相应的入口函数,完成platform_driver的注册、向上层提供led_operations的结构体变量,其中包含了led的与硬件有关的初始化函数和控制函数

Untitled

  • insmod board_A_led.ko,执行相应的入口函数,完成platform_device的注册,同时内核完成了platform_device和platform_driver的匹配,自动执行platform_driver的probe函数,在probe函数中获取platform_device中的硬件资源,完成设备节点的创建【device_create】

Untitled

执行完以上三步之后,/dev下会出现led设备

Untitled

  • ./led_drv_test /dev/myled0 on,通过应用层的open和write函数,分别调用硬件操作分离程序中的imx6ull_demo_led_init函数和imx6ull_demo_led_ctl函数来控制灯的亮灭
    在这里插入图片描述
    控制小灯亮灭的应用层函数【通过led_operations的结构体变量调用两个底层init函数和ctl函数】:
    在这里插入图片描述在这里插入图片描述

这篇关于IMXULL驱动学习——通过总线设备驱动模型点亮野火开发板小灯【参考韦东山老师教程】的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/652631

相关文章

Nexus安装和启动的实现教程

《Nexus安装和启动的实现教程》:本文主要介绍Nexus安装和启动的实现教程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、Nexus下载二、Nexus安装和启动三、关闭Nexus总结一、Nexus下载官方下载链接:DownloadWindows系统根

Go学习记录之runtime包深入解析

《Go学习记录之runtime包深入解析》Go语言runtime包管理运行时环境,涵盖goroutine调度、内存分配、垃圾回收、类型信息等核心功能,:本文主要介绍Go学习记录之runtime包的... 目录前言:一、runtime包内容学习1、作用:① Goroutine和并发控制:② 垃圾回收:③ 栈和

CnPlugin是PL/SQL Developer工具插件使用教程

《CnPlugin是PL/SQLDeveloper工具插件使用教程》:本文主要介绍CnPlugin是PL/SQLDeveloper工具插件使用教程,具有很好的参考价值,希望对大家有所帮助,如有错... 目录PL/SQL Developer工具插件使用安装拷贝文件配置总结PL/SQL Developer工具插

Java中的登录技术保姆级详细教程

《Java中的登录技术保姆级详细教程》:本文主要介绍Java中登录技术保姆级详细教程的相关资料,在Java中我们可以使用各种技术和框架来实现这些功能,文中通过代码介绍的非常详细,需要的朋友可以参考... 目录1.登录思路2.登录标记1.会话技术2.会话跟踪1.Cookie技术2.Session技术3.令牌技

Android学习总结之Java和kotlin区别超详细分析

《Android学习总结之Java和kotlin区别超详细分析》Java和Kotlin都是用于Android开发的编程语言,它们各自具有独特的特点和优势,:本文主要介绍Android学习总结之Ja... 目录一、空安全机制真题 1:Kotlin 如何解决 Java 的 NullPointerExceptio

Python使用Code2flow将代码转化为流程图的操作教程

《Python使用Code2flow将代码转化为流程图的操作教程》Code2flow是一款开源工具,能够将代码自动转换为流程图,该工具对于代码审查、调试和理解大型代码库非常有用,在这篇博客中,我们将深... 目录引言1nVflRA、为什么选择 Code2flow?2、安装 Code2flow3、基本功能演示

详解如何使用Python从零开始构建文本统计模型

《详解如何使用Python从零开始构建文本统计模型》在自然语言处理领域,词汇表构建是文本预处理的关键环节,本文通过Python代码实践,演示如何从原始文本中提取多尺度特征,并通过动态调整机制构建更精确... 目录一、项目背景与核心思想二、核心代码解析1. 数据加载与预处理2. 多尺度字符统计3. 统计结果可

Java Spring 中的监听器Listener详解与实战教程

《JavaSpring中的监听器Listener详解与实战教程》Spring提供了多种监听器机制,可以用于监听应用生命周期、会话生命周期和请求处理过程中的事件,:本文主要介绍JavaSprin... 目录一、监听器的作用1.1 应用生命周期管理1.2 会话管理1.3 请求处理监控二、创建监听器2.1 Ser

MySQL 安装配置超完整教程

《MySQL安装配置超完整教程》MySQL是一款广泛使用的开源关系型数据库管理系统(RDBMS),由瑞典MySQLAB公司开发,目前属于Oracle公司旗下产品,:本文主要介绍MySQL安装配置... 目录一、mysql 简介二、下载 MySQL三、安装 MySQL四、配置环境变量五、配置 MySQL5.1

SpringBoot整合Sa-Token实现RBAC权限模型的过程解析

《SpringBoot整合Sa-Token实现RBAC权限模型的过程解析》:本文主要介绍SpringBoot整合Sa-Token实现RBAC权限模型的过程解析,本文给大家介绍的非常详细,对大家的学... 目录前言一、基础概念1.1 RBAC模型核心概念1.2 Sa-Token核心功能1.3 环境准备二、表结