Вознамерился я сочинить скриптик, который, видя на только что вставленной карточке файл типа .<имя>.cramfs (или squashfs) создавал бы директорию /mnt/<имя> и маунтил бы его туда. А при поступлении команды на выплевывание карточки размаунтил и убирал бы директорию.
Вопрос такой - куда лучше всего приткнуть его вызов в cacko/sharp based rom?
В usbstorage.agent? В sdcontrol? В еще какой-то скрипт который я не нашел? Планируется чтобы он работал как на sd так и на cf.
Вопрос по внутренностям cacko/sharp rom
-
- Аспирант (2 lvl)
- Сообщения: 58
- Зарегистрирован: Вт окт 19, 2004 18:27
Вопрос по внутренностям cacko/sharp rom
Sharp Zaurus SL-C860, Cacko 1.23lite
Trendnet TE-CF100, Pretec WiFi, Pretec Presenter, Socket Bluetooth (F), Kingston SD 512 и еше гора всякого мусора..
Trendnet TE-CF100, Pretec WiFi, Pretec Presenter, Socket Bluetooth (F), Kingston SD 512 и еше гора всякого мусора..
-
- Аспирант (2 lvl)
- Сообщения: 58
- Зарегистрирован: Вт окт 19, 2004 18:27
Попробовал, получилось как-то странно.ВадимП писал(а):В последнем случае я думаю, что достаточно добавить команды для монтирования loopback-устройства в /etc/pcmcia/shared (в функции add_blkdev и rm_blkdev).
Скрипт для маунта искомого завелся как положено - при появлении устройства имиджи маунтятся куда сказано.
А вот обратный процесс происходит как-то неправильно, что-то его стопорит, а что именно - непонятно, не размаунтятся ни имиджи, ни сама карточка. fuser -m -k не помогает, и что самое интересное, на середине этих экспериментов кутопия упала...
Скрипты выглядят так:
mountcfs:
Код: Выделить всё
#!/bin/sh
OLDPWD=`pwd`
LOOPFSDIR="$1"
cd $LOOPFSDIR
LOOPS=`ls -1 .*.cramfs .*.squashfs`
for LOOP in $LOOPS; do
MNT=`echo $LOOP | awk -F . '{ print $2 }'`
if [ -d "/mnt/$MNT" ]; then
echo /mnt/$MNT exists
else
echo /mnt/$MNT doesn\'t exist, creating and mounting it
mkdir /mnt/$MNT
mount -o loop $LOOP /mnt/$MNT
fi
done
cd $OLDPWD
exit 0
Код: Выделить всё
!/bin/sh
OLDPWD=`pwd`
LOOPFSDIR="$1"
cd $LOOPFSDIR
LOOPS=`ls -1 .*.cramfs .*.squashfs`
for LOOP in $LOOPS; do
MNT=`echo $LOOP | awk -F . '{ print $2 }'`
if [ -d "/mnt/$MNT" ]; then
echo /mnt/$MNT exists, unmounting and deleting the mount point
fuser -m -k /mnt/$MNT
umount /mnt/$MNT && rmdir /mnt/$MNT
else
echo $LOOP was not mounted.
fi
done
cd $OLDPWD
exit 0
В add_blkdev:
Код: Выделить всё
if is_true $DO_MOUNT ; then
O=${OPTS:+-o $OPTS} ; FS=${FSTYPE:+-t $FSTYPE}
mount $FATOPTS $FS $1 $MOUNTPT || mount $O $FS $1 $MOUNTPT || return 1
chkmntsh ${MOUNTPT}
mountcfs ${MOUNTPT}
fi
Код: Выделить всё
if mount | fgrep -q "$1 on" ; then
MOUNTPT=`mount | fgrep -q "$1 on" | awk '{ print $3 }'`
umountcfs ${MOUNTPT}
umount $1 || return 1
Sharp Zaurus SL-C860, Cacko 1.23lite
Trendnet TE-CF100, Pretec WiFi, Pretec Presenter, Socket Bluetooth (F), Kingston SD 512 и еше гора всякого мусора..
Trendnet TE-CF100, Pretec WiFi, Pretec Presenter, Socket Bluetooth (F), Kingston SD 512 и еше гора всякого мусора..
-
- Аспирант (2 lvl)
- Сообщения: 58
- Зарегистрирован: Вт окт 19, 2004 18:27
Спасибо, и правда не единственная.ВадимП писал(а):Не могу сказать, что это единственная причина (лень проверять), но ключ "-q" означает "ничего не выводить на stdout, вернуть только код возврата"
Вторая - это то что размаунтит карту при выплевывании через кутопию вовсе не rm_blkdev, как следовало бы ожидать.

Если кому будет интересно - потом добью туда еще защиты от дурака типа меня, соберу все это в пакетик с инструкцией и выложу...
Sharp Zaurus SL-C860, Cacko 1.23lite
Trendnet TE-CF100, Pretec WiFi, Pretec Presenter, Socket Bluetooth (F), Kingston SD 512 и еше гора всякого мусора..
Trendnet TE-CF100, Pretec WiFi, Pretec Presenter, Socket Bluetooth (F), Kingston SD 512 и еше гора всякого мусора..