MCP23017 I2C 设备驱动程序探测函数未调用

2024-02-19

我正在使用以下 I2C/GPIO设备驱动 https://github.com/torvalds/linux/blob/master/drivers/gpio/gpio-mcp23s08.c访问 MCP23017 GPIO。使用 insmod 命令,我可以加载驱动程序及其在 /proc/modules 中列出的内容。我有两个 MCP23017 芯片连接到我的 Raspberry Pi。两者均在地址处检测到0x20 and 0x21。对驱动程序的 initcall 注册驱动程序。我通过打印一条消息来检查这一点。但是驱动程序的探测函数没有被调用。设备未打开/无法位于其他地方。

  1. 探针函数是如何调用的?
  2. 是否应该手动进行探测来定位设备?
  3. Is the probe调用类似于open call?
  4. 我试过这个echo mcp23017 0x20 > new_device使用该地址手动创建一个新设备。但这没有用。我收到以下消息:Driver 'mcp23s08' is already registered, aborting...

任何帮助,将不胜感激。


probe()当驱动程序与设备树中的设备描述匹配时调用该函数。匹配发生在兼容的 http://elinux.org/Device_Tree_Usage#Understanding_the_compatible_Property在设备树中找到您的驱动程序的字段(对于您的驱动程序来说,它是"microchip,mcp23017"细绳)。

显然您没有在设备树中描述您的设备(MCP23017),这就是为什么probe()不被调用。您可以加载相应的设备树覆盖来解决此问题。这one http://mirrors.neusoft.edu.cn/rpi-firmware/boot/overlays/mcp23017.dtbo你在评论中指出的似乎是正确的。阅读有关在 Raspberry Pi 生态系统中加载覆盖层的更多信息here https://www.raspberrypi.org/documentation/configuration/device-tree.md.

您可以尝试按照该文章中所述加载叠加层:

$ sudo dtoverlay mcp23017.dtbo

或者你可以尝试使用Capemgr http://elinux.org/Capemgr以此目的。就我个人而言,我没有尝试过其中任何一个,所以你应该看看哪一个最适合你。

Update

在评论中回复您的问题。

但是当我尝试i2cdetect命令显示UU。

See 人 i2c 检测 http://linux.die.net/man/8/i2cdetect。所以“UU”的意思是i2cdetect跳过探测,因为您指定的地址处的设备已被驱动程序使用。我猜这就是你的意图,所以没关系。

With a rmmod mcp23017命令我看到设备仍在设备下,但是i2cdetect shows 0x20

所以你卸载了驱动程序,现在i2cdetect显示有某个设备正在运行0x20地址。我想这是正确的行为。另外,如果您想完全摆脱您的设备,请尝试卸载 DT 覆盖以及驱动程序。

我还连接了两个MCP23017芯片。但我只能看到该设备0x20在设备下。 I2C芯片位于0x21仍然没有检测到,尽管驱动程序说它支持最多 8 个芯片

我可以看到这个问题的两个可能原因。

  1. DT 覆盖仅具有设备描述0x20地址,但缺少设备的描述0x21地址。如果是这种情况,您应该找到 DT 覆盖的源,添加其余设备的描述,编译修改后的 DT 覆盖,然后加载它而不是预构建的。
  2. 所有设备都可以配置为使用0x20地址。参见部分1.4 Hardware Address Decoder in MCP23017 https://cdn-shop.adafruit.com/datasheets/mcp23017.pdf数据表了解详细信息。查看A0, A1, A2芯片上的引脚。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

MCP23017 I2C 设备驱动程序探测函数未调用 的相关文章

  • Snap-confine 具有提升的权限,并且不受限制,但应该受到限制。拒绝继续避免权限升级攻击

    我已经使用 snap 一段时间了 但最近升级后 当我尝试打开任何应用程序时 出现此错误 Snap confine has elevated permissions and is not confined but should be Refu
  • bash双括号问题

    我对 bash 脚本非常陌生 在使用双括号时遇到了问题 我似乎无法让它们在 Ubuntu Server 11 10 中工作 我的下面的脚本位于 if test sh 中 bin bash if 14 14 then echo FOO fi
  • Mono 和 WebRequest 速度 - 测试

    在 mono 4 6 2 linux 中 我注意到 wget 下载文件的速度与webclient DownloadString 所以我做了一个小测试来调查 为什么 wget 明显比 C 快 根据我自己的实验 使用 wget 下载 手动读取文
  • Bash 中 $() 和 () 之间的区别

    当我打字时ls l echo file 支架的输出 这只是简单的回显 被获取并传递到外部ls l命令 就等于简单的ls l file 当我打字时ls l echo file 我们有错误 因为不能嵌套 内部外部命令 有人可以帮助我理解之间的区
  • 是否可以找到哪个用户位于 localhost TCP 连接的另一端?

    这是一个编程问题 但它是 Linux Unix 特定的 如果我从本地主机获得 TCP 连接 是否有一种简单的方法可以告诉哪个用户在 C 程序内建立了连接而无需 shell 我知道这对于 Unix 域套接字来说并不太难 我已经知道远程 IP
  • 使用 C++ 输出字符串覆盖 Linux 终端上的最后一个字符串

    假设我有一个命令行程序 有没有办法让我说的时候 std cout lt lt stuff 如果我不做std cout lt lt n 在另一个之间std cout lt lt stuff 东西的另一个输出将覆盖同一行上的最后一个东西 清理行
  • 对 sf:: 的未定义引用

    我想用 C 制作 GUI 应用程序 发现 SFML 是一个不错的选择 幸运的是 我使用的是 Linux 所以 SFML 2 4 已经安装在我的系统上 所以我开始搜索一些教程并找到了一个制作简单窗口的教程 但是当我运行代码时 出现错误 提示未
  • 如何使用libaudit?

    我试图了解如何使用 libaudit 我想接收有关使用 C C 的用户操作的事件 我不明白如何设置规则 以及如何获取有关用户操作的信息 例如 我想获取用户创建目录时的信息 int audit fd audit open struct aud
  • 在 Ubuntu 上纯粹通过 bash 脚本安装 mysql 5.7

    我想要一个无需任何手动输入即可安装 MySQL 5 7 实例的 bash 脚本 我正在关注数字海洋教程 https www digitalocean com community tutorials how to install mysql
  • 在中断时获取 current->pid

    我正在Linux调度程序上写一些东西 我需要知道在我的中断到来之前哪个进程正在运行 当前的结构可用吗 如果我在中断处理程序中执行 current gt pid 我是否可以获得我中断的进程的 pid 你可以 current gt pid存在并
  • 什么是标记结构初始化语法?

    struct file operations scull fops owner THIS MODULE llseek scull llseek read scull read write scull write ioctl scull io
  • UDP 广播发送失败:在 Linux 2.6.30 上“网络无法访问”

    我用udp广播写了一个程序 代码段如下 struct sockaddr in broadcast addr socklen t sock len sizeof broadcast addr bzero broadcast addr sock
  • 如何仅将整个嵌套目录中的头文件复制到另一个目录,在复制到新文件夹后保持相同的层次结构

    我有一个目录 其中有很多头文件 h 和其他 o 和 c 文件以及其他文件 这个目录里面有很多嵌套的目录 我只想将头文件复制到一个单独的目录 并在新目录中保留相同的结构 cp rf oldDirectory newDirectory将复制所有
  • sqlite 插入需要很长时间

    我正在将不到 200 000 行插入到 sqlite 数据库表中 我只是在终端中通过 sqlite3 使用一个非常简单的 sql 文件 我打赌它已经运行了至少 30 分钟 这是正常现象还是我应该关闭该过程并尝试不同的方法 sqlite中的插
  • Gradle 1.3:build.gradle 不构建类

    这里有一个新问题 我有一个 build gradle 文件apply plugin java在其中 并与 java 项目 包关联 当我跑步时gradle build从命令行我得到 compileJava UP TO DATE process
  • Linux 中的电源管理通知

    在基于 Linux 的系统中 我们可以使用哪些方法 最简单的方法 来获取电源状态更改的通知 例如 当计算机进入睡眠 休眠状态等时 我需要这个主要是为了在睡眠前保留某些状态 当然 在计算机唤醒后恢复该状态 您只需配置即可获得所有这些事件acp
  • 为什么 ld 无法从 /etc/ld.so.conf 中的路径找到库?

    我想添加 opt vertica lib64进入系统库路径 所以我执行以下步骤 1 添加 opt vertica lib64 into etc ld so conf 然后运行ldconfig 2 检查 bash ldconfig p gre
  • R 未获取用户库

    我有一个带 R 3 6 0 的 Fedora 30 系统 用户库设置在Renviron就像这个 R LIBS USER R LIBS USER R x86 64 redhat linux gnu library 3 6 事实上 它出现在交互
  • 错误:NVIDIA-SMI 失败,因为无法与 NVIDIA 驱动程序通信

    NVIDIA SMI 抛出此错误 NVIDIA SMI 失败 因为无法与 NVIDIA 通信 司机 确保安装了最新的 NVIDIA 驱动程序并且 跑步 我清除了 NVIDIA 并按照提到的步骤重新安装了它here https askubun
  • Linux命令列出所有可用命令和别名

    是否有一个 Linux 命令可以列出该终端会话的所有可用命令和别名 就好像您输入 a 并按下 Tab 键一样 但针对的是字母表中的每个字母 或者运行 别名 但也返回命令 为什么 我想运行以下命令并查看命令是否可用 ListAllComman

随机推荐

  • Spring + Tomcat 基于Request URL的多租户

    我们有一个可供多个客户使用的单一应用程序 每次都是同一个应用程序 但使用不同的数据库 我们当前的设置包括 Apache 2 网络服务器 Tomcat 8 春季4 1 Web 服务器将特定的 URL 路由到 Tomcat 即 customer
  • PrimeFaces:如何覆盖 CSS 类

    创建按钮时 该类ui corner all始终适用 我尝试了以下方法
  • Rail 3.2.2/Devise:带有 rspec 的弃用警告

    我最近将一个应用程序升级到了 Rails 3 2 2 我正在使用 Factory girl Factory sequence name do n 名称 n 结束 Factory define 用户做 u u first name Facto
  • 詹金斯:无法连接到存储库

    我正在尝试在 github 存储库上连接 jenkins 当我指定 Repo URL 时 jenkins 返回以下错误消息 无法连接到存储库 命令 git ls remote h 电子邮件受保护 cdn cgi l email protec
  • 从 JavaScript 正确调用 TypeScript 代码

    在我们的大型企业项目中 我们面临的情况似乎在互联网上的文章和帖子中没有得到很好的描述 我们需要将支持 SPA 的现有 JavaScript 基础设施代码与其他团队在 TypeScript 上开发的代码集成起来 由于许多政治限制和可用的开发资
  • 如何在 JSON 对象中添加 URL 字符串

    我需要添加通常采用 http somewebsite com somepage asp 格式的 URL 当我使用上面的 URL 创建一个字符串并将其添加到 JSON 对象 json 时 using json put url urlstrin
  • JPanel 不会完全伸展以占据可用空间

    我有一个面板 我在其中并排放置了几个具有不同尺寸和颜色的迷你面板 它们应该占据整个父面板 水平 为此 我使用 BorderLayout 用于父面板 并使用 BoxLayout 作为放置所有迷你面板的子面板 请参见下面的代码 它在调整大小和其
  • 阻止 chrome 在拖动链接时将光标更改为地球仪

    我有一个标准链接 例如 a href test Test a 在 Chrome 中 单击并拖动此链接将导致光标变为拖动地球仪的箭头 地球仪可以放在 URL 或书签栏上 我正在尝试用 JavaScript 实现拖放文件系统界面 所有文件和文件
  • 何时使用 $sanitize 和 $sce ?他们之间有什么区别?

    我试图了解属性之间的区别 请帮忙举出实际例子 何时使用它们 在这个论坛里找不到这样的问题 请帮帮我 sce是实际选择字符串是否可以安全使用以及是否应该对其进行清理的服务 如果是 HTML 则运行 sanitize如果有的话 你可能永远不需要
  • Perl 子例程参数

    我最近一直在阅读有关 Perl 的内容 并且对 Perl 如何处理传递给子例程的参数感到有点困惑 在 Python Java 或 PHP 等语言中 函数定义采用以下形式 伪代码 function myFunc arg1 arg2 Do so
  • 使用 Python 创建新的 Access 数据库和表

    我正在尝试用 Python 创建一个 Access 数据库并向其中添加两个新表 我正在使用 win32com 并已成功创建数据库 但无法创建表 我得到的只是无益的 Windows 错误 谁能帮我 下面的代码工作正常 dbname r C U
  • 如何在运行时获取过程或函数名称?

    有没有any返回函数或过程名称的方法在运行时 我目前正在错误处理这样的事情 Sub foo Const proc name as string foo On Error GoTo ErrHandler do stuff ExitSub Ex
  • WordPress 计数小部件

    您好 我想弄清楚如何获得在给定侧边栏位置发布的小部件的数量 例如 我有一个名为 UTILITY 的侧边栏 它是一个水平侧边栏 我希望这些小部件位置的宽度根据其中发布的小部件的数量进行均匀调整 我想知道在给定页面上此侧边栏中发布了多少个小部件
  • 别名使 emacs 在新缓冲区(不是框架)中打开文件并被激活/来到前面?

    到目前为止我所拥有的是 alias em open a Applications Emacs app osascript e tell application Emacs app to activate 但我很困惑 使用该代码 em fil
  • 在 Jar 中查找实现接口的类

    我想知道 jar 内的类是否实现了特定的接口 我已经实现了下面的代码 但它会迭代 jar 文件中的所有类 并在每个类上查找它是否实现了这个特定的接口 public static synchronized boolean findClasse
  • 表单action="/"是什么意思? [复制]

    这个问题在这里已经有答案了 表单的操作通常是指提交后运行的脚本 我看到一个代码form action 我无法找到它的去向 有人请给我解释一下 它转到基本目录的索引
  • NTLM授权WCF在ASP.NET Core中不起作用

    我遇到 NTLM 授权问题 我有一个在asp net上运行没有任何问题的服务 但现在我需要在asp net core上使用这个服务 但我无法通过授权 我这样配置绑定 var binding new BasicHttpBinding Basi
  • 使用 设置日期格式并将其显示在

    我想在 h outputText 中显示类似 2010 10 20 by Mary 的内容 日期值存储在 MBean 的名为 date1 的字段内 而用户名存储在 MBean 的名为 username 的字段内 我使用以下 EL 表达式和
  • C# 中 var 和 string 有什么区别? [复制]

    这个问题在这里已经有答案了 有什么区别var and string in C 关键词var用于隐式类型的声明 如果您使用变量的命名类型 那么除了可读性之外没有其他区别 并且对于哪种更好有不同的意见 例子 var s asdf 给出与以下完全
  • MCP23017 I2C 设备驱动程序探测函数未调用

    我正在使用以下 I2C GPIO设备驱动 https github com torvalds linux blob master drivers gpio gpio mcp23s08 c访问 MCP23017 GPIO 使用 insmod