Forum: PC-Programmierung Assembler auf USB-Stick zugreifen


von mbr (Gast)


Lesenswert?

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

von fast (Gast)


Lesenswert?

bringt das Popcorn, 3 2 1 los gehts

von kein Moderator (Gast)


Lesenswert?

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.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

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.

von Dr. Sommer (Gast)


Lesenswert?

Guck doch wie das bei GRUB gemacht wird, das kann auch von Sticks 
booten...

von mbr (Gast)


Lesenswert?

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

von mbr (Gast)


Lesenswert?

Dr. Sommer schrieb:
> Guck doch wie das bei GRUB gemacht wird, das kann auch von Sticks
> booten...

Eine einfache Antwort wäre nett

Der Fragesteller dieses Threads hat zu mehr als nur 100% recht
Beitrag "(Warum) ist das Forum (so) anfängerfeindlich?"

von Dr. Sommer (Gast)


Lesenswert?

mbr schrieb:
> Eine einfache Antwort wäre nett
Was ist denn daran kompliziert? GRUB ist Open-Source, du kannst 
vermutlich Assembler, lies es da nach...

von mbr (Gast)


Lesenswert?

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

von Dr. Sommer (Gast)


Lesenswert?

Und wieso anfängerfeindlich? Ein Anfänger würde so etwas nicht fragen, 
weil so ein Projekt nichts für Anfänger ist...

von Dr. Sommer (Gast)


Lesenswert?

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.

von Filament (Gast)


Lesenswert?

fast schrieb:
> bringt das Popcorn, 3 2 1 los gehts

War abzusehen. "mbr" muß halt noch lernen, daß der Ton die Musik macht!

von mbr (Gast)


Lesenswert?

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......

von mbr (Gast)


Lesenswert?

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....

von Dr. Sommer (Gast)


Lesenswert?

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...

von Dr. Sommer (Gast)


Lesenswert?

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.ä.).

von 2⁵ (Gast)


Lesenswert?

mbr schrieb:
> Eine einfache Antwort wäre nett

Es gibt halt keine einfache Antwort. Da ist einiges zu lesen:

https://www.lowlevel.eu/wiki/Eigener_Bootloader

Dazu noch einen Einstieg in die Real-Mode DOS Programmierung:

http://dk4ek.de/lib/exe/fetch.php/as_lehrg.pdf

DOS Interrupts

http://www.i8086.de/dos-int-21h/dos-int-21h.html

Beitrag #5301860 wurde von einem Moderator gelöscht.
von kein Moderator (Gast)


Lesenswert?

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!

Beitrag #5301870 wurde von einem Moderator gelöscht.
von Jim M. (turboj)


Lesenswert?

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.

Beitrag #5301877 wurde von einem Moderator gelöscht.
von Frank K. (fchk)


Lesenswert?

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

von Egon N. (egon2321)


Lesenswert?

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ß!

von fast (Gast)


Lesenswert?

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.

von Rolf M. (rmagnus)


Lesenswert?

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.

Beitrag #5302678 wurde von einem Moderator gelöscht.
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.