要做

官方提供的案例引脚冲突!!

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 就行。