要做
官方提供的案例引脚冲突!!
vccio_sd: vccio-sd {
compatible = "regulator-gpio";
regulator-name = "vccio_sd";
regulator-min-microvolt = <1800000>;
regulator-max-microvolt = <3300000>;
gpios = <&gpio0 RK_PA3 GPIO_ACTIVE_HIGH>; #与电源开关检测引脚冲突
states = <3300000 1
1800000 0>;
pinctrl-names = "default";
pinctrl-0 = <&sdmmc_volt>;
};
新增配置
&vccio_sd {
status = "disabled";//与电源检测口冲突,禁用
};
&sdmmc {
/delete-property/ vqmmc-supply;//关闭高速模式供电
};
识别到卡没有文件系统,需要弹出提示,是否格式化卡。然后执行mkfs.ext4 -F /dev/mmcblk1p1格式化卡
引入的#include "rv1106g-evb1-v10.dts"包含了TF卡相关的内容
所以只需要知道怎么个事就好。
sd卡作为u盘测试
-
USB Gadget支持(内核配置)
CONFIG_USB_GADGET=y CONFIG_USB_CONFIGFS=y CONFIG_USB_CONFIGFS_MASS_STORAGE=y #(UMS功能) -
修改usb脚本相关东西。
echo usb_ums_en > /tmp/.usb_config echo ums_block=/dev/mmcblk1p1 >> /tmp/.usb_config #根据sd卡的块mmcblk1p1 /etc/init.d/S50usbdevice restart #重启脚本 -
回到adb模式
echo usb_adb_en > /tmp/.usb_config /etc/init.d/S50usbdevice restart
1. S10udev → 启动 udev 守护进程
/root/sdk/rv1106/sysdrv/tools/board/eudev/S10udev
这个脚本启动 udevd,让内核的 hotplug 事件能被用户态处理。
2. 61-sd-cards-auto-mount.rules → 自动挂载规则
/root/sdk/rv1106/sysdrv/tools/board/eudev/rules/61-sd-cards-auto-mount.rules
规则逻辑:
插卡 → 内核发出 ADD 事件 → udev 检测到 mmcblk*
→ blkid 识别文件系统类型 (vfat/ext4/ntfs...)
→ mount 到 /mnt/sdcard
拔卡 → 自动 umount /mnt/sdcard
位置: /lib/udev/rules.d/61-sd-cards-auto-mount.rules
执行时机: 每次插拔 SD 卡时,由 udevd 守护进程触发。
完整流程:
系统启动
└─ S10udev 启动 udevd 守护进程(常驻后台)
│
插卡 ──► 内核检测到新 mmcblk 设备
│
▼ 发送 uevent 通知 udevd
│
▼ udevd 按顺序扫描 /lib/udev/rules.d/*.rules
│
▼ 匹配到 61-sd-cards-auto-mount.rules
│ KERNEL=="mmcblk*[0-9]" → 是分区
│ SUBSYSTEM=="block" → 是块设备
│ ATTRS{type}=="SD" → 是 SD 卡
│ └─ blkid 识别文件系统 → mount /dev/mmcblk1p1 /mnt/sdcard
│
拔卡 ──► 内核检测到移除 → udev 匹配 ACTION=="remove"
└─ umount /mnt/sdcard
如果要改挂载路径或参数,直接编辑 61-sd-cards-auto-mount.rules 里的 mount_options_* 和挂载点 /mnt/sdcard 就行。