# MILO HOWTO

## Autor: David A. Rusling david.rusling@reo.mts.dec.com
v0.84, 6 Grudnia 1996
Wersja polska: Leszek Urbański tygrys@fidonet.org.pl
v1.0, 24 Lipca 1998

Ten dokument opisuje Miniloader (Miniładowacz), program dla komputerów opartych na procesorze Alpha, który może być używany do inicjalizacji maszyny i ładowania Linuxa. Alpha Linux Miniloader (jest to jego pełna nazwa) jest też znany jako MILO. Dokument ten został napisany w standardzie ISO-8859-2. Oryginał tego dokumentu znajduje się pod adresem ftp://gatekeeper.dec.com/pub/Digital/Linux-Alpha/Miniloader/docs.

## 1. Wprowadzenie

Ten dokument opisuje Miniładowacz (Miniloader) dla Linuxa na Alphę AXP (MILO). To firmware jest używane do inicjalizacji systemów Alpha AXP, załadowania oraz startowania Linuxa i w końcu do zapewnienia kodu PAL (PALcode) dla Linuxa.

## 1.1 Prawa autorskie

Prawa autorskie Alpha Miniloader (MILO) HOWTO: Copyright (C) 1995, 1996 David A. Rusling.

Prawa autorskie. Jak wszystkie Linuxowe dokumenty HOWTO, może być powielane i rozpowszechniane w całości lub w części, za pomocą każdego środka przekazu, fizycznego lub elektronicznego, jeżeli uwaga o prawach autorskich została zachowana na wszystkich kopiach. Komercyjna redystrybucja jest dozwolona i zalecana; jednakże autor chciałby być powiadomiony o takich dystrybucjach. Możesz też przetłumaczyć to HOWTO na dowolny język, jeżeli zostawisz wypowiedź o prawach autorskich oraz oświadczenie niezmienione, oraz dodasz notatkę o tłumaczu.

Oświadczenie. Próbowałem umieścić tu najpoprawniejsze i najnowsze informacje, które są mi dostępne, nie mogę jednak zagwarantować, że ich użycie nie spowoduje utraty danych lub sprzętu. NIE ZAPEWNIAM ŻADNEJ GWARANCJI dotyczącej informacji w tym HOWTO, nie mogę być więc odpowiedzialny za jakiekolwiek skutki użycia danych z niego.

## 1.2 Nowe wersje tego dokumentu

Najświeższa wersja tego dokumentu znajduje się pod adresem ftp://gatekeeper.dec.com/pub/Digital/Linux-Alpha/Miniloader/docs, a David Mosberger-Tang był uprzejmy umieścić go w formacie HTML na jego znakomitej stronie o Linux-Alpha http://www.azstarnet.com/~axplinux/.

## 2. Co to jest MILO?

Na systemach PC opartych na procesorach Intel, firmware zwane BIOSem uruchamia komputer i ładuje obraz (image) do uruchomienia z bloku startowego systemu plików DOSu. Jest to mniej więcej to samo, co wykonuje MILO na systemach Alpha, jednakże istnieje kilka interesujących różnic pomiędzy BIOSem a MILO, jedną z nich jest używanie przez MILO niezmodyfikowanych standardowych sterowników urządzeń Linuxa. MILO jest firmware'em, inaczej niż LILO, który jest ładowany przez BIOS. Główne funkcjonalne części MILO to:

1. PALcode,
2. Kod uruchamiania pamięci (buduje tablice stronicowania i włącza adresowanie wirtualne),
3. Kod grafiki (emulacja BIOSu i TGA (21030)),
4. Kod jądra Linuxa. Na niego składa się prawdziwy kod (np. obsługa przerwań) i pseudo-jądro,
5. Sterowniki urządzeń blokowych Linuxa (np. sterownik stacji dysków),
6. Obsługa systemu plików (ext2, MS-DOS i ISO9660),
7. Kod interfejsu użytkownika (MILO)
8. Kod interfejsu jądra (uruchamia HWRPB i mapę pamięci dla Linuxa),
9. Kod NVRAM do zarządzania zmiennymi środowiskowymi

Dalsze akapity dokładnie opisują funkcjonalne części MILO.

PALcode jest cienką warstwą oprogramowania dostosowującą procesor do konkretnego systemu operacyjnego. Działa w specjalnym trybie (PALmode), który posiada kilka ograniczeń, ale używa standardowego zestawu instrukcji Alphy i tylko pięciu dodatkowych instrukcji. W ten sposób, na procesorze Alpha mogą być uruchamiane systemy tak różne, jak np. Windows NT, OpenVMS, Digital UNIX i oczywiście Linux. PALcode, którego używa MILO (i przez to sam Linux) jest, jak reszta MILO, darmowa. Pochodzi z przykładu ewaluacyjnych płyt głównych (Evaluation Boards, EB) dla Digital UNIXa. Różnice pomiędzy kodami PAL wynikają z różnic w sposobach obsługi przerwań w procesorach Alpha (płyty główne do 21066 mają inną mapę I/O niż systemy 21064+2107x (2107x to APECS, chipset do 21064 - przyp. tłum.)), oraz z liczby dostępnych płyt głównych.

Żeby MILO działał poprawnie, musi znać ilość dostępnej pamięci i miejsce, w którym Linux będzie działał, musi też być w stanie przydzielić tymczasową pamięć dla sterowników urządzeń Linuxa. Kod utrzymuje mapę pamięci, która posiada rekordy dla permanentnie i tymczasowo przydzielonych stron. W czasie uruchamiania MILO dekompresuje się w poprawne miejsce pamięci fizycznej. Kiedy przekazuje kontrolę jądru Linuxa, zarezerwowywuje pamięć dla skompresowanej wersji samego siebie, kodu PAL (który jest potrzebny jądru) i trochę struktur danych. To zostawia większość pamięci w systemie dla samego Linuxa.

Ostatnia część kodu pamięci to ustawienie i włączenie adresowania wirtualnego w celu zapewnienia poprawnego miejsca w wirtualnej pamięci dla struktur danych, które Linux spodziewa się tam zobaczyć.

MILO zawiera kod grafiki, który inicjalizuje i używa urządzenia graficznego dla systemu. Wykryje i będzie używać urządzenie VGA, jeśli takie istnieje, jeżeli nie, będzie próbował użyć urządzenia TGA (21030). Gdy i to się nie powiedzie, przyjmie, że nie istnieje urządzenie graficzne (tylko np. terminale szeregowe - przyp. tłum.). Emulacja BIOSu, którą posiadają standardowe, skompilowane obrazy MILO, to emulacja Digitala, która obsługuje większość, jeżeli nie wszystkie dostępne standardowe urządzenia graficzne.

Sterowniki urządzeń Linuxa ,,żyją'' wewnątrz jądra i spodziewają się od niego konkretnych usług. Niektóre z nich są zapewniane bezpośrednio przez kod Linuxa, np. obsługa przerwań, a inne działają dzięki specjalnym procedurom wyglądającym dla sterowników jak procedury jądra.

Najsilniejsza cecha MILO, to możliwość osadzenia w nim niezmienionych sterowników urządzeń Linuxa. Daje to potencjał obsługi każdego urządzenia, które obsługuje Linux. MILO zawiera wszystkie urządzenia blokowe wkompilowane w jadro, które zostaje przy nim zbudowane, a także dużo kodu urządzeń (np. `ll_rw_blk()`).

MILO ładuje jądro Linuxa z prawdziwych systemów plików, a nie z bloków startowych i innych dziwnych miejsc. Potrafi czytać systemy plików MSDOS, EXT2 i ISO9660. Pliki spakowane gzipem są obsługiwane i rekomendowane, zwłaszcza jeżeli ładujesz [system] z dyskietki, co jest dosyć wolne. MILO rozpoznaje je po rozszerzeniu `.gz`.

W MILO zawiera prosty sterownik klawiatury, który razem z równie prostym sterownikiem grafiki pozwala posiadać mu spartański interfejs użytkownika. Interfejs ten pozwala poznać systemy plików na skonfigurowanych urządzeniach, ładować Linuxa, uruchamiać programy do uaktualniania pamięci flash, oraz ustawiać zmienne środowiskowe kontrolujące ładowanie systemu. Tak jak w LILO, możesz przekazywać parametry do jądra.

MILO musi powiedzieć jądru Linuxa na jakim działa systemie, ile pamięci posiada i ile z tej pamięci jest wolne. Robi to używając struktury danych HWRPB (blok parametrów restartowania sprzętu) i skojarzonych z nią opisów części pamięci. Są one umiejscawiane w odpowiednim miejscu pamięci wirtualnej zaraz przed przekazaniem kontroli jądru Linuxa.

## 3. Standardowe, pre-kompilowane obrazy MILO

Jeżeli będziesz chciał uruchamiać Linuxa na standardowych płytach głównych Alphy, możesz użyć pre-kompilowanych, ,,standardowych'' obrazów (images) MILO. (notka od tłumacza: radzę zabootować Alphę ze standardowych obrazów, a potem zbudować własny, gdy Linux będzie już działał) Obrazy te (razem ze źródłami i innymi ciekawymi rzeczami) znajdują się na ftp://gatekeeper.dec.com/pub/Digital/Linux-Alpha/Miniloader

Podkatalog `images` zawiera po jednym podkatalogu na każdy system (np. AlphaPC64), a obrazy MILO są nazywane w następujący sposób:

1. `MILO` - wykonywalny obraz MILO, może on być ładowany na wiele sposobów,
2. `fmu.gz` - Program zarządzania pamięcią flash,
3. `MILO.dd` - Obraz dla dyskietki startowej. Powinien być zapisany programem rawrite.exe lub dd pod Linuxem.

Katalog `test-images` zawiera, tak jak `images` po jednym katalogu na standardowy system. Obrazy znajdujące się w tym katalogu są raczej eksperymentalne, ale zawierają najnowsze opcje.

## 4. Kompilacja MILO

(Uwaga: pamiętaj, że nie możesz zbudować MILO i jądra dla Alphy na Intel'u! Musisz dysponować drugą Alphą, albo zbudować jądro po uruchomieniu Linuxa ze standardowych obrazów MILO. Na Intelu jądro nawet się nie zacznie kompilować - spróbuj zbudować jądro na Alphę na pececie - w pliku Makefile zamień ARCH=i386 na ARCH=alpha... - przyp. tłum.)

MILO kompiluje się oddzielnie, nie razem z jądrem. Ponieważ MILO potrzebuje części jądra do poprawnego funkcjonowania (np. obsługi przerwań), musisz najpierw skonfigurować i skompilować jądro, odpowiadające MILO, który chcesz skompilować. Zazwyczaj znaczy to, że powinieneś kompilować jądro z tą samą wersją co MILO. A więc `MILO-2.0.25.tar.gz` będzie kompilować się z `linux-2.0.25.tar.gz`. MILO może skompilować się z nowszą wersją jądra, ale nie musi. Dodatkowo teraz, kiedy biblioteki dzielone ELF są w pełni obsługiwane, istnieją dwie wersje źródeł MILO. Żeby zbudować je w systemie ELF, musisz najpierw rozpakować standardowe źródła, a potem nałożyć łatę (patch) ELF na te źródła (musi mieć ten sam numer wersji). Przyjmę teraz, że źródła jądra oraz skompilowane obiekty (.o) znajdują się w katalogu `/usr/src/linux`, a jądro zostało w pełni skompilowane komendą `make boot`. (pamiętaj o ustawieniu ARCH=alpha w pliku Makefile jądra PRZED wydaniem polecenia `make` (`menu`)(`x`)`config`!!! - przyp. tłum.)

Żeby skompilować MILO, zmień katalog na zawierający źródła MILO i przywołaj `make` komendą:

> `

>     $ make KSRC=/usr/src/linux config

> `

Tak jak podczas kompilacji jądra, zadane zostanie kilka pytań.

> `

>     Echo output to the serial port (MINI_SERIAL_ECHO) [y]

>     Przesyłać wyjście do portu szeregowego (MINI_SERIAL_ECHO) [y]

> `

Dobrym pomysłem jest włączenie przesyłania wiadomości printk jądra do `/dev/ttyS0`, jeżeli można to zrobić. Jeżeli możesz (i chcesz), napisz ,,y'', jeżeli nie, ,,n''. Wszystkie standardowe, pre-kompilowane obrazy MILO posiadają wejście/wyjście na port szeregowy COM1.

> `

>     Use Digital's BIOS emulation code (not free) (MINI_DIGITAL_BIOS_EMU) [y]

>     Użyć kodu emulacji BIOSu Digitala (nie jest darmowy) (MINI_DIGITAL_BIOS_EMU) [y]

> `

Ten kod jest załączony jako biblioteka, która jest darmowa dopóki używa się jej w systemie opartym na procesorze Alpha. Źrodła nie są dostępne. Jeżeli odpowiesz `n`, zbudowana zostanie alternatywna darmowa emulacja BIOSu. Jej źródła są dołączone do MILO. Pamiętaj, że obecnie nie możesz wybrać emulacji Digitala w systemach ELF (biblioteka nie jest jeszcze gotowa), musisz więc odpowiedzieć ,,nie'' na to pytanie.

> `

>     Build PALcode from sources (Warning this is dangerous) (MINI_BUILD_PALCODE_FROM_SOURCES) [n]

>     Zbudować PALcode ze źródeł (Uwaga to jest niebezpieczne) (MINI_BUILD_PALCODE_FROM_SOURCES) [n]

> `

Powinieneś zrobić to tylko jeżeli modyfikowałeś źródła kodu PAL, jeżeli nie, użyj standardowego, pre-kompilowanego kodu PAL dołączonego do MILO.

Teraz jesteś gotowy do zbudowania obrazu MILO:

> `

>     $ make KSRC=/usr/src/linux

> `

Kiedy kompilacja zostanie zakończona, obraz MILO znajduje się w pliku o nazwie `milo`. Będzie się tam też znajdować wiele obrazów o nazwach `milo.*`, które powinny być zignorowane.

## 5. Ładowanie MILO

Najlepiej obsługiwany sposób ładowania MILO to ładowanie z firmware'u Windows NT ARC, ponieważ większość systemów zawiera tą metodę. Jednakże istnieje wiele różnych sposobów ładowania MILO. Może on być załadowany z:

- dyskietki startowej (failsafe boot block floppy),
- firmware'u Windows NT ARC
- konsoli SRM Digitala
- ,,Alpha Evaluation Board Debug Monitor'' - programu monitorującego płyt ewaluacyjnych,
- pamięci flash ROM

## 5.1 Ładowanie MILO z firmware'u Windows NT ARC

Większość, jeżeli nie wszystkie systemy oparte na Alfie AXP posiadają Windows NT ARC firmware i jest to preferowana metoda inicjalizowania MILO i Linuxa. Kiedy firmware Windows NT działa i posiadasz poprawny dla twojego systemu obraz MILO, metoda ta jest bardzo łatwa do używania.

Windows NT ARC firmware jest środowiskiem, w którym mogą działać programy, wykonując odwołania do firmware'u w celu wykonywania różnych akcji. Windows NT OSloader jest programem, który spełnia tą funkcję. Linload.exe jest znacznie prostszym programem, który jedynie wczytuje i uruchamia MILO. Ładuje on poprawny plik z obrazem do pamięci pod adres 0x00000000 i wtedy wykonuje odwołanie PAL ,,swap-PAL'' (zamień PAL) do niego. MILO, tak jak Linux, używa innego kodu PAL niż Windows NT i dlatego musi przeprowadzić zamianę. Następnie MILO przenosi się do 0x200000 i kontynuuje resetowanie kodu PAL.

Zanim dodasz opcję ładowania Linuxa, będziesz musiał skopiować linload.exe oraz MILO, którego chcesz załadować w miejsce, z którego Windows NT ARC będzie mógł go odczytać. W poniższym przykładzie przyjmuję, że ładujesz MILO z dyskietki w formacie DOS'a:

1. W menu ładowania (boot menu) wybierz ,,`Supplementary menu...`'' (menu dodatkowe)
2. W menu ,,`Supplementary menu`'' wybierz opcję ,,`Set up the system...`'' (ustaw system)
3. W `Setup menu` wybierz ,,`Manage boot selection menu...`'' (menu zarządzania opcjami ładowania)
4. W ,,`Boot selections menu`'' wybierz ,,`Add a boot selection`'' (dodaj opcję ładowania)
5. Wybierz ,,`Floppy Disk 0`''
6. Wprowadź ,,`linload.exe`'' jako katalog i nazwę pliku ładowacza systemu (osloader)
7. Odpowiedz ,,tak'' na pytanie czy system operacyjny znajduje się na tej samej partycji co ładowacz systemu
8. Wprowadź ,,`\`'' jako katalog główny systemu operacyjnego
9. Zazwyczaj wpisuję ,,`Linux`'' jako nazwę tej opcji ładowania
10. Odpowiedz ,,nie'' na pytanie o inicjalizację debuggera podczas ładowania
11. Powinieneś wrócić do ,,`Boot selections menu`'', wybierz w nim opcję ,,`Change a boot selection option`'', a w niej opcję, którą właśnie stworzyłeś
12. Użyj strzałki w dół, aby dostać się do rekordu ,,`OSLOADFILENAME`'', wpisz w nim nazwę obrazu MILO, którego chcesz używać, np. ,,`noname.arc`, następnie naciśnij return (enter).
13. Nasiśnij ESC żeby wrócić do ,,`Boot selections menu`''
14. Wybierz ,,`Setup Menu`'' (lub naciśnij jeszcze raz ESC), a w nim ,,`Supplementary menu`'' i ,,`Save Changes`''
15. ESC cofnie cię do ,,`Boot menu`'', możesz już spróbować inicjalizować MILO. Jeżeli nie chcesz, żeby Linux był pierwszą opcją ładowania, możesz zmienić kolejność opcji w ,,`Boot selections menu`''.

Na końcu tych czynności powinieneś otrzymać opcję ładowania wyglądającą podobnie do tej:

> `

>     LOADIDENTIFIER=Linux
>     SYSTEMPARTITION=multi(0)disk(0)fdisk(0)
>     OSLOADER=multi(0)disk(0)fdisk(0)\linload.exe
>     OSLOADPARTITION=multi(0)disk(0)fdisk(0)
>     OSLOADFILENAME=\noname.arc
>     OSLOADOPTIONS=

> `

Możesz teraz uruchomić MILO (i Linuxa). Możesz załadować linload.exe i MILO bezpośrednio z systemu plików, który rozumie Windows NT, takiego jak NTFS lub DOS na twardym dysku.

Linia `OSLOADOPTIONS` zawiera opcje, które zostaną przekazane do MILO. Jeżeli chcesz załadować Linuxa bezpośrednio z Windows NT ARC nie pauzując przy MILO, powinieneś wpisać następującą komendę w `OSLOADOPTIONS`:

> `

>     boot sda2:vmlinux.gz root=/dev/sda2

> `

Przeczytaj rozdział Interfejs użytkowwnika MILO, żeby uzyskać więcej informacji o komendach MILO.

Inna (ale jest to obejście :( ) metoda ładowania MILO przez WNT ARC, to umieszczenie MILO na dyskietce MS-DOS, nazwanie go `fwupdate.exe` i uruchomienie opcji ,,Upgrade Firmware''.

## 5.2 Ładowanie MILO z ,,Evaluation Board Debug Monitor''

Płyty ewaluacyjne (i często ich klony) posiadają obsługę Monitora płyt ewaluacyjnych (Alpha Evaluation Board Debug Monitor). Przeczytaj dokumentację twojego systemu przed rozpatrywaniem użycia tej metody ładowania MILO. Następujące systemy napewno obsługują Monitor:

- AlphaPC64 (Sekcja AlphaPC64)
- EB64+ (Sekcja EB64+)
- EB66+ (Sekcja EB66+)
- EB164 (Sekcja EB164)
- PC164 (Sekcja PC164)

Zanim użyjesz tej metody, pamiętaj, że wczesne wersje Monitora Ewaluacyjnego nie posiadały sterowników grafiki i klawiatury, musisz więc podłączyć inny komputer przez port szeregowy, żebyś mógł używać Monitora. Jego interfejs jest bardzo prosty, a komenda `help` pokazuje mnóstwo dostępnych komend. Najbardziej nas interesujące zawierają słowo `boot` albo `load`.

Monitor Płyt Ewaluacyjnych może załadować obraz przez sieć (`netboot`) albo z dyskietki (`flboot`). W obu przypadkach, ustaw adres ładowania na 0x200000 (`> bootadr 200000`) przed uruchomieniem obrazu.

Jeżeli obraz znajduje się na dyskietce (zauważ że obsługiwane są tylko dyskietki w formacie DOS), będziesz musiał wpisać następującą komendę:

> `

>      AlphaPC64> flboot <nazwa-obrazu-MILO>

> `

## 5.3 Ładowanie MILO z ,,bezpiecznej dyskietki startowej''

Tylko AXPPCI33 napewno obsługuje ,,bezpieczną dyskietkę startową'' (Sekcja NoName).

Jeżeli nie używasz standardowego, pre-kompilowanego obrazu `.dd` MILO, będziesz musiał zbudować dyskietkę startową SRM. Kiedy już skompilowałeś MILO, musisz wykonać następujące komendy w Digital Unix'ie:

> `

>     fddisk -fmt /dev/rfd0a
>     cat mboot bootm > /dev/rfd0a
>     disklabel -rw rfd0a 'rx23' mboot bootm

> `

Lub w Linuxie:

> `

>     cat mboot bootm > /dev/fd0

> `

Jeżeli masz standardowy obraz MILO (powiedzmy `MILO.dd`), możesz stworzyć dyskietkę startową, używając następującej komendy:

> `

>     dd if=MILO.dd of=/dev/fd0

> `

(radzę jednak zapisywać programem rawrite.exe spod DOS'a - ale poeksperymentować z dd można - przyp. tłum.)

## 5.4 Ładowanie MILO z pamięci Flash

Istnieje kilka systemów, gdzie MILO może być wypalone we flash'u i ładowane bezpośrednio (a nie przez firmware Windows NT ARC):

- AlphaPC64 (Sekcja AlphaPC64)
- NoName (Sekcja NoName)
- EB66+ (Sekcja EB66+)
- EB164 (Sekcja EB164)
- PC164 (Sekcja PC164)

## 5.5 Ładowanie MILO z konsoli SRM

Konsola SRM (skrót od System Reference Manual, podręcznik systemowy (? - przyp. tygrys)) nie wie nic o systemach plików bądź partycjach dyskowych, oczekuje po prostu na zajęcie odpowiedniego przedziału kolejnych sektorów dysku przez drugorzędny ładowacz, zaczynając od danego offsetu. Informacja opisująca drugorzędny ładowacz (jego rozmiar i offset) znajduje się w pierwszym 512-bajtowym bloku. Żeby załadować MILO z konsoli SRM, musisz wygenerować taką strukturę w urządzeniu, do którego SRM ma dostęp (np. dyskietka). Do tego służy `mboot` i `bootm`, `mboot` jest pierwszym, opisującym blokiem, a `bootm` jest obrazem MILO zaokrąglonym do 512-bajtowego bloku.

Żeby załadować MILO z urządzenia zawierającego blok startowy, zbuduj `mboot` oraz `bootm` i nagraj je na urządzenie startowe następującą komendą:

> `

>     $ cat mboot bootm > /dev/fd0

> `

Możesz też ściągnąć odpowiedni plik `MILO.dd` i nagrać go używając `RAWRITE.EXE` lub `dd`.

Kiedy już to zrobiłeś, możesz uruchomić konsolę SRM i użyć jednej z jej wielu komend do załadowania MILO. Na przykład, jeżeli chcesz załadować MILO z dyskietki startowej, powinieneś użyć następującej komendy:

> `

>     >>>boot dva0
>     (boot dva0.0.0.0.1 -flags 0)
>     block 0 of dva0.0.0.0.1 is a valid boot block
>     reading 621 blocks from dva0.0.0.0.1
>     bootstrap code read in
>     base = 112000, image_start = 0, image_bytes = 4da00
>     initializing HWRPB at 2000
>     initializing page table at 10400
>     initializing machine state
>     setting afinity to the primary CPU
>     jumping to bootstrap code
>     MILO Stub: V1.1
>     Unzipping MILO into position
>     Allocating memory for unzip
>     ####...

> `

Następujące systemy napewno posiadają konsolę SRM:

- NoName (Sekcja NoName)
- AlphaPC64 (Sekcja AlphaPC64)
- EB164 (Sekcja EB164)
- PC164 (Sekcja PC164)

## 5.6 Informacje o płytach głównych

### AXPPCI33 (NoName)

Płyta NoName może ładować MILO z firmware'u Windows NT ARC (Sekcja ładowanie MILO z Windows NT ARC), z konsoli SRM (Sekcja Ładowanie MILO z konsoli SRM), oraz z dyskietki startowej (Sekcja Ładowanie z dyskietki startowej). Można też, używając programu zarządzającego pamięcią flash, dostarczanego z MILO, możesz po załadowaniu Miniloadera wypalić jego obraz w taką pamięć (Sekcja korzystanie z programu zarządzającego pamięcią flash). Jednakże musisz pamiętać, że kiedy to zrobisz, stracisz poprzedni obraz tam zapisany, ponieważ płyta posiada miejsce tylko na jeden.

Sposób, w jaki NoName uruchamia system jest kontrolowany zestawem zworek na płycie, J29 i J28. Wyglądają one następująco:

> `

>                      4
>            J29   2 x x x 6
>                  1 x x x 5

>            J28   2 x x x 6
>                  1 x x x 5
>                      3

> `

Dwie opcje, które nas interesują, to piny 1-3 zworki J28, które ładują konsolę/ładowacz z pamięci flash, oraz piny 1-3 zworki J29, które uruchamiają konsolę lub ładowacz z dyskietki startowej. Pierwsze załadowanie MILO musi być przeprowadzone przy użyciu drugiej opcji.

Kiedy już wybierzesz ładowanie systemu z dyskietki ustawiając odpowiednią zworkę, włóż dyskietkę startową SRM zawierającą MILO do stacji i zresetuj komputer. Za parę sekund (po zgaśnięciu lampki stacji dysków) ekran powinien zrobić się biały, a MILO będzie mówił ci co się dzieje.

Jeżeli interesują cię tematy techniczne, wiedz, że NoName ładuje obrazy z dyskietki pod fizyczny adres 0x104000, a obrazy z pamięci flash pod adres 0x100000. Z tego powodu PALcode MILO zaaczyna się na 0x200000. Kiedy jest już załadowany, przenosi się w poprawne miejsce (zobacz `relocate.S`).

### AlphaPC64 (Cabriolet)

AlphaPC64 może ładować MILO z firmware'u Windows NT ARC (Sekcja Ładowanie z Windows NT ARC), konsoli SRM (Sekcja Ładowanie MILO z konsoli SRM), oraz z Monitora Ewaluacyjnego (Sekcja Ładowanie z Monitora Płyt Ewaluacyjnych). Wszystkie te funkcję znajdują się w pamieci flash, w której znajduje się jeszcze miejsce na dodanie MILO, w celu ładowania go bezpośrednio. Można użyć programu zarządzania pamięcią flash, uruchamianego z MILO, a więc kiedy jest on uruchomiony, może być wczytany do pamięci nieulotnej (Sekcja używanie programu zarządzania pamięcią flash). System obsługuje zmienne środowiskowe MILO.

Można wybrać opcję ładowania (i MILO, kiedy znajduje się w pamięci flash) za pomocą kombinacji zworek i opcji inicjalizacji, która jest zapisywana w NVRAM zegara TOY.

Zworka służąca do tego celu to J2, bity SP o numerach 6 i 7 mają następujące znaczenie:

- SP 6 powinien być zawsze wyłączony. Jeżeli nie, włączy się mini-debugger SROM,
- Kiedy SP 7 jest włączony, system wybiera opcję inicjalizacji umieszczoną w zegarze TOY,
- Przy wyłączonym SP 7 system ładuje pierwszy obraz z pamięci flash.

A więc, jeżeli SP 7 jest wyłączony, ładowany będzie Monitor Płyt Ewaluacyjnych, ponieważ jest zawsze pierwszą opcją w pamięci flash. Kiedy SP 7 jest włączony, wybrany zostanie obraz z zegara TOY. Zarówno Monitor, firmware Windows NT ARC, jak i MILO obsługują wybór opcji inicjalizacyjnej, ale musisz być bardzo ostrożny używając tej metody. Nie możesz na przykład ustawić opcji inicjalizacyjnej tak, żeby następnym razem system ładował MILO, kiedy używasz Windows NT ARC, ponieważ pozwala on tylko na ustawienie Monitora Ewaluacyjnego lub NT ARC jako opcji ładowania.

W celu zapisania MILO w pamięci flash za pomocą Monitora Płyt Ewaluacyjnych, będziesz potrzebował obrazu przystosowanego do tej metody ładowania. Procedura kompilacji tworzy plik `MILO.rom`, ale równie dobrze możesz stworzyć taki plik jedną z komend Monitora:

> `

>     > makerom -v -i7 -l200000 MILO -o mini.flash

> `

(napisz `makerom`, żeby dowiedzieć się, co znaczą poszczególne argumenty, powiem tylko, że 7 to identyfikator obrazu używany przez SROM, a -l200000 ustawia adres ładowania obrazu na 0x200000).

Załaduj ten obraz do pamięci (komendą `flload`, `netload` itd. (NIE `fl/net boot` tylko load - przyp. tłum.)) pod adres 0x200000 i wypal we flash'u:

> `

>     AlphaPC64> flash 200000 8

> `

(200000 to miejsce w pamięci obrazu, który ma być wypalony, a 8 to segment, w którym umieszczasz obraz. Istnieje 16 1024*64 bajtowych segmentów w pamięci flash, Debug Monitor znajduje się w segmencie pierwszym, a Windows NT ARC w czwartym).

Ustaw numer obrazu, który będzie ładowany przez SROM poprzez zapisanie jego numeru w zegarze TOY.

> `

>     AlphaPC64> bootopt 131

> `

(131 to trzeci obraz, 129 - pierwszy, 130 - drugi itd.)

Wyłącz zasilanie, zewrzyj siódmą zworkę i włącz komputer. Powinieneś zobaczyć MILO budzącego się do życia. Jeżeli nie, wyjmij 7 zworkę i zresetuj Monitor Ewaluacyjny.

### EB66+

EB66+, tak jak wszystkie Płyty Ewaluacyjne Alpha zbudowane przez Digitala, posiada ,,Evaluation Board Debug Monitor'', można więc uruchamiać MILO przez niego (Sekcja Ładowanie z Monitora Ewaluacyjnego). Dosyć często (choć nie zawsze) płyty, które wyeluowały z EB66+, również posiadają Monitor. Zazwyczaj płyty te zawierają Windows NT ARC firmware (Sekcja Ładowanie przez Windows NT ARC). Można też skorzystać z programu zarządzania pamięcią flash, kiedy MILO jest uruchomiony (Sekcja używanie programu zarządzającego pamięcią flash). System ten obsługuje zmienne środowiskowe MILO.

Płyta główna posiada miejsce na kilka obrazów flash, są one kontrolowane zworkami. Dwa banki zworek (J18 i J16) znajdują się na dole płyty, po środku jej szerokości (jeżeli Alpha jest na górze). Możesz wybrać pomiędzy opcjami ładowania (i MILO, jeżeli został zapisany w pamięci flash), używając kombinacji zworek i opcji inicjalizacji zapisanej w NVRAM zegara TOY.

Kiedy zworka 7-8 banku J18 jest włączona, obraz ładowania jest opisany przez opcję inicjalizacyjną. Jeżeli są one wyłączone, załadowany zostanie Monitor Płyt Ewaluacyjnych.

Procedura wypalania obrazu w pamięci flash przez Monitor Ewaluacyjny jest identyczna, jak w przypadku AlphaPC64 (Sekcja AlphaPC64).

### EB64+/Aspen Alpine

System ten jest podobny do AlphaPC64, nie posiada jednak pamięci flash do nagrania MILO. EB64+ posiada dwa ROMy, z których jeden zawiera firmware Windows NT ARC (Sekcja Ładowanie z firmware'u Windows NT ARC), a drugi Monitor Płyt Ewaluacyjnych (Sekcja Ładowanie z Monitora Ewaluacyjnego).

Aspen Alpine posiada tylko jeden ROM - Windows NT ARC.

### Universal Desktop Box (Multia)

Jest to system bardzo kompaktowy, sprzedawany jako cały komputer, oparty na 21066. Posiada on urządzenie graficzne TGA (21030). Chociaż można wepchnąć do niego kartę graficzną PCI o małym rozmiarze, poczekaj lepiej na pełną obsługę TGA w XFree86. Płyta posiada firmware Windows NT ARC, z którego można ładować MILO (Sekcja ( Ładowanie z firmware'u Windows NT ARC).

### EB164

EB164, tak jak wszystkie płyty ewaluacyjne Digitala, posiada Monitor Płyt Ewaluacyjnych, można więc za jego pomocą łatwo ładować MILO (Sekcja Ładowanie z Monitora Ewaluacyjnego). Dosyć często (choć nie zawsze) płyty, które wyeluowały z EB164, także zawierają Monitor. Zazwyczaj, płyty EB164 posiadają firmware Windows NT ARC (Sekcja Ładowanie z firmware'u Windows NT ARC). Dostępna jest też konsola SRM (Sekcja Ładowanie MILO z konsoli SRM). Dzięki programowi do zarządzania pamięcią flash uruchamianemu z MILO, można zapisać jego obraz w pamięci flash (kiedy MILO już działa) (Sekcja Używanie programu zarządzania pamięcią flash). System obsługuje zmienne środowiskowe MILO.

Płyty EB164 posiadają kilka obrazów ładujących, kontrolowanych zworkami. Dwuzworkowy bank nas interesujący to J1, znajduje się on w lewym, dolnym rogu płyty (kiedy Alpha jest na górze). Między opcjami ładowania (oraz MILO, jeżeli został zapisany w pamięci flash) możesz przełączać się używając kombinacji zworek i opcji inicjalizacyjnej, zapisanej w NVRAMie zegara TOY.

Kiedy zworka SP-11 banku J1 jest zwarta, ładowany będzie obraz opisany opcją inicjalizacyjną, a jeżeli jest rozwarta, ładowany będzie Monitor Płyt Ewaluacyjnych.

Wypalanie obrazu w pamięci flash przeprowadza się dokładnie tak, jak w AlphaPC64 (Sekcja AlphaPC64).

### PC164

PC164, jak wszystkie Płyty Ewaluacyjne Alpha Digitala, posiada Monitor Płyt Ewaluacyjnych, jest to więc pierwsza możliwość ładowania MILO (Sekcja Ładowanie z monitora ewaluacyjnego). Dosyć często (choć nie zawsze) płyty, które wyeluowały z PC164, także posiadają Monitor. Zazwyczaj płyty te posiadają firmware Windows NT ARC (Sekcja Ładowanie z Windows NT ARC). Jest też dostępna konsola SRM (Sekcja Ładowanie MILO z konsoli SRM). Można również użyć programu do zarządzania pamięcią flash, uruchamianego z MILO, a więc kiedy Miniloader działa, może być zapisany w pamięci flash (Sekcja używanie programu zarządzającego pamięcią flash). System obsługuje zmienne środowiskowe MILO.

Systemy te posiadają kilka opcji ładowania w pamięci flash, kontrolowanych przez zworki. Główny blok zworek, J30, zawiera zworki konfiguracji systemu, oraz zworkę CF6, która, jeżeli włączona, uruchomi Monitor Ewaluacyjny. Standardowo zworka ta jest wyłączona.

Wypalanie obrazu do pamięci flash za pomocą Monitora Płyt Ewaluacyjnych przeprowadza się identycznie, jak w przypadku AlphaPC64 (Sekcja AlphaPC64).

### XL266

XL266 jest jedną z płyt z rodziny systemów znanych jako Avanti. Posiada oddzielną kartę zawierającą procesor i pamięć cache, dołączaną do płyty pod prawidłowym kątem. Płyta ta może zastąpić swój odpowiednik - płytę do Pentium.

Niektóre z tych systemów posiadają konsolę SRM, a inne, np. właśnie XL266 posiadają jedynie firmware Windows NT ARC (Sekcja Ładowanie z firmware'u Windows NT ARC).

Oto moja lista kompatybilnych systemów:

- AlphaStation 400 (Avanti),
- AlphaStation 250,
- AlphaStation 200 (Mustang),
- XL. Dostępne są dwa rodzaje, XL266 i XL233, jedyna różnica pomiędzy nimi to szybkość procesora i rozmiar cache'u.

Uwaga: System którego używałem do rozwoju MILO, to XL266 i dlatego jest to jedyny system, którego działanie mogę zagwarantować. Jednakże technicznie wszystkie powyższe systemy są odpowiednikami, mają te same chipsety oraz mechanizmy obsługi przerwań.

### Platform2000

Jest to system oparty na 233MHz 21066.

## 6. Interfejs użytkownika MILO

Kiedy poprawnie zainstalowałeś/załadowałeś/uruchomiłeś MILO, zobaczysz znak zachęty MILO> (od MIniLOader, Miniładowacz) wyświetlony na ekranie. Jest to bardzo prosty intefejs użytkownika, którego musisz użyć w celu uruchomienia obrazu jądra Linuxa. Wpisanie ,,`help`'' jest dobrym pomysłem, ponieważ wyświetla przydatny opis komend.

## 6.1 Komenda ,,help''

Jest to chyba najbardziej pożyteczna komenda MILO:

> `

>     MILO> help
>     MILO command summary:

>     ls [-t fs] [dev:[dir]]
>                         - List files in directory on device
>     boot [-t fs] [dev:file] [boot string]
>                         - Boot Linux from the specified device and file
>     run [-t fs] dev:file
>                         - Run the standalone program dev:file
>     show                - Display all known devices and file systems
>     set VAR VALUE       - Set the variable VAR to the specified VALUE
>     unset VAR           - Delete the specified variable
>     reset               - Delete all variables
>     print               - Display current variable settings
>     help [var]          - Print this help text

>     Devices are specified as: fd0, hda1, hda2, sda1...
>     Use the '-t filesystem-name' option if you want to use
>       anything but the default filesystem ('ext2').
>     Use the 'show' command to show known devices and filesystems.
>     Type 'help var' for a list of variables.

>     ------------------------------------------------------------------------------------

>     MILO> help
>     Opis komend MILO:

>     ls [-t fs] [urządzenie:[katalog]]
>                                    - Lista plików w katalogu danego urządzenia
>     boot [-t fs] [urządzenie:plik] [tekst ładowania]
>                                    - Załaduj Linuxa z pliku na danym urządzeniu
>     run [-t fs] [urządzenie:plik]
>                                    - Uruchom oddzielny program z podanej ścieżki
>     show                           - Pokaż wszystkie znane urządzenia i systemy plików
>     set ZMIENNA WARTOSC            - Przypisuje zmiennej ZMIENNA wartosc WARTOSC
>     unset ZMIENNA                  - Kasuje podaną zmienną
>     reset                          - Skasuj wszystkie zmienne
>     print                          - Pokaż obecne ustawienia zmiennych
>     help [var]                     - Wyświetl ten tekst pomocy

>     Urządzenia podaje się jako: fd0, hda1, hda2, sda1...
>     Użyj opcji ,,-t nazwa-systemu-plików'', jeżeli chcesz używać
>       czegoś innego niż standardowy system plików (,,ext2'').
>     Użyj komendy ,,show'', żeby wyświetlić znane urządzenia i systemy plików.
>     Wpisz ,,help var'', żeby uzyskać listę zmiennych.

> `

Uwaga: komenda `bootopt` występuje tylko w systemie AlphaPC64 (i podobnych). Odwołaj się do dokumentacji płyty, żeby dowiedzieć się, co ona znaczy.

Urządzenia. Dopóki nie użyjesz komendy, która musi użyć urządzenia, nie będzie miała miejsca jego inicjalizacja. Pierwsze `show`, `ls`, `boot` lub `run`, zawsze spowodują inicjalizację urządzeń w MILO. Urządzenia są nazywane dokładnie w ten sam sposób, co w Linuxie. A więc, pierwszy dysk IDE będzie nazywać się ,,hda'', a pierwsza partycja ,,hda1''. Użyj komendy ,,`show`'', żeby wyświetlić dostępne urządzenia.

Systemy plików. MILO obsługuje trzy systemy plików - MSDOS, EXT2 i ISO9660. Jeżeli urządzenie jest dostępne w systemie, można wykonać komendy `ls`, `boot` i `run` na obrazie zapisanym na tych systemach plików. Standardowy system MILO to `EXT2`, dlatego będziesz musiał powiedzieć MILO, że obecny jest inny system plików. Wszystkie komendy używające nazw plików pozwalają przekazać do nich typ systemu plików, używając opcji `-t [nazwa systemu plików]`. A więc jeżeli chcesz wyświetlić zawartość CD ROMu SCSI, możesz napisać:

> `

>     MILO> -t iso9660 scd0:

> `

Zmienne. MILO posiada kilka ustawialnych zmiennych, ułatwiających proces ładowanie. Jeżeli ładujesz MILO przez Windows NT ARC, MILO używa zmiennych ustawionych przez to firmware. W niektórych systemach (np. AlphaPC64), MILO tworzy własną listę zmiennych, które nie zmieniają się przy każdym ładowaniu. Są to:

> `

>     MILO> help var
>     Variables that MILO cares about:
>       MEMORY_SIZE      - System memory size in megabytes
>       BOOT_DEV         - Specifies the default boot device
>       BOOT_FILE        - Specifies the default boot file
>       BOOT_STRING      - Specifies the boot string to pass to the kernel
>       SCSIn_HOSTID     - Specifies the host id of the n-th SCSI controller.
>       AUTOBOOT         - If set, MILO attempts to boot on powerup
>                          and enters command loop only on failure.
>       AUTOBOOT_TIMEOUT - Seconds to wait before auto-booting on powerup.

>     ------------------------------------------------------------------------------------

>     MILO> help var
>     Zmienne, na które uważa MILO:
>       MEMORY_SIZE      - Rozmiar pamięci systemu w megabajtach
>       BOOT_DEV         - Definiuje domyślne urządzenie ładowania
>       BOOT_FILE        - Definiuje domyślny plik ładowania
>       BOOT_STRING      - Definiuje tekst przekazywany do jądra podczas startu
>       SCSIn_HOSTID     - Definiuje identyfikator hosta n-tego kontrolera SCSI.
>       AUTOBOOT         - Jeżeli jest ustawiona, MILO próbuje ładować system po włączeniu
>                          zasilania i przechodzi do linii komend tylko w przypadku błedu.
>       AUTOBOOT_TIMEOUT - Ile sekund MILO ma czekać przed autoładowaniem.

> `

## 6.2 Ładowanie Linuxa

Komenda `boot` ładuje jądro Linuxa. Musi się ono znajdować na dysku w formacie EXT2 (SCSI, IDE lub na dyskietce), lub na kompakcie w formacie ISO9660. Obraz może być spakowany gzipem, MILO rozpozna go wtedy po rozszerzeniu `.gz`.

Zauważ, że wersja MILO nie musi odpowiadać wersji jądra, które ładujesz. Linuxa ładuje się następującą komendą:

> `

>     MILO> boot [-t system-plików] urządzenie:nazwa-pliku [[opcja-ładowania] [opcja-ładowania] ...]

> `

Gdzie `urządzenie` jest nazwą pliku urządzenia, którego chcesz używać, a `nazwa-pliku` jest nazwą obrazu jądra Linuxa. Wszystkie argumenty podane po nazwie pliku są przekazywane bezpośrednio do jądra.

Jeżeli instalujesz Red Hat'a, będziesz musiał podać urządzenie / i nie tylko. Powinieneś użyć komendy

> `

>     MILO> boot fd0:vmlinux.gz root=/dev/fd0 load_ramdisk=1

> `

MILO będzie automatycznie zawierał urządzenia wkompilowane w twój vmlinux. Testowałem sterowniki do stacji dysków, IDE i kilka sterowników SCSI (np. NCR 810). Wszystkie działają poprawnie. Ważne jest też poprawne ustawienie identyfikatora hosta SCSI. Domyślnie MILO zainicjalizuje go na najwyższej możliwej wartości (7), co powinno działać poprawnie. Jednakże jeżeli chcesz, możesz i tak ustawić identyfikator hosta n-tego kontrolera SCSI w systemie, ustawiając zmienną środowiskową`SCSIn_HOSTID` na odpowiednią wartość. Na przykład, żeby ustawić hostid pierwszego kontrolera na 7, powinieneś wpisać następujące polecenie w linii poleceń MILO:

> `

>     setenv SCSI0_HOSTID 7

> `

## 6.3 Resetowanie Linuxa

Czasami będziesz chciał przeładować działającego Linuxa komendą `shutdown -r now`. W takim przypadku jądro Linuxa oddaje kontrolę MILO (przez odwołanie CallPAL HALT). Z tego powodu MILO zostawia skompresowaną kopię samego siebie w pamięci i wykrywa że system jest przeładowywany, korzystając z informacji przetrzymywanych w HWRPB (Hardware Restart Parameter Block, Blok Parametrów Restartu Urządzenia). Zaczyna wtedy przeładowanie, używając dokładnie tej samej komendy, która została użyta do ładowania jądra Linuxa ostatnim razem. MILO czeka przez 30 sekund przed ponownym załadowaniem jądra, co pozwala przerwać ten proces i załadować inne jądro, w jakikolwiek sposób.

## 6.4 Komenda ,,bootopt''

W systemach z pamięcią flash, takich jak AlphaPC64, EB164 i EB66+ istnieje kilka opcji ładowania. Są one zmieniane komendą `bootopt`. Posiada ona jeden argument, numer dziesiętny, który jest typem obrazu do załadowania po włączeniu zasilania/przeładowaniu systemu.

0 Ładowanie Monitora Płyt Ewaluacyjnych,
1 Ładowanie firmware'u Windows NT ARC.

W celu ładowania MILO z pamięci flash, potrzebna jest opcja inicjalizacyjna, znacząca ,,załaduj N-ty obraz z pamięci flash''. Jako argument, musisz podać 128 + N, więc jeżeli MILO jest trzecim obrazem, użyjesz komendy

> `

>     MILO> bootopt 131

> `

Uwaga: Bądź bardzo ostrożny z tą komendą. Nigdy nie ustawiaj bootopt na 0 (Monitor Płyt Ewaluacyjnych), zamiast tego użyj zworek na płycie głównej.

## 7. Używanie programu zarządzającego pamięcią flash

Komenda `run` jest używana do uruchamiania programu zarządzającego pamięcią flash (flash management utility, dalej będę nazywał go ,,fmu'' - przyp. tłum.). Zanim zaczniesz, będziesz potrzebował urządzenia dostępnego MILO i zawierającego fmu. Może on być (tak jak vmlinux) spakowany gzipem. Fmu uruchamia się następującą komendą:

> `

>     MILO> fd0:fmu.gz

> `

Kiedy program zostanie załadowany i zainicjalizowany, fmu poda trochę informacji o urządzeniu flash, oraz wyświetli linię poleceń. Znowu, komenda `help` jest bardzo użyteczna.

> `

>     Linux MILO Flash Management Utility V1.0     Linux MILO Flash Management Utility V1.0

>     Flash device is an Intel 28f008SA            Urządzenie flash to Intel 28f008SA
>       16 segments, each of 0x10000 (65536) bytes   16 segmentów, każdy po 0x10000 (65536) bajtów
>     Scanning Flash blocks for usage              Wykrywam zajętość bloków Flash
>     Block 12 contains environment variables      Blok 12 zawiera zmienne środowiskowe
>     FMU>                                         FMU>

> `

Uwaga: W systemach obsługujących zmienne środowiskowe, gdzie istnieje więcej niż jeden blok flash (np. AlphaPC64), fmu będzie szukał bloku na zmienne środowiskowe MILO. Jeżeli taki blok istnieje, fmu powie, gdzie się on znajduje. Jeśli nie, musisz użyć komendy `environment`, żeby ustawić blok i go zainicjalizować. W powyższym przykładzie, blok 12 zawiera zmienne środowiskowe MILO.

## 7.1 Komenda ,,help''

> `

>     FMU> help
>     FMU command summary:

>     list                - List the contents of flash
>     program             - Program an image into flash
>     quit                - Quit
>     environment         - Set which block should contain the environment variables
>     bootopt num         - Select firmware type to use on next power up
>     help                - Print this help text
>     FMU>

>     ------------------------------------------------------------------------------------

>     FMU> help
>     Opis komend FMU:

>     list                - Wyświetl zawartość pamięci flash
>     program             - Zapisz obraz w pamięci flash
>     quit                - Zakończ program
>     environment         - Ustaw blok, który powinien zawierać zmienne środowiskowe
>     bootopt numer       - Wybierz typ firmware'u do użycia przy następnym uruchomieniu
>     help                - Wyświetl ten tekst pomocy
>     FMU>

> `

Uwaga: Komendy `environment` i `bootopt` są dostępne tylko w płytach EB66+, AlphaPC64, EB164 i PC164 (i ich klonach).

## 7.2 Komenda ,,list''

Komenda ,,list'' pokazuje zawartość pamięci flash. Jeżeli istnieje więcej niż jeden blok, pokazana jest zawartość każdego. W poniższym przykładzie możesz zobaczyć, że Windows NT ARC używa blok 4-7 i blok 15.

> `

>     FMU> list
>     Flash block:   0:DBM  1:DBM  2:DBM  3:WNT  4:WNT  5:WNT  6:WNT  7:WNT  8:MILO
>             9:MILO 10:MILO 11:MILO 12:MILO 13:U 14:U 15:WNT
>     Listing flash Images
>       Flash image starting at block 0:
>         Firmware Id:  0 (Alpha Evaluation Board Debug Monitor)
>         Image size is 191248 bytes (3 blocks)
>         Executing at 0x300000
>       Flash image starting at block 3:
>         Firmware Id:  1 (Windows NT ARC)
>         Image size is 277664 bytes (5 blocks)
>         Executing at 0x300000
>       Flash image starting at block 8:
>         Firmware Id:  7 (MILO/Linux)
>         Image size is 217896 bytes (4 blocks)
>         Executing at 0x200000
>     FMU>

>     ------------------------------------------------------------------------------------

>     FMU> list
>     Bloki Flash:   0:DBM  1:DBM  2:DBM  3:WNT  4:WNT  5:WNT  6:WNT  7:WNT  8:MILO
>             9:MILO 10:MILO 11:MILO 12:MILO 13:U 14:U 15:WNT
>     Wyświetlam Obrazy Flash
>       Obraz Flash (początek - blok 0)
>         Firmware Id:  0 (Alpha Evaluation Board Debug Monitor)
>         Rozmiar obrazu: 191248 bajtów (3 bloki)
>         Wykonuje się na 0x300000
>       Obraz Flash (początek - blok 3)
>         Firmware Id:  1 (Windows NT ARC)
>         Rozmiar obrazu: 277664 bajtów (5 bloków)
>         Wykonuje się na 0x300000
>       Obraz Flash (początek - blok 8)
>         Firmware Id:  7 (MILO/Linux)
>         Rozmiar obrazu: 217896 bajtów (4 bloki)
>         Wykonuje się na 0x200000
>     FMU>

> `

## 7.3 Komenda ,,program''

Fmu zawiera skompresowaną kopię obrazu flash MILO. Komenda ,,program'' pozwala zapisać ten obraz w pamięci flash. Komenda ta pozwoli ci wycofać się, ale zanim ją uruchomisz, powinieneś użyć komendy ,,list'', żeby zobaczyć gdzie nagrać MILO. Jeżeli MILO znajduje się już w pamięci flash, fmu zapyta się, czy go skasować.

> `

>     FMU> program
>     Image is:
>         Firmware Id:  7 (MILO/Linux)
>         Image size is 217896 bytes (4 blocks)
>         Executing at 0x200000
>     Found existing image at block 8
>     Overwrite existing image? (N/y)? y
>     Do you really want to do this (y/N)? y
>     Deleting blocks ready to program: 8 9 10 11
>     Programming image into flash
>     Scanning Flash blocks for usage
>     FMU>

>     ------------------------------------------------------------------------------------

>     FMU> program
>     Obraz:
>         Firmware Id:  7 (MILO/Linux)
>         Rozmiar obrazu: 217896 bajtów (4 bloki)
>         Wykonuje się na 0x200000
>     Znaleziono istniejący obraz w bloku 8
>     Nadpisać istniejący obraz? (N/y)? y
>     Czy napewno chcesz to zrobić? (y/N)? y
>     Kasowanie bloków do programowania: 8 9 10 11
>     Programowanie obrazu do pamięci flash
>     Szukanie zajętych bloków Flash
>     FMU>

> `

Poczekaj, aż proces zostanie zakończony przed wyłączeniem systemu.

Uwaga: Nie mogę wyrazić dostatecznie mocno, jak musisz być ostrożny, żeby nie nadpisać istniejącego obrazu flash, który może być ci potrzebny, lub nie zniszczyć swojej płyty głównej. Dobrą zasadą jest niekasowanie Monitora Ewaluacyjnego. (!!! - przyp. tłum.)

## 7.4 Komenda ,,environment''

Wybiera blok flash mający zawierać zmienne środowiskowe MILO.

## 7.5 Komenda ,,bootopt''

Jest to ta sama komenda, co istniejąca w MILO, zobacz sekcję ( Komenda ,,bootopt'').

## 7.6 Komenda ,,quit''

Jest to raczej bez znaczenia. Jedyna droga powrotna do MILO (lub czegokolwiek innego), kiedy fmu działa, to restart systemu.

## 8. Ograniczenia

Niestety, świat nie jest doskonały, jest więc jak zawsze parę ograniczeń, o których powinieneś wiedzieć.

MILO nie jest przeznaczony do ładowania systemów operacyjnych innych niż Linux, jednakże może ładować obrazy łączone do działania w tym samym miejscu pamięci co Linux (czyli 0xFFFFFC0000310000). W ten sposób może działać fmu.

Źródła kodu PAL załączone w `miniboot/palcode/cośtam` są poprawne, jednakże są problemy, kiedy zostają zbudowane przy użyciu najnowszego `gas` (assembler GNU - przyp. tłum.). Można kompilować je, używając bardzo starego gas'a załączonego w oprogramowanu do Płyt Ewaluacyjnych Alpha (i w ten sposób zostały zbudowane). Próbuję namówić kogoś, żeby naprawił nowy gas. Obecnie jednak, jako obejście, umieściłem pre-kompilowany kod PAL dla obsługiwanych płyt, a David Mosberger-Tang umieścił naprawiony gas na swoim serwerze ftp.

## 9. Rozwiązywanie problemów

Oto kilka często spotykanych problemów razem z rozwiązaniami.

Czytanie dyskietek MS-DOS z Monitora Płyt Ewaluacyjnych.

Niektóre starsze wersje Monitora Płyt Ewaluacyjnych (przed 2.0) miały problemy z odczytywaniem dyskietek w formacie DOS zapisanych pod Linuxem. Zazwyczaj Monitor może wczytać kilka pierwszych sektorów, ale po chwili wchodzi w nieskończoną pętlę błędów o złych sektorach. Istnieje też pewna niekompatybilność między formatem DOS oczekiwanym przez Monitor Ewaluacyjny, a Linuxową implementacją DOSFS. Żeby skrócić tą długą historię: jeżeli napotkasz ten problem, spróbuj użyć DOS'a do zapisania dyskietki. Na przykład jeżeli nie ładuje się plik `MILO.cab`, użyj komputera z DOSem - włóż dyskietkę i napisz:

> `

>     copy a:MILO.cab c:
>     copy c:MILO.cab a:
>     del c:MILO.cab

> `

Spróbuj ponownie wystartować MILO z tej dyskietki. Powinno to rozwiązać problem.

MILO wyświetla długą sekwencję znaków ,,o>'' i nie przyjmuje poleceń.

Dzieje się to zazwyczaj kiedy MILO został skompilowany z portem COM1 jako drugorzędnym urządzeniem konsoli. W takim przypadku, MILO kopiuje wyjście na port COM1 i akceptuje wejście również z tego portu. Jest to świetne do wykrywania błędów, ale nie tak świetne jeżeli masz podłączone coś innego niż terminal. Jeżeli to się dzieje, odłącz lub wyłącz to urządzenie, do chwili uruchomienia jądra Linuxa. Kiedy Linux działa, wszystko będzie działało tak jak powinno.

MILO skarży się na zły numer magiczny obrazu jądra

Starsze wersje MILO nie obsługiwały formatu binarnego ELF, nie mogły więc rozpoznać obrazu ELF. Jeżeli napotkasz ten problem, ściągnij najnowszą wersję MILO. Wszystkie wersje po 2.0.20 obsługują ELF. Z drugiej strony, może to być wina zniszczonego obrazu. Powinieneś też pamiętać, że MILO sam nie rozpoznaje jeszcze obrazów skompresowanych GZIP'em - musisz dodać rozszerzenie ,,`.gz`'' do nazwy pliku.

MILO wyświetla ,,...turning on virtual addressing and jumping to the Linux Kernel'' i nic się nie dzieje

Oczywisty problem, to to, że jądro jest źle skompilowane, albo skompilowane na inny system Alpha. Inny to kompilacja jądra na urządzenie VGA, kiedy płyta posiada TGA (Zlxp) (lub odwrotnie). Dobrze jest wbudować w jądro wyjście na COM1 i podłączyć terminal, lub spróbować użyć jądro z dystrybucji Linuxa, którą zainstalowałeś.

MILO nie rozpoznaje dysku SCSI

Standardowe obrazy MILO posiadają wszystkie stabilne (dla Alphy) sterowniki urządzeń (na razie są to NCR 810, QLOGIC ISP, Buslogic i Adaptec 2940/3940) (uwaga - jest to stare HOWTO, a więc dużo się zmieniło - przyp. tłum.). Jeżeli twoja karta nie jest dołączona, może to znaczyć, że sterownik dla Alphy nie jest jeszcze stabilny. Spróbuj użyć najnowszych obrazów MILO. Możesz dowiedzieć się, jakie urządzenia SCSI zostały wkompilowane w obraz MILO, używając komendy ,,show''.

## 10. Podziękowania

Chciałbym podziękować:

- Eric'owi Rasmussen'owi i Eillen Samberg - autorom PALcode,
- Jim'owi Paradis'owi za sterownik klawiatury i oryginalny interfejs MILO,
- Jay'owi Estabrook'owi za jego pomoc i poprawki,
- David'owi Mosberger-Tang'owi za darmowy kod emulacji BIOS'u i jego pomoc,
- i jako ostatniemu (ale nie najmniej ważnemu) Linus'owi Torvalds'owi za kod zegara i jądro Linuxa.

Jest jeszcze kilka rzeczy, które powinny być zrobione, więc jeżeli chcesz coś dodać, daj mi znać ( david.rusling@reo.mts.dec.com), żebyśmy nie duplikowali swoich wysiłków.

Na końcu, duże ,,dziękuję'' dla Digitala, za produkowanie tak świetnego procesora (i płacenie mi za to).

## 11. Od tłumacza

Jeżeli znajdziesz jakieś błędy, daj mi znać.