Dieses Kapitel zeigt mit welchen Scripts ich das im Kapitel Directory Struktur gezeigte Filesystem verpacke, so daß es am Zielsystem als Ramdisk dem Kernel zur Verfügung gestellt werden kann.
Hierzu existieren mehrere Scripts, die einzeln gestartet werden können oder gleich in einem "Arbeitsgang" durch Start des nachfolgenden Scripts mit dem Namen mkall:
#!/bin/bash
# (W) 2002 by Heimo Schön
#
# abstract:
# this script creates the cf-card with a nanobox linux
#
if [ $1 ] ; then
gmenum=$1
else
echo "You have to specify the Number of the GME in Parameter 1"
echo " e.q.: $0 3"
echo "script $0 stopped."
exit 1
fi
if [ $2 ]
then
dev=$2
else
echo "$0 didn't find your parameter 2"
echo " e.q.: $0 $1 /dev/hde1"
echo "$0 will now write everything to /dev/fd0"
echo " So, please insert a floppy to device /dev/fd0"
echo " press ^C to cancel operation or press ENTER to proceed"
read a
dev=/dev/fd0
fi
# updating all executables and libraries on the target-directory
./update-target-libraries
# build the ramdisk-image-file
./mkrd ${gmenum}
# write everything to the flashdisk/floppy (on a device)
./mkcfcard ${dev}
echo mkall done.
echo
Das Script mkall soll Ihnen nur als Beispiel dienen. Der übergebene Parameter 1 ist in der GME-Applikation erforderlich, der zweite Parameter gibt das Device an, auf dem das Zielsystem angelegt werden soll.
Das nachfolgende Script mkrd erzeugt das Ramdisk-File. Im Wesentlichen passiert nichts anderes, wie das tarren und zippen der Directorystruktur die Sie im Directory root vorbereitet haben.
#!/bin/sh
#
# This script creates the ramdiskfile
#
# Copyright (C) 2002,2003 Heimo Schön <heimo.schoen@gmx.at>
#
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2, or (at your option)
# any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
#
rm -vf ./disk/initrd
rm -vf ./disk/initrd.gz
if [ $1 ] ; then
echo -n "$1" > gme-num.cfg
else
echo "You have to specify the Number of the GME in Parameter 1"
echo " e.q.: $0 3"
echo "script $0 stopped."
exit 1
fi
# RDSIZE ist ein Vielfaches von 1024
# z.B. 25 MB = 25600, usw.
if [ $2 ] ; then
RDSIZE=$2
else
RDSIZE=22528
fi
if [ $3 ] ; then
RDINODES=$3
else
RDINODES=4098
fi
echo Begruessung in die ramdisk kopieren
export buildnum=`cat buildnum`
expr $buildnum + 1 > buildnum
echo "Build $buildnum from `date` on $HOSTNAME from $USER"
cp nanobox.dpy.raw nanobox.dpy
echo " Build $buildnum from `date` on $HOSTNAME from $USER" >> ./nanobox.dpy
echo " Build $buildnum from `date` on $HOSTNAME from $USER" >> ./nanobox.history
cp ./nanobox.dpy ./root/etc
echo "Application und Kerneldriver in die ramdisk kopieren ..."
cp ../gsm-uplink root/home/heimo
cp ../gme-start root/home/heimo
cp ../gme-read root/home/heimo
cp ../serialint.o root/home/heimo
cp ../mkdev root/home/heimo
strip root/home/heimo/gme-read
#strip root/home/heimo/serialint.o -- niemals Kerneldriver stripen
cp getlog root/bin
cp dellog root/bin
cp distanz root/bin
echo ramdisk aufräumen
find -name "*~" -exec rm {} \;
echo "creating an empty file ..."
dd if=/dev/zero of=./disk/initrd bs=1024 count=${RDSIZE}
echo "connecting a loopbackdevice with the empty file ..."
losetup /dev/loop0 ./disk/initrd
echo "creating a minix filesystem in the empty file ..."
mkfs.minix -i ${RDINODES} /dev/loop0
# checken ob der Mountpoint leer ist
umount /mnt &> /dev/null
if [ `ls /mnt | wc -w` -gt 0 ] ; then
echo
echo "KRISE !!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
echo "der Mountpoint /mnt ist nicht leer!!!"
echo "Möglicherweise ist beim letzten Build etwas daneben gegangen!!!"
echo
rm -fv /mnt/*
fi
echo "coping the files into the new minix filesystem ..."
mount /dev/loop0 /mnt
cd ./root
find . | cpio -pud /mnt &> /dev/null
cd ../
sudo umount /mnt
rm -fv /mnt/*
echo "freeing the new filesystem ..."
losetup -d /dev/loop0
echo
echo "zipping the ramdisk (may take some time) ..."
gzip --fast ./disk/initrd
echo "coping the ramdisk to the build directory ..."
cp ./disk/initrd.gz ./nanobox.gz
echo
echo "ramdisk created."
exit 0
Im letzten Schritt wird die Flashdisk formattiert und mit allen notwendigen Files bespielt. Dies erledigt das Script mkcfcard
#!/bin/sh
# (W) 2002 by Heimo Schön
#
# this script is based on the ideas of nanobox embedded linux
# from http://www.neonbox.org
#
# abstract:
# this script creates the cf-card with a nanobox linux
#
if [ $1 ]
then
dev=$1
else
# if ypur floppy isn't /dev/fd0, change this...
dev=/dev/fd0
fi
#echo 'Please insert a blank floppy disk to create the nanobox boot disk.'
#echo 'WARNING: Any data on the floppy will be erased.'
#echo 'Press a key when ready...'
#read -s dummy
echo 'Formatting floppy disk...'
umount $dev
#fdformat $dev
mkfs.msdos $dev
echo 'Creating Filesystem...'
mkdosfs $dev
echo 'Making disk bootable...'
./syslinux $dev
echo 'Copying Files...'
mkdir /tmp/$$
mount $dev /tmp/$$
cp -fv vmlinuz /tmp/$$/.
cp -fv nanobox.gz /tmp/$$/.
cp -fv syslinux.cfg /tmp/$$/.
cp -fv nanobox.dpy /tmp/$$/.
cp -fv putty.exe /tmp/$$/.
cp -fv gme-num.cfg /tmp/$$/.
echo
echo Your new cfcard:
echo
ls -alp /tmp/$$
umount $dev
rm -rf /tmp/$$
echo
echo "Done."
echo "Your boot floppy/flashdisk is ready for use."
echo "Remove it from $1 and put it to your target system for testing it ..."
echo " Have a nice day."
echo
echo