In diesem Beitrag zeige ich wie man das Programm flashrom für DOS unter Linux compiliert. Während ich meinen Tftp Server ein wenig aufräumte, kam ich nach einer sehr langen Zeit mal wieder mit DOS Startdisketten in Berührung. Nunja und da war dann doch die Lust geweckt die alte DOS Kiste anzuwerfen. Da ich mir dann dachte, warum nicht mal eine Bootfähige Netzwerkkarte in den Pentium 1 Rechner stecken und mal sehen ob das mit dem Tftp Server klappt. Eine alte 3com 3c905b Netzwerkkarte war schnell besorgt und ein Flashbaustein kostet in China knapp 1,50€. Als ich dann alles zusammen hatte, tauchte das Problem auf wie nun das ROM Image in den Flashbaustein bekommen. Zum einen gab es von 3com eine Software, die aber nicht so einfach zu überreden ist, den Flashbaustein auf der Karte zu beschreiben. Der 2. Versuch war dann mit dem Programm uniflash, auf einem alten Pentium 1 Mainboard den BIOS Baustein im Betrieb herauszunehmen und durch den Flashbaustein zu ersetzen. Das klappte auch, aber ist doch irgendwie keine schöne Lösung. Dann kam ich auf das Programm flashrom. Dieses Programm ist sehr universell im Bereich wo es den Baustein lesen und beschreiben kann und auch an der Vielzahl der verschiedenen Flashbausteine.

Da ich auf dem alten DOS Rechner kein Linux habe, dachte ich mir, ich lade mir eben die DOS Version herunter. Doch weit gefehlt, ich konnte keine aktuelle Version finden und so entstand diese Anleitung. Es gibt auf der Homepage von flashrom eine Mini Anleitung, doch die ist nur etwas für erfahrende Linux User. In einem weiteren Beitrag werde ich noch genauer auf die praktische Nutzung des Programms mit einer 3com Netzwerkkarte eingehen. Denn mit der Kombi, hat man eine sehr günstige Möglichkeit Flashbausteine bis zu einer größe von 128Kx8 zu beschreiben. Nun aber genug geredet, es geht wie immer mit einem Debian Buster, in meinem Fall einer virtuellen KVM Instanz los.

Debian auf Stand bringen und ein paar benötigte Pakete installieren.

apt-get update
apt-get install build-essential git bison flex curl gcc g++ make texinfo zlib1g-dev g++ unzip wget upx-ucl

Als erstes benötigen wir den Crosskompiler, leider müssen wir den selbst kompilieren. Debian Buster hat den nicht im Repository.

git clone https://github.com/andrewwutw/build-djgpp

DJGPP_PREFIX=/usr/local/my-djgpp

cd build-djgpp/

# wechseln von http auf ftp server 

sed -i '13 s/^/#/' script/7.2.0
sed -i '12 s/# *//' script/7.2.0

# nun den cross kompiler kompilieren...
# das dauert je nach Maschine einige Zeit...
 
./build-djgpp.sh 7.2.0

export PATH=/usr/local/djgpp/bin/:$PATH
cd ..

Nun benötigen wir eine gepatchte, also für den Compiler angepaste Version der PCI Utilitys.

wget https://www.kernel.org/pub/software/utils/pciutils/pciutils-3.5.6.tar.gz
wget https://www.flashrom.org/images/6/6a/Pciutils-3.5.6.patch.gz

tar -xvzf pciutils-3.5.6.tar.gz
gunzip Pciutils-3.5.6.patch.gz

cd pciutils-3.5.6

patch -p1 < ../Pciutils-3.5.6.patch

make ZLIB=no DNS=no HOST=i386-djgpp-djgpp CROSS_COMPILE=i586-pc-msdosdjgpp- \
PREFIX=/ DESTDIR=$PWD/../libpci-libgetopt \
STRIP="--strip-program=i586-pc-msdosdjgpp-strip -s" install install-lib

cd ..

Vorletzter Schritt zu unserer flashrom DOS Version, noch eine libary kompilieren.

wget https://www.flashrom.org/images/3/3d/Libgetopt.tar.gz
tar -xvzf Libgetopt.tar.gz
cd libgetopt/
make
cp libgetopt.a ../libpci-libgetopt/lib
cp getopt.h ../libpci-libgetopt/include
cd ..

So nun den Source Code von flashrom holen und kompilieren.

git cone https://github.com/flashrom/flashrom
cd flashrom

make CC=i586-pc-msdosdjgpp-gcc STRIP=i586-pc-msdosdjgpp-strip LIBS_BASE=../libpci-libgetopt/ strip CONFIG_ENABLE_LIBUSB1_PROGRAMMERS=no

# Noch ein wenig das Programm kompremieren
upx -9 flashrom.exe
cd .. 

So nun liegt das fertige Programm für DOS vor. Um es zu nutzen benötigen wir noch ein Programm da flashrom im Protected Mode läuft.

wget https://www.flashrom.org/images/6/61/Csdpmi7b.zip
unzip Csdpmi7b.zip

Die Datei liegt unter bin/CWSDPMI.EXE vor. Wer jetzt nur die 2 Dateien benötigt kopiert sich die auf eine Startdiskette und kann loslegen.

Ich zeige hier noch wie man sich schnell eine Bootfähige Start Diskette mit FreeDOS herstellt.

wget https://www.freedos.org/download/download/FD12FLOPPY.zip
unzip FD12FLOPPY.zip

mount FLOPPY.img /mnt -o loop

rm /mnt/AUTOEXEC.BAT /mnt/FDCONFIG.SYS /mnt/SETUP.BAT /mnt/FDSETUP/ -r
cp flashrom/flashrom.exe /mnt
cp bin/CWSDPMI.EXE /mnt
echo "mkeyb gr" > /mnt/AUTOEXEC.BAT
wget http://www.ibiblio.org/pub/micro/pc-stuff/freedos/files/distributions/1.2/repos/base/mkeyb.zip
unzip mkeyb.zip
cp BIN/MKEYB.EXE /mnt

umount /mnt

So nun liegt ein Disketten Image "FLOPPY.img" vor, das wir auf eine Diskette schreiben können.

Unter Linux wie folgt:

dd if=/dev/fd0 bs=1M of=FLOPPY.img

Unter Windows zB. mit rawwritewin

 

Wer keine Lust zum kompilieren hat oder keine Linux Installation für den gibt es hier ein fertiges Disketten Image.

klaus
Autor: klaus
Diese Seite dient als Speicher für mein Linux Wissen, das ja doch nach einiger Zeit in Vergessenheit gerät. Vielleicht hilft es ja auch dem Ein oder Anderem ein Problem zu lösen.