Betriebssysteme Der Windows Embedded Compact 7 Bootloader

Redakteur: Dipl.-Ing. (FH) Hendrik Härter

In unserem Beitrag beschreiben wir verschiedene Boot-Möglichkeiten, um WinEC7 zu laden und zu initialisieren. Außerdem stellen wir Ihnen verschiedene Tools vor, mit denen ein Bootloader entwickelt, getestet und debugged werden kann. Die verwendete Testhardware ist ein X86-Entwicklungssystem mit einer Intel-CPU.

Anbieter zum Thema

Der Bootloader ist ein kleines zusätzliches Programm, dass die Target-Hardware initialisiert und das Betriebssystem „Windows Embedded Compact 7“ in den Speicher lädt. Der Ladevorgang wird mit einem Sprung auf die Betriebssystem-Start-Routine abgeschlossen.

Der Bootloader ist einzigartig für jede Hardware-Plattform. Es gibt auch Geräte, die ohne einen Bootloader auskommen. Dabei befindet sich das Betriebssystem auf dem Flash und wird nach einem PowerOnReset ohne zu laden gestartet.

Aus Geschwindigkeitsgründen wird das WinEC7 vom Flash in den RAM geladen und dann gestartet. Mit dem Platform Builder 2008 lässt sich der Bootloader entwickeln. Während der Entwicklungsphase kann das WinEC7-Image über die verschiedenen Kabelverbindungen wie Ethernet, Universal Serial Bus (USB) oder seriellen Bus geladen und getestet werden. Der Bootloader kann das Betriebssystem auch von den verschiedenen lokalen Speichermedien wie Compact Flash oder Festplatte ins RAM laden.

Normalerweise wird der Bootloader aus dem Board Support Package (BSP) heraus verwendet, um Entwicklungszeit zu sparen. Die BSPs werden von den OEMs der verschiedenen CPU-Hersteller zur Verfügung gestellt. Der Bootloader sollte Debug oder Fehlermeldung ausgegeben können. Fehlermeldungen werden typischerweise über eine serielle Schnittstelle mit einer Übertragungsrate von 38400 Baud, ohne Parität, mit acht Datenbits und einem Stoppbit ausgegeben. Anzumerken ist, dass bei der Bootloader-Entwicklung die Support-Bibliotheken von Microsoft genutzt werden sollten.

Ergänzendes zum Thema
Der x86-Bootprozess
  • Nach dem Einschalten des Systems springt der x86-Prozessor auf die Reset-Vektor-Adresse (0xFFFF FFF0) und führt den BIOS-Code aus.
  • Der BIOS-Code initialisiert die Hardware und sucht nach einem bootfähigen Speichermedium.
  • Nachdem ein bootfähiges Speichermedium erkannt wurde, wird erst das Gerät gesucht und der Master Boot Sektor (MBR) wird in den Systemspeicher geladen.
  • Der MBR-Code wird ausgeführt, sucht nach dem Bootsektor auf einer gültige Partition, lädt den Boot-Sektor-Code in den Arbeitsspeicher und führt das Programm aus.
  • Im Boot-Sektor-Code steht der BIOS-Loader und wird ausgeführt.
  • Der BIOS-Loader lädt das WinEC7 Image in den Speicher des Target Systems. Anschließend springt der Loader auf die Startadresse des Images, um WinEC7 zu starten.

Für x86-basierende Geräte befindet sich das Erste-Programm im BIOS und initialisiert die Hardware des Systems. Danach sucht das BIOS nach bootfähigen Speicher und lädt das Programm auf dieser Partition. Das x86-BIOS enthält somit den Bootloader.

Wo sich der Boot Loader im Programmspeicher befindet

Der physikalische Speicher RAM/ROM/Flash wird durch die MMU (Memory Management Unit) in den Adressbereich des Betriebssystems "gemapped" und liegt oberhalb der virtuellen Adresse 0x80000000. Diese Adressenzuteilungen werden mit der boot.bib Datei definiert und festgelegt. Somit liegt der Boot-Loader in einem reservierten Adressbereich und kann dann alle anderen Programmteile (nk.bin) laden.

Im Bild 3 ist zu erkennen, das WinEC7 insgesamt 32.000 Anwendungen mit einer virtuellen Größe von je 2 GByte unterstützt. Die Aufteilung des Speichers wird in der config.bib definiert und befindet sich im Verzeichnis "C:\WINCE700\platform\CEPC\files".

Aufgaben und Anpassen eines Bootloaders

Speicherzuordnungen: Die erste Aufgabe bei der Anpassung bezieht sich auf die Definition der Speicherzuordnungen für den Bootloader. Die Standard-BSPs in WinEC7 definieren die Speicherkonfiguration in einer ."bib-Datei" im Boot-Loader-Verzeichnis, C:\WINCE700\Platform\CEPC\Src\Boot loader\Eboot\boot.bib.

StartUp-Einsprungspunkt: Der StartUp-Einsprungspunkt des Bootloaders muss sich im linearen Speicher an der Adresse befinden, an der die CPU beginnt (PowerOnReset), um Programmcode auszuführen, damit die Hardware initialisiert werden kann. Erfolgt die Anpassung auf einem Referenz-BSP für den gleichen Prozessor, muss der meiste Programcode für die CPU und den Speichercontroller nicht geändert werden.

Ergänzendes zum Thema
BIOS Loader entwickeln oder anpassen

Der BIOS-Loader Quellcode wird von Microsoft zur Verfügung gestellt. So lässt sich der BIOS-Loader im Platform Builder auf die speziellen Bedürfnisse anpassen. Der BIOS Loader der WinEC7-Version unterstützt sowohl exFAT-und FAT32-Dateisysteme. Damit lassen sich Partitionen größer 2 GByte ansprechen.

  • VS2008 IDE starten und EntWebPad-Projekt öffnen
  • Build -> Configurations-Manager in der VS2008 IDE auswählen
  • Rechts-Klick auf die BIOS-Loader-Knoten und Build auswählen. Anschließend wird ein neuer Bootloader erstellt.

Die StartUp-Routine ruft die Main-Funktion des Bootloaders auf. Basiert der Bootloader auf BLCOMMON wird die Funktion BootLoaderMain aufgerufen, um den Downloadtransport zu initialisieren, indem die OEM-Plattformfunktionen aufgerufen werden.

Artikelfiles und Artikellinks

(ID:24233120)