T2-Build für embedded system

17/04/2008 - 18:24 von Marian Aldenhövel | Report spam
Hallo,

Ich versuche ein Linux-System für ein embedded System zusammenzustellen.

Besonders exotisch oder eng geht es dabei eigentlich nicht zu, die
Zielhardware ist x86-basiert, hat 128MB RAM, und auch sonst normale
PC-Hardware. Das System soll von CF booten und spàter mal spezialisierte
Anwendungssoftware fahren.

Ich möchte das System gerne from scratch bauen, hauptsàchlich um dabei
etwas zu lernen, aber natürlich auch um es auf das Ziel hin optimieren
zu können.

Außerdem möchte ich den Build automatisieren können. Also idealerweise
vom Download der Sourcen bis zum fertigen Image ohne Benutzerinteraktion
laufen lassen. Dabei sollen an den entsprechenden Stellen eigene
Konfigurationen und gegebenfalls auch Patches eingepflegt werden können.

Bei der Recherche bin ich auf T2 gestoßen: http://www.t2-project.org/.

T2 gefàllt mir eigentlich sehr gut als Basis für mein eigenes System,
es scheint mir eine ausgezeichnete Balance zwischen Automatisierung
und Flexibilitàt zu bieten ohne daß man sich bei der Anpassung von
der Entwicklung von T2 abschneidet.

Leider kriege ich das Ergebnis nicht zum Laufen und da endet meine
Lernkurve abrupt am Abgrund.

Der T2-Build làuft brav durch. Ich bekomme einen Kernel und ein initramfs.
Auf CF transportiert (oder in QEMU) bootet der Kernel und packt das
initramfs aus. Der Kernel kann ein statisch gelinktes "hello world" als
/init ausführen. Das kleine Einmaleins funktioniert also.

Aber darüber hinaus geht nix. Versuche ich in das "richtige" init (minit
ist als Default im Build-System konfiguriert) oder direkt in eine dynamisch
gelinkte shell zu booten bekomme ich nur segfaults.

Der einzige Tip aus der Literatur, den ich so finden konnte, ist in eine
statisch gelinkte Shell zu booten um sich dann auf dem neuen System
umsehen zu können. Das habe ich noch nicht versucht, weil ich nicht so
recht weiß wo ich eine solche herbekommen soll :-). Aber auch dann wüsste
ich wohl erstmal nicht wie ich das Problem debuggen sollte.

Kann mir jemand hier helfen?

Für das Projekt habe ich eine VMWare-Maschine aufgesetzt in der Ubuntu
7.10 Server Edition als Tràger für T2 dient. Ich kann die ganze Maschine
oder den fertig gebackenen Kernel und das Root-fs irgendwo hochladen.
Ich kann Sachen ausprobieren. Ich kann SSH-Zugang zu der VM geben. Ich
kann auch mit Notebook unterm Arm irgendwohin fahren.

Aber alleine kriege ich das nicht raus.

Ciao, MM
Marian Aldenhövel, Rosenhain 23, 53123 Bonn
http://www.marian-aldenhoevel.de
"Success is the happy feeling you get between the time you
do something and the time you tell a woman what you did."
 

Lesen sie die antworten

#1 Thomas Tom Malkus
17/04/2008 - 21:03 | Warnen spam
Marian Aldenhövel meinte:

Ich versuche ein Linux-System für ein embedded System zusammenzustellen.

Besonders exotisch oder eng geht es dabei eigentlich nicht zu, die
Zielhardware ist x86-basiert, hat 128MB RAM, und auch sonst normale
PC-Hardware. Das System soll von CF booten und spàter mal spezialisierte
Anwendungssoftware fahren.



Das ist doch nicht Embedded, auf so einem System habe ich mit Linux
angefangen (vor so runden 15 Jahren) ;-)

Der T2-Build làuft brav durch. Ich bekomme einen Kernel und ein initramfs.
Auf CF transportiert (oder in QEMU) bootet der Kernel und packt das
initramfs aus. Der Kernel kann ein statisch gelinktes "hello world" als
/init ausführen. Das kleine Einmaleins funktioniert also.



Hmm, ich kann Dir da wahrscheinlich nicht helfen, aber mal kurz
beschreiben, wie ich das für Embedded Devices mache:

1. angepassten Kernel bauen
2. angepassetes rootfs bauen (mit BusyBox und halt allem anderen was
man braucht, BusyBox ist zu empfehlen)

Das gibt dann zwei Image-Dateien. Nun arbeite ich mit AT91RM9200 (oder
auch mal AT91SAM7x) mit 16 MByte Flash und 64 MByte RAM. Das Kernel
Image und das rootfs müssen jetzt ins Flash (bei Dir bleibt das dann
halt auf der CF-Card). Auf dem AT91RM9200 habe ich u-boot, der bekommt
einiges an Parametern, vor allem über die Speicherbereiche des Flash
und auch die Kernelparameter. Per tftp wird das Kernel-Image und rootfs
in den Speicher geladen und dann in den Flash-Speicher kopiert.
Aus dem u-boot heraus wird dann der Kernel gestartet, RAMDISK eingerichtet,
rootfs entpackt und schon làuft das ganze System.

Automatisiert habe ich das ganze mit stinknormalen Scripts. D.h. wenn
ich den Kernel àndere oder am rootfs Verànderungen vornehme rufe ich ein
Script auf, das legt die dann fertig erzeugten Images auf dem tftpserver
ab, führt über kermit und serieller Schnittstelle die Installation der
Images auf dem Flash aus und startet dann das Embedded Device neu.

Ich bin mit dem ganzen Kram vor langer Zeit auf Debian gewechselt, weil da
braucht man dann nicht mit distributionsabhàngigen Erscheinungen zu
rechnen und man findet unheimlich viel Beispiele die sich alle auf
Debian beziehen, gerade für die ARM-Controller.

Buchtip:

Building Embedded Linux Systems, Karim Yaghmour, O'Reilly
Programming Embedded Systems with C and GNU Development Tools
Michael Barr & Anthony Massa, O'Reilly

73 de Tom
Thomas 'Tom' Malkus, DL7BJ
Locator JO43GC * DL-QRP-AG #1186 * AGCW-DL #2737 * DARC OV I19

Ähnliche fragen