系统环境:nuc972 arm linux
之前产品只支持fat32格式的U盘,现在很多U盘都已经用上大容量了,需要支持ntfs和exfat格式的
在内核里面添加了配置后,可以正确地识别到它们
自动挂载,我们是用/etc/mdev.conf配置的,当系统检查到U盘插入后,会调用一个叫 automount.sh的脚本,由此脚本完成mount的操作
问题就在这mount上
之前只支持fat32,所以命令就是
if mount -t vfat -o noatime,shortname=mixed,utf8 "/dev/$1" "/mnt/$1"; then
ln -s /mnt/$1 /mnt/$MNT
echo "[Mount VFAT]: /dev/$1 --> /mnt/$MNT" > /dev/console
echo "$ACT /mnt/$1" >> /tmp/mdev.log
else
# failed to mount, clean up mountpoint
if ! rmdir "/mnt/$1"; then
exit 1
fi
exit 1
fi
加上ntfs和exfat之后就变成了
if mount -t vfat -o noatime,shortname=mixed,utf8 "/dev/$1" "/mnt/$1"; then
ln -s /mnt/$1 /mnt/$MNT
echo "[Mount VFAT]: /dev/$1 --> /mnt/$MNT" > /dev/console
echo "$ACT /mnt/$1" >> /tmp/mdev.log
elif mount "/dev/$1" "/mnt/$1"; then
ln -s /mnt/$1 /mnt/$MNT
echo "[Mount]: /dev/$1 --> /mnt/$MNT" > /dev/console
echo "$ACT /mnt/$1" >> /tmp/mdev.log
else
# failed to mount, clean up mountpoint
if ! rmdir "/mnt/$1"; then
exit 1
fi
exit 1
fi
改完之后,测试没问题
测试了好几个U盘后,发现系统起不来了,检查到是uboot没了,哦日,这是什么毛病啊
之后重新烧录一次,重启个几次又没了
最后查看dmesg时发现了问题,如果是mount /dev/sda1 /mnt/sda1的时候,是正常的
如果是mount /dev/sda /mnt/sda的,系统的uboot就会丢失
由于插入U盘会调用两次automount.sh,一次是sda,一次是sda1,且调用顺序随机,有时是先调用sda,有时是先调sda1,所以这个里面要做一个过滤,添加了以下代码后,顺利解决了这个坑爹的问题
devCount=`ls /dev | grep $1 | wc -l`
if [ $devCount -ge 2 ]; then
exit 1
fi
脚本的意思是,如果$1=sda时,ls /dev的结果会找到2行有sda,这个时候就不挂载,只有参数为sda1时,ls /dev里面只能找到一行sda1时,才去挂载