USB

和ETH0一样,USB0也是默认配置好的,不需要修改任何东西。

  • DTS的配置

从原理图可以看出,U盘接的是USB2(USB1被用于wifi):

# vi infinity2m.dtsi

# vi infinity2m-ssc011a-s01a-padmux-display.dtsi
# vi infinity2m-ssc011a-s01a-padmux-display.dtsi

  • kernel config 的配置
# cd kernel
# ARCH=arm make menuconfig

保存当前config:

# cp .config arch/arm/configs/infinity2m_spinand_ssc011a_s01a_minigui_defconfig -f

重新编译固件并更新kernel:

# ./Release_to_customer.sh -f nand -p ssd201

这样,当我把U盘接上,将会看到如下信息:

  • U盘的挂载

  • 手动

使用mount 命令可以进行U盘的挂载:

# mount /dev/sda1 /mnt  

发现乱码,需要指定字符集为utf8:

# umount /mnt
# mount /dev/sda1 /mnt -o iocharset=utf8


  • 自动

通过mdev -s 命令可以实现U盘/SD卡的自动挂载功能。
首先确保/dev/sda1节点已经存在:

# ls /dev/sda*

修改/etc/mdev.conf:

# vi /etc/mdev.conf

这样,在检测到U盘(/dev/sda1)时,会自动执行/etc/hotplug/udisk_insert;而检测到U盘被移除时,会自动执行/etc/hotplug/udisk_remove。那么,我们需要创建/etc/hotplug目录,并在该目录下创建udisk_insert和udisk_remove,并赋予可执行权限:

# mkdir /etc/hotplug
# touch /etc/hotplug/udisk_insert
# touch /etc/hotplug/udisk_remove
# chmod o+x /etc/hotplug/udisk_insert /etc/hotplug/udisk_remove
# vi /etc/hotplug/udisk_insert

# vi /etc/hotplug/udisk_remove

当然,/udisk默认是不存在的,我们需要创建它:

# mkdir /udisk

最后执行mdev -s,可以看到U盘已经被挂载到/udisk目录下了:

# mdev -s

当我们把U盘拿下来后,可以看到它已经被卸载了:

为了每次系统启动后,mdev -s命令能够自动执行,我在/etc/init.d/下创建一个服务S10mdev(此文件位于buildroot-2020.05/package/busybox/目录下,buildroot文件系统中,/etc/init.d/目录下以S开头的服务都会在开机时执行,并且S后面的数字越小,越先执行):

# vi /etc/init.d/S10mdev
# chmod o+x /etc/init.d/S10mdev
# sync

保存文件后,重新启动系统,可以看到mdev服务已后台运行,并且U盘挂载到了/udisk:

目前看来,U盘自动挂载功能已经实现了,但我们还有最后一个要做的工作是,把这个服务添加到SDK中,这样,我们每次编译出来的固件(rootfs),都具备自动挂载的功能。

回想刚刚我们所做的工作,涉及到以下文件:

首先mdev.conf由rootfs.mk生成,因此修改rootfs.mk:

# vi project/image/configs/i2m/rootfs.mk

接着来到project/image/rootfs/目录下解压rootfs.tar.gz:

# cd project/image/rootfs/
# tar -xvf rootfs.tar.gz
# cd rootfs

# mkdir etc/hotplug/
# touch etc/hotplug/udisk_insert
# touch etc/hotplug/udisk_remove
# chmod o+x etc/hotplug/udisk_insert etc/hotplug/udisk_remove
# vi etc/hotplug/udisk_insert
# vi etc/hotplug/udisk_remove
# mkdir udisk

最后把S10mdev 拷贝过来:

# cp ../../../../buildroot-2020.05/package/busybox/S10mdev ./etc/init.d/
# chmod o+x ./etc/init.d/S10mdev

当然,文件系统修改之后,rootfs.tar.gz需要重新打包:

# cd ..
# tar -cvf rootfs.tar.gz rootfs

重新编译固件,并更新观察效果:

# cd ../../../
# ./Release_to_customer.sh -f nand -p ssd201

至此,U盘自动挂载功能完成。

文档更新时间: 2021-08-17 14:45   作者:Aeeditor