Programm starten ohne Betriebssystem-Boot, wie?



  • @EinNutzer0 sagte in Programm starten ohne Betriebssystem-Boot, wie?:

    Schon gut, wer nicht helfen möchte, muss es auch nicht. Kein Grund, unfreundlich demgegenüber zu werden...

    Rezept mit Mengenangaben: Writing an x86 "Hello world" bootloader with assembly



  • @EinNutzer0 Ja, es geht um das was @DocShoe geschrieben hat. Gut, ein Auto von Grund auf zu bauen ist mehr Aufwand als ein selbst bootendes Programm das zwei Zahlen einlesen, addieren und das Ergebnis wieder ausgeben kann. Aber einiges an Arbeit ist es trotzdem. Und es erfordert halt einiges an Kenntnissen. Das nach einer einfachen "Java für Dummies in 21 Tagen" Anleitung Schritt für Schritt abzuarbeiten bringt dir auch nichts. Wenn du weiter in dem Bereich tätig sein willst dann musst du dir das Hintergrundwissen sowieso erarbeiten. Und wenn nicht, wieso willst du es dann machen? Und wenn die Antwort darauf "aus Spass an der Sache" ist, na dann mach mal. Aber selber. Erwartet dir nicht dass dir jemand so spezielles und auch gar nicht triviales "Spass an der Sache" Projekt vorkaut.

    Hier meine Schritt für Schritt Anleitung für dich:

    • Entscheide dich für BIOS vs. UEFI. BIOS ist veraltet, dafür aber relativ einfach. Wie aufwendig es mit UEFI wird kann ich nicht sagen. Mag sein dass es sogar einfacher ist, mag sein dass es viel schwieriger ist.
    • Google dir raus wie man Bootcode für den Firmware-Standard deiner Wahl schreibt.
    • Lern die Sprache mit der du das machen kannst (bei BIOS geht quasi nur Assembler).
    • Schreib das 7 + 7 Programm.
    • Google dir raus wie man den Bootcode auf einen Datenträger bekommt so dass man mit dem Firmware-Standard deiner Wahl davon booten kann.
    • L1: Übersetze den Bootcode, schreib ihn auf den Datenträger und boote davon.
    • Google dir raus wie man Bootcode debuggen kann damit du den den Crash/Fehler den du gerade erlebt hast finden und beheben kannst.
    • Beheb den Fehler.
    • Goto L1

    Tip: Um bei dem ganzen Prozess nicht irre zu werden verwende zum Testen eine Virtual-Machine. Also VirtualBox, Hyper-V, VMware Player - irgendsowas.

    Und nochwas: Das 7 + 7 Programm sollte noch relativ einfach sein, weil du es komplett im Bootcode unterbringen kannst. Sobald du mit dem Bootcode nicht mehr auskommst, wird es allerdings ungleich viel schwerer.



  • Noch ein Tip: Sowas debuggt man am besten mit printf Debugging. Ein Emulator/Hypervisor mit eingebautem Debugger ala QEMU wäre auch eine Möglichkeit. Und für Härtefälle kann man die VGA Farbregister verwenden. Evtl. auch IO port 80, falls man einen Emulator/Hypervisor hat der "POST codes" anzeigen kann.



  • @hustbaer sagte in Programm starten ohne Betriebssystem-Boot, wie?:

    BIOS ist veraltet, dafür aber relativ einfach. Wie aufwendig es mit UEFI wird kann ich nicht sagen.

    Das sollte doch so einen Legacy Modus haben. In dem sollten die BIOS Interrupts gehen.



  • Ja, eh, den Legacy-Modus meine ich ja wenn ich "BIOS" schreibe. Reines BIOS hat je quasi kein aktuelles Mainboard mehr.

    Ich weiss aber nichtmal ob das noch alle aktuellen Boards können. Vermutlich. Aber dann ist gleich die nächste Frage: wie lange noch.



  • @hustbaer sagte in Programm starten ohne Betriebssystem-Boot, wie?:

    Wie aufwendig es mit UEFI wird kann ich nicht sagen. Mag sein dass es sogar einfacher ist, mag sein dass es viel schwieriger ist.

    UEFI ist recht nah an der Vorstellung von EinNutzer0. Es wird ein PE Executable von einer FAT32 Partition geladen und gestartet. Man hat zwar immer noch auf die Standardbibliothek verzichten, aber nicht mehr mit rohen Binaries arbeiten.


  • Mod

    @Tobiking2 sagte in Programm starten ohne Betriebssystem-Boot, wie?:

    @hustbaer sagte in Programm starten ohne Betriebssystem-Boot, wie?:

    Wie aufwendig es mit UEFI wird kann ich nicht sagen. Mag sein dass es sogar einfacher ist, mag sein dass es viel schwieriger ist.

    UEFI ist recht nah an der Vorstellung von EinNutzer0.

    Naja, EinNutzer0 hat ganz explizit danach gefragt, wie das denn ohne BIOS ginge. Das ist in der Analogie nicht nur das Auto selber bauen, sondern mit Steinzeitmitteln angefangen sich ohne Hilfe den gesamten Technologiebaum hocharbeiten, bis man selber Aluminiumbleche formen kann, selber Gummi pressen kann, und selbst Benzin raffinieren kann.

    Es ist dann sogar praktisch noch eine Stufe schlimmer, da man im normalen Handel gar keine Hardware ohne jedes BIOS finden wird, man sich also erst einmal Spezialhardware besorgen muss, auf der man eigene Firmware flashen kann. Also quasi auch noch die Straße für das selbstgemachte Auto bauen.



  • @SeppJ

    Naja, EinNutzer0 hat ganz explizit danach gefragt, wie das denn ohne BIOS ginge.

    Ja, stimmt, hat er. Und da wirds dann natürlich richtig krass, das stimmt auch. Wobei "ohne BIOS" auch schwammig formuliert ist. Weil streng genommen müsste man dann auch auf die Hardware-Initialisierung sowie das Laden und Anspringen des Bootcodes verzichten. D.h. er müsste sein eigenes BIOS programmieren und flashen.

    So lange "nur" gemeint ist dass er im Bootcode keine BIOS Funktionen verwenden möchte, ist es zumindest denkbar. Aber immer noch sehr viel für jemanden der nicht die nötigen Kenntnisse hat sich das selbst zu ergoogeln und daher in einem Forum nachfragen muss.



  • Mal aus einer anderen Perspektive gefragt:
    Es gibt doch auch BIOS/UEFI-Firmeware Updates... Wie machen die Hersteller diese?


    @SeppJ sagte in Programm starten ohne Betriebssystem-Boot, wie?:

    Das ist in der Analogie nicht nur das Auto selber bauen, sondern mit Steinzeitmitteln angefangen sich ohne Hilfe den gesamten Technologiebaum hocharbeiten, bis man selber Aluminiumbleche formen kann, selber Gummi pressen kann, und selbst Benzin raffinieren kann.

    + Polymere/Kunststoff synthetisieren... 😏

    Gut... Mein Vorhaben ist zu hoch gegriffen... Wenn es vorerst mit UEFI funktionieren würde, wäre das schon toll.


  • Mod

    @hustbaer sagte in Programm starten ohne Betriebssystem-Boot, wie?:

    So lange "nur" gemeint ist dass er im Bootcode keine BIOS Funktionen verwenden möchte, ist es zumindest denkbar. Aber immer noch sehr viel für jemanden der nicht die nötigen Kenntnisse hat sich das selbst zu ergoogeln und daher in einem Forum nachfragen muss.

    Das fände ich sogar noch schwieriger, wie würde ich das überhaupt machen?



  • @hustbaer ob man ohne BIOS mit 500 Byte Code auskommt?
    Schon zum Nachladen der nächsten Sektoren braucht man wieder das BIOS. 🤔



  • also beim msp430 hat man 128 kb, das ist so ungefähr das 256-fache (tip, tip, tip!). außerdem muss man sich nicht mit software-interrupts abärgern. 🙄



  • @Wade1234 sagte in Programm starten ohne Betriebssystem-Boot, wie?:

    also beim msp430 hat man 128 kb,

    Bootsektor auf der Festplatte?



  • nein die sind da meine ich direkt im controller vorhanden, also abzüglich des hauptprogramms natürlich (das müsste glaube ich der cache sein).

    wenn man daten von der festplatte lesen will, muss man diese natürlich anschließen und mittels P1OUT und P1IN bzw. zeigern auf die entsprechenden, dem manual zu entnehmenden, adressen den festplattencontroller ansprechen. aber dann kann man auch die komplette festplatte als "bootsektor" nehmen, wenn man das entsprechend programmiert bekommt. 🙄

    rein theoretisch müsste das übrigens auch mit den neuesten prozessoren von amd und intel funktionieren, aber da kann der technische support dann besser helfen, wie man die an seine lötplatine anschließt. 😃



  • @Wade1234 Ok, Flash-Speicher.
    Das wäre beim PC letztendlich das BIOS. Der Vergleich hinkt doch etwas.



  • @DirkB sagte in Programm starten ohne Betriebssystem-Boot, wie?:

    @hustbaer ob man ohne BIOS mit 500 Byte Code auskommt?

    Ja, wird schwierig. Könnte sich aber u.U. ausgehen. Ich weiss nicht wie viel Code ohne BIOS nötig ist um die Grafikkarte in einen definierten Text-Mode zu bringen. Bzw. ob beim Booten über BIOS die Graka nicht sowieso in einem brauchbaren, definierten Text-Mode ist wenn der Boot-Code ausgeführt wird. Buchstaben in den Text-Mode Screen-Buffer zu schreiben ist denkbar einfach und wenig Code. Zeichen von der Tastatur lesen ... hm. So lange man dafür keinen Interrupt-Handler programmieren muss (polling?) sollte das auch relativ kompakt gehen. Mehr als die Ziffern sowie Grundrechenarten muss ja nicht gehen. Und beim Parsen + Konvertieren des Inputs muss halt man sehr kompakten (und dadurch vermutlich greislichen, unleserlichen) Code schreiben.

    Schon zum Nachladen der nächsten Sektoren braucht man wieder das BIOS. 🤔

    Genau.



  • @SeppJ sagte in Programm starten ohne Betriebssystem-Boot, wie?:

    @hustbaer sagte in Programm starten ohne Betriebssystem-Boot, wie?:

    So lange "nur" gemeint ist dass er im Bootcode keine BIOS Funktionen verwenden möchte, ist es zumindest denkbar. Aber immer noch sehr viel für jemanden der nicht die nötigen Kenntnisse hat sich das selbst zu ergoogeln und daher in einem Forum nachfragen muss.

    Das fände ich sogar noch schwieriger, wie würde ich das überhaupt machen?

    Ich meinte damit: Er lässt sich den Bootcode vom BIOS aus dem Bootblock laden, verzichtet in seinem Bootcode aber auf BIOS Funktionen. Wie man das machen kann sollte klar sein: Grafikkarte und Keyboard-Controller direkt ansprechen.

    Aber ich vermute mal deine Frage basiert auf einem durch meine mehrdeutige Formulierung entstandenen Misverständnis...?



  • @hustbaer sagte in Programm starten ohne Betriebssystem-Boot, wie?:

    Ich weiss nicht wie viel Code ohne BIOS nötig ist um die Grafikkarte in einen definierten Text-Mode zu bringen.

    Ich bin mir nicht sicher, wie das bei x86 artigen Systemen ist, aber evtl. muss man schon das RAM initialisieren, bevor man das benutzen kann.
    Und evtl. muss man auch das PCI System initialisieren, die Grafikkarte finden, der Interrupts und I/O Adressen zuweisen, bzw. deren Firmware ausführen. Ansonsten kann man evtl. gar nichts ausgeben.



  • @hustbaer sagte in Programm starten ohne Betriebssystem-Boot, wie?:

    Er lässt sich den Bootcode vom BIOS aus dem Bootblock laden,

    Soweit ich das in Erinnerung habe, ist das nur ein Sektor, also 512 Byte. Den Rest muss dieser Sektor nachladen.



  • @Mechanics Ne, ich meine ja in dem Fall dass man den Bootblocksektor vom BIOS laden und ausführen lässt, im Code des Bootblocksektors dann aber auf BIOS Funktionen verzichtet. Und da muss man garantiert kein RAM initialisieren. DOS hätte z.B. auch nicht gewusst wie es das anstellen soll.

    Wenn er natürlich ganz ohne BIOS auskommen will, dann muss er viel mehr machen. Nur dann hat er auch wesentlich mehr als 512 Byte zur Verfügung, da er dann ja das BIOS ersetzen muss -- wie will er sonst "booten"?


Log in to reply