| 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: | + | ***** 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 | gdt.h:17: error: array type has incomplete element type | ||
In function load_gdt: | In function load_gdt: | ||
gdt.h:32: error: field ´limit´ has incomplete type | 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...) //EDIT: Es ist so, aber da mir der Grund nicht klar ist, kann ich das nicht ändern. | + | 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...) //EDIT: Es ist so, aber da mir der Grund nicht klar ist, kann ich das nicht ändern. |
:Ich bin jetzt einfach mal ganz direkt: ich habe volles Verständnis dafür, wenn jemand um erste Erfahrungen mit OS-Dev zu sammelt viel Code kopiert bzw abtippt, ABER - und jetzt kommt eine Unterstellung, Leute zarten Gemütes seien gewarnt - wer im Code blindlings static durch struct ersetz, uint64_t nicht hinbekommt (trotz Tipps und Google) verfügt nicht über die notwendige Sicherheit/Erfahrung mit C bzw Programmieren allgemein. --[[Benutzer:Dem epOS sein Linus|DesL]] 20:22, 15. Mär. 2012 (CET) | :Ich bin jetzt einfach mal ganz direkt: ich habe volles Verständnis dafür, wenn jemand um erste Erfahrungen mit OS-Dev zu sammelt viel Code kopiert bzw abtippt, ABER - und jetzt kommt eine Unterstellung, Leute zarten Gemütes seien gewarnt - wer im Code blindlings static durch struct ersetz, uint64_t nicht hinbekommt (trotz Tipps und Google) verfügt nicht über die notwendige Sicherheit/Erfahrung mit C bzw Programmieren allgemein. --[[Benutzer:Dem epOS sein Linus|DesL]] 20:22, 15. Mär. 2012 (CET) | ||
| − | Und nutz bitte deine Signatur.... --[[Benutzer:Dem epOS sein Linus|DesL]] 20:23, 15. Mär. 2012 (CET) | + | :Und nutz bitte deine Signatur.... --[[Benutzer:Dem epOS sein Linus|DesL]] 20:23, 15. Mär. 2012 (CET) |
| + | ::Ich kenne deinen Code nicht, das heißt ich schaue in meine nicht existente Glaskugel und rate, was bei dir schief läuft. Wenn du selber einfach static durch struct austauschst, dann muss ich dir leider mitteilen, dass du keine Ahnung hast was du da tust. Kannst du C? Wir können hier noch ewig weiterdiskutieren, aber das IRC empfiehlt sich für solche Kommunikation mehr. Join doch einfach mal, wir helfen gerne. --[[Benutzer:Hartmut|DerHartmut]] 10:02, 16. Mär. 2012 (CET) | ||