news 2026/8/6 0:29:34

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

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
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

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/31 10:52:02

救命神器9个AI论文软件,自考学生轻松搞定毕业论文!

救命神器9个AI论文软件&#xff0c;自考学生轻松搞定毕业论文&#xff01; 自考论文写作的救星&#xff1a;AI工具如何帮你轻松应对 对于自考学生而言&#xff0c;撰写毕业论文是一项既复杂又耗时的任务。从选题、收集资料到撰写初稿、反复修改&#xff0c;每一步都可能让人感到…

作者头像 李华
网站建设 2026/8/2 22:29:10

【粉丝福利社】驾驭Gemini 3与Nano Banana:人人都是AI产品创客

你好&#xff0c;未来的创造者&#xff01; 2025 年&#xff0c;AI 编程已成爆发之势—— Cursor 年收入破 10 亿美元&#xff0c;斯坦福学生“不写一行代码”就能交作业…… 这背后&#xff0c;是一个明确的信号&#xff1a;编程的核心&#xff0c;正从“写代码”转向“定义需…

作者头像 李华
网站建设 2026/7/31 1:51:52

SSM230的电影资源信息网站(付费,免费)素材投稿系统

目录SSM230电影资源信息网站概述素材投稿系统设计技术实现与版权管理用户互动与社区生态开发技术源码文档获取/同行可拿货,招校园代理 &#xff1a;文章底部获取博主联系方式&#xff01;SSM230电影资源信息网站概述 SSM230是一个整合付费与免费电影资源的综合信息平台&#x…

作者头像 李华
网站建设 2026/7/31 1:51:21

SSM232的药品电子商城系统在线诊断系统

目录SSM232药品电子商城系统在线诊断系统摘要开发技术源码文档获取/同行可拿货,招校园代理 &#xff1a;文章底部获取博主联系方式&#xff01;SSM232药品电子商城系统在线诊断系统摘要 药品电子商城系统结合在线诊断功能&#xff0c;旨在为患者提供便捷的药品购买与健康咨询服…

作者头像 李华
网站建设 2026/7/31 11:12:51

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

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

作者头像 李华
网站建设 2026/8/5 14:27:04

聊一聊,JMeter分布式性能测试!

在做后端服务器性能测试中&#xff0c;我们会经常听到’分布式’。但你是否了解分布式呢&#xff1f;今天&#xff0c;我们就来给大家讲讲&#xff0c;在企业实战中&#xff0c;如何使用分布式进行性能测试&#xff0c;实战过程中&#xff0c;又有哪些地方要特别注意&#xff1…

作者头像 李华