Вопрос по внутренностям cacko/sharp rom

КПК с Linux, установка Linux на iPaq и другие модели, программы
Закрыто
Е. Медведев
Аспирант (2 lvl)
Сообщения: 58
Зарегистрирован: Вт окт 19, 2004 18:27

Вопрос по внутренностям cacko/sharp rom

Сообщение Е. Медведев » Чт ноя 11, 2004 11:00

Вознамерился я сочинить скриптик, который, видя на только что вставленной карточке файл типа .<имя>.cramfs (или squashfs) создавал бы директорию /mnt/<имя> и маунтил бы его туда. А при поступлении команды на выплевывание карточки размаунтил и убирал бы директорию.

Вопрос такой - куда лучше всего приткнуть его вызов в cacko/sharp based rom?
В usbstorage.agent? В sdcontrol? В еще какой-то скрипт который я не нашел? Планируется чтобы он работал как на sd так и на cf.
Sharp Zaurus SL-C860, Cacko 1.23lite
Trendnet TE-CF100, Pretec WiFi, Pretec Presenter, Socket Bluetooth (F), Kingston SD 512 и еше гора всякого мусора..

ВадимП
Нобелевский лауреат (7 lvl)
Сообщения: 6385
Зарегистрирован: Ср июн 04, 2003 15:03

Сообщение ВадимП » Чт ноя 11, 2004 12:09

Есть, как обычно, несколько вариантов.
Можно для этого добавить новую опцию.
Можно просто расширить сушествующую DO_MOUNT.
В последнем случае я думаю, что достаточно добавить команды для монтирования loopback-устройства в /etc/pcmcia/shared (в функции add_blkdev и rm_blkdev).

Е. Медведев
Аспирант (2 lvl)
Сообщения: 58
Зарегистрирован: Вт окт 19, 2004 18:27

Сообщение Е. Медведев » Чт ноя 11, 2004 13:50

ВадимП писал(а):В последнем случае я думаю, что достаточно добавить команды для монтирования 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
umountcfs:

Код: Выделить всё

!/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
Что я попытался сделать с /etc/pcmcia/shared:

В 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
В rm_blkdev:

Код: Выделить всё

    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 и еше гора всякого мусора..

maslovsky
Нобелевский лауреат (7 lvl)
Сообщения: 2781
Зарегистрирован: Пн окт 20, 2003 20:14

Сообщение maslovsky » Чт ноя 11, 2004 15:18

CF карты маунтятся скриптом /etc/pcmcia/ide, SD карточки - /etc/sdcontrol, от этого и пляши...

ВадимП
Нобелевский лауреат (7 lvl)
Сообщения: 6385
Зарегистрирован: Ср июн 04, 2003 15:03

Сообщение ВадимП » Чт ноя 11, 2004 15:33

Е. Медведев писал(а): MOUNTPT=`mount | fgrep -q "$1 on" | awk '{ print $3 }'`
Не могу сказать, что это единственная причина (лень проверять), но ключ "-q" означает "ничего не выводить на stdout, вернуть только код возврата"

Е. Медведев
Аспирант (2 lvl)
Сообщения: 58
Зарегистрирован: Вт окт 19, 2004 18:27

Сообщение Е. Медведев » Чт ноя 11, 2004 16:39

ВадимП писал(а):Не могу сказать, что это единственная причина (лень проверять), но ключ "-q" означает "ничего не выводить на stdout, вернуть только код возврата"
Спасибо, и правда не единственная.
Вторая - это то что размаунтит карту при выплевывании через кутопию вовсе не rm_blkdev, как следовало бы ожидать. :)

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

Закрыто

Вернуться в «КПК и смартфоны на Linux: Zaurus, планшеты Nokia, прочее»