OpenBoot Prompt

Snad každý, kdo pracuje s počítači, se setkal s pojmem BIOS. Počítače s procesory SPARC jsou trochu jiné než ty, které má většina lidí doma pod stolem. Pracuji s počítači od firmy SUN (procesory SPARC), kde se místo BIOSu používá OpenBoot. Na počítačích od firmy SUN je běžné, že je kompletně spravujete přes seriovou linku. Jakmile umístíte server do serverovny, vlastní hardware vás nezájímá, protože jste plně schopní pomocí znalosti OpenBoot a komunikace po seriové lince nainstalovat Solaris (Solaris instalujete třeba ze sítě (Ethernet), přes seriovou konzoli to ovládáte :-).

OBP je narozdíl od BIOSu plně konfigurovatelné a programovatelné prostředí, ne jen statické menu, které dovolí změnu nějakehého nastavení. OpenBoot provádí základní otestování a inicializaci hardware po zapnutí počítače, umožňuje natažení jádra z disku, cdrom nebo také ze sítě. Při každém startu počítače generuje OpenBoot nový device-tree ze kterého potom systém vychází při tvorbě adresářů /device a /dev.

Rozhraní OpenBoot se k uživateli chová podobně jako velmi jednoduchý shell a nazývá se OpenBoot Prompt (OBP, někdy také OK prompt).

OpenBoot je otevřený standard definován IEEE (IEEE Standard 1275-1994 for Boot Firmware).

OBP má na základní desce počítače přidělené dva integrované obvody:

  • Boot PROM – 1MiB paměť obsahující interpreter kódu, POST (Power-on Self-Test), obecné ovladače zařízení, CLI (Commands Line Interface), výchozí parametry, diagnotické příkazy.
  • NVRAM – EEPROM, která má vlastní napájení (nese si na zádech baťůžek s baterkou :-), uchovává informaci o Serial number, HostID, MAC adrese síťové karty a heslo pro zabezpečený režim, také se do ní ukládá proměnná nvramrc

OBP je napsaný v jazyku Forth. Forth je jazyk interpretovaný, pouze nejnutnější příkazy jsou implementovány pomocí assembleru. OBP používá 2 zásobníky, jeden pro návratové adresy podprogramu a druhý pro data. Pokud chcete přistupovat do konfigurace OBP z operačního systému pomocí vlastního programu, můžete použít připravené rozhraní openprom (man openprom).

Verze PROM Platforma
1.x (SPARC boot PROM) SPARCstation 1, SPARCstation 1+, SPARCstation IPC a SPARCstation SLC
2.x (První OBP) SPARCstation 2, SPARCstation 5, SPARCstation 10 a SPARCstation 20
3.x (OBP s možností upgrade) Ultra™ worksations (Ultra 5, Ultra 10, Ultra 30, Ultra 60, Ultra 80) a Sun Enterprise™ servery (Enterprise 250, Enterprise 450 a Enterprise 3×00-6×00)
4.x (Rozšířené možnosti ladění) Sun Fire™ a Sun Blade

Pohyb kurzoru v OBP je možný pomocí kurzorových kláves případně pomocí kombinace CTRL-Písmeno:

  • ^P – nahoru
  • ^N – dolů
  • ^F – vlevo
  • ^B – vpravo

Základní příkazy OBP

  • .version – vytiskne verzi OBP
  • .speed – vytiskne frekvenci systému
  • banner – příkaz vypíše základní identifikaci systému (Verzi OBP, platformu, ID, MAC adresu)
    ok banner
          Netra T1 200 (UltraSPARC-IIe 500MHz), No Keyboard
          OpenBoot 4.0, 256 MB memory installed, Serial #40120220.
          Ethernet address 0:3:ba:d:cc:dc, Host ID: 8c0cecdc.
    
  • boot, go – start UNIXU
  • devalias – definice aliasu na zařízení, aktivní pouze do prvního vypnutí
  • nvalias – vytvoří alias na zařízení a zapíše konfiguraci do nvramrc = alias je aktivní i po restartu počítače, protože je uložen v NVRAM
  • nvedit – řádkový editor nvramrc, ^C ukončuje editaci, po ukončení editace je potřeba ukončit editor.
  • nvquit – ukončí nvedit bez uložení
  • nvstore – uloží konfiguraci zadanou pomocí nvedit do nvramrc
  • nvunalias – smaže nastavení z nvramrc, ale nezruší vlastní alias
  • power-off – vypnutí počítače
  • printenv – výpis všech proměnných v prostředí
  • probe-ide – vypíše všechny IDE potvůrky…
  • probe-scsi – vypíše interní SCSI zařízení
  • probe-scsi-all – vypíše všechny (i externí) SCSI zařízení
  • propetiers – výpis vlastností v device tree
  • reset, reset-all – restart počítače z OBP
  • see – výpis výkladu slova(z jakých dalších slov se skládá, případně přímo kód v assembleru).
    Příklad výkladu setenv:

    ok see setenv
    : setenv
       parse-word -1 parse (f0017038) ?dup 0= if
          3drop (f0031218) exit
       then  2swap 2 pick over or 0= if
          2drop 2drop (f0031218) exit
       then  $setenv
    ;
    
  • set-default promenna – nastaví výchozí hodnotu pro danou proměnnou
  • set-defaults – nastavení výchozího nastavení
  • setenv – nastavení proměnné
    ok setenv
    Usage: setenv option-name value
    ok setenv boot-device disk
    boot-device =         disk
  • show-devs – vypíše device tree
    ok show-devs
        /SUNW,UltraSPARC-IIe@0,0
        /pci@1f,0
        /virtual-memory
        /memory@0,0
        /aliases
        /options
        /openprom
        /chosen
        /packages
        /pci@1f,0/pci@1
        /pci@1f,0/pci@1,1
        /pci@1f,0/pci@1/scsi@8,1
        /pci@1f,0/pci@1/scsi@8
        /pci@1f,0/pci@1/scsi@8,1/tape
        /pci@1f,0/pci@1/scsi@8,1/disk
        /pci@1f,0/pci@1/scsi@8/tape
        /pci@1f,0/pci@1/scsi@8/disk
        /pci@1f,0/pci@1,1/usb@5,3
        /pci@1f,0/pci@1,1/network@5,1
        /pci@1f,0/pci@1,1/ide@d
        /pci@1f,0/pci@1,1/usb@c,3
        /pci@1f,0/pci@1,1/network@c,1
        ...
    
  • show-disks – ukáže adresy v device tree k diskovým zařízením, volbou jednoho z nich se zkopíruje do „schránky“
        /pci@1f,0/pci@1,1/ide@3/dad@0,0[:f]
          \_________________/       | |  |
                   |                | |  |
                   |                | |  |
                   |                | |  +- slice
                   |                | +---- LUN nebo číslo disku
                   |                +------ ID
                   +------------------------Sběrnice a řadič
    
  • show-post-results – výpis výsledků POSTu
  • sifting – vyhledá všechna slova(words) obsahující daný výraz
  • sync – zavolá jádro a provede sync (vyprázdní cache na disk), použitelné po stisku zkratky STOP-A
  • test floppy – test disketové mechaniky
  • test net – test síťového rozhraní
  • test scsi – test scsi rozhraní
  • test-all – test všech zařízení s vlastní testovací rutinou
  • watch-clock – ukazuje tikaní vteřin 🙂
  • watch-net – sledování stavu sítě
  • words – výpis všech nadefinovaných slov v prostředí OBP

Některé zajímavé proměnné OBP

  • auto-boot? – automatický boot do UNIXu ze zařízení definovaném v boot-device po startu počítače
  • boot-device – obsahuje seznam zařízení, z kterých se zkouší boot (cdrom disk net). Můžete vložit i vlastní alias na zařízení, používá se například pro boot ze soft. RAIDu.
  • boot-file – soubor s jádrem.
  • diag-device – seznam zařízení, z kterých se bootuje v diagnostickém režimu
  • scsi-initiator-id – ID pro SCSI řadiče, mění se například při propojování dvou počítačů prez SCSI. (výchozí pro řadič je 7, takže druhému počítači můžu nastavit třeba id=6)
  • local-mac-address – Určuje jestli se použijí MAC adresy z karty (TRUE) nebo jestli se použije jedna předdefinovaná adresa pro všechny síťové karty v systému (předdefinovaná adresa je uložena v NVRAM, zjistíme ji například příkazem banner).
  • use-nvramrc? – Když nastavíme na hodnotu TRUE tak se při startu použijí příkazy zapsané do proměnné nvramrc
  • pci-probe-list – pořadí testu PCI zběrnice, pokud prohodíme čísla tak změníme ID zařízení v systému => potřebné pokud máme nastavení například SW RAIDu na jednom počítači nějaké a pak to přestěhujeme na jiný počítač. Pokud nějaké číslo sběrnice vynecháme, sběrnice se vůbec neinicializuje a operační systém ji prostě nevidí.
  • sbus-probe-list – to samé jako pro PCI, ale pro sběrnici SBUS
  • oem-banner – Řetězec, kterej se objeví po zadání příkazu banner.
  • oem-logo – Obrázek, který se zobrazí jako logo. Potřebuje rastrovou mapu velikosti 66×64 pixelů.
  • security-mode – nastavení úrovně zabezpěčení OBP. Pokud chcete zabezpečený režim použít, NEJDŘÍVE SI NASTAVTE HESLO a pak zapněte zabezpečený režim. Možné jsou tyto hodnoty:
  • none – bez ochrany
  • command – bez zadání hesla umožňuje pouze příkazy go a boot bez parametrů
  • full – bez hesla ani nenabootuje
  • security-password – nastavení hesla pro security-mode – z OBP příkazem password, z UNIXu pomocí eeprom security-password, standardně je prázdné. Heslo se nedá systémově nijak vymazat, dokonce ani pomoci příkazu set-defaults, jedný způsob jak se zbavit hesla je smazat ho z NVRAM a to se dá udělat asi jen odpojením napájení té paměti nebo se musí koupit nová NVRAM.
  • diag-switch? – pokud povolíme, bootuje z diag-device(default je NET), logy z POSTu jsou vidět jen na seriové konzoli.
  • diag-level – úroveň diagnostického režimu
  • Klávesové zkratky důležité pro OBP

    Při bootu počítače nebo obecně při problémech se systémem je někdy potřeba skočit do OK promptu (OBP) -> zaslat signál break. Toho se docílí stiskem kláves STOP-A pokud jste u terminálu nebo přímo u grafické konzole daného počítače. V případě, že jste připojení z jiného počítače se solarisem přez program tip, tak STOP-A nemůžete použít, protože si shodíte systém u kterého sedíte, proto je dobré použít ~#. Když se připojujete na server pomocí SSH a pak až na další počítač přes tip, musíte pro poslání signálu break napsat ~~#, protože tu první vlnovku zpracuje SSH a zbytek předá dál. V Solarisu lze zkratku STOP-A zakázat v souboru /etc/default/kbd.

    OBP můžeme při bootu zaslat další signály, které nám pomůžou řešit některé problémy.

    • STOP-D – diagnostický režim startu
    • STOP-N – nastavení výchozích hodnot proměnných OBP. Na počítačích s USB klávesnicí se místo toho musí použít tento fígl: Po tom co pípne stroj při bootu uděláme „dvojklik“ na vypínacím tlačítku (tohle uplatníme třeba na počítačích řady Blade).

    Boot počítače

    Pokud je v OBP nastavená proměnná auto-boot? na true, nastartuje po zapnutí operační systém a v této kapitole by nebylo co řešit. V případě, že počítač instalujete/přenastavujete je dobré vypnout autoboot (setenv auto-boot? false) a bootovat ručně.

    Vlastní boot se provádí příkazem boot, příkaz má následující parametry:

    • -s – boot do single režimu, pokud nabootujete z CD-ROM, nebude vyžadovat heslo.
    • -a – umožní zadávat různé parametry během bootu, vhodné například při řešení problémů s poškozeným souborem /etc/system
    • -r – rekonfigurační boot

    Postup startu počítače po zapnutí:

             Zapnutí počítače
             ----------------
                    |
             +--------------+
             | diag-switch? |-----true----+
             +--------------+             |
                    |                +--------+
                    |                |  POST  |
                  false              +--------+
                    |                     |
                    |---------------------+
                    |
             +-------------+           +------------+
             |  auto-boot? |---false---|  ok prompt |
             +-------------+           +------------+
                    |
                  true
                    |
    +----------------------------------------+
    |                boot device   boot-file |
    | boot-command +             +           |
    |                diag-device   diag-file |
    +----------------------------------------+
                    |
         Start operačního systému