嵌入式Linux驱动开发学习--韦东山老师嵌入式Linux学习

news/2025/1/18 22:50:59/文章来源:https://www.cnblogs.com/gq-z/p/18678592
  • 最无益,只怕一日曝十日寒,贵在有恒。
    目录
    • 2025-01-18
    • 1、基础内容
    • 2、通用GPIO操作
    • 3、硬件操作
    • 4、驱动涉及的思想_面向对象_分层_分离
      • 1)面向对象
      • 2)分层
      • 3)分离
    • 5、驱动进化之路_总线设备驱动模型
    • 6、驱动进化之路_设备树的语法
    • 7、驱动进化之路_内核对设备树的处理与使用

2025-01-18

1、基础内容

  • 应用、驱动、硬件:
    • 应用程序通过标准的接口访问文件,访问到驱动程序,最终到达硬件:
      • 应用程序和驱动程序涉及到用户数据和驱动数据的拷贝;
      • 驱动程序和硬件涉及到硬件寄存器实际地址和虚拟地址变量的映射;
        • 物理地址和虚拟地址映射:ioremap
        • CPU看到的是MMU映射的虚拟地址,使得启动两次的相同应用程序虽然在内存实际不同地址上但其中变量可以打印相同的虚拟地址,其他硬件也类似;
  • 驱动程序编写步骤:
    • 1)提供主设备号;
    • 2)定义file_operations 结构体,应用的标准接口能够调用起来 =》 驱动程序里也提供对应的接口;
    • 3)注册设备驱动;
    • 4)提供入口函数,放到module_init()宏;
    • 5)提供出口函数,放到'module_exit()`宏;
    • 6)提供 class_create 和 device_create 创建设备节点;

2、通用GPIO操作

  • 1)使能GPIO:用到的时候开启时钟、配置使能等;
  • 2)通过MUX_MODE将引脚配置为GPIO功能(可能有多功能复用);
  • 3)配置输入输出模式:用于输入还是用于输出,Dir;
  • 4)设置输出数据或者读取输入数据;

3、硬件操作

  • 根据硬件地址操作对应硬件位置的值或者读取——定义指针指向该地址即可;
  • volatile(易变的)使用:
    • 程序中对于同一变量连续两次赋值编译器可能会优化只执行后面的语句,因为最终结果相同;
    • 但是对于硬件来说,连续的操作可能是为了作不同的事情,不能这样优化,必须一步一步来——加上 volatile 声明,要求编译器不做优化;

4、驱动涉及的思想_面向对象_分层_分离

  • Linux驱动 = 驱动框架 + 硬件操作;

1)面向对象

  • 把事件抽象为结构体,如字符设备驱动程序抽象出一个 file_operations 结构体;

2)分层

  • 上下分层:将硬件无关操作和硬件相关操作分开为上下两层;

3)分离

  • 左右分离:将资源类型文件和硬件通用代码分离为左右两侧;

5、驱动进化之路_总线设备驱动模型

  • 驱动编写的3种方法:
  • 1)传统写法:
  • 2)总线设备驱动模型:
    • 左右分离思想的更好扩展实现 ,分别用 platform_device 结构体和 platform_driver 结构体来对应分离的硬件具体引脚等和通用硬件操作代码;
    • 然后用总线来管理他们,总线左边一系列 device,总线右边一系列 driver,通过总线将他们两两匹配;
    • 对于各种不同设备 device 的定义,可以直接用一个 .c 文件来管理 platform_device,但是会因为各种不同硬件设备出现一堆的 .c 文件;
    • 通过 .c 文件定义 dev 与 driver 的匹配:
  • 3)使用dts文件来实现 device 的配置,dts 文件可编译为 dtb 文件,传递给内核成为 platform_device 结构体;

6、驱动进化之路_设备树的语法

7、驱动进化之路_内核对设备树的处理与使用

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

zabbix监控网络设备流量

项目环境一台liunx服务器,这里使用的为ubuntu22.04(192.168.86.140) 一台华为交换机,本次监控的就是该交换机的端口流量(192.168.86.20) 一台pc主机,使用该主机模拟流量变化ENSP拓扑图:安装zabbix 这里使用shell脚本进行安装,仅为ubuntu22.04的安装方式,别的版本可以参看…

关于动态规划

主要问题大概是动规基础(斐波那契),背包,打家劫舍,股票,子序列。 解决也主要是先分类,建立dp数组,明确dp数组的含义,dp数组的初始化,遍历顺序。 动规基础斐波那契数列,爬楼梯,建立dp数组的时候,递推公式的推导就要参考建立dp数组并且明确dp数组的含义 比如下面的最…

强力工具助你一臂之力:XXECheck–全面提升XML安全,防护XXE漏洞!

泷羽Sec-trackXXECheck XXECheck 是一种用于检测和防止 XML 外部实体 (XXE) 注入攻击的安全工具或库,一款XXE漏洞检测工具,支持 DoS 检测(DoS 检测默认开启)和 DNSLOG 两种检测方式,能对普通 xml 请求和 xlsx 文件上传进行 XXE 漏洞检测。 源地址:https://github.com/Wei…

知乐

儒家理想境界追求心灵的安顿过程 孔颜之乐 曾点之乐 潘立勇教授在[宋明理学休闲审美哲学的内在张力]中的一段描述:[1]宁新昌.孔颜之乐与曾点气象——兼论儒家的自由境界[C]//中华炎黄文化研究会,广东炎黄文化研究会,暨南大学.“21世纪中华文化世界论坛”第五次国际学术研讨…

[ABC283E] Don‘t Isolate Elements

题目:思路: 很明显总的情况是2^h*w种,然后不难发现改变一行只会影响到相邻两行,也就是说前面的决策不会影响到后面的决策,只有当前面的决策全部合理才能走后一步。 所以取dp:dp[i][j][k]为前i行,j(当前行是1/0否改变),k(当前行的前一行是1/0否改变)。 所以有递推式:dp[i][j]…

在 nuget 私服 BaGet 中应用https 以及 gitea action runner 自动打包

最近赋闲,想起之前工作中代码管理的一点经历,就是在打包项目的时候,类库的版本号几乎没变过,一个项目运行多少年了,版本号还是1.0.0。😂 即使用到了 nuget 私服,基本上也是手动打包的,CI 工具基本都是用到 api 项目。于是想结合 gitea 的 CI 工具 act runner 试用一下…

记录一下双多控开关接法

实际上双控就是单刀双掷开关,多控就是双刀双掷开关。多控里L1A+L1B是输入的俩个接上级出来的俩根线,LA和LB是反着的接上总有一路能通。输入俩通道输出俩通道所以可以无限串联。实际上双控就是单刀双掷开关,多控就是双刀双掷开关。 多控里L1A+L1B是输入的俩个接上级出来的俩根…

Day 7

1月17日,继续看了一些SpringBoot视频, SpringBoot的实现步骤SpringBoot项目的起步依赖 <!-- springboot工程需要继承的父工程 --> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifac…

如果通过 vxe-table 实现 Excel,可以和 Excel、WPS 复制粘贴

如果通过 vxe-table 实现 Excel,可以和 Excel、WPS 复制粘贴 官网:https://vxetable.cn<template><div><vxe-gridref="gridRef"v-bind="gridOptions"@cell-area-selection-end="cellAreaSelectionEndEvent"@cell-area-extensio…

树(基础)

树 1 定义 1.1 树是什么 树是一种数据结构,因为形似倒着的树而得名. 1.2 树的定义 递归定义 1.2.1 有根树的定义 形象化的,如图1,有根树存在根节点这一定义,从根节点可以分出任意个分支,这任意个分支又可以继续细分,分出的节点称为“子节点”。抽象化的,树也是\(N\)…

Java五子棋源码联网版+Socket+Swing+大学生练手项目

前言 学Java的朋友们,福利来了,今天小编给大家带来了一款 Java五子棋源码联网版 源码,看图: 实现了服务端和客户端。是联网版游戏基础模型。环境 JDK1.8代码采用原生java类库编写,界面采用swing,完整源码获取地址: gitee.com/hadluo/java_game01.git整体代码结构服务器采…

Java源码:实现斗地主游戏+大学生练手项目

前言 学Java的朋友们,福利来了,今天小编给大家带来了一款 斗地主 源码,看图:视频演示效果 https://githubs.xyz/show/5.mp4 环境 JDK1.8代码采用原生java类库编写,界面采用swing,完整源码获取地址: gitee.com/hadluo/java_game01.git项目结构 代码十分简洁,只有简单的7个…