我有一个 Linux 媒体播放器,在 Android 时代之前它就很常见了。它是一个运行 Linux Venus 2.6.12.6 的 MIPS,有 2 个SATA、2 个 USB 和 1 个 SD 卡端口。由于闪存非常有限,我安装了optware
,ssh
并nano
在SD卡上并放入
ln -s /tmp/usbmounts/sdb1/opt /opt
SD 卡可以永久保持插入状态,因为我不会使用 SD 卡作为媒体。如果我没有插入其他 USB 或插入其他 USB,它会很好用后启动。但如果我插入其他USB前启动时,SD卡端口始终会安装到sdc
或sdd
,当然链接将无法工作。我(有点)通过在启动时放置一个脚本来/opt
相应地定位和链接来解决这个问题。但是,我发现还有其他活动可以在启动后更改安装点。
该播放器主要运行一个名为 的软件Dvdplayer
。该软件在屏幕上有一个菜单,供用户选择要播放的媒体。每次调用此菜单时,即使没有任何额外的 USB 插头,安装点似乎也会发生变化。假设启动后,我的 SD 卡安装到sdb
,调用菜单后,它会更改为sdc
(sdb
没有任何内容)。再次调出菜单,它变成sdd
(sdb
并且sdc
什么也没有)。第三次调用菜单,它会返回到sdc
,然后返回到sdc
和之间sdd
,sdb
再也不会出现。
在互联网上搜索,我知道这是热插拔,并且我能够找到该软件。但与通常的linux hotplug不同的是,该softare是一个可执行的elf文件而不是脚本,并且我找不到任何与hotplug相关的系统变量,例如,,,,,等SUBSYSTEM
。相反,它在.它有空文件夹,如、和。是唯一一个日期已更改但仍为空的文件夹。ACTION
PRODUCT
TYPE
INTERFACE
DEVICE
/sys/kernel/hotplug_seqnum
/tmp/lock/hotplug/convert_tmp
...mount_tmp
...rename_tmp
...volume_lock
mount_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 "${@}"
如果系统正常的话,这应该可以工作。然而,许多嵌入式产品却并非如此。谨防。