硬件设计使用了,usb转sd卡的电路,类似sd卡读卡器,经过测试,发现linux系统,usb口不动,直接插拔sd卡,系统无法热插拔,
经过多方验证,查找到一种复位usb节点的方法,可实现重新加载usb设备,可以类比其他类似功能,实现复位usb设备。
echo 0 > /sys/devices/soc/7000000.ssusb/7000000.dwc3/xhci-hcd.0.auto/usb1/1-1/1-1.3/authorized
echo 1 > /sys/devices/soc/7000000.ssusb/7000000.dwc3/xhci-hcd.0.auto/usb1/1-1/1-1.3/authorized
具体节点,查看自己设备内核日志
方法一:应用层使用文件系统读写失败,时,可动态操作节点,实现热插拔,重新加载sd卡设备
方法二:硬件上增加一个sd卡检测引脚,拔掉卡时,判断io口,比方法一有更快的时效性和准确性
此处在提供一个内核更改方法,需要懂mmc框架,此处只提供下思路,需要自己实现:
通过一直发送cmd:TEST_UNIT_READY 来检测card的状态。
这边看了 /drivers/scsi/sd.c 文件是有走到的。可以参考函数 sd_spinup_disk里面状态检测。