我正在开发基于 Linux Yocto (arm_v7) 的 IoT Edge 设备,并且需要安装 USB 驱动器。
Linux版本:
root@7426a4ffc838:/# uname -a
Linux 7426a4ffc838 4.9.80-rt62 #1 SMP PREEMPT RT Thu May 14 17:11:08 UTC 2020 armv7l GNU/Linux
由于该设备没有 shell(只有网页),因此我使用 docker 容器来尝试挂载 USB 驱动器。
我的容器在特权模式下运行,以便访问硬件。
如果我运行命令“lsblk”,我会得到以下输出:
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
loop0 7:0 0 363.6M 1 loop
sda 8:0 1 14.8G 0 disk
`-sda1 8:1 1 14.8G 0 part
mmcblk0 179:0 0 7.4G 0 disk
|-mmcblk0p1 179:1 61.1M 0 part
|-mmcblk0p2 179:2 0 61.1M 0 part
`-mmcblk0p3 179:3 0 7.3G 0 part
我的 USB 驱动器名为“sda”。
因此,如果我尝试使用命令安装 USB 驱动器mount /sda/sda1 /mnt/usb/
,则会收到此错误:
mount: special device /sda/sda1 does not exist
有没有办法安装这个驱动器?
先谢谢您的帮助。
BR,费德里科
答案1
即使lsblk
可能发现设备(通过/sys/
),mount
仍然需要一个有效的块设备来挂载。如果没有创建它,要么是因为嵌入式设备没有运行类似的工具,udev
要么是因为容器的环境没有提供/dev/
像主机那样的充分填充的目录,人们仍然可以手动创建它。
人们应该使用 的输出来验证主要/次要块lsblk -o NAME,MAJ:MIN
,让我们假设相关部分显示:
# lsblk -o NAME,MAJ:MIN
NAME MAJ:MIN
[...]
sda 8:0
`-sda1 8:1
[...]
然后可以使用前面的信息创建所需的块设备:
mknod /dev/sda1 b 8 1
现在应该可以安装:
mount /dev/sda1 /mnt
由于它是嵌入式的,如果该分区上的文件系统的驱动程序不是内置在内核中并且由于某种原因它没有自动加载,则可能会出现进一步的问题。因此,如果第一次尝试不起作用,请确保显式加载模块(例如:)modprobe vfat
或内置模块(重新编译内核...)。有些文件系统不会那么容易使用(例如:exfat
Linux 4.9 中没有直接的内核支持,需要 FUSE)。
答案2
没有这样的目录/sda
。
你真正想做的是 mount /dev/sda1
:
mount /dev/sda1 /mnt/usb/