工具/软件:
您好:
将基于 AM437x 的工程从 SDK 8.x 迁移到最新的 SDK 9.3 后、我遇到了问题。
插入带分区的 USB 驱动器时 系统 进入 am437 系统的 USB 端口时、现有udev规则会被正确触发。 此规则启动一个mount.sh脚本、该脚本可成功装载分区。
但是、在连接时 通过 USB 集线器的同一 USB 驱动器 、行为改变:
-
udev规则仍然正确触发。 -
mount.sh按预期执行。 -
但在内部
mount.sh、systemd-mount由于、呼叫失败 依赖关系问题 。
具体来说、systemd-mount创建一个类似于run-media-sda1.automount的瞬态单元、但此单元报告的故障dev-sda1.device是由于未满足设备相关性(例如,超时或处于非活动状态)。
root@am437x-alx:~# systemctl status run-media-sda1.automount
○ run-media-sda1.automount
Loaded: loaded (/run/systemd/transient/run-media-sda1.automount; transient)
Transient: yes
Active: inactive (dead)
Triggers: ● run-media-sda1.mount
Where: /run/media/sda1
May 19 21:18:23 am437x-alx systemd[1]: Dependency failed for run-media-sda1.automount.
May 19 21:18:23 am437x-alx systemd[1]: run-media-sda1.automount: Job run-media-sda1.automount/start failed with result 'dependency'.
May 19 21:20:03 am437x-alx systemd[1]: Dependency failed for run-media-sda1.automount.
May 19 21:20:03 am437x-alx systemd[1]: run-media-sda1.automount: Job run-media-sda1.automount/start failed with result 'dependency'.
似乎失败了、因为 dev-sda1.device 也失败了、这是状态:
root@am437x-alx:~# systemctl status dev-sda1.device
○ dev-sda1.device - /dev/sda1
Loaded: loaded
Active: inactive (dead)
May 19 21:18:23 am437x-alx systemd[1]: dev-sda1.device: Job dev-sda1.device/start timed out.
May 19 21:18:23 am437x-alx systemd[1]: Timed out waiting for device /dev/sda1.
May 19 21:18:23 am437x-alx systemd[1]: dev-sda1.device: Job dev-sda1.device/start failed with result 'timeout'.
May 19 21:20:03 am437x-alx systemd[1]: dev-sda1.device: Job dev-sda1.device/start timed out.
May 19 21:20:03 am437x-alx systemd[1]: Timed out waiting for device /dev/sda1.
May 19 21:20:03 am437x-alx systemd[1]: dev-sda1.device: Job dev-sda1.device/start failed with result 'timeout'.
但事情是/dev/sda1 存在,实际上如果我手动运行一个挂载命令(不是 systemd-mount )分区挂载良好,它只是当运行 systemd-mount 通过集线器时,它失败。
似乎器件节点/dev/sda1最终会出现、但systemd在创建瞬态安装时无法及时满足依赖要求。
这些是 systemd 规则 “automount.rules"的“的内容 、但我认为这基本上是 TI SDK 随附的默认设置
# Media automounting
SUBSYSTEM=="block", ACTION=="add" RUN+="/etc/udev/scripts/mount.sh"
SUBSYSTEM=="block", ACTION=="remove" RUN+="/etc/udev/scripts/mount.sh"
SUBSYSTEM=="block", ACTION=="change", ENV{DISK_MEDIA_CHANGE}=="1" RUN+="/etc/udev/scripts/mount.sh"
由于某种原因,我无法附加/etc/udev/scripts/mount.sh 文件,但它是依赖于实际装入到 systemd-mount 二进制调用的 SDK 的默认文件
是否有人遇到此问题或可以建议如何systemd更从容地处理块设备的延迟外观(尤其是通过 USB 集线器)?
提前感谢!