目录
笔者刚解决完这个问题,前期有些忘了,一点一点回忆。会慢慢更新。
正点原子开发板Alpha配置环境需求
笔者使用的是Alpha出厂系统,也就是用Yocto做的根文件系统。这个系统里包含了QT和很多其他必要的库,可以不用在开发板上再安装了。
linux自动挂载u盘
使用udev自动挂载u盘
正点原子提供的出厂系统中已经内置了用udev自动挂载u盘的脚本,在/etc/udev 文件夹下有个脚本文件夹scripts,里面有个自动挂载的脚本mount.sh,部分内容如下:
...
automount() {
name="`basename "$DEVNAME"`"
! test -d "/mnt/$name" && mkdir -p "/mnt/$name"
# Silent util-linux's version of mounting auto
if [ "x`readlink $MOUNT`" = "x/bin/mount.util-linux" ] ;
then
MOUNT="$MOUNT -o silent"
fi
# If filesystem type is vfat, change the ownership group to 'disk', and
# grant it with w/r/x permissions.
case $ID_FS_TYPE in
vfat|fat)
MOUNT="$MOUNT -o umask=007,gid=`awk -F':' '/^disk/{print $3}' /etc/group`"
;;
# TODO
*)
;;
esac
if ! $MOUNT -t auto $DEVNAME "/mnt/$name"
then
logger "mount.sh/automount" "$MOUNT -t auto $DEVNAME \"/mnt/$name\" failed!"
rm_dir "/mnt/$name"
else
logger "mount.sh/automount" "Auto-mount of [/mnt/$name] successful"
touch "/tmp/.automount-$name"
fi
}
...
mount.sh代码解析
basename 是是去掉文件明前面的目录并打印出来,比如/dev/sda1 打印出来就是sda1。
$DEVNAME是由udev提供的系统环境变量,表示正在处理的块设备的名称。这个系统环境变量可以通过输入命令udevadm test /sys/class/block/sda查看。
DEVLINKS=/dev/disk/by-id/usb-USB_Disk_3727637990721561-0:0 /dev/disk/by-path/platform-ci_hdrc.1-usb-0:1.4:1.0-scsi-0:0:0:0
DEVNAME=/dev/sda
DEVPATH=/devices/platform/soc/2100000.aips-bus/2184200.usb/ci_hdrc.1/usb1/1-1/1-1.4/1-1.4:1.0/host2/target2:0:0/2:0:0:0/block/sda
DEVTYPE=disk
脚本里用到了这些命令:
test -d 文件名: 如果文件存在且为目录则为真。
mkdir -p 文件夹名: 确保目录名称存在,不存在的就建一个。
mount -o auto、-o noauto:打开/关闭自动挂上模式。
开机后会自动执行这个脚本,u盘插入就会挂上,挂载到/mnt下
查看u盘挂载情况
使用df -h命令或者mount能查看
root@ATK-IMX6U:~# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda1 120M 1.7M 119M 2% /mnt/sda1
root@ATK-IMX6U:~# mount
/dev/sda1 on /mnt/sda1 type vfat (rw,relatime,gid=6,fmask=0007,dmask=0007,allow_utime=0020,codepage=437,iocharset=iso8859-1,shortname=mixed,errors=remount-ro)

文章详细介绍了如何在基于Yocto的Linux系统中使用udev自动挂载U盘,包括mount.sh脚本的解析和QT应用程序检测U盘插入的方法。通过QT的QSocketNotifier监听udev事件,实现设备插入时的响应,读取U盘内容。

2389

被折叠的 条评论
为什么被折叠?



