![如何从 Linux 用户空间强制重新扫描 SDIO 总线?](https://linux22.com/image/21360/%E5%A6%82%E4%BD%95%E4%BB%8E%20Linux%20%E7%94%A8%E6%88%B7%E7%A9%BA%E9%97%B4%E5%BC%BA%E5%88%B6%E9%87%8D%E6%96%B0%E6%89%AB%E6%8F%8F%20SDIO%20%E6%80%BB%E7%BA%BF%EF%BC%9F.png)
在嵌入式 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 removed
dmesg 的东西。
然后我切换 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
答案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