Linux驱动学习:验证MasterDriverDevice三方匹配成功

实验日志:
[root@100ask:/proc/device-tree]# find -name "oled"./soc/aips-bus@02000000/spba-bus@02000000/ecspi@02008000/oled[root@100ask:/proc/device-tree]# cd /root/[root@100ask:~]# insmod oled_drv.ko[119.745706]100ask_spi_oled_drv spi0.0: SPI Master Bus Num:0[119.770832]100ask_spi_oled_drv spi0.0: SPI Master Name: spi0[119.788172]100ask_spi_oled_drv spi0.0: Current Device Chip Select:0

第一部分:深度解析实验日志

1. 设备树路径的秘密
[root@100ask:/proc/device-tree]# find -name "oled"./soc/aips-bus@02000000/spba-bus@02000000/ecspi@02008000/oled

这条路径暴露了 i.MX6ULL 芯片内部的物理拓扑结构:

  • soc:片上系统根节点。
  • aips-bus/spba-bus:这是 ARM 内部的高速外设总线。
  • ecspi@02008000:这是关键!
    • 0x02008000是 i.MX6ULL 手册中ECSPI1控制器的物理基地址。
    • 这证明 OLED 节点正确地挂载在ECSPI1控制器下。
    • 如果这里是ecspi@0200c000,那就是 ECSPI2。这个地址决定了下面的Master Bus Num是多少。
2. 驱动加载日志解码
[ 119.745706] 100ask_spi_oled_drv spi0.0: SPI Master Bus Num: 0
  • spi0.0:这是 Linux 为该设备生成的唯一 ID。
    • 前一个0:代表Bus Number(总线号)。对应上面的 ECSPI1。
    • 后一个.0:代表Chip Select(片选号)。说明硬件上您使用的是 CS0 引脚。
  • Bus Num: 0:验证了驱动程序正确读取到了 Master 的编号。在 i.MX6ULL 的设备树别名(aliases)中,通常有spi0 = &ecspi1;,所以物理上的 ECSPI1 被映射为逻辑上的 Bus 0。
[ 119.770832] 100ask_spi_oled_drv spi0.0: SPI Master Name: spi0
  • 这里 Master 的名字叫spi0。在不同的内核版本中,这里可能会显示为2008000.spi(物理地址)或spi_master。显示为spi0说明内核的 SPI 子系统已经为这个控制器分配了标准的逻辑名称。
[ 119.788172] 100ask_spi_oled_drv spi0.0: Current Device Chip Select: 0
  • 再次确认为片选 0。如果您在设备树里把reg = <0>;改成reg = <1>;,这里就会变成 1。

第二部分:如何进行“三方对应”验证(Master、Device、Driver)

在 Linux 驱动开发中,**“匹配成功”**是指三个独立的部分完美咬合。只要其中任何一方掉链子,probe函数就不会执行。

我们将通过Sysfs 文件系统Debugfs来进行地毯式排查。

角色一:Master (SPI 控制器)

它的任务:提供物理通信舞台。如果 Master 没就位,在这个舞台上的一切都是空谈。

在终端输入:

ls -l /sys/bus/platform/drivers/spi_imx/

输出:

total 0 lrwxrwxrwx 1 root root 0 Jan 1 03:48 2008000.ecspi -> ../../../../devices/soc0/soc/2000000.aips-bus/2000000.spba-bus/2008000.ecspi lrwxrwxrwx 1 root root 0 Jan 1 03:48 2010000.ecspi -> ../../../../devices/soc0/soc/2000000.aips-bus/2000000.spba-bus/2010000.ecspi --w------- 1 root root 4096 Jan 1 03:48 bind --w------- 1 root root 4096 Jan 1 03:48 uevent --w------- 1 root root 4096 Jan 1 03:48 unbind

进入该目录,查看driver链接:

[root@100ask:/sys/bus/platform/drivers/spi_imx/2008000.ecspi/driver]# ls2008000.ecspi2010000.ecspibinduevent unbind
  • 成功含义:表示spi-imx.c驱动已经成功接管了0x02008000这个硬件控制器。Master 已激活。
角色二:Device (设备树节点 / SPI Slave)

它的任务:告诉内核“我是谁,我在哪”。由设备树(.dts)生成。

查看 SPI 总线下的设备:

ls /sys/bus/spi/devices/

判断标准

  1. 你必须看到spi0.0这个目录。

    • 如果没有:说明ecspi@02008000下的oled节点解析失败,或者 Master 初始化失败导致没去扫描子节点。
  2. 进入目录查看modalias(这是匹配的关键凭证):

    Bash

    cat /sys/bus/spi/devices/spi0.0/modalias
    • 输出内容:应该是spi:oled(或者是设备树里 compatible 去掉前缀后的部分)。如果这个字符串和你的驱动代码里的名字对不上,驱动永远不会加载。
角色三:Driver (你的字符设备驱动oled_drv.ko)

它的任务:提供操作逻辑。

查看已注册的 SPI 驱动:

ls /sys/bus/spi/drivers/

判断标准

  1. 你应该看到你的驱动名,例如100ask_oled(取决于你的struct spi_driver里的 name 字段)。

  2. 终极验证(绑定成功):

    查看该驱动目录下的内容:

    ls -l /sys/bus/spi/drivers/100ask_oled/

    如果匹配成功,你会在这里看到一个指向spi0.0的符号链接!

    Plaintext

    spi0.0 -> ../../../../devices/platform/soc/2000000.bus/.../spi0.0
    • 如果你看到了这个链接:恭喜你,Master、Device、Driver 三方已成功“联姻”。
    • 如果里面是空的:说明驱动加载了,但是没找到对应的设备(名字匹配失败)。

总结图解:三方握手流程

为了方便记忆,请看这张逻辑流向图:

  1. Step 1: Master Ready?

    • 检查/sys/bus/platform/devices/2008000.spi是否存在。
    • (对应你的日志:Master Bus Num: 0, Name: spi0)
  2. Step 2: Device Created?

    • 检查/sys/bus/spi/devices/spi0.0是否存在。
    • (对应你的日志:find -name “oled” 找到了节点)
  3. Step 3: Name Matching?

    • Driver 代码

      staticconststructof_device_idoled_of_match[]={{.compatible="100ask,oled"},// 这里的名字{}};
    • Device Tree

      DTS

      compatible="100ask,oled";// 必须和这里完全一致
    • 如果两者一致,内核会调用probe,然后你就能在/sys/bus/spi/drivers/100ask_oled/下看到spi0.0。w

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

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

相关文章

华为笔记本安装Ubuntu系统,声卡没有声音的处理

从网站:https://github.com/Smoren/huawei-ubuntu-sound-fix/,下载安装包,并安装即可

必看!AI架构师珍藏手册:1.5万字深度解析如何把AI关进确定性系统笼子

文章提出AI系统架构"四大生理系统"框架&#xff0c;将大模型从全能指挥官降级为心脏&#xff0c;系统逻辑接管决策。强调架构设计应遵循祛魅、解耦、归因三大法则&#xff0c;把概率性AI关进确定性系统。提供基于不确定性的技术选型指南&#xff0c;包含组件边界判定…

必收藏!基于模板-定理图谱的LLM数学推理增强技术,性能提升超乎想象!

本文提出了一种基于模板-定理图谱的数学推理增强框架&#xff0c;通过结构化关联问题模板与数学定理&#xff0c;模仿人类联想记忆机制&#xff0c;显著提升LLM在复杂数学问题上的推理能力。该方法利用LLM自动构建高质量知识图谱&#xff0c;设计高效检索与融合机制&#xff0c…

AES加密密钥安全存储、iOS设备管理实现方式Kafka能够实时收集、处理和分析用户行为数据,从而生成动态更新的用户画像AES加密密钥安全存储

AES加密密钥安全存储、iOS设备管理实现方式Kafka能够实时收集、处理和分析用户行为数据&#xff0c;从而生成动态更新的用户画像AES加密密钥安全存储 AES加密密钥安全存储、iOS设备管理实现方式Kafka能够在数据安全日益重要的今天&#xff0c;AES&#xff08;高级加密标准&…

ssm228图书预订 网上书城管理系统vue

目录系统概述核心功能模块技术实现创新点应用价值开发技术源码文档获取/同行可拿货,招校园代理 &#xff1a;文章底部获取博主联系方式&#xff01;系统概述 SSM228网上书城管理系统基于Vue.js前端框架与SSM&#xff08;SpringSpring MVCMyBatis&#xff09;后端架构开发&…

中石化加油卡兑换有隐藏玩法,闲置卡这样处理超划算 - 京顺回收

朋友小林前阵子收拾储物间,意外翻出三张闲置的中石化加油卡,卡里还有不少额度。可他平时开车少,放着怕过期。其实,像小林这样有闲置加油卡困扰的车主不在少数。2025年行业统计表明,超三成车主持有未用完的加油卡,…

【GPR回归预测】基于双向长短期记忆神经网络结合高斯过程回归(BiLSTM-GPR)的多变量回归预测 (多输入单输出)附Matlab代码

✅作者简介&#xff1a;热爱数据处理、建模、算法设计的Matlab仿真开发者。 &#x1f34e;更多Matlab代码及仿真咨询内容点击 &#x1f517;&#xff1a;Matlab科研工作室 &#x1f34a;个人信条&#xff1a;格物致知。 &#x1f525; 内容介绍 一、技术背景与核心目标 多变量…

App自动化测试环境搭建(详细版)

只做记录和注意点&#xff0c;详细内容不做解释 环境&#xff1a;winappium夜神模拟器python 需要用到的工具&#xff1a; 1.java JDK 2. node.js 3. Android SDK 4.Appium-Server 5.Appium-Python-Client 6.appium客户端 7.夜神安卓模拟器 1、java jdk安装 官网下载…

MCP协议:LLM智能体的“万能转接器“,解决“一模型一接口“痛点,建议收藏

MCP&#xff08;模型上下文协议&#xff09;是解决LLM智能体"接口混乱"问题的通用交互标准&#xff0c;采用C/S架构统一LLM与外部系统的沟通语言。相比传统工具函数调用&#xff0c;MCP具有更高标准化程度、更好扩展性和复用性&#xff0c;能实现"即插即用"…

文件操作与文件内容操作

文件操作 File类文件/目录管理&#xff0c;对文件/目录进行CRUD、重命名&#xff0c;还可以查看文件的属性。是指文件外面显示的本身&#xff0c;不是内容。文件内容操作 I/O流Buffered缓冲流ByteArray字节数组流byte[]转换流InputStreamReader/OutputStreamWriter数据流Da…

基于MP2307设计一个12V到7.5V左右的开关电源

简 介&#xff1a; 本文介绍了基于MP2307芯片的12V降压开关电源设计&#xff0c;用于将锂电池电压降至7.2V为导航系统供电。通过单面PCB快速制板&#xff0c;实测空载输出7.29V&#xff0c;带载210mA时为7.35V。测试表明该340kHz工作频率的电源对150kHz导航信号基本无干扰&…

大数据领域数据中台的架构设计思路

大数据领域数据中台的架构设计思路 关键词:大数据、数据中台、架构设计、数据整合、数据服务 摘要:本文围绕大数据领域数据中台的架构设计思路展开,深入浅出地讲解了数据中台的核心概念、各部分之间的关系,详细阐述了其核心算法原理、具体操作步骤,通过实际案例展示了数据…

通过WiFI远程采集导航磁场信号

简 介&#xff1a; 本文测试了基于WiFi控制的导航信号远程采集系统。实验在锂电池供电条件下&#xff0c;将系统从室内移至室外&#xff0c;测试不同距离下的信号采集性能。结果显示&#xff0c;3米范围内采集数据正常&#xff0c;5米时信号减弱、角度信息抖动增大。更远距离测…

“超级工作站”的搭建,cpolar可成功内网穿透软件540!

GodoOS 是一款主打集成化的办公平台&#xff0c;它把日常办公所需的核心功能都整合在了一起&#xff1a;不仅能完成 Word 文档编辑、Excel 表格制作、PPT 排版、PDF 阅读等基础操作&#xff0c;还内置了内网聊天、在线白板、思维导图等协作工具&#xff0c;甚至配备了简易浏览器…

告别卡顿与隐私风险!本地文档编辑器 document搭载cpolar,远程办公超丝滑

document 作为基于 OnlyOffice 打造的本地化 Web 文档编辑器&#xff0c;核心功能是在浏览器端完成 docx、xlsx、pptx 等常见办公文档的新建与编辑&#xff0c;无需依赖服务器运行&#xff0c;尤其适合小微企业、临时项目团队以及注重文件隐私的普通办公人群。它的核心优点在于…

【干货收藏】LangGraph实战指南:告别LLM幻觉,打造确定性AI工作流

LangGraph是解决LLM幻觉问题的关键工具&#xff0c;通过支持循环逻辑、状态管理和人机协作等核心优势&#xff0c;超越了传统LangChain的DAG限制。文章详细介绍了LangGraph的结构组成&#xff08;全局状态、节点、边&#xff09;&#xff0c;并通过代码示例展示了智能翻译Agent…

Java字符串入门:API入门+String类核心

&#x1f3e0;个人主页&#xff1a;黎雁 &#x1f3ac;作者简介&#xff1a;C/C/JAVA后端开发学习者 ❄️个人专栏&#xff1a;C语言、数据结构&#xff08;C语言&#xff09;、EasyX、JAVA、游戏、规划、程序人生 ✨ 从来绝巘须孤往&#xff0c;万里同尘即玉京 文章目录✨Java…

大数据领域 GDPR 合规性评估方法

大数据领域GDPR合规性评估方法&#xff1a;从"踩雷"到"避雷"的系统指南 一、引入&#xff1a;当大数据撞上"史上最严"数据法 2022年&#xff0c;Meta因"剑桥分析门"后续的GDPR违规被欧盟罚款12亿欧元——这不是个例。同年&#xff0c;…

亲测好用9个AI论文软件,MBA论文写作必备!

亲测好用9个AI论文软件&#xff0c;MBA论文写作必备&#xff01; AI 工具助力论文写作&#xff0c;高效与精准并存 在当今学术研究日益数字化的背景下&#xff0c;AI 工具正逐渐成为 MBA 学生和科研工作者不可或缺的助手。无论是撰写论文、优化内容&#xff0c;还是降低 AIGC 率…