Linux中解绑mmcblk1驱动禁用SD卡读卡器的方法咨询
嗨,我来帮你搞定这个SD卡禁用的问题!你之前用USB驱动解绑的思路没问题,但SD卡属于MMC子系统,路径和玩法跟USB不太一样,我分临时生效和永久禁用两种方法给你讲清楚~
临时禁用(sysfs驱动解绑)
这种方法重启后会恢复,适合临时测试:
先卸载SD卡挂载点(如果SD卡已经挂载的话,不然直接解绑可能出问题):
umount /dev/mmcblk1p* # 把这里的分区换成你实际用的,比如mmcblk1p1找到SD卡对应的MMC驱动路径:
SD卡的块设备/sys/block/mmcblk1只是上层节点,我们得找到它对应的底层驱动目录。执行这条命令看关联:ls -l /sys/block/mmcblk1/device输出会指向类似
../../devices/platform/soc/xxxx.mmc/mmc_host/mmc1/mmc1:0001的路径,接着进入这个设备的驱动目录:cd /sys/block/mmcblk1/device/driver这个目录一般是
/sys/bus/mmc/drivers/mmc_driver,不同平台可能名字略有差异。执行解绑操作:
先看看当前绑定的设备列表,确认你的SD卡设备名:cat bind找到类似
mmc1:0001的条目(就是刚才路径里最后那段),然后执行解绑:echo -n "mmc1:0001" > unbind这时候SD卡接口就临时禁用了,要恢复的话,同样在这个目录下执行
echo -n "mmc1:0001" > bind就行。
永久禁用(设备树修改)
如果你需要重启后依然保持禁用,修改设备树是最优解(刚好你是设备树新手,顺便上手这部分):
定位设备树中的SD卡控制器节点:
打开你的设备树源码,找类似&mmc1、&sdhci或者&esdhc的节点(不同平台命名不同),节点里一般会有bus-width、cd-gpios这类SD卡相关的属性。禁用该节点:
在这个节点里添加或修改status属性为"disabled"就行,比如:&mmc1 { status = "disabled"; // 这里保留原来的其他属性,比如bus-width、vmmc-supply之类的 };要是你的SD卡是靠单独的GPIO引脚控制使能的,也可以单独禁用那个GPIO配置,但直接关掉整个MMC控制器节点最彻底。
重新编译烧录设备树:
按照你平台的流程,重新编译设备树镜像,烧录到系统里,重启后SD卡接口就永久禁用了。
小提示
如果找不到正确的设备名,用udevadm info -a -n /dev/mmcblk1能看到设备的详细信息,顺着找驱动相关的路径就行。
内容的提问来源于stack exchange,提问作者Jason Brown

