Forum: Mikrocontroller und Digitale Elektronik BIOS von PC-Mainboard durch eigenen Code ersetzen


von Sascha (Gast)


Lesenswert?

Beim aufräumen sind mir gerade eine ganze Reihe älterer Pentium 2,3 und 
4 Mainboards - teilweise mit CPU und RAM - in die Hand gefallen.

Da kam mir spontan eine Idee: das BIOS durch selbstgeschriebenen Code 
ersetzen.

Ich habe mir den LinuxBIOS-code heruntergeladen und kurz mal 
durchgesehen. Danach schien die Sache machbar - auch wenn alles andere 
als trivial.

Zugegeben: einen wirklichen Nutzen hat die Sache nicht, aber ich finge 
es überaus Interessant mal bei Null anzufangen und nicht nur fertige 
Systemrufe eines Betriebssystems zu nutzen.

Von dem SuperI/O gibts nen ausführliches Datenblatt...
Wie man diesen über die Sothbridge anspricht, ob da vorher noch andere 
Dinge initialisiert werden müssen, weiss ich noch nciht.

Hat jemand schon mal was in der Richtung versucht?

LinuxBIOS ist doch schon recht komplex.
Mein erstes Ziel wäre z.B. eine LED am Parallelport blinken zu lassen...

von Olaf (Gast)


Lesenswert?

Wie du schon richtig erkannt hast wird das Problem dadurch kompliziert 
das du halt erstmal die ganzen Chips initialisieren musst. Im 
schlimmsten Fall ja sogar noch Code in die CPU laden musst, auch wenn 
ich das bei deinen alten Teilen nicht glaube.

Es waere also vernuenftiger das eigentliche Bios so zu lassen wie es 
ist. Vor allem weil du dann auch die Standard-Biosaufrufe aus DOS-Zeiten 
verwenden kannst.

Allerdings kann ein Bios auch externe Biose enthalten. Ein Beispiel 
dafuer waere Ansteueungen fuer SCSI-Adapter. Die werden vom Bios nachdem 
es seine Initialisierungen beendet hat, gestartet. An der Stelle 
solltest du deinen Code einfuegen.
Du koenntest dir auch eine Steckkarte basteln auf der ein EPROM mit so 
einem externen Bios draufkommt. Oder noch einfacher du nimmst irgendeine 
Netzwerkkarte und steckst dort ein EPROM in den freien Sockel. Der ist 
naemlich genau dafuer gedacht.

Olaf

von Christoph db1uq K. (christoph_kessler)


Lesenswert?

Conrad hat vor vielleicht zwei oder drei Jahren eine ISA-Karte 
ausverkauft, die mit einer BIOS-Erweiterung einen IDE-Controller für bis 
zu 4 Festplatten bis 137 GByte auch für uralte 486er enthielt. Auch ( 
bootfähihges?)CDROM ist damit anschließbar.

von Christoph db1uq K. (christoph_kessler)


Lesenswert?

http://linuxbios.org/index.php/Welcome_to_LinuxBIOS
http://www.openbios.info/Welcome_to_OpenBIOS
http://freebios.sourceforge.net/ ("outdated")

Das hier klingt interessant:
"Fast boot times (3 seconds from power-on to Linux console)"
wenn das wirklich funktioniert.

von Sascha F. (popdog)


Lesenswert?

Ich habe sowas vor Jahren mit einem 386er-Mainboard mal gemacht.

Allerdings war damals die Rechnerwelt noch ein wenig einfacher. Die 
Adressen der Ports (Parallel, RS232) waren fix und man musste nur die 
entsprechenden Register ansprechen.

Ich hatte mir damals eine ISA-Karte mit Optokopplern und Transistoren 
fuer die digitalen I/Os und ADCs und DACs fuer die analogen I/Os 
gebastelt.
Alles auf einer Prototypen-ISA-Karte mit Lochraster.

Eine zweite ISA-Karte war mit Timerbausteinen und analogen Komparatoren 
ausgestattet. Diese erzeugte die noetigen Interrupts fuer einen 
einfachen Scheduler, um den Echtzeitanforderungen gerecht zu werden.

DOS kam deswegen nicht in Frage.

Das relativ einfache Programm war in Assembler geschrieben und wurde mit 
einem Eprom-Programmiergeraet direkt in die zwei BIOS-Eproms gebrannt.
Ich weiss nicht mehr genau, welchen Assembler wir benutzt haben. Es war 
ein DOS-Editor. Allerdings musste der Output nachbearbeitet werden. Dazu 
hatten wir ein Pascal-Programm geschrieben. Dieses splittete auch die 
Binary fuer die beiden Eproms auf.


War sozusagen eine Selbstbau-Low-Cost-SPS.


Aktuelle Chipsaetze mit PCI sind ungleich schwerer handzuhaben. Dort 
muessen vorher viele Dinge initialisiert werden. Aus diesem Grund ist 
das Debugging auch sehr schwierig, da man fruehzeitig keine Moeglichkeit 
hat etwas auszugeben.
Wir haben damals den Parallelport mit einem Oszi zum debuggen benutzt.


Trotzdem glaube ich, dass es nicht unmoeglich ist, ein aktuelleres 
Mainboard zu benutzen. Der LinuxBIOS-Code ist ein guter Startpunkt.
Sofern es von allen relevanten ICs Datenblaetter gibt - und die 
Intel-Chipsaetze sind sehr gut dokumentiert (SuperIO ist eine 
moeglicherweise andere Sache) - ist das Vorhaben machbar.
Du solltest dir ausserdem noch das "IA-32 Intel® Architecture Software 
Developer’s Manual" von Intel runterladen. Das sind zwar drei PDFs von 
je 500 - 900 Seiten, aber darin findest du alle Befehle und Register 
beschrieben. Gerade die Befehle/ Register zur Einrichtung der 
Speicherverwaltung und anderen Dinge brauchst du sonst eher nicht, da 
das vom Betriebssystem erledigt wird.


Dann noch viel Erfolg!

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.