임베디드 Linux 핫 플러그로 인해 마운트 지점이 변경됨

임베디드 Linux 핫 플러그로 인해 마운트 지점이 변경됨

나는 안드로이드 시대 이전에 흔했던 리눅스 미디어 플레이어를 가지고 있습니다. Linux Venus 2.6.12.6을 실행하는 MIPS이며 SATA 2개, USB 2개 및 SD 카드 포트 1개가 있습니다. 플래시 메모리는 매우 제한적이므로 SD 카드에 optware을 설치 ssh하고nano

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

SD 카드를 미디어로 사용하지 않으므로 SD 카드는 영원히 연결되어 있을 수 있습니다. 다른 USB를 연결하지 않거나 다른 USB를 연결하면 잘 작동합니다뒤쪽에시작합니다. 하지만 다른 USB를 연결하면앞으로sdc시작 시 SD 카드 포트는 항상 마운트 되거나 sdd링크가 작동하지 않습니다. 나는 (일종의) 시작 시 /opt대상을 지정하고 이에 따라 링크하는 스크립트를 배치하여 이 문제를 해결했습니다. 그러나 시작 후 마운트 지점을 변경할 수 있는 다른 활동이 있다는 것을 발견했습니다.

플레이어는 주로 이라는 소프트웨어를 실행합니다 Dvdplayer. 소프트웨어에는 사용자가 재생할 미디어를 선택할 수 있는 화면 메뉴가 있습니다. 별도의 USB 플러그가 없어도 이 메뉴를 호출할 때마다 장착 지점이 바뀌는 것 같습니다. 부팅 후 내 SD 카드가 에 마운트되었다고 가정하고 sdb메뉴를 호출하면 sdc( sdb아무것도)로 변경됩니다. 메뉴를 다시 불러오면 sdd( sdbsdc없음)으로 변경됩니다. 메뉴를 세 번째 호출하면 으로 돌아가고 sdc, 다시 로 돌아가고 sdc, 사이에는 sdd다시 sdb나타나지 않습니다.

인터넷을 검색해 보니 이것이 핫 스왑 가능하다는 것을 알고 소프트웨어를 찾을 수 있었습니다. 하지만 일반적인 리눅스 핫플러그와 달리 소프트레어는 스크립트가 아닌 실행 가능한 elf 파일이고,,,,,, 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

${@}이것이 쉘 스크립트이고 대신 사용하고 싶다는 점을 분명히 하는 것이 좋습니다 $*.

#!/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 "${@}"

시스템이 정상이면 작동할 것입니다. 그러나 많은 임베디드 제품의 경우에는 그렇지 않습니다. 경계하십시오.

관련 정보