Hi,
ich würde gerne in einem in Assembler programmierten Bootloader auf
einen USB-Stick zugreifen. Der Bootloader wird vom BIOS (bitte keine
Lösungen mit UEFI) von diesem USB-Stick, auf den ich zugreifen möchte,
geladen.
Nun möchte ich, egal ob im Realmode über das BIOS, sofern das möglich
ist, oder sonstwie im Protected Mode, das Kernel-Image (also den
kompilierten Code des Kernels) in den RAM laden, und nach ausführen des
Bootloaders dann an die Stelle im RAM springen, wo Kernel ist, um diesen
auszuführen.
Wie bekomme ich Zugriff auf den Stick? Und wie kann ich in Assembler was
auf den Stick schreiben?
Am besten wäre das wenn ich einfach direkt ohne spezielle Formatierung
auf Adressen im Flash des USB-Sticks schreiben könnte.
Außdem bin ich nicht fähig und gewillt (außer es gibt keine andere
Lösung), irgendwelche hardwareabhängigen Treiber nach stundenlangem
Rumprobieren selbst zu schreiben.
Danke schonmal
mbr schrieb:
ich würde gerne in einem in Assembler programmierten Bootloader auf
einen USB-Stick zugreifen.
Da mbr uns nichts über sein Zielsystem verrät, kann dieser Post getrost
geschlossen werden.
Wenn im BIOS "Legacy"-Unterstützung für USB-Devices eingestellt ist,
kannst Du mit den Dir wohlbekannten BIOS-Realmode-Interrupts auf den
USB-Stick zugreifen.
Das funktioniert nicht anders als der Zugriff auf eine Festplatte; die
"Legacy"-Unterstützung gaukelt Dir nämlich genau das vor.
Wie sonst sollte das BIOS Deinen Bootloader vom USB-Stick starten
können?
Solange Du im Realmode bleibst, sollte das für einen erfahrenen
Assemblerprogrammierer wie Dich kein Problem sein.
kein Moderator schrieb:> Da mbr uns nichts über sein Zielsystem verrät, kann dieser Post getrost> geschlossen werden.
x86
Deine Aggression kannst du an dir selbst statt hier im Forum auslassen
mbr schrieb:> Eine einfache Antwort wäre nett
Statt zu sagen "Setz dich hin und lies dir ersrsmal den Quellcode eines
relativ komplexen Bootloaders durch den du ohne Fragen stellen zu dürfen
verstehen musst, sonst bist du hier falsch" könntest du mir einfach auf
direkt die Lösung sagen, außer du kennst sie nicht
Wieso vermutest du, dass "meine" Lösung besser verständlich sei als die
gewiss ausgefeilte und korrekte vom GRUB? Wenn du beim GRUB was
konkretes nicht verstehst, kannst du natürlich fragen. Konkrete Fragen
sind einfacher zu beantworten als allgemeine.
Dr. Sommer schrieb:> Und wieso anfängerfeindlich? Ein Anfänger würde so etwas nicht fragen,> weil so ein Projekt nichts für Anfänger ist..
Jeder war mal ein Anfänger
Und Anfänger die schnell lernen sollten nicht ausgegrenzt werden
Naja dann verschwende ich eben meine Zeit mit der Suche nach den
Codezeilen und auf anderen Webseiten......
Filament schrieb:> War abzusehen. "mbr" muß halt noch lernen, daß der Ton die Musik macht!
war klar dass aus einer ernsten Frage ein Thread für nervige Vollpfosten
wird. Wenn das so weitergeht gehe ich offline und sehe mir irgendeine
Episode irgendeiner StarTrek Serie an
So schwer ist das doch wohl nicht eine simple Frage zu beantworten....
mbr schrieb:> Jeder war mal ein Anfänger> Und Anfänger die schnell lernen sollten nicht ausgegrenzt werden>> Naja dann verschwende ich eben meine Zeit mit der Suche nach den> Codezeilen und auf anderen Webseiten......
Das ist doch ein Widerspruch... Wenn du lernen willst, such dir die
Informationen zusammen und mach's selber. Wenn du schnell fertig werden
willst, frag nach einer fertigen Lösung und setze sie ein - in diesem
Fall GRUB, LiLo etc. Wer einen Bootloader selber schreibt, hat's wohl
nicht so eilig. Warum überhaupt Assembler? Selbst GRUB ist in C
geschrieben...
mbr schrieb:> So schwer ist das doch wohl nicht eine simple Frage zu beantworten....
Ach, du denkst das Unterfangen wäre simpel! Fehler Nummer 1... Richte
dich auf eine ziemliche Arbeit ein. Du musst ja vermutlich auch das
Dateisystem implementieren (FAT32 o.ä.).
mbr schrieb:> Wenn das so weitergeht gehe ich offline und sehe mir irgendeine> Episode irgendeiner StarTrek Serie an
Mach das. Ist sicher besser für dein Ego!
mbr schrieb:> Dr. Sommer schrieb:>> Guck doch wie das bei GRUB gemacht wird, das kann auch von Sticks>> booten...>> Eine einfache Antwort wäre nett
Das sollte wohl eher Heiterkeit auslösen als eine ernstgemeinte Antwort
auf die Frage des OP sein.
Wenn man schon Code lesen will: SYSLINUX dürfte erheblich leichter sein.
Lesen von Disk (Stick) mittels int 0x13 kann man sich z.B. hier
anschauen:
https://github.com/geneC/syslinux/blob/master/core/localboot.c
Der int 13h kann IIRC auch schreiben. Wo genau ist aber eine gute Frage,
zumindest wenn der Stick auch noch ein Dateisystem enthalten soll.
Moderne Formatter lassen die ersten 2MB meistens frei - Bootloader wie
Grub können das ausnutzen.
Hier gibts einen DOS-USB-Treiber:
http://hddguru.com/software/2006.02.09-USBASPI-MS-DOS-Driver/
Auf den kannst Du per ASPI zugreifen.
Hier gibts die ASPI Spezifikation:
ftp.isu.edu.tw/pub/Hardware/ADAPTEC/adaptec/aspi_dos.ps
(Postscript-Datei, mit Ghostscript oder Acrobat oder so in PDF
umwandeln)
Dieser Treiber kann kein Hotplugging.
USB ist sehr komplex. Du müsstest mindestens Support für UHCI, OHCI und
EHCI plus die gewünschten Geräteklassen schreiben. Wenn Du das selber
machen willst, sitzt Du mindestens ein Jahr dran, eher länger. Vergiss
das also.
Alle modernen Rechner haben UEFI. Das wäre ansonsten Dein Weg.
fchk
mbr schrieb:> mbr schrieb:>> Eine einfache Antwort wäre nett>> Statt zu sagen "Setz dich hin und lies dir ersrsmal den Quellcode eines> relativ komplexen Bootloaders durch den du ohne Fragen stellen zu dürfen> verstehen musst, sonst bist du hier falsch" könntest du mir einfach auf> direkt die Lösung sagen, außer du kennst sie nicht
Dann schau dir halt uboot an.
x86 USB Bootloader mit dem Kenntnisstand: Viel Spaß!
mbr schrieb:> Hi,> ich würde gerne ...>> Nun möchte ich ...>> Außdem bin ich nicht fähig und gewillt ...
Für mich liest sich das so:
"Ich würde gerne mit dem Rad um die Welt fahren. Kommt mir bitte
nicht mit einem E-Bike. Ein Motorrad/Auto/Flugzeug geht gar nicht."
Entweder bist du ein Spitzenathlet auf dem Rad, und du willst von
uns nun die besten/schönsten Radtouren wissen, damit du deine Reise
genießen kannst. Schick uns bitte Fotos, wo du gerade bist. Frag
unterwegs gerne hier im Forum nach.
Oder du hast momentan keine Ahnung, wie groß die Welt ist - was jetzt
nicht schlimm ist. Jene Leute, die schon Teile der Welt mit dem Rad
erkundeten, versuchen dir nun zu erklären, worauf du dich da einlässt.
mbr schrieb:> Filament schrieb:>> War abzusehen. "mbr" muß halt noch lernen, daß der Ton die Musik macht!>> war klar dass aus einer ernsten Frage ein Thread für nervige Vollpfosten> wird.
Naja, wie man in den Wald hineinruft …
> Wenn das so weitergeht gehe ich offline und sehe mir irgendeine> Episode irgendeiner StarTrek Serie an
Ich glaube ganz ehrlich, dass du deine Zeit auf diese Weise besser
nutzt.
> So schwer ist das doch wohl nicht eine simple Frage zu beantworten....
Die Frage "wie schreibe ich mir meinen eigenen x86-Bootloader für
USB-Geräte in Assembler?" an sich mag einfach sein, aber die Antwort
darauf ist es nun mal nicht, auch wenn du das gerne hättest.
Wenn du dann auch keinen Bock hast, dir existierende Bootloader als
Beispiel anzuschauen, weil dir das zu mühevoll ist, brauchst du dich
über die Antworten eigentlich nicht wundern.