Pokud vím, kód BIOS / bitstream, který je uložen v ROM, by měl být obecný (pracovat společně s více typy CPU nebo ISA). Kromě toho jsem na webu viděl, že je možné vypsat jeho kód (a „rozebrat jej“).
Takže v jakém jazyce, instrukční sadě nebo strojovém kódu je napsán? Nepotřebuje k provádění svých operací žádný druh procesoru? Pokud ano, myslím, že bude používat externí CPU, jak potom pozná konkrétní instrukční sadu toho použitého?
Možná to má interní procesor?
Komentáře
Odpověď
BIOSy se dříve psaly výhradně v jazyce assembleru, ale přechod byl proveden před dlouhou dobou, aby se většina kódu napsala v nějakém jazyce vyšší úrovně a ponechal se napsaný v sestavě co nejméně jeho částí, nejlépe pouze bootstrapper (prvních pár stovek instrukcí, které CPU přeskočí až po spuštění / resetu) a jakékoli rutiny, které se zabývají konkrétními zvláštnostmi základní architektury.
BIOSy se již psaly primárně v jazyce C již na počátku devadesátých let. (Na začátku devadesátých let jsem napsal BIOS v 90% C, 10% sestava.)
V tomto směru také velmi pomohlo:
-
C knihovny, které cílí na konkrétní architekturu a zahrnují funkce pro řešení zvláštností této architektury, například funkce pro čtení / zápis bajtů na / z I / O portů architektury x86. Microsoft C vždy nabízel knihovnické funkce pro tento druh věcí.
-
C kompilátory, které nejenže cílí na konkrétní architekturu CPU, ale dokonce nabízejí rozšíření do jazyka C, které můžete použít v za účelem zápisu kódu, který využívá speciální funkce CPU. Například architektura x86 podporuje věci známé jako přerušení, které vyvolávají rutiny známé jako obsluhy přerušení, a vyžaduje, aby měly speciální sekvence instrukcí vstupu / výstupu. Od samého počátku Microsoft C podporoval speciální klíčová slova, která jste mohli použít k označení funkce jako obsluhy přerušení, takže ji bylo možné vyvolat přímo přerušením CPU, takže jste pro ni nemuseli psát žádné sestavení.
V dnešní době bych předpokládal, že většina systému BIOS je napsána v C ++, pokud ne v jakémkoli vyšším jazyce.
Převážná většina kódu, který tvoří BIOS je specifický pro základní hardware, takže nemusí být přenosný: je zaručeno, že bude vždy fungovat na stejném typu CPU. CPU se může vyvíjet, ale pokud si zachovává zpětnou kompatibilitu s předchozími verzemi, může stále provozovat BIOS beze změny. Navíc můžete kdykoli překompilovat části systému BIOS napsané v jazyce C, aby se mohly nativně spustit na jakémkoli novém CPU, který se objeví, pokud to bude potřeba.
Důvod, proč BIOSy píšeme v jazycích vyšší úrovně než Sestavení je proto, že je snazší je psát tímto způsobem, ne proto, že by opravdu měly být přenosné.
Komentáře
- Ano. Někdy dokonce můžete mít základní desku vázanou nejen na konkrétní architekturu CPU, ale dokonce i na konkrétního dodavatele CPU. V dnešní době si můžete koupit základní desku x86, která je kompatibilní pouze s procesory Intel x86, nebo základní desku x86, která je kompatibilní pouze s procesory AMD x86. Systém BIOS v těchto základních deskách bude do značné míry identický, protože v obou případech CPU rozumí instrukční sadě x86 a většina periferií je identická, ale některé periferie mají rozdíly, které musí systém BIOS zohledňovat.
- @Reflection se podrobně podívá na to, jak fyzicky vypadá základní deska. Patice CPU bude mít určité uspořádání pinů, které je specifické pro rodinu CPU, které přijímá.Fyzicky se nemůžete připojit, řekněme Intel P4 k základní desce AMD Opteron
- Termín “ BIOS “ označuje “ Základní vstupní / výstupní systém “ počítače, takže systém BIOS znamená procesor x86. Systémy IA64 mají místo BIOSu EFI, systémy PowerPC mohou mít systém Open Firmware nebo proprietární systém, systémy Sparc také OFW (nebo spíše OpenBoot), OLPC X0 je systém založený na x86, který používá OFW. Ani počítače již ‚ nepoužívají BIOS, přešly na (U) EFI. OB / OFW je zajímavý, protože je navržen tak, aby byl nejen přenosný, ale napříč platformami. Ovladače OFW budou fungovat na libovolném systému OFW, jsou to “ Write Once Run Anywhere “ bez ohledu na CPU ISA.
- “ V dnešní době bych předpokládal, že většina systému BIOS je napsána v jazyce C ++ “ Nechci ‚ t nutně předpokládat, že to může být pravda, ale já pracuji v tomto odvětví a určitě mnoho zavaděčů je napsáno v prostém C. Lidé, kteří píší takové věci, jsou často “ Old Guard “ a stále nedůvěřuje C ++ stále.
- @TomDworzanski: Technicky sice není BIOS (což se týká výhradně ke starému PC z roku 1981), mnoho implementací IEEE-1275 Open Firmware (který se používá pro podobnou roli jako BIOS na Sparcu, PowerPC Common Hardware Reference Platform (např. PowerMac, PowerBook), 100 $ laptop OLPC X0 -1) jsou psány částečně v jiných jazycích než assembler / C. OpenBoot , Otevřít firmware , OpenBIOS všechny obsahují…
odpověď
I když teoreticky lze BIOS psát v jakémkoli jazyce, moderní realita je většina systému BIOS je napsána pomocí Assembly, C nebo kombinací obou .
Systém BIOS musí být napsán v jazyce, který lze zkompilovat do strojového kódu , kterému rozumí fyzický hardware-stroj. To vylučuje přímo nebo středně interpretované jazyky (Perl, Python, PHP, Ruby, Java, C #, JavaScript atd.), Které jsou vhodné pro psaní systému BIOS. (Ačkoli by teoreticky bylo možné implementovat jeden z těchto jazyků buď přímo zkompilovat do statického strojového kódu, nebo by bylo možné nějakým způsobem vložit tlumočníka do systému BIOS. Existuje například opustit projekt GCJ pro Javu.)
Většina výrobců OEM implementuje systém BIOS rozšířením vlastních generických implementací systému BIOS o společnosti jako American Megatrends a Phoenix Techologies . (Pravděpodobně jste již dříve viděli jednu z těchto společností na první spouštěcí obrazovce počítače.) Zdrojový kód pro tyto implementace není veřejně dostupný, ale některé z nich byly prozrazeny. Nechci na to přímo odkazovat ke zdrojovému kódu C a sestavení, ale na internetu existují místa, kde je tento zdrojový kód diskutován pro ty, kteří se chtějí podívat.
Někteří výrobci hardwaru, například ti, kteří se zaměřují na trhy s vysokým výkonem a hrami, nasazují své implementace systému BIOS funkcemi přizpůsobení, statistikami a atraktivními uživatelskými rozhraními navrženými pro jejich přesné implementace. Mnoho z těchto funkcí jde nad rámec toho, co nabízí generické produkty vyrobené od společnosti American Megatrends a dalších. Bohužel tyto společnosti často vidí vydání svého zdrojového kódu jako bezpečnostní riziko , takže o těchto špičkových implementacích je známo jen málo, protože málo se o nich sdílí. Jeden cou Samozřejmě najdu způsoby, jak přistupovat a dekompilovat takovéto implementace systému BIOS, ale může to být obtížné a možná i nelegální.
Vracíme se k původní otázce, protože je potřeba vytvořit nativní strojový kód, systém BIOS by muselo být implementováno v programovacím jazyce podporovaném překladačem nativního strojového kódu . I když existuje mnoho takových jazyků, a přestože jsem si jistý, že během posledních několika desetiletí bylo při experimentování použito několik jazyků, každá otevřená implementace systému BIOS, kterou jsem byl schopen najít, se konkrétně opírá o kombinaci C a / nebo sestavení. – zdrojové implementace systému BIOS, na které jsem se při vytváření tohoto závěru podíval, zahrnují OpenBIOS , tinyBIOS , coreboot , Intel BIOS a Libreboot . Podíval jsem se také na několik velmi starých implementací systému BIOS, které dnes nejsou relevantní, ale také jsem dodržoval pravidlo C a / nebo sestavení.
Myslím, že je také důležité podívat se na jiný software vytvořený pro přímo komunikovat s hardwarem.Víme například, že linuxové jádro , jádro OS X a Windows kernel jsou většinou C s nějakou sestavou a některými jazyky vyšší úrovně pro konkrétní úkoly. Víme také, že hardwarové ovladače pro Linux a hardwarové ovladače pro Windows jsou napsány převážně v jazyce C .
Vracíme se k BIOSu, myslím, že je také důležité vzít v úvahu ekonomiku zvoleného programovacího jazyka. BIOS je obecně psán jako nutnost doplňující prodej hardwaru. O moderních systémech BIOS je známo, že jsou do značné míry napsáno v C a / nebo sestavě. Přechod na nějaký jiný nástroj by přidal značné náklady na to, co se obecně považuje za komoditní produkty, což by mohlo velmi nepříznivě ovlivnit prodej. Aniž bych se dostal k ekonomii 101, mohu vás ujistit, že to pravděpodobně není stojí za to, aby se OEM odchýlil od osvědčených nástrojů, které byly ověřeny po celá desetiletí.
Samozřejmě existují a budou i fandové projekty, které budou psát i BIOS. Také se zatím zdá, že vybírají C a / nebo montáž. Možná jednoho dne budou použity jiné technologie. Ale dnes je výběr dobře definovaný.
Komentáře
- Je to trochu nit-picking, ale C # a Java nejsou interpretovány . Sestavují se do bajtového kódu. Jedná se o bajtový kód, který pak zpracovává tlumočník. Nezmění to ‚ logiku prvního odstavce.
- @Tonny To je ‚ správné. Přidal jsem “ přímo nebo zprostředkovaně interpretovaný „, abych byl trochu jasnější.
- @Tonny normálně a jitter spíše než tlumočník, což je důležitý rozdíl, protože ‚ je možné vše předem naladit na nativní, pokud určité dynamické techniky nejsou ‚ nepoužívá se. Jako takový by bylo teoreticky možné napsat BIOS v jazycích .NET nebo Java, pokud by to udělal oba a zajistil, aby byla k dispozici veškerá potřebná podpora běhu. Představuji si, že by to bylo snaha více než trpasličí.
- @Tonny Vlastně C # se kompiluje do nativního kódu msdn.microsoft.com/en -us / vstudio / dotnetnative.aspx , takže je ‚ divné vidět to v seznamu slabých / dynamických jazyků.
- @ Den C # není obvykle kompilován do nativního kódu. Tento produkt .Net Native, na který odkazujete, ještě nebyl oficiálně vydán. Z toho, co jsem ‚ přečetl, bude zkompilován kód aplikace a požadovaný kód rámce do spustitelného souboru. Podle nejčastějších dotazů to bude původně zaměřeno na aplikace Windows Store, takže může nějakou dobu trvat, než bude tato podpora podporována širší. Všechno, co bylo řečeno, se zdá, že Microsoft se může v budoucnu od modelu virtuálních strojů vzdálit, pokud vše půjde dobře.
Odpovědět
Skutečný BIOS pro počítač by byl napsán v nějakém jazyce (pravděpodobně C nebo assembleru), který je kompilován do binárního kódu závislého na architektuře; tento kód nemůže běžet na žádné jiné architektuře (a pravděpodobně ani nepotřebuje, protože je již velmi specifický pro stroj, se kterým je dodáván).
Myslíte však možná na Volitelné ROM (které se někdy nazývají BIOSy, jako například „Video BIOS“ pro volitelnou ROM s GPU)?
Pro skutečné, starší BIOS kompatibilní volitelné ROM, pravděpodobně by to byl spustitelný kód závislý na ISA (opět generovaný jakýmkoli jazykem, který lze zkompilovat tak, aby cílil na požadovanou architekturu); PCI také umožňuje včetně kódu pro více ISA a umožňuje hostiteli vybrat vhodný binární obraz během bootovacího procesu.
Možnost kompatibilní s UEFI ROM, existuje také formát bajtového kódu nezávislý na architektuře , který lze spustit na různých architekturách, ale stále může být použit i kód závislý na ISA.
As I understand, the BIOS code/bitstream that is held in the ROM should be generic (work alongside with multiple CPU types or ISAs).
říkám ‚ “ Ne, právě naopak “