Beiträge anzeigen

Diese Sektion erlaubt es dir alle Beiträge dieses Mitglieds zu sehen. Beachte, dass du nur solche Beiträge sehen kannst, zu denen du auch Zugriffsrechte hast.


Themen - hannibal

Seiten: [1]
3
Das Wiki / Downtime
« am: 13. October 2006, 21:01 »
Hallo Lowlevel-Community,

sorry fuer die Downtime heute, unser Provider hatte Routingprobleme im Rechenzentrum, weshalb der Server nicht erreichbar war.

Lg, Alex
4
Das Wiki / Ankuendigung: brainsware.org zieht um
« am: 21. February 2006, 10:39 »
Hallo,

wollte euch nur vorwarnen, dass wir in den naechsten Tagen umziehen werden mit der Domain von all-inkl auf unseren Rootserver. Das heisst, dass Lowlevel moeglicherweise einige Stunden nicht erreichbar sein wird, Backup wird gemacht und danach auf dem Root wieder draufgespielt. Benutzerdaten fuer die Verwaltung bleiben auch gleich, es sei denn jemand wuenscht etwas anderes, dann bitte einfach per Mail verstaendigen (jim DOT panic AT gmail DOT com).

Sonstige Wuensche, ala SVN, CVS, FTP user... bitte auch per Mail.

Lg,
Alex
5
hallo,

ich hab ein 'kleines' problem mit meinem kernel. programmiere in C, boote mit grub und versuche gerade GDT und IDT ordentlich zu implementieren. die GDT scheint eigentlich zu funktionieren, aber irgendwie kann ich keine exceptions abfangen..
sch..ustere jetzt schon einige zeit mit diesem problem herum, aber ich kann einfach keinen fehler finden..vielleicht ist es ja nur irgendein denkfehler, den erfahrene leute auf anhieb sehen..

bochs meldet einen triple fault, nachdem ich interrupts aktiviere:

00008144141e[CPU0 ] exception(): 3rd (13) exception with no resolution, shutdown status is 00h, resetting


desweiteren das registeroutput aus der bochslog:

00008144141i[CPU0 ] protected mode
00008144141i[CPU0 ] CS.d_b = 32 bit
00008144141i[CPU0 ] SS.d_b = 32 bit
00008144141i[CPU0 ] EFER   = 0x00000000
00008144141i[CPU0 ] | RAX=0000000001105fec  RBX=000000000002d100
00008144141i[CPU0 ] | RCX=00000000000000fe  RDX=00000000ff000021
00008144141i[CPU0 ] | RSP=0000000001105fc8  RBP=0000000001105ff0
00008144141i[CPU0 ] | RSI=000000000002d53a  RDI=000000000002d53f
00008144141i[CPU0 ] | IOPL=0 of df IF sf zf af pf cf
00008144141i[CPU0 ] | SEG selector     base    limit G D
00008144141i[CPU0 ] | SEG sltr(index|ti|rpl)     base    limit G D
00008144141i[CPU0 ] |  CS:0008( 0001| 0|  0) 00000000 000fffff 1 1
00008144141i[CPU0 ] |  DS:0010( 0002| 0|  0) 00000000 000fffff 1 1
00008144141i[CPU0 ] |  SS:0010( 0002| 0|  0) 00000000 000fffff 1 1
00008144141i[CPU0 ] |  ES:0010( 0002| 0|  0) 00000000 000fffff 1 1
00008144141i[CPU0 ] |  FS:0010( 0002| 0|  0) 00000000 000fffff 1 1
00008144141i[CPU0 ] |  GS:0010( 0002| 0|  0) 00000000 000fffff 1 1
00008144141i[CPU0 ] | RIP=00000000011008ff (00000000011008ff)
00008144141i[CPU0 ] | CR0=0x00000011 CR1=0x0 CR2=0x0000000000000000
00008144141i[CPU0 ] | CR3=0x0000000000000000 CR4=0x00000000



von grub aufgerufener code [entry.asm]:
http://80.108.15.143/websvn/filedetails.php?repname=Operating+system+Concept+%27B%27&path=%2Ftrunks%2Fsrc%2Farch%2Fx86%2Fentry.asm&rev=0&sc=0
hier rufe ich kmain auf, nachdem der stack initialisiert wurde und die multiboot infos gepusht sind

kmain.c:
http://80.108.15.143/websvn/filedetails.php?repname=Operating+system+Concept+%27B%27&path=%2Ftrunks%2Fsrc%2Farch%2Fx86%2Fkmain.c&rev=0&sc=0

kmain ( ... ):

void kmain ( MultibootInfo mb ) {
    IDT idt;
    GDT gdt;
    int i;
 
    kinitstdout(WHITE, BLACK);
    initializeGDT(&gdt, 0x90000);
    initializeIDT(&idt, 0x8FF01);
                     
    flushGDT(gdt.pGDT);
   
    for(i = 0; i < 0x0F; i++) {
        addExceptionHandler(&idt, i, exceptionHandler, 0x08);
    }

    for(i = IRQ0; i < 0xFF; i++) {
        addInterruptHandler(&idt, i, interruptHandler, 0x08);
    }

    asm("sti");
   
    i = 0;
    i = 1 / i;
   
        for(;;);
}


die funktion initializeGDT erstellt den GDTpointer mit basisadresse und limit..

void initializeGDT( GDT *gdt, unsigned int base) {
        gdt->pGDT.base = base;
        gdt->pGDT.limit = (sizeof(GDTDescriptor) * 3) - 1;
    gdt->descriptors = (GDTDescriptor *)base;

    // <null descriptor>
    gdt->descriptors[0].limit_low = 0;
    gdt->descriptors[0].base_low = 0;
    gdt->descriptors[0].base_mid = 0;
    gdt->descriptors[0].type_flags = 0;
    gdt->descriptors[0].limit_high_access = 0;
    gdt->descriptors[0].base_high = 0;

    addGDTDescriptor(gdt, 1, 0, 0xFFFFFFFF, SEG_TYPE_CODE_ER, 0,
                                        RING0, 1,
                                        GRANULARITY_4K); // code descriptor
    addGDTDescriptor(gdt, 2, 0, 0xFFFFFFFF, SEG_TYPE_DATA_RW, 0,
                                        RING0, 1,
                                        GRANULARITY_4K); // data descriptor
   
    asm("lgdt %0" : : "m" (gdt->pGDT));

    return;
}


initializeIDT macht im grunde das gleiche, nur eben fuer interrupts..
idt.c:
http://80.108.15.143/websvn/filedetails.php?repname=Operating+system+Concept+%27B%27&path=%2Ftrunks%2Fsrc%2Farch%2Fx86%2Fidt.c&rev=0&sc=0

void initializeIDT ( IDT *idt, unsigned int base ) {
        idt->pIDT.base = base;
        idt->pIDT.limit = 0xFF;
    idt->descriptors = (IDTDescriptor *)base;

        remapPIC(IRQ0);
    asm("lidt %0" : : "m" (idt->pIDT));
}


alles weitere findet sich im websvn in trunks/include/arch/x86 und trunks/src/arch/x86/ ..

waere echt nett, wenn sich das mal jemand ansehen koennte,
danke im vorraus!

lg, hannibal
6
Lowlevel-Coding / fehler beim linken?
« am: 08. May 2005, 16:44 »
hallo,

also ich hab hier ein kleines problem: ich hab mir roshl`s bootloader geborgt und will grade einen kleinen kernel in c schreiben - im textmodus, also kein vesa - und hab mal eine kleine clearScreen-funktion geschrieben, die eben den bildschirm loeschen soll.

jetzt hab die funktion in die video.c gepackt und eine header-datei mit prototyp und so gemacht, kompiliert, gelinkt und dann mit bochs versucht auszufuehren.

dann bekam ich zwei fehlermeldungen von bochs, je nachdem wie ich die funktion umgeschrieben habe:
- "prefetch: running in bogus memory"
- "prefetch: getHostMemAddr vetoed direct read, pAddr=0xa0000."

ratlos, wie ich war hab ich mal probiert den code der funktion einfach in die main-funktion zu kopieren.. und siehe da, es geht.
weiterprobiert und probiert, bis ich irgendwann die ganze funktion in die kernel.c geschmissen hab und es hat wieder funktioniert...

weiss vielleicht jemand, was hier nicht passt?

so kompiliere ich video.c:

gcc -ffreestanding -Os -c -Iinclude\ -o video.obj src\kernel\video.c


und das hier ist mein linker-script:

OUTPUT_FORMAT("binary")
INPUT(kernel32.obj kernel.obj video.obj)
ENTRY(start)
SECTIONS
{
  .text  0x10000 : {
    code = .; _code = .; __code = .;
    *(.text)
    . = ALIGN(1);
  }
  .data  : {
    data = .; _data = .; __data = .;
    *(.data)
    . = ALIGN(1);
  }
  .bss  :
  {
    bss = .; _bss = .; __bss = .;
    *(.bss)
    . = ALIGN(1);
  }
  end = .; _end = .; __end = .;
}

ld -Tlink.txt -o out\kernel.bin


hilfe ~_~
7
tyndur / Source-Verwaltung
« am: 08. May 2005, 12:37 »
hallo,

ich hab mir grad gedacht, man sollte sich auch ein system ueberlegen, wie man die sources verwaltet; d.h. einerseits brauchen wir eine ordnerstruktur, und andrerseits brauchen wir ein system zum verwalten der sources an sich.

wie is denn das mit cvs und svn und was weiss ich was es da noch gibt?

(oder hab ich vielleicht mal wieder was verpasst und das ganze ist schon besprochen worden? :o)

lg, hannibal
8
Lowlevel-Coding / kernel in C, erweiterungen in C++?
« am: 29. April 2005, 13:42 »
ich frage mich grad inwieweit das moeglich ist den kernel mit c++ zu fuettern, wenn der grundstock in C geschrieben ist? waere um einiges effektiver einige dinge in klassen gekapselt zu programmieren.

(im konkreten fuers CommOS)

lg, hannibal
9
Lowlevel-Coding / c-kernel aus dem tutorial...
« am: 27. April 2005, 14:55 »
..tut irgendwie nicht das, was er tun soll!

ich bekomms nicht auf die reihe eine einfache echo-funktion zu schreiben..jedesmal, wenn ichs nach dem schema des ckernel-tut-codes mache scheint bochs in einer tour zu rebooten o___O!

hat jemand eine idee wieso das so ist?


char *vm = (char *)0xb8000;

void printc(char c)
{
*vm++;
*vm = c;
*vm++;
*vm = 7;
}


lg, hannibal
10
Lowlevel-Coding / FPGA & Prozessorprogrammierung
« am: 12. April 2005, 12:25 »
hallo,

durch meinen extrem engagierten und sehr foerdernden projekt-engineering lehrer, hab ich mit einem mitschueler die moeglichkeit um guenstiges geld (5€ fuer den fpga-chip + kosten fuer entwicklungsplatine) einen prozessor zu entwerfen! total geile sache, und nebenbei auch matura-projekt-anwaerter :D .

jetzt mach ich mich dann daran VHDL zu lernen und dann wird gecoded was das zeug haellt!

was der grund ist warum ich euch das erzaehle? ich haette den vorschlag gehabt, das ganze dann im magazin zu veroeffentlichen und eine art tagebuch darueber zu schreiben - eine sachliche kolumne, wenn man so will ;) .

auch interessant waere von euch ein paar vorschlaege zu hoeren, was eurer meinung nach die cpu koennen soll, was drin sein soll, usw. .. kommt sicher was interessantes dabei raus! werde dann meine planungen hier ins forum stellen und auf kritik hoffen.

lg, hannibal
11
irgendwie hab ich das noch nicht so ganz verstanden, wie das mit den dateisystemen genau geht.

ich wuerde das mal schoen verallgemeinert so sagen: jedes dateisystem hat ja so kleinste fragmente/sektoren was auch immer, die dann mit daten gefuellt werden usw. ... das is ja alles kein problem, nur versuch ich mir grad vorzustellen wie das funktionieren soll, wenn ich zb 3 dateien hintereinander hab (also direkt hintereinander auf der festplatte) und die in der mitte loesche, und stattdessen eine kleinere oder groessere datei reinschreib.. wie macht man das dann? schiebt man dann alle daten zusammen, sodass dann wieder alles von anfang an voll ist? oder wird da einfach in die ersten freien fragmente geschrieben und eine verkettete liste erstellt?

mir ist schon klar, dass das von dateisystem zu dateisystem wahrscheinlich verschieden gehandhabt wird, aber ich haette gern gewusst wie das bei gaengigen systemen funktioniert (ext, fat, ...).

lg, hannibal
12
Lowlevel-Coding / festplatte als spielplatz?
« am: 02. February 2005, 11:02 »
hat vielleicht schon mal jemand versucht eine partition anstelle einer diskette fuer testzwecke zu verwenden? wenn ja, wuerde mich interessieren wie und womit der bootsector geschrieben wurde, welches dateisystem, etc.

lg, hannibal
13
Lowlevel-Coding / tastatur-'treiber'..
« am: 23. January 2005, 22:27 »
hallo,

also ich hab einen meiner lehrer jetzt dazu gebracht mit einigen von uns ein wenig assembler zu machen (jedoch hat der lehrer keinen plan von x86 micro-prozessoren).

und zwar ist unser erstes projekt eine 'schreibmaschine'; die ' ' deshalb, weil ich noch keinen weg gefunden habe einen drucker anzusprechen (falls das jemand weiss, nur raus damit!).
die ausgabe auf dem bildschirm ist ja nun nicht wirklich ein problem, aber ich wuerde gerne bei jedem tastendruck eine eigene routine (interrupt) ausgeloest haben - so weit kein problem eine passende routine zu schreiben..aber wie zum teufel bekomm ich die routine dazu auch wirklich aufgerufen zu werden, wenn ich in die tastatur reinklopfe?

da hier sicher schon erfahrungen mit tastatur-treibern gemacht worden sind hoffe ich, dass mir hier geholfen wird. :)

danke im vorraus,
lg, hannibal
14
Lowlevel-Coding / auf adresse schreiben
« am: 14. November 2004, 14:59 »
koennte mir vielleicht jemand erlaeutern, wie ich auf eine adresse schreiben kann, die ich in einem register gespeichert hab? will naemlich direkt in den videomemory schreiben und hab vergessen wie das geht..

da das ganze aber erstmal rein asm sein soll, helfen mir die cpp-funktionen von teejay nicht wirklich..

vielen dank im voraus,
lg, hannibal
15
Das Wiki / anregung bezueglich website / design
« am: 11. October 2004, 17:03 »
hallo,

also ich hab mir gedacht, man koennte doch die hauptseite ein wenig erweitern, und so gestalten, dass man von jeder ausgabe aus das menu ansteuern kann, sowie auch aus dem forum. (koennte man zb ganz einfach mit 2 frames, oder mit tables + php realisieren), ausserdem waer ein logo fuer lowlevel an sich + eine art corporate design ganz nett und wuerde nebenbei die serioesitaet steigern.

und so ganz nebenbei gefragt: wo hostet ihr denn das ganze? weil bei mir is das zeitweise verdammt langsam, besonders das forum :\

waere natuerlich auch bereit auch etwas dazu beizutragen, falls das ganze gefallen findet - will das magazin ja unterstuetzen, wenn schon nicht mit kompetenten artikeln. ;)

lg, hannibal
16
Lowlevel-Coding / int 0x10 frage
« am: 10. October 2004, 02:47 »
ich hab hier ein kleines problem.. ich hab teejay`s bootloader (etwas abgeaendert) in verwendung, nur will mir die printstring-funktion nicht ganz funktionieren..der gibt irgendwelche kryptischen zeichen aus, statt dem string, den ich in der file deklariere. testweise hab ich AL mit einer hexzahl (30h) gefuellt, dann hat er mir auf einmal eine 0 ausgegeben (logisch, ascii-code), jedoch..muesste ich jetzt jedes zeichen in hex umrechnen, damit das auch wirklich so funktioniert wie ich das will..oder eine andere moeglichkeit waere doch noch direkt in den videospeicher zu schreiben, oder?

bitte um hilfe =\

lg, hannibal
17
Lowlevel-Coding / bootloader -> diskette <> wie?!
« am: 21. September 2004, 13:37 »
also ich hab jetzt meinen tollen bootloader, der mir dann eine datei von der diskette laden soll - alles an sich kein problem, nur wie zum teufel bring ich den bootloader in den bootsektor der diskette? mit rawwrite ueberschreib ich mir die fat12-formatierung!

bzw, andere frage: der bootloader ladet den kernel aus dem 2.sektor, jedoch wo bleibt dann platz fuer die fat12-formatierung?

kanns sein, dass ich da vielleicht einen denkfehler hab?!

sind wahrscheinlich ganz simple sachen, aber ich mach sowas zum ersten mal.. :)

lg, hannibal
Seiten: [1]

Einloggen