5k Aufrufe
Gefragt in Anwendungen(Java,C++...) von Experte (1.1k Punkte)
Hallo
Kurze Frage:
Kann man mit Visual Studio auch andere Formate exe (um genau zu sein: *.elf) kompilieren lassen? Wenn ja wie?
Bin grad etwas ratlos...
Vielen dank für eure Hilfe
MfG
TByte

24 Antworten

0 Punkte
Beantwortet von
Kommen wir einfach mal auf den Boden der Tatsachen zurück.
Es ist davon auszugehen, dass niemand hier in diesem Forum auf
deine Frage antworten kann, da a) fast niemand hier programmiert,
b) fast niemand hier Linux benutzt und c) die Leute, die sich mit
Crosscompiling auskennen vermutlich nicht VC++ benutzen werden.
Was folgert man jetzt daraus? Richtig! Alles was wir dir hier jetzt
sagen können müssen wir vorher noch herrausfinden.
Wenn dir hier also jemand helfen möchte, dann muss er sich
genau wie du erst einmal informieren.
Also kannst du den Helfern ihre Arbeit sogar abnehmen!

So.
Jetzt überlegen wir mal gemeinsam, ob es wirklich so sinnvoll ist,
Visual Studio zu benutzen.
-> Es läuft unter Windows, folglich ist Crosscompiling notwendig
-> Es verleitet zur Benutzung von .NET (ich weiß nicht, wie weit man
gezwungen ist, .NET zu verwenden, aber .NET und Visual Studio
liegen schon ziemlich nah beieinander). Console.WriteLine() !=
printf()
-> Um einen Kernel zu schreiben wirst du Assembler verwenden
müssen und der GCC macht es dir wesentlich einfacher,
Assemblercode einzubinden.

Schnapp dir also vi und gcc und schreib deinen Kernel auf einem
netten kleinen Linux-System

Beste Grüße
0 Punkte
Beantwortet von Experte (1.1k Punkte)
Hallo.
Also ich will dir nicht zu nahe treten aber über die Hälfte deiner Aussage ist Schrott. Punkt.
fast niemand hier programmiert,
Hier gbt es viele Programmierer, nicht zuletzt weil die meisten Helfer hier Informatikstudenten sind.
fast niemand hier Linux benutzt und
Da liegst du vollkommen falsch. 80% der hier Registrierten Aktiven benutzen Linux (sei es Ubuntu, Debian, etc.).
die Leute, die sich mit
Crosscompiling auskennen vermutlich nicht VC++ benutzen werden.
Korrekt.
-> Es verleitet zur Benutzung von .NET (ich weiß nicht, wie weit man
gezwungen ist, .NET zu verwenden, aber .NET und Visual Studio
liegen schon ziemlich nah beieinander). Console.WriteLine() !=
printf()

Wenn ich mit der Betriebsystemprogrammierung ausseinandersetze, dann weiß ich schon, dass .NET sich nicht dazu eignet und wäre ziemlich an der falschen Adresse wenn ich WriteLine von printf, bzw. in meinem Fall cout, nicht auseinanderhalten kann. Ich benutze Visual Studio hierbei NUR als IDE, bzw. Crosscompiler.
-> Um einen Kernel zu schreiben wirst du Assembler verwenden
müssen und der GCC macht es dir wesentlich einfacher,
Assemblercode einzubinden.
Wieder Schwachsinn. Du brauchst Assembler um den Kernel zu laden, den Kernel selber kannst du meinetwegen auch in PASCAL schreiben...
-> Es läuft unter Windows, folglich ist Crosscompiling notwendig
Um ein Betriebsystem zu schreiben, muss auch unter Linux, Macintosh, etc. einen Crosscompiler benutzen.
MfG
TByte
0 Punkte
Beantwortet von
Hui :-)

Hier gbt es viele Programmierer, nicht zuletzt weil die
meisten Helfer hier Informatikstudenten sind.

Da liegst du vollkommen falsch. 80% der hier Registrierten
Aktiven benutzen Linux (sei es Ubuntu, Debian, etc.).

In diesem Fall bitte ich dich, die Anzahl der Fragen und die Anzahl
der Antworten im Linuxbereich und im Windowsbereich zu
vergleichen.
Im Programmieren-Forum wird ja sowieso nie was
gepostet(abgesehen von den "Suche ein Programm"-Anfragen).
Ich habe hier (unter anderen Namen) ~10 Linux/Programming-Fragen
gepostet mit exakt 0 Antworten.
Also komm mir bitte nicht mit sowas an ;-)

Wieder Schwachsinn. Du brauchst Assembler um den Kernel
zu laden, den Kernel selber kannst du meinetwegen auch in PASCAL
schreiben...

Ich bin kein Experte auf diesem Gebiet, aber der reine
Sprachumfang von C wird nicht ausreichen, um das zu tun, was du
vor hast.
Ein Betriebssystem ist kein Hello-World-Programm - Wie willst du
denn überhaupt die BIOS-Interupts nutzen(ich gehe mal ganz dreist
davon aus, dass du im Real-Mode bleibst ;-)?
In deinem Tutorial mag zwar stehen, dass du den Kernel in C
schreiben kannst, doch trotz allem sind bestimmte Dinge mit C nicht
mehr möglich.
Lies dir mal den 8086er Befehlssatz durch, dann wirst du verstehen,
was ich meine.
Oder schreiben wir den Kernel nächstens in Javascript? Oder C#?

Um ein Betriebsystem zu schreiben, muss auch unter Linux,
Macintosh, etc. einen Crosscompiler benutzen.

Falsch.
Wie kann es für ein ungeschriebenes System einen Crosscompiler
geben?

Beste Grüße
0 Punkte
Beantwortet von Experte (1.1k Punkte)
Hallo
Zum Kernel: Den Einsprung macht man in Assembler. Speicheradressung geht meines Wissens mit C++ (Zeiger). Ok, meinetwegen, die Prozessor-Register kann man halt nur in Assembler ansprechen. Aber die Interrupts kann man - soweit ich weiss - auch mit Assembler empfangen und an C++ weitergeben. Schließlich werden Treiber ja auch nicht nur in Assembler geschrieben. Achja: RealMode: Nein, danke!

Wie kommst du darauf? Der CrossCompiler wird doch nich für TByteOS geschrieben, sondern TByteOS wird mit dem Crosscompiler geschrieben! Also egal ob du den Code für TByteOS auf Windows, Linux, oder Macintosh schreibst, einen CrossCompiler wirst du brauchen. Denn ein klassischer Windows Compiler erzeugt dir exe, ein klassischer Linux Compiler erzeugt dir z.B. *.deb und Macintosh was noch schlimmeres. Und keines dieser Formate kannst du problemlos als Kernel laufen lassen...

Was die User betrifft: Wir können ja auch ne Umfrage machen ;)

MfG
TByte
0 Punkte
Beantwortet von
Zum Kernel: Den Einsprung macht man in Assembler.
Speicheradressung geht meines Wissens mit C++ (Zeiger). Ok,
meinetwegen, die Prozessor-Register kann man halt nur in
Assembler ansprechen. Aber die Interrupts kann man - soweit ich
weiss - auch mit Assembler empfangen und an C++ weitergeben.
Schließlich werden Treiber ja auch nicht nur in Assembler
geschrieben.

Also verwendest du doch Assembler. Schau dir mal die Linux-
Sourcen an, da findest du auch genügend Assembler-Code.

Achja: RealMode: Nein, danke!

Oder besser doch? Du musst dir für jedes Gerät einen Treiber
basteln, wenn du im ProtectedMode läufst.
Naja, nicht mein Bier.

Der CrossCompiler wird doch nich für TByteOS geschrieben,
sondern TByteOS wird mit dem Crosscompiler geschrieben! Also
egal ob du den Code für TByteOS auf Windows, Linux, oder
Macintosh schreibst, einen CrossCompiler wirst du brauchen.

Du hast offenbar ein paar Probleme mit deinem grundsätzlichen
Verständnins von Crosscompilern.
Ein Crosscompiler liefert ausführbare Dateien für eine andere
Zielplattform.
D.h. wenn du auf einem x86-Linux Code für ein x86_64 generierst,
dann wird cross-kompiliert.
Das selbe gilt für das erstellen von Windows-Binaries unter Linux und
umgekehrt.

Nun gibt es zwei Fälle:
1.: TByteOS verwendet ein bereits vorhandenes Binärformat.
Gehen wir von ELF auf x86 aus.
Damit hast du dann zwei Möglichkeiten: Du cross-kompilierst von
irgendeinem Betriebssystem aus nach Linux x86 oder du kompilierst
nativ auf einem x86er Linux.
2.: TByteOS verwendet ein selbst entwickeltes Binärformat.
In diesem Fall hast du keinen Compiler, der passenden Code
generiert und musst einen eigenen schreiben.
Da du dein OS mit einem anderen Hostsystem entwickeln musst,
wäre dies ein Crosscompiler.

Also würde im 2. Fall der Compiler für das OS geschrieben und im 1.
Fall wäre ein Crosscompiler unter Verwendung von Linux unnötig.

Denn ein klassischer Windows Compiler erzeugt dir exe, ein
klassischer Linux Compiler erzeugt dir z.B. *.deb und Macintosh was
noch schlimmeres. Und keines dieser Formate kannst du problemlos
als Kernel laufen lassen...

Falsch.
Ein Linux-Compiler liefert dir ELF oder a.out.
Damit kannst natürlich auch noch nicht viel machen, aber .deb kommt
sicherlich nicht dabei heraus.
Allerdings glaube ich nicht, dass dir eine ELF-Binary so viel weiterhilft
;-)

Beste Grüße
0 Punkte
Beantwortet von
PS: Beim Entwickeln des Kernels musst du dir über Binärformate erst
einmal überhaupt keine Gedanken machen und darauf verzichten zu
Linken.
0 Punkte
Beantwortet von Experte (1.1k Punkte)
Wow.
Also ich denke, dass ich erstmal, bevor ich zum eigentlichen Kernel komme, mir wirklich keine Gedanken über Open und RealMode machen sollte, das ich ja erstmal auf meinem eigenen Rechner teste und höchstwahrscheinlich erst einmal maximal einen "Tastaturtrieber" brauche.
Zum cross-Compiler:
Das ist mir zu viel Wirr-warr, ichf asse mal zusammen: Ich habe einen Compiler, der aus meinem TByteOS-Code TByteOS.cpp die ausführbare Datei TByteOS.elf macht. Mehr will ich gar nicht :)
MfG
TByte
0 Punkte
Beantwortet von
Mehr will ich gar nicht :)

Stimmt.
Du willst sogar ein bisschen weniger.

Beste Grüße
0 Punkte
Beantwortet von Experte (1.1k Punkte)
Ja sag ich doch
0 Punkte
Beantwortet von
kernel.cKernel_starten">Durchlesen und verstehen.

Vor allem diese Zeile:

gcc -ffreestanding -c -Os -o ckernel.obj


Beste Grüße
...