嵌入式linux热插拔更改挂载点

嵌入式linux热插拔更改挂载点

我有一个 Linux 媒体播放器,在 Android 时代之前它就很常见了。它是一个运行 Linux Venus 2.6.12.6 的 MIPS,有 2 个SATA、2 个 USB 和 1 个 SD 卡端口。由于闪存非常有限,我安装了optwaresshnano在SD卡上并放入

ln -s /tmp/usbmounts/sdb1/opt /opt

SD 卡可以永久保持插入状态,因为我不会使用 SD 卡作为媒体。如果我没有插入其他 USB 或插入其他 USB,它会很好用启动。但如果我插入其他USB启动时,SD卡端口始终会安装到sdcsdd,当然链接将无法工作。我(有点)通过在启动时放置一个脚本来/opt相应地定位和链接来解决这个问题。但是,我发现还有其他活动可以在启动后更改安装点。

该播放器主要运行一个名为 的软件Dvdplayer。该软件在屏幕上有一个菜单,供用户选择要播放的媒体。每次调用此菜单时,即使没有任何额外的 USB 插头,安装点似乎也会发生变化。假设启动后,我的 SD 卡安装到sdb,调用菜单后,它会更改为sdcsdb没有任何内容)。再次调出菜单,它变成sddsdb并且sdc什么也没有)。第三次调用菜单,它会返回到sdc,然后返回到sdc和之间sddsdb再也不会出现。

在互联网上搜索,我知道这是热插拔,并且我能够找到该软件。但与通常的linux hotplug不同的是,该softare是一个可执行的elf文件而不是脚本,并且我找不到任何与hotplug相关的系统变量,例如,,,,,等SUBSYSTEM。相反,它在.它有空文件夹,如、和。是唯一一个日期已更改但仍为空的文件夹。ACTIONPRODUCTTYPEINTERFACEDEVICE/sys/kernel/hotplug_seqnum/tmp/lock/hotplug/convert_tmp...mount_tmp...rename_tmp...volume_lockmount_tmp

我试图通过将 移动到/sbin/hotplug并将/sbin/sbin/hotplug我自己的热插拔脚本放入/sbin/hotplug.脚本看起来像这样

mount / -o remount,rw
echo $* >> /usr/local/etc/init.d/hotplug.log
/sbin/sbin/hotplug $*

但它不起作用:调用菜单后,没有记录任何内容,并且所有插件安装都丢失了。

我现在想做的就是捕获热插拔活动并正确重新链接我的 /opt 。感谢任何帮助或更好的方法来确保 /opt 的正确链接。

答案1

最好明确地说这是一个 shell 脚本,我希望使用${@}而不是$*

#!/bin/sh
mount -o remount,rw /
echo ${@} >/tmp/log.txt
echo >>/tmp/log.txt
env >>/tmp/log.txt # if /tmp is writable or tmpfs
exec /sbin/sbin/hotplug "${@}"

如果系统正常的话,这应该可以工作。然而,许多嵌入式产品却并非如此。谨防。

相关内容