Kernel herunterladen, compilieren und laufen lassen

Low-Level-Programmierung und Experimenteller Kernel; Ansprechpartner: Dirty Oerti
Benutzeravatar
Dirty Oerti
Beiträge: 2229
Registriert: Di Jul 08, 2008 5:05 pm
Wohnort: Thurndorf / Würzburg

Re: Kernel herunterladen, compilieren und laufen lassen

Beitrag von Dirty Oerti » Do Mai 14, 2009 4:07 pm

Mal eine Frage:

Ist es euch lieber, wenn die "Tools", um den Kernel zum laufen zu bekommen, direkt in der Versionsverwaltung mit drinnen sind, oder soll das lieber getrennt von einander "aufbewahrt" werden?
Also:

Soll die "Bochs-Steuer-Datei" (und die für evtl andere Emulatoren) mit in das git-Repository?
Und was ist mit dem Source-Code für das Tool, dass die init-RamDisk erstellen kann?

Wie wäre euch das am liebsten?
Bei Fragen einfach an daniel[ät]proggen[Punkt]org
Ich helfe gerne! :)
----------
Wenn du ein Licht am Ende des Tunnels siehst, freu dich nicht zu früh! Es könnte ein Zug sein, der auf dich zukommt!
----
It said: "Install Win95 or better ..." So I installed Linux.

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8858
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: Kernel herunterladen, compilieren und laufen lassen

Beitrag von Xin » Do Mai 14, 2009 4:41 pm

In ein Repository gehören alle Dateien, die erforderlich sind, das Projekt lauffähig zu machen.
Dazu gehören auch Konfigurationen (z.B. Makefiles), nicht aber die Executables oder Objektfiles oder alles sonstige, was durch die vorhandenen Quelltexte und Konfigurationen erzeugt werden kann.
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

nufan
Wiki-Moderator
Beiträge: 2557
Registriert: Sa Jul 05, 2008 3:21 pm

Re: Kernel herunterladen, compilieren und laufen lassen

Beitrag von nufan » Di Jun 23, 2009 6:46 pm

Bei mir geht da was nicht...
Ich hab folgendes gemacht:

Code: Alles auswählen

$ git clone git://repo.or.cz/kernel.git
Initialized empty Git repository in /home/daniel/kernel-projekt/kernel/.git/
remote: Counting objects: 181, done.
remote: Compressing objects: 100% (128/128), done.
remote: Total 181 (delta 58), reused 123 (delta 40)
Receiving objects: 100% (181/181), 103.31 KiB, done.
Resolving deltas: 100% (58/58), done.

Code: Alles auswählen

$ make kernelimage 
[---------COMPILING KERNEL---------]
make[1]: Betrete Verzeichnis '/home/daniel/kernel-projekt/kernel/src'
[allsources] Searching source files...  [OK]
[c] Compiling boot/multiboot.c...  [OK]
[c] Compiling paging/paging_functions.c...  [OK]
[c] Compiling paging/paging_init.c...  [OK]
[c] Compiling main/main.c...  [OK]
[c] Compiling idt/idt.c...  [OK]
[c] Compiling int/irq.c...  [OK]
[c] Compiling int/isr.c...  [OK]
[c] Compiling bio/bio.c...  [OK]
[c] Compiling gdt/gdt.c...  [OK]
[c] Compiling phys_mm/pmm_init.c...  [OK]
[c] Compiling phys_mm/pmm_functions.c...  [OK]
[c] Compiling text/debug-text.c...  [OK]
[asm] Assembling main/entry_asm.asm...  [OK]
[asm] Assembling idt/idt_asm.asm...  [OK]
[asm] Assembling int/isr_irq_asm.asm...  [OK]
[asm] Assembling gdt/gdt_asm.asm...  [OK]
[kernel] Linking object files...  [OK]
make[1]: Verlasse Verzeichnis '/home/daniel/kernel-projekt/kernel/src'
-------->> DONE
sudo make -C vm/ image
make: Gehe in Verzeichnis '/home/daniel/kernel-projekt/kernel/vm'
[mnt/] Creating mount dir mnt/...  [OK]
[image] Mounting floppy.img...  [OK]
[image] Copying files to image...  [OK]
[image] Unmounting floppy.img...  [OK]
make: Verlasse Verzeichnis '/home/daniel/kernel-projekt/kernel/vm'

Code: Alles auswählen

$ make b-run 
make[1]: Betrete Verzeichnis '/home/daniel/kernel-projekt/kernel/vm'
[bochs] Running bochs...make[2]: Betrete Verzeichnis '/home/daniel/kernel-projekt/kernel/vm/bochs'
00000000000i[APIC?] local apic in  initializing
========================================================================
                       Bochs x86 Emulator 2.3.7
               Build from CVS snapshot, on June 3, 2008
========================================================================
00000000000i[     ] LTDL_LIBRARY_PATH not set. using compile time default '/usr/lib/bochs/plugins'
00000000000i[     ] BXSHARE not set. using compile time default '/usr/share/bochs'
00000000000i[     ] reading configuration from bochs.conf
00000000000i[     ] lt_dlhandle is 0x9f108f8
00000000000i[PLGIN] loaded plugin libbx_x.la
00000000000i[     ] installing x module as the Bochs GUI
00000000000i[     ] using log file protokoll.log
Und dann sagt Bochs:

Code: Alles auswählen

Error 13: Invalid or unsupported executeable format.
Und wenn ich was drücke startet Bochs neu. Liegt das am Kernel oder mach ich was falsch?

Benutzeravatar
Dirty Oerti
Beiträge: 2229
Registriert: Di Jul 08, 2008 5:05 pm
Wohnort: Thurndorf / Würzburg

Re: Kernel herunterladen, compilieren und laufen lassen

Beitrag von Dirty Oerti » Di Jun 23, 2009 6:59 pm

Ah...danke :)
Das Problem liegt (denke ich) hier:

Ich hab ins Repo gleich ein "fertiges" Floppy-Image mit hineingetan, und hab mir dabei gedacht, dass das gehen würde.
Auf dem Image (im Repo) ist nämlich der selbe GRUB installiert, wie bei mir auf dem Laptop. Problem: Mein Laptop hat eine 64bit CPU, Grub wird sich daran wohl auch angepasst haben.
(Ich nehme zumindest an, dass das die Ursache ist. Du hast schon ein nicht x86-64 System, oder?)

Also hab ich jetzt zwei Möglichkeiten:
Entweder, ich bringe dem Makefile bei, wie es ein eigenes Abbild erstellt.
Oder ich bring ein 32bit-Grub-Image ins Repository.

Ich denke erstere Variante dürfte klüger sein :)

Für die (kurze) Zwischenzeit:
So erstellt man ein Image:

Code: Alles auswählen


dd if=/dev/zero of=floppy.img bs=1024 count=1440
#Dateisystem aufspielen
mke2fs -q -F floppy.img

#Verzeichnis zum Mounten erstellen
mkdir mnt/
#mounten
sudo mount -o loop floppy.img mnt/

#hier jetzt z.B. den Kernel ins Image kopieren
#GRUB reinkopieren
mkdir /mnt/grub
cp /boot/grub/stage1 mnt/grub
cp /boot/grub/stage2 mnt/grub
cp menu.lst /mnt/grub

sudo umount mnt/
rm -r mnt/

#GRUB installation
#echo "device (fd0) floppy.img\nroot (fd0)\nsetup (fd0)\nquit\n" | sudo /usr/sbin/grub
#(Das funktioniert bei mir komischerweise nicht mehr?)
/usr/sbin/grub

# jetzt hier eingeben:
device (fd0) floppy.img
root (fd0)
setup (fd0)
quit
Das Image aus dem Repo mit dem so erstellten ersetzen und es müsste eigentlich laufen...?

*EDIT: Das makefile generiert nun automatisch ein Image. Jetzt sollte alles funktionieren? */EDIT*
Bei Fragen einfach an daniel[ät]proggen[Punkt]org
Ich helfe gerne! :)
----------
Wenn du ein Licht am Ende des Tunnels siehst, freu dich nicht zu früh! Es könnte ein Zug sein, der auf dich zukommt!
----
It said: "Install Win95 or better ..." So I installed Linux.

nufan
Wiki-Moderator
Beiträge: 2557
Registriert: Sa Jul 05, 2008 3:21 pm

Re: Kernel herunterladen, compilieren und laufen lassen

Beitrag von nufan » Di Jun 23, 2009 7:32 pm

Dirty Oerti hat geschrieben:Du hast schon ein nicht x86-64 System, oder?
Ja, 32-Bit.
Dirty Oerti hat geschrieben:*EDIT: Das makefile generiert nun automatisch ein Image. Jetzt sollte alles funktionieren? */EDIT*
Ich hab das komplette Verzeichnis gelöscht und neu runtergeladen. Es kommt aber noch immer der gleiche Fehler.

Benutzeravatar
Dirty Oerti
Beiträge: 2229
Registriert: Di Jul 08, 2008 5:05 pm
Wohnort: Thurndorf / Würzburg

Re: Kernel herunterladen, compilieren und laufen lassen

Beitrag von Dirty Oerti » Di Jun 23, 2009 8:56 pm

Ok, ich hab (nachdem ich beide kernel, den bei mir kompilierten und den von dani93 disassembliert hab) jetzt zumindest einen Anhaltspunkt, wo der Fehler liegt.
Bzw, ich weiß genau, warum dani93 den Kernel nicht starten kann:

Bei ihm wird der MultibootHeader aus was auch immer für einen Grund zu weit nach "hinten" gelinkt, GRUB findet diesen also nicht und stellt fest, dass der kernel nicht startbar ist.

Wie ich das löse weiß ich noch nicht genau, auf jedenfall wird sich aber das linkerskript ändern müssen^^ :)
Es wäre ganz gut, wenn noch jemand mal testen könnte, ob der Kernel bei ihm/ihr läuft :)
Bei Fragen einfach an daniel[ät]proggen[Punkt]org
Ich helfe gerne! :)
----------
Wenn du ein Licht am Ende des Tunnels siehst, freu dich nicht zu früh! Es könnte ein Zug sein, der auf dich zukommt!
----
It said: "Install Win95 or better ..." So I installed Linux.

Benutzeravatar
Kerli
Beiträge: 1456
Registriert: So Jul 06, 2008 10:17 am
Wohnort: Österreich
Kontaktdaten:

Re: Kernel herunterladen, compilieren und laufen lassen

Beitrag von Kerli » Di Jun 23, 2009 8:58 pm

nufan hat geschrieben:Bei mir geht da was nicht...
[...]
Und dann sagt Bochs:

Code: Alles auswählen

Error 13: Invalid or unsupported executeable format.
Und wenn ich was drücke startet Bochs neu. Liegt das am Kernel oder mach ich was falsch?
Bei mir ist genau das gleiche, aber unter Ubuntu 9.10 64-bit...
"Make it idiot-proof and someone will invent an even better idiot." (programmers wisdom)

OpenGL Tutorials und vieles mehr rund ums Programmieren: http://www.tomprogs.at

Benutzeravatar
Dirty Oerti
Beiträge: 2229
Registriert: Di Jul 08, 2008 5:05 pm
Wohnort: Thurndorf / Würzburg

Re: Kernel herunterladen, compilieren und laufen lassen

Beitrag von Dirty Oerti » Di Jun 23, 2009 9:05 pm

Ok :)

Aktualisiert mal bitte eure Repos und compiliert dann neu.
Ich hab Veränderungen am Linkerskript vorgenommen (MultibootHeader und Einstiegspunkt in eine SECTION boot verschoben, die am Anfang steht).
Jetzt sollte/dürfte/müsste es hoffentlich gehen :)
Bei Fragen einfach an daniel[ät]proggen[Punkt]org
Ich helfe gerne! :)
----------
Wenn du ein Licht am Ende des Tunnels siehst, freu dich nicht zu früh! Es könnte ein Zug sein, der auf dich zukommt!
----
It said: "Install Win95 or better ..." So I installed Linux.

nufan
Wiki-Moderator
Beiträge: 2557
Registriert: Sa Jul 05, 2008 3:21 pm

Re: Kernel herunterladen, compilieren und laufen lassen

Beitrag von nufan » Di Jun 23, 2009 9:11 pm

Dirty Oerti hat geschrieben:Ok :)

Aktualisiert mal bitte eure Repos und compiliert dann neu.
Ich hab Veränderungen am Linkerskript vorgenommen (MultibootHeader und Einstiegspunkt in eine SECTION boot verschoben, die am Anfang steht).
Jetzt sollte/dürfte/müsste es hoffentlich gehen :)
Es funktioniert :)

Noch zwei Fragen dazu:
Ist es normal, dass ich Bochs nicht beenden kann sondern das Terminal schließen muss?
Wie update ich richtig? Reicht ein

Code: Alles auswählen

git pull origin
? Vorher stand da was vom Makefile... "couldn't merge"... dann hab ich alles gelöscht und neu runtergeladen ^^

Benutzeravatar
Dirty Oerti
Beiträge: 2229
Registriert: Di Jul 08, 2008 5:05 pm
Wohnort: Thurndorf / Würzburg

Re: Kernel herunterladen, compilieren und laufen lassen

Beitrag von Dirty Oerti » Di Jun 23, 2009 9:17 pm

Code: Alles auswählen

git pull origin master
So mach ich es bei mir zumindest immer :)
Um dem mob-Branch aktuell zu halten nat. mit mob hinten :)

Kannst auch git pull origin master mob schreiben :)

Das mit dem merge-Konflikt kam wohl von den Veränderungen am makefile, die ich dir vorgeschlagen hab. Die waren ja nicht wichtig, also ist löschen wohl in dem Fall das beste gewesen.
Wie genau das mit dem Zurücksetzen der Änderungen geht weiß ich im Moment nicht.
(Ich glaube git checkout <dateiname mit pfad> )

Wegen bochs:
Wie meinst du das?
Bochs lässt sich nicht beenden?
Komisch...hm, hast du das Paket bochs-x installiert?
Dann müsstest du oben rechts einen Ausschalter im Fenster haben :)
Bei Fragen einfach an daniel[ät]proggen[Punkt]org
Ich helfe gerne! :)
----------
Wenn du ein Licht am Ende des Tunnels siehst, freu dich nicht zu früh! Es könnte ein Zug sein, der auf dich zukommt!
----
It said: "Install Win95 or better ..." So I installed Linux.

Antworten