背景
emmc设备节点创建时间太晚导致启动挂载emmc脚本中判断设备节点不存在挂载失败,后面被hotplug的tf_mount挂载。
分析
1、查看emmc的VCCQ上电时间,经过测量发现上电开机时就被单片机拉上电,这里正常没有问题。
2、查看时间点信息(单位:秒):
驱动加载时间:11:37:03
emmc_mount挂载时间:11:37:09 [没有节点]
设备节点创建时间:11:37:13
hotplug挂载时间:11:37:13
3、查看hotplug挂载脚本
/lib/mountd/tfmount.sh
extern_mount(){挂载函数
etc/hotplug.d/block/10-mount:140: extern_mount() { return 1; }
etc/hotplug.d/block/10-mount:142: extern_mount "$mde_fstype" "$mde_device" "$mde_target" "$mde_options"
hotplug.d
hotplug2-common.rules
hotplug2-init.rules
hotplug2.rules
4、查看设备节点时间
crw-r--r-- 1 root root 234, 0 Jan 1 1970 ubi2
brw-r--r-- 1 root root 179, 1 Jan 22 11:37 mmcblk0p1
brw-r--r-- 1 root root 179, 0 Jan 22 11:37 mmcblk0 【不应该在这儿】
brw-r--r-- 1 root root 179, 32 Jan 22 11:37 mmcblk0rpmb
Jan 22 11:37:03 www user.info kernel: mmcblk0: mmc1:0001 DG4008 7.28 GiB eason
Jan 22 11:37:03 www user.info kernel: mmcblk0rpmb: mmc1:0001 DG4008 partition2 3 4.00 MiB
Jan 22 11:37:03 www user.info kernel: mmcblk0: p1
root@www:~# stat /dev/mmcblk0
File: /dev/mmcblk0
Size: 0 Blocks: 0 IO Block: 4096 block special file
Device: 10h/16d Inode: 14685 Links: 1 Device type: b3,0
Access: (0644/brw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2019-01-22 11:37:13.000000000
Modify: 2019-01-22 11:37:13.000000000
Change: 2019-01-22 11:37:13.000000000
5、查看hotplug没有发现异常,发现dts中有配置异常:
&sdhc_1 {
qcom,nonhotplug;
注释掉dts中sdhc_1中的qcom,nonhotplug;默认就会开启polling,polling会在驱动加载完成后1秒内完成设备节点的创建,否则需要等系统的hotplug机制在检测并创建。设备时间节点正常创建后挂载就正常了。
总结
dts中配置为不支持热拔插设备,导致设备节点创建延后出现问题。