Hotplug linux incorporado mudou o ponto de montagem

0

Eu tenho um media player Linux que era muito comum antes da idade do Android. É um MIPS rodando o Linux Venus 2.6.12.6 e tem 2 portas sata, 2 usb e 1 sdcard. Como a memória flash é muito limitada, instalei optware , ssh e nano no sdcard e coloquei

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

O sdcard pode permanecer plugado para sempre, já que não usarei sdcard para mídia. Ele funciona muito bem se eu não tiver outro usb conectado ou se eu ligar outro usb após boot. Mas se eu ligar outra inicialização usb antes , a porta sdcard sempre será montada em sdc ou sdd e, é claro, o link não funcionará. Eu meio que resolvi isso colocando um script na inicialização para localizar /opt e vincular de acordo. No entanto, descobri que há outra atividade que pode alterar o ponto de montagem após a inicialização.

O player executa principalmente um software chamado Dvdplayer . Este software tem um menu na tela para o usuário escolher mídia para jogar. Toda vez que esse menu é acessado, o ponto de montagem parece mudar, MESMO SEM qualquer plug-in adicional. Diga se após a inicialização, meu cartão SD está montado em sdb , depois de acessar o menu, ele mudou para sdc ( sdb não tem nada). Ao chamar o menu novamente, ele se torna sdd ( sdb e sdc não tem nada). Chame o menu na terceira vez, ele volta para sdc e depois para frente entre sdc e sdd , nunca sdb novamente.

Pesquisando na internet, eu entendo que isso é hotplugging e eu sou capaz de localizar o software. Mas diferente do hotplug linux comum, o softare é um arquivo elf executável em vez de um script, e não consigo encontrar nenhuma variável de sistema relacionada ao hotplug, como SUBSYSTEM , ACTION , PRODUCT , TYPE , INTERFACE , DEVICE etc. Em vez disso, ele possui um número de sequência em /sys/kernel/hotplug_seqnum . Tem pastas vazias como /tmp/lock/hotplug/convert_tmp , ...mount_tmp , ...rename_tmp e ...volume_lock . mount_tmp é a única pasta que tem sua data alterada, mas ainda está sempre vazia.

Eu tentei interceptar o hotplug movendo o /sbin/hotplug para /sbin/sbin/hotplug e colocando meu próprio script hotplug em /sbin/hotplug . O script se parece com isso

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

Mas isso não funciona: depois de chamar o menu, nada foi registrado e todas as montagens de plug-in foram perdidas.

Tudo o que eu queria fazer agora é interceptar as atividades do hotplug e vincular novamente meu / opt corretamente. Aprecie qualquer ajuda ou um método melhor para garantir o link correto para / opt.

    
por senderj 02.12.2015 / 03:01

1 resposta

0

É melhor dizer explicitamente que este é um script de shell e desejo usar ${@} em vez de $* :

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

Se o sistema é são, isso deve funcionar. Muitos incorporados, no entanto, não são. Cuidado.

    
por 02.12.2015 / 08:15