Linux驱动学习(1)
Linux 驱动学习基于 Platform 架构编写驱动之前编写 LED 字符设备驱动时需要自己申请设备号、创建设备节点并且将寄存器地址直接写在驱动代码中。这种方式虽然可以实现功能但是不方便管理和移植。为了让驱动结构更加清晰Linux 引入了 platform 总线模型并结合设备树、pinctrl 子系统和 gpio 子系统实现设备信息与驱动代码分离。一、混杂设备驱动misc之前编写字符设备驱动时需要通过alloc_chrdev_region()申请设备号再通过cdev注册字符设备。实际上Linux 已经为一些通用设备预留了主设备号。例如混杂设备misc使用的主设备号为 10蜂鸣器、LED 等简单设备可以根据实际情况使用混杂设备框架。使用 misc 框架可以省去部分字符设备注册流程主要通过以下结构体和函数完成注册struct miscdevice描述混杂设备。misc_register()注册混杂设备。misc_deregister()注销混杂设备。不过misc 只是简化字符设备注册的一种方式并不是所有 LED、蜂鸣器都必须使用 misc 驱动。二、设备树驱动之前编写驱动时外设的寄存器地址、GPIO 编号等信息可能直接写在驱动代码中。如果更换开发板或者引脚这些代码就需要修改不利于驱动移植。因此引入了设备树Device Tree。设备树主要负责描述硬件信息例如外设使用的寄存器地址。GPIO 引脚信息。中断信息。时钟、电源等硬件资源。驱动代码则负责获取这些信息并实现设备的初始化和操作方法。以 IMX6ULL 为例设备树源码通常位于arch/arm/boot/dts/imx6ull-alientek-emmc.dts修改设备树后需要重新编译对应的 DTB 文件并确保开发板实际加载了更新后的设备树。需要注意设备树并不是自动让驱动适配所有外设。驱动还需要通过设备树匹配相应的设备并正确解析其中的硬件资源。三、Platform 驱动框架Platform 是 Linux 中用于管理片上外设的一种总线模型常用于 GPIO 控制器、串口、LED 等 SoC 内部设备。它的核心是将设备和驱动分开管理。1. 设备与驱动分离设备端platform_device描述设备的硬件资源。驱动端platform_driver实现设备的操作方法。在使用设备树的情况下设备信息通常定义在 DTS 文件中由内核将设备树节点转换为相应的 platform 设备。驱动通过compatible属性与设备树节点进行匹配。匹配成功后内核调用驱动中的probe()函数完成设备初始化。当设备被移除时内核可以调用remove()函数执行清理工作。常用成员和函数struct platform_driver定义 platform 驱动。probe()设备匹配成功后执行。remove()设备移除时执行。platform_driver_register()注册 platform 驱动。platform_driver_unregister()注销 platform 驱动。2. Platform 驱动的基本流程在设备树中描述硬件信息。在驱动中编写platform_driver。设置驱动的of_match_table通过compatible匹配设备树。注册 platform 驱动。设备匹配成功后执行probe()。在probe()中获取 GPIO、寄存器等资源并完成设备初始化。编写文件操作接口实现用户空间与驱动之间的交互。如果使用misc框架还可以在probe()中注册 misc 设备在remove()中注销。四、驱动分层思想Linux 驱动开发不仅强调设备与驱动分离也强调分层设计。对于 GPIO 控制的 LED可以使用 pinctrl 和 GPIO 两个子系统避免直接操作底层寄存器。1. Pinctrl 子系统pinctrl 主要负责引脚复用和电气属性配置例如设置引脚的复用功能。配置上下拉。设置驱动能力等电气属性。以 IMX6ULL 为例在arch/arm/boot/dts/imx6ull-alientek-emmc.dts文件的iomuxc节点中可以添加引脚配置方案。例如下面是一个简化的 GPIO 引脚配置示例具体引脚复用值需要根据实际硬件和芯片手册确定iomuxc { pinctrl_led: ledgrp { fsl,pins /* 在这里填写实际的引脚复用配置 */ ; }; };这里的pinctrl_led是引脚配置节点的标签后续可以通过pinctrl-0引用它。2. GPIO 子系统GPIO 子系统主要负责 GPIO 的输入输出控制。例如将 GPIO 配置为输入或输出。读取 GPIO 输入电平。设置 GPIO 输出高低电平。在设备树中可以将引脚配置与 GPIO 设备信息关联起来led { compatible alientek,myled; pinctrl-names default; pinctrl-0 pinctrl_led; /* 根据实际硬件填写 GPIO 控制器和引脚编号 */ led-gpios gpio1 3 GPIO_ACTIVE_LOW; status okay; };以上代码仅为结构示例GPIO 控制器、引脚编号以及宏的定义必须根据实际硬件进行调整。使用GPIO_ACTIVE_LOW表示该 GPIO 采用低电平有效的逻辑。驱动中可以通过 GPIO 描述符接口获取并控制 GPIO例如devm_gpiod_get()和gpiod_set_value_cansleep()。3. Pinctrl 和 GPIO 的区别简单理解pinctrl负责配置引脚应该使用什么功能以及相关电气属性。GPIO负责控制引脚的输入输出状态。例如LED 所连接的引脚需要先配置为 GPIO 功能再由 GPIO 子系统控制输出高低电平。在使用设备树和标准 GPIO 接口时通常不需要在驱动中直接操作 IOMUXC、GPIO 的物理寄存器地址。五、总结学习 Linux 驱动时可以将整个过程理解为三个方面设备树描述硬件信息解决硬件信息写死在驱动中的问题。Platform 框架实现设备与驱动分离通过匹配机制调用probe()。pinctrl 和 GPIO 子系统分别负责引脚配置和 GPIO 输入输出控制。在此基础上再结合 misc 或其他字符设备框架就可以完成从设备树解析、硬件初始化到用户空间访问的完整驱动流程。这种方式能够减少重复代码也更方便驱动移植和维护。

相关新闻

人才测评结果能否作晋升加薪依据,2026实操深度解读

人才测评结果能否作晋升加薪依据,2026实操深度解读

一、先说结论:测评可以“参考”,但不能“单飞”智联招聘2026年报告显示,影响人才晋升与调岗结果的因素中,综合素质占54%,工作业绩占53%,资历与经验占53%,而领导认可仅占7%。测评数据在“综合素质…

2026/10/14 19:44:52 阅读更多 →
面试官眼中的好简历长什么样?

面试官眼中的好简历长什么样?

先说结论:看一份简历,2 分钟里往往只找三样——匹配、证据、干净。三样都在,就进下一轮;缺一样,就看运气。 所以「好简历」不是写得多漂亮,而是把这三样摆到最显眼的位置。 一、匹配:JD 里的词&…

2026/10/14 19:44:52 阅读更多 →
ArkUI GridRow+GridCol:展陈仪表卡片断点占列与窄屏触达保护【鸿蒙心迹】

ArkUI GridRow+GridCol:展陈仪表卡片断点占列与窄屏触达保护【鸿蒙心迹】

本篇 Demo 名称 PanelCaliper,页面 PanelDashboard,演示任务 PD-2112。所有指标为静态虚构演示值:温度 23.5 C、湿度 48 %、客流 128 人、设备 6 台;既无现场传感器,也没有真实的馆内生产监控连接。文章附图为独立绘制…

2026/10/14 19:43:52 阅读更多 →

最新新闻

权威测评!2026年最火AI论文工具榜单,免费款也能高效产初稿

权威测评!2026年最火AI论文工具榜单,免费款也能高效产初稿

一、实测方法论:5 大维度量化评估 本次实测覆盖全学科论文场景,重点考察以下维度,结果客观可复现: 表格 评估维度权重测评标准中文适配度25%是否符合 GB/T7714 引用规范,语言逻辑自然度,术语准确性免费功能…

2026/10/14 20:21:39 阅读更多 →
Linux嵌入式SD/MMC驱动调试:信号流向、三层架构与实战排错

Linux嵌入式SD/MMC驱动调试:信号流向、三层架构与实战排错

1. 项目概述:为什么一个SD/MMC驱动分析值得花时间深挖?在嵌入式Linux开发一线干了十多年,我经手过的板子从ARM9、ARM11到Cortex-A7/A53/A72,再到如今的RISC-V SoC,几乎每一块主控芯片的BSP包里,SD/MMC子系统…

2026/10/14 20:21:39 阅读更多 →
最小二乘法全攻略:从线性回归原理到代码实现与避坑实践

最小二乘法全攻略:从线性回归原理到代码实现与避坑实践

我第一次真正用上最小二乘法,是在处理一组传感器校准实验数据的时候。当时手里是一堆带噪声的采样点,教科书里的公式能帮我“找一条最合理的直线”,但工程上真正让人头疼的,其实是后面这些事:数据里混了离群点怎么办&a…

2026/10/14 20:21:39 阅读更多 →
大模型应用落地指南:从模型选型到Agent与RAG实践

大模型应用落地指南:从模型选型到Agent与RAG实践

1. 模型维度:基座能力的格局与选型逻辑距离大模型真正进入大众视野到现在,已经过了好几个年头。站在2026年10月这个时间窗口往回看,最明显的变化是:市面上能叫得出名字的大模型,已经从早期的"百家争鸣"收敛成…

2026/10/14 20:21:39 阅读更多 →
Linux MMC驱动深度解析:SD卡识别流程与SDIO协议栈实战

Linux MMC驱动深度解析:SD卡识别流程与SDIO协议栈实战

1. 项目概述:这不是教科书里的驱动理论,而是现场拆解一张SD卡如何被Linux真正“认出来” 你有没有遇到过这样的情况:插上一张SD卡,系统日志里刷出一串 mmc0: new high speed SDHC card at address 0001 ,但紧接着 d…

2026/10/14 20:21:39 阅读更多 →
从Zernike波前到PSF/MTF:光学像质仿真完整指南

从Zernike波前到PSF/MTF:光学像质仿真完整指南

做光学系统设计的人应该都有过这种体验:镜头草图画完、光线追迹也跑通了,但别人问"那成像到底清不清楚、能分辨多小的细节",你一时却拿不出一个直观的答复。光线追迹给的是光路,不是像质。真正用来回答"成像多锐利…

2026/10/14 20:20:38 阅读更多 →

日新闻

AnyPS5通用适配层设计:兼容性与性能的工程取舍

AnyPS5通用适配层设计:兼容性与性能的工程取舍

1. 从"AnyPS5"这个名字说起:它到底想解决什么问题第一次看到"AnyPS5"这个标题,我脑子里冒出来的第一个念头是:这大概率是一个围绕"跨平台运行"或者"通用适配"做文章的项目。名字里的"Any"…

2026/10/14 0:00:41 阅读更多 →
Flutter跨平台开发实战:二手交易应用与HarmonyOS适配

Flutter跨平台开发实战:二手交易应用与HarmonyOS适配

1. 项目概述:Flutter跨平台二手交易应用开发作为一名长期从事移动应用开发的工程师,我最近完成了一个基于Flutter框架的二手物品交易平台项目。这个项目最吸引我的地方在于它完美结合了Flutter的跨平台优势与HarmonyOS的生态特性,实现了"…

2026/10/14 0:00:41 阅读更多 →
DFS算法解决飞机降落调度问题实战

DFS算法解决飞机降落调度问题实战

1. 项目背景与核心思路飞机降落问题是一个经典的调度优化场景,也是算法竞赛和面试中的高频题目。这个题目要求我们合理安排多架飞机的降落顺序和时间,确保所有飞机都能安全着陆而不发生冲突。在实际航空管制中,这类问题直接关系到飞行安全和机…

2026/10/14 0:00:41 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/14 3:30:28 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/14 16:30:29 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/14 3:29:58 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/13 22:01:27 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/13 14:57:39 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/14 7:53:34 阅读更多 →