Weiter Zurück Inhalt

7. Flashdisk erzeugen

7.1 Einleitung

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.

7.2 Ramdisk erzeugen

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
    

7.3 Flashdisk anlegen

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
    


Weiter Zurück Inhalt