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

news2024/11/24 9:09:36

参考:【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函数】:
    在这里插入图片描述在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1415710.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

大型语言模型基础知识的可视化指南

直观分解复杂人工智能概念的工具和文章汇总 如今,LLM(大型语言模型的缩写)在全世界都很流行。没有一天不在宣布新的语言模型,这加剧了人们对错过人工智能领域的恐惧。然而,许多人仍在为 LLM 的基本概念而苦苦挣扎&…

c++学习第十三讲---STL常用容器---string容器

string容器: 一、string的本质: string和char*的区别: char*是一个指针 string是一个类,封装了char*,管理这个字符串,是char*的容器。 二、string构造函数: string() ; …

鸿蒙(HarmonyOS)项目方舟框架(ArkUI)之Swiper容器组件

鸿蒙(HarmonyOS)项目方舟框架(ArkUI)之Swiper容器组件 一、操作环境 操作系统: Windows 10 专业版、IDE:DevEco Studio 3.1、SDK:HarmonyOS 3.1 二、Swiper容器组件 滑块视图容器,提供子组件滑动轮播显示的能力。…

独享http代理安全性是更高的吗?

不同于共享代理,独享代理IP为单一用户提供专用的IP,带来了一系列需要考虑的问题。今天我们就一起来看看独享代理IP的优势,到底在哪里。 我们得先来看看什么是代理IP。简单来说,代理服务器充当客户机和互联网之间的中间人。当你使用…

CIFAR-10数据集详析:使用卷积神经网络训练图像分类模型

1.数据集介绍 CIFAR-10 数据集由 10 个类的 60000 张 32x32 彩色图像组成,每类 6000 张图像。有 50000 张训练图像和 10000 张测试图像。 数据集分为5个训练批次和1个测试批次,每个批次有10000张图像。测试批次正好包含从每个类中随机选择的 1000 张图像…

GitHub 一周热点汇总第7期(2024/01/21-01/27)

GitHub一周热点汇总第7期 (2024/01/21-01/27) ,梳理每周热门的GitHub项目,离春节越来越近了,不知道大家都买好回家的票没有,希望大家都能顺利买到票,一起来看看这周的项目吧。 #1 rustdesk 项目名称:rust…

Redis 面试题 | 15.精选Redis高频面试题

🤍 前端开发工程师、技术日更博主、已过CET6 🍨 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 🕠 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 🍚 蓝桥云课签约作者、上架课程《Vue.js 和 E…

make: *** No rule to make target ‘clean‘. Stop.

项目场景: 在Ubuntu下编写makefile文件编译的时候,出现make: *** No rule to make target ‘clean’. Stop. 问题描述 make: *** No rule to make target ‘clean’. Stop. 解决方案: 原本我makefile文件的名字是MakeFile , 把它改为makefile以后完美运…

再学http

HTTP状态码 1xx 信息性状态码 websocket upgrade 2xx 成功状态码 200 服务器已成功处理了请求204(没有响应体)206(范围请求 暂停继续下载) 3xx 重定向状态码 301(永久) :请求的页面已永久跳转到新的url302(临时) :允许各种各样的重定向,一般…

FlashInternImage实战:使用 FlashInternImage实现图像分类任务(二)

文章目录 训练部分导入项目使用的库设置随机因子设置全局参数图像预处理与增强读取数据设置Loss设置模型设置优化器和学习率调整策略设置混合精度,DP多卡,EMA定义训练和验证函数训练函数验证函数调用训练和验证方法 运行以及结果查看测试完整的代码 在上…

利用STM32CubeMX和Keil模拟器,3天入门FreeRTOS(5.3) ——递归锁

前言 (1)FreeRTOS是我一天过完的,由此回忆并且记录一下。个人认为,如果只是入门,利用STM32CubeMX是一个非常好的选择。学习完本系列课程之后,再去学习网上的一些其他课程也许会简单很多。 (2&am…

物联网协议Coap之C#基于Mozi的CoapClient调用解析

目录 前言 一、CoapClient相关类介绍 1、CoapClient类图 2、CoapClient的设计与实现 3、SendMessage解析 二、Client调用分析 1、创建CoapClient对象 2、实际发送请求 3、Server端请求响应 4、控制器寻址 总结 前言 在之前的博客内容中,关于在ASP.Net Co…

循序渐进,学会用pyecharts绘制桑基图

循序渐进,学会用pyecharts绘制桑基图 桑基图介绍 桑基图是比较冷门的可视化图形,知道的人不多,但它的可视化效果很惊艳,以后肯定会有越来越多的人使用,我平时使用桑基图,主要是用其绘制可视化图形做PPT。…

签到业务流程

1.技术选型 Redis主写入查询,Mysql辅助查询,传统签到多数都是直接采用mysql为存储DB,在大数据的情况下数据库的压力较大.查询速率也会随着数据量增大而增加.所以在需求定稿以后查阅了很多签到实现方式,发现用redis做签到会有很大的优势.本功能主要用到r…

JVM系列——基础知识

Java运行区域 程序计数器(Program Counter Register) 程序计数器是一块较小的内存空间,它可以看作是当前线程所执行的字节码的行号指示器。在Java虚拟机的概念模型里[1],字节码解释器工作时就是通过改变这个计数器的值来选取下一…

STM正点mini-跑马灯

一.库函数版 1.硬件连接 GPIO的输出方式:推挽输出 IO口输出为高电平时,P-MOS置高,输出为1,LED对应引脚处为高电平,而二极管正&#…

[Tomcat] [从安装到关闭] MAC部署方式

安装Tomcat 官网下载:Apache Tomcat - Apache Tomcat 9 Software Downloads 配置Tomcat 1、输入cd空格,打开Tomca目录,把bin文件夹直接拖拉到终端 2、授权bin目录下的所有操作:终端输入[sudo chmod 755 *.sh],回车 …

HCS-华为云Stack-FusionSphere

HCS-华为云Stack-FusionSphere FusionSphere是华为面向多行业客户推出的云操作系统解决方案。 FusionSphere基于开放的OpenStack架构,并针对企业云计算数据中心场景进行设计和优化,提供了强大的虚拟化功能和资源池管理能力、丰富的云基础服务组件和工具…

C++类和对象——深拷贝与浅拷贝详解

目录 1.深拷贝和浅拷贝是什么 2.案例分析 完整代码 1.深拷贝和浅拷贝是什么 看不懂没关系,下面有案例分析 2.案例分析 浅拷贝可能会导致堆区的内存重复释放 一个名为person的类里面有年龄和指向身高的指针这两个成员。 当我们执行到person p2(p1&am…

翻译: GPT-4 with Vision 升级 Streamlit 应用程序的 7 种方式一

随着 OpenAI 在多模态方面的最新进展,想象一下将这种能力与视觉理解相结合。 现在,您可以在 Streamlit 应用程序中使用 GPT-4 和 Vision,以: 从草图和静态图像构建 Streamlit 应用程序。帮助你优化应用的用户体验,包…