In case anybody else is interested, here's my hack of the /etc/sdcontrol script to allow mounting of multiple partitions on a sd card. Just add the entries to the /etc/fstab. Seems to work for me. Comments? HTH
#!/bin/sh
#
# sdcontrol 1.0 2001/8/8 21:33:19 (Hideki Hayami)
#
# Initialize or shutdown a SD card device
#
# The first argument should be either 'insert' of 'eject'.
#
# 2005-02-09 GROG! (grog@paunix.org) Mount all sd card filesystems listed in /etc/fstab unless specified otherwise
# set -x # TESTING
ACTION=$1
[ $# -gt 0 ] && shift
DEVICE=/dev/mmcda1
MOUNT_POINT=/mnt/card
SMB_MOUNT=/home/samba/SD_Card
INSTALL_DIR=Documents/Install_Files
#FSTYPE="-t vfat"
FATOPTS="-o noatime,quiet,umask=000,iocharset=utf8"
EXT2OPTS="-o noatime"
###### for QPE ######
get_pid()
{
echo $1
}
wait_release()
{
MOUNT_POINT_WAIT=$MOUNT_POINT
count=1
while true
do
umount $MOUNT_POINT_WAIT
if [ $? = 0 ]; then
#echo umount >> /tmp/sd
return
fi
echo count=$count >> /tmp/sd
if [ `expr $count \>= 500` = 1 ]; then
#echo time out >> /tmp/sd
return
fi
count=`expr $count + 1`
usleep 200000
done
}
kill_task()
{
DEVICE_KILL=$DEVICE
ps_line=`ps ax | grep 'qpe$'` # no -w on busybox
qpe_pid=`get_pid $ps_line`
#echo qpe_pid = $qpe_pid >> /tmp/sd
target_pids=`fuser -m $DEVICE_KILL | cut -d : -f2`
#echo $target_pids >> /tmp/sd
if [ "$target_pids" = "" ]; then
return
fi
is_exist_qpe=`echo $target_pids | grep $qpe_pid` # no -w on busybox
if [ "$is_exist_qpe" = "" ]; then
kill -9 $target_pids
#echo kill -9 $target_pids >> /tmp/sd
else
#echo "found qpe!!!" >> /tmp/sd
target_pids=`echo $target_pids | sed -e "s/$qpe_pid//"`
if [ "$target_pids" != "" ]; then
kill -9 $target_pids
#echo kill -9 $target_pids >> /tmp/sd
fi
wait_release
exit 0
fi
}
###### for QPE ######
mount_card_func() {
# set -x
case "$ACTION" in
'insert')
mount $FSTYPE $FATOPTS $DEVICE $MOUNT_POINT
MOUNT_RES=`mount | grep $DEVICE`
if [ "$MOUNT_RES" = "" ]; then
mount $FSTYPE $EXT2OPTS $DEVICE $MOUNT_POINT
fi
MOUNT_RES=`mount | grep $DEVICE`
if [ "$MOUNT_RES" = "" ]; then
mount $FSTYPE $DEVICE $MOUNT_POINT
fi
chkmntsh ${MOUNT_POINT}
if [ -d $SMB_MOUNT ]; then
rm -rf $SMB_MOUNT
fi
ln -s $MOUNT_POINT $SMB_MOUNT
mkdir -p $MOUNT_POINT/$INSTALL_DIR
#echo mount $? >> /tmp/sd
;;
'eject')
umount $MOUNT_POINT
if [ $? -eq 0 ]; then
rm $SMB_MOUNT
else
exit 1
fi
;;
'compeject')
is_mount=`mount | grep $DEVICE`
if [ "$is_mount" = "" ]; then
exit 0
fi
kill_task # for QPE
#fuser -k -m $DEVICE > /dev/null
umount $MOUNT_POINT
if [ $? != 0 ]; then
usleep 500000
umount $MOUNT_POINT
#echo umount $? >> /tmp/sd
#else
# echo umount >> /tmp/sd
fi
rm $SMB_MOUNT
;;
'change')
$0 compeject
$0 insert
;;
'*')
exit 1
;;
esac
} # mount_card_func
if [ $# -eq 0 ]; then
# mount all filesystems from /etc/fstab
while read fstab_line; do
set -- $fstab_line
case $1 in *mmcda*)
DEVICE=$1
MOUNT_POINT=$2
FATOPTS="-o $4"
mount_card_func
esac
done < /etc/fstab
else
DEVICE=$1
MOUNT_POINT=$2
mount_card_func
fi
exit 0
And here's a copy of my /etc/fstab
/dev/mtdblock2 / jffs2 rw,noatime 1 1
/dev/mtdblock3 /home jffs2 defaults,noatime 1 2
proc /proc proc defaults 0 0
/dev/hda1 /mnt/cf auto defaults,sync,noauto,noatime 0 0
/dev/mmcda1 /mnt/card auto defaults,sync,noauto,noatime 0 0
/dev/mmcda2 /usr/local auto defaults,sync,noauto,noatime 0 0
tmpfs /var tmpfs defaults 0 0
# tmpfs /mnt/ram tmpfs defaults 0 0