| Zeile 36: | Zeile 36: | ||
*** Ich kompiliere den Tutorial-Kernel! main.c ist die Hauptdatei. gdt.h ist der Header für die GDT. Was ist da jetzt so unklar? Zu stdint.h: Wo steht, dass man das einbinden soll?? Und was für ein struct?? Ich habe folgende Zeile: <c>static uint64_t gdt[GDT_ENTRIES];</c> Das habe ich aus dem Artikel zur GDT kopiert! | *** Ich kompiliere den Tutorial-Kernel! main.c ist die Hauptdatei. gdt.h ist der Header für die GDT. Was ist da jetzt so unklar? Zu stdint.h: Wo steht, dass man das einbinden soll?? Und was für ein struct?? Ich habe folgende Zeile: <c>static uint64_t gdt[GDT_ENTRIES];</c> Das habe ich aus dem Artikel zur GDT kopiert! | ||
**** Erst einmal wäre ein anderer Ton recht angebracht, zweitens sollst du bitte deine Beiträge mit <nowiki>--~~~~</nowiki> signieren. Um zur Thematik zurückzukommen: [http://git.tyndur.org/?p=tutorial.git;a=tree;f=kernel;h=9caf1798cac40be757e92b9ca5900a0e944deba7;hb=HEAD Weder hier] noch [http://git.tyndur.org/?p=tutorial.git;a=tree;f=kernel/include;h=9f197d11e47eef57d631a5395315b15b163979a5;hb=HEAD hier] finde ich eine main.c oder gdt.h - und das ist der Tutorial-Kernel. Unklar ist mir das deshalb, weil ich den Code deiner main.c und gdt.h nicht kenne - woher die auch immer kommen mögen. Stimmt, es ist kein struct sondern ein static, also lautet die Zeile in der Datei intr.c "static uint64_t gdt[GDT_ENTRIES];". Wo steht, dass man die stdint.h einbinden soll? Steht natürlich nirgends - als versierter C-Programmierer weiß man aber, dass ein uint64_t nicht aus dem Nichts kommt. Wenn man ein natives Programm programmiert bindet man die stdint.h ein, die die libc liefert. Wenn man ein OS programmiert und sich keiner libc bedient muss man selbst irgendwo ein uint64_t definieren - idealerweise in einer Datie namens [http://git.tyndur.org/?p=tutorial.git;a=blob;f=kernel/include/stdint.h;h=98ad321ff9de3744fe946a02b1650deb9e9dfae3;hb=HEAD stdint.h], um auch schön konform zu bleiben. Die Datei intr.c, die wohl im entferntesten mit deiner gdt.h verwandt ist, bindet die stdint.h übrigens [http://git.tyndur.org/?p=tutorial.git;a=blob;f=kernel/intr.c;h=ee353b47a1613c72dcece0ddf2f53cf322d9dd5f;hb=HEAD#l1 '''recht deutlich'''] ein. Wenn du weitere Fragen hast zu der Thematik kannst du auch gerne in den [[IRC]] kommen - wir befinden uns im EUirc (irc.euirc.net) im Kanal #lost. Dort wird man weitere Fragen deinerseits mit Sicherheit gerne beantworten. --[[Benutzer:Hartmut|DerHartmut]] 22:39, 13. Mär. 2012 (CET) (PS: Stures kopieren hat noch keinem geholfen) | **** Erst einmal wäre ein anderer Ton recht angebracht, zweitens sollst du bitte deine Beiträge mit <nowiki>--~~~~</nowiki> signieren. Um zur Thematik zurückzukommen: [http://git.tyndur.org/?p=tutorial.git;a=tree;f=kernel;h=9caf1798cac40be757e92b9ca5900a0e944deba7;hb=HEAD Weder hier] noch [http://git.tyndur.org/?p=tutorial.git;a=tree;f=kernel/include;h=9f197d11e47eef57d631a5395315b15b163979a5;hb=HEAD hier] finde ich eine main.c oder gdt.h - und das ist der Tutorial-Kernel. Unklar ist mir das deshalb, weil ich den Code deiner main.c und gdt.h nicht kenne - woher die auch immer kommen mögen. Stimmt, es ist kein struct sondern ein static, also lautet die Zeile in der Datei intr.c "static uint64_t gdt[GDT_ENTRIES];". Wo steht, dass man die stdint.h einbinden soll? Steht natürlich nirgends - als versierter C-Programmierer weiß man aber, dass ein uint64_t nicht aus dem Nichts kommt. Wenn man ein natives Programm programmiert bindet man die stdint.h ein, die die libc liefert. Wenn man ein OS programmiert und sich keiner libc bedient muss man selbst irgendwo ein uint64_t definieren - idealerweise in einer Datie namens [http://git.tyndur.org/?p=tutorial.git;a=blob;f=kernel/include/stdint.h;h=98ad321ff9de3744fe946a02b1650deb9e9dfae3;hb=HEAD stdint.h], um auch schön konform zu bleiben. Die Datei intr.c, die wohl im entferntesten mit deiner gdt.h verwandt ist, bindet die stdint.h übrigens [http://git.tyndur.org/?p=tutorial.git;a=blob;f=kernel/intr.c;h=ee353b47a1613c72dcece0ddf2f53cf322d9dd5f;hb=HEAD#l1 '''recht deutlich'''] ein. Wenn du weitere Fragen hast zu der Thematik kannst du auch gerne in den [[IRC]] kommen - wir befinden uns im EUirc (irc.euirc.net) im Kanal #lost. Dort wird man weitere Fragen deinerseits mit Sicherheit gerne beantworten. --[[Benutzer:Hartmut|DerHartmut]] 22:39, 13. Mär. 2012 (CET) (PS: Stures kopieren hat noch keinem geholfen) | ||
| + | ***** Im Artikel zur GDT steht etwas von static, nicht struct. Als ich es mit 'struct' anstelle von 'static' probiert habe (und allen anderen uint64_t ebenfalls struct vorangestellt habe), änderte sich plötzlih die Fehlermeldung:<c>In file included from main.c:3: | ||
| + | gdt.h:17: error: array type has incomplete element type | ||
| + | In function load_gdt: | ||
| + | gdt.h:32: error: field ´limit´ has incomplete type | ||
| + | make: *** [main.o] Error 1</c> Ich schreibe übrigens nicht von den verlinkten Lösungen im týndur-Repo ab, sondern kopiere höchstens die Codebeispiele ''direkt im Artikel''! Dein ''recht deutliches'' Einbinden aus dem Lösungs-Repo habe ich also nicht gesehen. Eine Erwähnung direkt im Tutorial wäre überlegenswert - wie du richtig gesagt hast, hilft blindes abtippen ja nichts. --[[Benutzer:BeanMe|BeanMe]] 17:48, 15. Mär. 2012 (CET) (PS: In der Vorschau wurde nur um die erste Zeile des <nowiki><c>...</c></nowiki>-Blocks umrahmt, aber das Wort function außerhalb des Rahmens und im Codeblock formatiert. Ich hoffe, das ist beim gespeicherten Artikel nicht so...) | ||