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

그러면 dmesg와 같은 결과가 나타납니다 mmc1: card 0001 removed.

그런 다음 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의 답변 in beaglebone black에 지정된 단계에 따라 mmc2(beaglebone mmc0, mmc1, mmc2에는 3개의 SDIO 인터페이스가 있음) 인터페이스에 연결된 WiFi 칩을 성공적으로 바인딩 해제하고 바인딩할 수 있었습니다. 그러나 beaglebone black의 mmc2 인터페이스 경로(IoT Buster 이미지를 실행하는 Beaglebone Rev C 보드에서 테스트됨)는 약간 다릅니다.

sdio 모듈을 바인딩 해제하려면 루트로 다음 명령을 실행하십시오.
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

관련 정보