嵌入式 linux hotplug 更改了掛載點
我有一個在 android 時代之前非常常見的 linux 媒體播放器。它是一個執行 Linux Venus 2.6.12.6 的 MIPS,具有 2 個 sata、2 個 USB 和 1 個 sdcard 埠。由於快閃記憶體非常有限,我安裝了
optware
,ssh
andnano
on sdcard and put inln -s /tmp/usbmounts/sdb1/opt /opt
由於我不會將 sdcard 用於媒體,因此 sdcard 可以保持插入狀態。如果我沒有插入其他 USB 或者我在啟動後插入其他 USB,它會很好地工作。但是,如果我在啟動前插入其他 USB ,則 sdcard 埠總是掛載到,
sdc
或者sdd
當然連結將不起作用。我(有點)通過在啟動時放置一個腳本來相應地定位/opt
和連結來解決這個問題。但是,我發現還有其他活動可以在啟動後更改掛載點。該播放器主要執行一個名為
Dvdplayer
. 該軟體在螢幕上有一個菜單供使用者選擇要播放的媒體。每次呼叫此菜單時,掛載點似乎都會發生變化,即使沒有任何額外的usb外掛。假設啟動後,我的sdcard掛載到sdb
,呼叫菜單後,它變為sdc
(sdb
沒有任何東西)。再次呼叫菜單,它變成sdd
(sdb
並且sdc
什麼都沒有)。sdc
第三次呼叫菜單,它會在 and 之間返回,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
我試圖通過移動 to 來擷取 hotplug
/sbin/hotplug
並將/sbin/sbin/hotplug
我自己的 hotplug 腳本放入/sbin/hotplug
. 腳本看起來像這樣mount / -o remount,rw echo $* >> /usr/local/etc/init.d/hotplug.log /sbin/sbin/hotplug $*
但它不起作用:呼叫菜單後,沒有記錄任何內容,並且所有外掛安裝都失去了。
我現在要做的就是擷取熱插拔活動並正確重新連結我的 /opt。感謝任何幫助或確保 /opt 正確連結的更好方法。
最好明確地說這是一個 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 "${@}"
如果系統是健全的,這應該可以工作。然而,許多嵌入式並非如此。謹防。