x86 BIOS programmeren

Pagina: 1
Acties:
  • 119 views sinds 30-01-2008
  • Reageer

  • -DarkShadow-
  • Registratie: December 2001
  • Niet online
Ik wil mijn BIOS gaan modificeren. Ik wil eens gaan kijken hoe dat ding in elkaar zit en dan eventueel er veranderingen in aanbrengen.

Maar nu zoek ik eerst algemene info over het programmeren van een BIOS voor de x86 architectuur. Als ik van 0 moet beginnen ben ik veel tijd kwijt aan niks. Ik heb al gezocht op GoT en Google, maar helaas niks specifieks gevonden.

Dus als iemand mij op gang kan helpen...

Dat het in asm moet etc weet ik al wel hoor...

[ Voor 6% gewijzigd door -DarkShadow- op 08-12-2004 21:31 ]

Specialist in:
Soldeerstations
Oscilloscoop


  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 01-05 21:50

Creepy

Tactical Espionage Splatterer

Ga je me nu vertellen dat je na al dat gegoogle je http://www.openbios.info/ en http://www.linuxbios.org/ hebt gemist? ;)

[ Voor 14% gewijzigd door Creepy op 08-12-2004 23:04 ]

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


  • Virgil
  • Registratie: November 2001
  • Laatst online: 01-04 20:21

Virgil

We're not alone

Het is niet zo dat je zo even je bios programmeert. Je bios vertelt welke schakeling welke interrupt request id krijgt. ( Welk register op hoog wordt gezet om een interrupt te genereren op de bus voor dat device ). Je zult jezelf dus aller eerst moeten inlezen hoe die bussen communiceren met elkaar.

Daarbij kan je niet even Assembly programmeren. Je moet je dus in lezen in de chip zelf. Je hebt namelijk de juiste registerwaardes nodig om de goede waardes te kunnen schrijven. Pech voor jou zijn er geen publieke datasheets met complete gegevens van de meeste BiOS chips of moederborden.

Hier zal je dus zelf achter moeten komen. Het hacken van de BiOS software mag niet, auteursrechtelijk vastgesteld. Wil je dus je BiOS programmeren moet je de sourcecode hebben van de BiOS. Plus de datasheets om de juiste gegevens te hebben. Daarnaast moet je een dermate kennis hebben van de architectuur van de processor en de schakelingen hierbinnen dat je niet zo even 'vanaf 0' kan gaan programmeren.

edit/ Ik wist dus niet van het bestaan van bovenstaande sites af.

Even wat zitten rondsnuffelen, en inderdaad. Je hebt vrij veel kennis nodig over hoe alles met elkaar communiceert binnenin een computersysteem. Als je dus nul inzicht hebt in programmeren van een BiOS, of zelfs nul inzicht in hoe het eigenlijk geregeld is binnenin je systeem. Zou ik me eerst inlezen in de documenten die er daar staan over de buses en de protocollen die gebruikt worden. Vrij pittig om dat alleen te doen :P

[ Voor 23% gewijzigd door Virgil op 08-12-2004 23:11 ]

Ik was heel, heeeel vroeger SeRRveR


  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 01-05 21:50

Creepy

Tactical Espionage Splatterer

SeRRveR: zelfs met die sites heb je nog gelijk. Het is niet iets wat je even doet. Daarnaast is het voor elk motherboard weer anders. En de specs krijgen hoe je wat moet aansturen is ook niet te doen.

Linuxbios is op het moment nog je enige echte hoop als je zonder gedegen hardware en asm kennis nog enigzins met bios code wilt gaan rommelen. Maar zelfs dan is het moeilijk om ooit ook maar iets werkends te krijgen voor een beetje recent motherboard.

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


  • Virgil
  • Registratie: November 2001
  • Laatst online: 01-04 20:21

Virgil

We're not alone

Creepy schreef op woensdag 08 december 2004 @ 23:08:
SeRRveR: zelfs met die sites heb je nog gelijk. Het is niet iets wat je even doet. Daarnaast is het voor elk motherboard weer anders. En de specs krijgen hoe je wat moet aansturen is ook niet te doen.

Linuxbios is op het moment nog je enige echte hoop als je zonder gedegen hardware en asm kennis nog enigzins met bios code wilt gaan rommelen. Maar zelfs dan is het moeilijk om ooit ook maar iets werkends te krijgen voor een beetje recent motherboard.
Mja, desalniettemin mag ik aannemen dat de jongeman hier wilt kloten met een oud moederbord.
Als ik je mag introduceren tot het wereld van het programmeren van Integrated Circuits en Microcircuits. Schaf dan een STK-500 kit aan icm een lekker lompe microcontroller, eg; de Atmega32. Daarvan kan je de datasheets overal van het net plukken. Je krijgt een basisinzicht in hoe de controller werkt. En als je je dan ook verdiept in de schakelingen die er in zit, kom je er uiteindelijk wel.

Ik was heel, heeeel vroeger SeRRveR


  • Ivo
  • Registratie: Juni 2001
  • Laatst online: 14-01-2025

Ivo

Er is wel een programma waar je een microchip mee kan simuleren. Hoe ver je kan gaan in het schrijven van assembly code voor deze chip weet ik niet. Ik weet niet of dat is wat je zoekt, maar je zou het kunnen proberen.

http://www.xs4all.nl/~averschu/idass/

  • Munchkin
  • Registratie: November 2001
  • Laatst online: 30-04 14:46
Hmmm, dat idass tooltje is aardig om mee te prutsen (heb er ooit eens mee geprobeerd een mp3 speler mee te bouwen, jammerlijk gefaalt overigens), maar als je daadwerkelijk serieuze dingen wilt gaan doen, dan zou ik toch voor SystemC gaan (Sorry Ad). Als zie ik niet in waarom je zo'n tool zou gaan gebruiken: De chip ligt al vast tenslotte. Resteert het eventueel emuleren van de software op die chip, maar dat kun je niet omdat je niet over de juiste documentatie voor jou specifieke mobo beschikt.

Ik denk dat dit een leuk, maar niet echt uitvoerbaar idee is. Maar ik zou het wel leuk vinden als je mijn ongelijk kon aantonen. B)

  • Elijan9
  • Registratie: Februari 2004
  • Laatst online: 13:12
SeRRveR schreef op woensdag 08 december 2004 @ 23:04:
Het is niet zo dat je zo even je bios programmeert.
Je schrijft inderdaad niet zo even een BIOS, maar niet om al de redenen die jij aangeeft. Het wordt zo wel (te) erg geabrakadabriseerd.

Laat ik voorop stellen dat het onmogelijk is om jezelf eventjes in te werken als je nog geen enkele ervaring heb met het schrijven van hardware-initialisatie. Maar met genoeg tijd, geduld, volharding en geld :( kun je alles bereiken wat je wilt - ben ik van mening.

Overigens bestaat een normale BIOS uit verschillende "modules" die elk een deel van de hardware voor hun rekening nemen. Als je dus een BIOS alleen maar wilt aanpassen hoef je meestal slechts 1 module te vervangen. Ook kun je ervoor kiezen een module toe te voegen, zonder verder iets aan de oorspronkelijke BIOS te veranderen. Die extra module hoeft dan alleen maar te doen wat jij extra of anders ingesteld wilt hebben. Op die manier is het nog het minst moeilijk.
Je bios vertelt welke schakeling welke interrupt request id krijgt.
<knip>
Daarbij kan je niet even Assembly programmeren.
De gangbare programmeertaal in het "wereldje" is Forth, maar ook C aangevuld met assembly is mogelijk. BASIC zou ook goed kunnen, zolang de programeertaal maar 16-bit machinecode kan produceren en je conditionele jumps en assignments zo efficient mogelijk kan uitgenereren (eindelijk weer eens iets wat BASIC wel kan :X ). De eisen die het schrijven van een BIOS stelt aan de programmeertaal en de programmeur zijn dan ook absoluut niet hoog.

Het "enige" (bijna?) onverkomelijke probleem is inderdaad dat je een volledige specificatie nodig hebt van de hardware om alles juist in te kunnen stellen en te initialiseren. Bovendien moet je dat ook nog op de juiste volgorde doen. Ook moet je op de hoogte zijn en blijven van eventuele "silicon bugs" in de hardware, met name de chipset wil nog wel eens problemen hebben.
Je moet met een deel van de ingeprikte hardware standaard overweg kunnen, zo moet je elke mogelijk ingeprikte processor herkennen en juist instellen (voltage, dividers, FSB) en moet je ook het ingeprikte geheugen goed herkennen en de chipset daar op instellen.
Wil je dus je BiOS programmeren moet je de sourcecode hebben van de BiOS.
:?
Dat komt ongeveer neer op "je hebt de sourcecode van Windows nodig om een OS te schrijven". Dat is natuurlijk onzin. Je hebt flink veel hardware-kennis en ervaring nodig, datasheets, creativiteit en ja je moet kunnen een beetje kunnen programmeren...

offtopic:
Het is "BIOS", afk. van Basic Input/Output Sytem. Het staat niet voor "Built-in Operating System" o.i.d.

War is when the young and stupid are tricked by the old and bitter into killing each other. - Niko Bellic


  • -DarkShadow-
  • Registratie: December 2001
  • Niet online
Ik snap heus wel hoe een bios in elkaar zit. Ik heb voor verschillende architecturen asm geschreven, heb processors gesimuleerd en veranderingen in aangebracht etc, etc...

Ik ben dus wel iets verder dan het programmeren van een 8bit uC met een standaard dev board.

Maar ik denk dat iedere IBM bios ongeveer op dezelfde manier is opgebouwd. Ik wil dus info over de algemene BIOS opbouw.

Het plan is dus om mijn BIOS te disassemblen en die code te analyseren.

[ Voor 9% gewijzigd door -DarkShadow- op 09-12-2004 12:50 ]

Specialist in:
Soldeerstations
Oscilloscoop


  • Elijan9
  • Registratie: Februari 2004
  • Laatst online: 13:12
-DarkShadow- schreef op donderdag 09 december 2004 @ 12:47:
Maar ik denk dat iedere IBM bios ongeveer op dezelfde manier is opgebouwd. Ik wil dus info over de algemene BIOS opbouw.

Het plan is dus om mijn BIOS te disassemblen en die code te analyseren.
Dan zul je een hoop hebben aan de twee links van Creepy in "x86 BIOS programmeren" Daar is ook enige documentatie te vinden.

Het grote verschil met een uC development bordje is dat de aangesloten hardware elk moment weer anders kan zijn en dat de documentatie van de meeste hardware dus angstvallig geheim gehouden wordt. Het ligt er ook maar net aan welke hardware je hebt, en welke features je ervan nodig denkt te hebben.

War is when the young and stupid are tricked by the old and bitter into killing each other. - Niko Bellic


Verwijderd

Wat je ook eens kunt doen, is naar http://bochs.sf.net gaan en daar de source-code van downloaden en uitproberen.

Bochs is een "PC" emulator, die een x86 systeem mét bios (én vga-bios), muis, floppy en HD emuleert. Je kunt bvb de source eens bezien van de meegeleverde bios en daar eens wat zaken veranderen om meer inzicht te krijgen in de werking ervan. Er zit, dacht ik, zelfs een geïntegreerde debugger in zodat je stap voor stap door je bios code kunt steppen.

Daarna kan je misschien zelfs jouw bochs-aangepaste bios nemen en in je oud moederbord eens uitproberen door z'n bios te flashen.

Zoals verschillende mensen hebben aangegeven, is dit niet gemakkelijk omdat er een bios is per moederbord-type. In de bios zit de code om de chipsets correct aan te sturen. En omdat er op elk moederbord verschillende chipsets (northbridge en southbridge) en deze proprietary zijn, is het vrij moeilijk om correcte informatie te vinden voor de aansturing van deze zaken (meestal vallen die onder NDA's).

Dat neemt niet weg dat het natuurlijk fun is om je ermee bezig te houden. Als het een ietwat ouder moederbord is (je sprak van IBM, dus ik denk dat je het hebt over een oud PS/2 systeem), kan je wel wat meer "inside" info vinden.

success met bochs :)

  • NaliXL
  • Registratie: Maart 2002
  • Laatst online: 01-05 19:30
Vrijwel iedereen geeft aan dat het een vrijwel onbegonnen werk is. Kan iemand aangeven hoe een project als de "Uber bios" dan tot stand komt?

Genoeg is meer dan veel, en tart den overvloed


  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 01-05 21:50

Creepy

Tactical Espionage Splatterer

Cherub schreef op vrijdag 10 december 2004 @ 20:46:
Vrijwel iedereen geeft aan dat het een vrijwel onbegonnen werk is. Kan iemand aangeven hoe een project als de "Uber bios" dan tot stand komt?
Het lijkt erop dat deze "uber" biossen hele kleine setting aanpassingen zijn (met eventueel andere stukjes uit andere versies van dezelfde bios). Zo te zien zit er verder geen ontwikkeling van eigen code in.

Je eigen stuk code hiervoor schrijven is wel wat anders :)

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


  • NaliXL
  • Registratie: Maart 2002
  • Laatst online: 01-05 19:30
Toch wel knap. Er zitten toch echt een aantal compleet nieuwe menu-opties in. En ik gebruik 'm hier naar volle tevredenheid.

Genoeg is meer dan veel, en tart den overvloed

Pagina: 1