首页 > 系统相关 >嵌入式Linux驱动开发学习--韦东山老师嵌入式Linux学习

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

时间:2025-01-18 22:56:03浏览次数:1  
标签:驱动程序 -- 总线 嵌入式 硬件 Linux device 驱动 设备

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、驱动进化之路_内核对设备树的处理与使用

标签:驱动程序,--,总线,嵌入式,硬件,Linux,device,驱动,设备
From: https://www.cnblogs.com/gq-z/p/18678592

相关文章

  • UART
    UART1.理论知识1.1通讯常见概念串行通信和并行通信分别指什么?串行通信是按位传输,一次传输一位。并行同学是多位同时传输。串行通信并行通信通信距离远近抗干扰能力强弱传输速率弱高成本低高单工、半双工和全双工的区别。三者主要是描......
  • IO流
    IO流异常异常:Throwable:-Error【非常严重的错误,我们自己解决不了】-Exception【自己能处理的异常】-RuntimeException【运行时期异常】-除了RuntimeException【编译时期异常】常见的异常:空指针异常索引越界异常ClassCastExceptionpublicclassExceptionDemo1{......
  • ABC389
    场上被E卡50min结果赛后一分钟过F!场上被E卡50min结果赛后一分钟过F!场上被E卡50min结果赛后一分钟过F!场上被E卡50min结果赛后一分钟过F!场上被E卡50min结果赛后一分钟过F!场上被E卡50min结果赛后一分钟过F!场上被E卡50min结果赛后一分钟过F......
  • AI轻松将照片转为街头艺术与涂鸦风格,效果惊艳
    如果你曾想过将照片转化为街头艺术或涂鸦风格,那么img4you提供的在线工具将为你提供一个创意十足的解决方案。这个工具操作简单,用户只需要上传一张照片,选择自己喜爱的街头艺术或涂鸦风格,普通的照片就能瞬间变成充满现代感和艺术气息的街头作品。体验转换街头艺术或涂鸦风格http......
  • 有关本人……
    嘿,来认识下“技术杂家”的我对于世界上最伟大的软件工程师这个问题,如果汤磊不是唯一的答案,我想此题无解。——汤磊......
  • 一、折线图:展现股价走势
    一、折线图:展现股价走势1.1、简单版-股价走势图#简洁版importpandasaspdimportmatplotlib.pyplotasplt#读取CSV文件df=pd.read_csv('../数据集/格力电器.csv')data=df[['high','close']].plot()plt.show()首先通过df[['high','close']]从df中获......
  • zabbix监控网络设备流量
    项目环境一台liunx服务器,这里使用的为ubuntu22.04(192.168.86.140)一台华为交换机,本次监控的就是该交换机的端口流量(192.168.86.20)一台pc主机,使用该主机模拟流量变化ENSP拓扑图:安装zabbix这里使用shell脚本进行安装,仅为ubuntu22.04的安装方式,别的版本可以参看zabbix官......
  • 十分钟写作Day6 1.18
    前言今天没有特定的题目,所以记录记录今天的碎片时光。正文今天一个教我们的新老师第二次来给我们讲课,讲了一下昨天Codeforces的contest2056.here.不过D题是道好题。巧的地方就在于将合法的统计改为总的数量减去不合法的数量的这一个操作能将一个不等式条件改为等式条件......
  • 动态规划(dp数组)
    动态规划,是利用历史记录来避免重复计算的一种算法,是求解决策过程最优化的过程。一般用一维数组/二维数组来保存历史记录。(将原问题拆解成若干子问题,同时保存子问题的答案,使每个子问题只求解一次,最终获得原问题的答案。)一般动态规划有三个步骤:1.定义数组元素的含义,一般求什么就......
  • [NOIP2024] 编辑字符串
    比较简单的贪心首先按照\(t_1,t_2\)中连续的\(1\)将其分成若干段。以样例为例,\(t_1=111010\),那么第一段是\(s_1[1\sim3]\),第二段是\(s_1[5]\);\(t_2=101101\),那么第三段是\(s_2[1]\),第四段是\(s_2[3\sim4]\),第五段是\(s_2[6]\).同时统计每一段中,\(s_1(s_2)\)的\(1\)和\(0\)的数量......