如何从 Linux 用户空间强制重新扫描 SDIO 总线?

如何从 Linux 用户空间强制重新扫描 SDIO 总线?

在嵌入式 Linux 平台上,我有一个连接到 SDIO 接口的网络适配器。该特定总线上没有卡检测信号。例如,如果我打开或关闭网络适配器电源,有什么方法可以强制从用户空间重新扫描 SDIO 总线?

答案1

正如 0andriy 所提到的,您可以使用绑定/取消绑定。我正在做类似的事情,但这会有所不同,因为它取决于硬件。要取消绑定我的 sdio wifi 模块,我使用:

echo -n "2190000.usdhc" > /sys/devices/soc0/soc/2100000.aips-bus/2190000.usdhc/driver/unbind

这会给你类似mmc1: card 0001 removeddmesg 的东西。

然后我切换 GPIO 引脚来重置我的 WiFi 模块

然后重新绑定:

echo -n "2190000.usdhc" > /sys/bus/soc/devices/soc0/soc/2100000.aips-bus/2190000.usdhc/subsystem/drivers/sdhci-esdhc-imx/bind

此时 dmesg 将打印如下内容:

mmc1: SDHCI controller on 2190000.usdhc [2190000.usdhc] using ADMA
mmc1: new high speed SDIO card at address 0001

这个旧的很好地解释了绑定/解除绑定过程LWN.net文章

答案2

好像有一个补丁已提交到 linux-mmc 邮件列表添加此功能,但是查看当前源,好像没有添加。

不幸的是,我想这就是答案:你不能。

答案3

我能够按照 Marius 在 beaglebone black 中的回答中指定的步骤成功解除绑定和绑定连接到 mmc2 的 WiFi 芯片(beaglebone mmc0、mmc1、mmc2 中有 3 个 SDIO 接口)接口。但是 beaglebone black 中的 mmc2 接口的路径(这是在运行 IoT Buster 映像的 Beaglebone Rev C 板上测试的)有点不同。

要取消绑定 sdio 模块,请以 root 身份执行以下命令:
echo -n "47810000.mmc" > /sys/devices/platform/soc/subsystem/devices/47810000.mmc/driver/unbind

绑定模块:
echo -n "47810000.mmc" > /sys/devices/platform/soc/subsystem/devices/47810000.mmc/subsystem/drivers/omap_hsmmc/bind

相关内容