µClinux4ARM

Der Philips ARM LPC2294 ist ein kleiner leistungsfähiger Mikrocontroller mit externen Speicher interface. Der Mikrocontroller kann bis zu 4GB Speicher verwalten. Speicherkapazität und Leistungsfähigkeit sind die wichtigsten Voraussetzungen für die erfolgreiche Portierung des Betriebssystems LINUX. Wer nun für Mikrocontroller eine Linux Distribution sucht, wird früher oder später auf der Seite www.uClinux.org landen. Hier findet man die Portierung des Betriebssystems Linux für eine große Menge an Mikrocontrollern. Nach etwas suchen findet man auch ein Patch für den Philips ARM LPC22xx. Nun gestaltet sich aber das installieren des µClinux auf solch einen Prozessor nicht gerade so einfach wie bei einen PC. Da mit das Anwender spektrum größer wird widme ich mich auf der Seite dieser Thematik.

Das Photo zeigt, das sich ein ARM 32Bit Mikrocontroller System nicht dem Hobbyelektroniker entziehen kann. Natürlich habe ich meine SMD Adapterplatinen auch mal selber geätzt, allerdings sind solche auch käuflich zu erwerben. Der Mehraufwand durch das aufbauen auf einer Lochrasterplatine wird durch den Preis von 30€ entschädigt. Für eine bessere Optik, arbeite ich zur Zeit gerade an einer fertigen gerouteten Platine. Diese enthält dann auch unter anderen eine Netzwerkkarte, 4MB Speicher, MMC/SD - Slot und 2 serielle Anschlüsse. Kurzum alles was man für ein ordentliches System benötigt. Nun stellt sich die Frage was für ein µClinux überhaupt benötigt wird. Aus eigener Erfahrung kann ich da zu folgendes sagen: Für ein minimal System benötigt man min 2MB SRAM, und 1MB für das dauerhafte Speichern des Kernels und des ROMFS (Rom File Systems).

Nun gibt es viele Möglichkeiten und Ansätze das µClinux in den Speicher zu bekommen, erstens über einen seriellen Bootloader der den Kernel sowie ROMFS von einen HOST(PC) über die serielle Schnittstelle herunterläd und im SRAM ausführt. Die zweite möglichkeit wäre Kernel und ROMFS in einen 1MB-2MB Flash(EEPROM usw.) abzulegen, von hieraus wird dann Kernel und ROMFS in das SRAM kopiert und dann ausgeführt stellt sich noch die Frage wie bekomme ich Kernel und ROMFS in den Flash. Die dritte möglichkeit die mir noch eingefallen ist, man nehme einen externen Speicher (MMC/SD-Karte) von dem dann der Kernel und das ROMFS in den externen SRAM Speicher kopiert wird, und dann gestartet wird. Die letzte Möglichkeit war nach meinen Standpunkt die beste. Die serielle Lösung hat den Nachteil das ich einen PC benötige, inklusive Software, und das übertragen von etwa 1MB Daten etwas langsam vonstatten geht. Das Flash hätte für mich einen zu hohen aufwand an Zeit bei der Verdrahtung in anspruch genommen, weiteres Problem besteht dann noch in dem Flashen des Flashes ;-) Vorteil des Flash gegenüber einer Speicherkarte liegt aber in seinen Preis Leistungsverhältnisses bei Massenproduktionen, aber welchen Hobbyelektroniker stört schon die Massenproduktion.

Ich benutze nun eine MMC/SD-Karte für Kernel und ROMFS. Dazu habe ich einen kleinen Bootloader geschrieben der in dem internen 256K Flash des LPC2294 platz hat. Dieser kopiert nach dem starten des Prozessors die beiden Files linux.bin (Kernel) und romfs.img (Rom File System Image) von einer FAT/FAT16 formatierten MMC/SD Karte in den externen SRAM Speicher des Systems (die internen 16k würden dazu nicht ausreichen). Dann wird der Kernel im SRAM gestartet. Die MMC/SD - Karte wurde an den ersten SPI - Bus angeschlossen, dabei sollte nicht vergessen werden den SS-Pin auf High zu legen.

Die 2MB Speicher liegen bei Adresse 81000000 - 81200000 also Bank1. Der Kernel startet ab Adresse 81008000 und das ROMFS befindet sich bei Adresse 81100000.

 

Hier nun zum Download der Philips ARM LPC22xx µClinux Bootloder und Memory Schaltplan für EAGLE sowie ein fertiger Kernel zum testen!

Philips ARM LPC22xx µClinux Bootloder

Philips uClinux Patch for Kernel 2.6.5

Nachdem erstmal einige Aspekte der Hardware besprochen wurde, stellt sich die Frage wie der Kernel erstellt wird hier das Orginaldokument README.TXT Nach dieser Dokumentation baute bzw. erstellte ich meinen Kernel. Achtung der HSC Patch wird beim aktuellen Kernel2.6.5 nicht mehr benötigt!

 

Mein bisheriges Problem von meinen ARM LPC2294 System war der geringe Speicher von 2MB. Bei einen Kernel von 600KByte und einen RAMFS von 1Mbyte wird es ein wenig eng im Speicher für ausführbare Programme. Da schon eine MMC/SD Karte am System zum booten hängt liegt es nahe diese für das Filesystem zu benutzen. Somit begann meine Odyssee der Treiber Programmierung unter Linux. Die MMC/SD Karte muß da zu mit einer 2. Partition versehen werden. Die Erste dient zum laden des Kernels in den Speicher, da zu reicht eine kleine FAT16 partition aus. Die 2. Partition wird mit Minix, ext2 oder mit einen anderen Filesystem welches der Kernel unterstützt formatiert. Ich habe mich für das ext2 Filesystem entschieden. Danach erfolgt das erstellen der Linux üblichen Verzeichnisse, und das kopieren der (ARM) Binaries in diese. Zu guter letzt müssen nur noch die Devices angelegt werden.

 

1.) Der Kernel Parameter String damit das Filesystem von der MMC/SD Karte gemountet werden kann.

2.) Die Initialisierung der Karte war erfolgreich.

3.) Die Karte besitzt eine Kapazität von 123MByte. (128MB - Karte)

4.) BlockDevice0 hat 2 Partitionen p1 und p2.

5.) Das Filesystem wurde erfolgreich gemountet!

 

 

Hier nun die Treiber Dateien für uClinux. Der Treiber enthält nur das minimal Nötige und ist nur für einen Philips ARM LPC2294. ( Mein erster Treiber unter Linux!! )

Philips ARM LPC22xx MMC/SD uClinux Treiber