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 - iksnagreb

Seiten: [1]
1
Lowlevel-Coding / Ist mein Paging total kaputt?
« am: 02. July 2013, 19:50 »
Hallo,

ich war ja in den letzten Tagen mal wieder etwas aktiver im IRC, deshalb werden wohl schon einige wissen, was mein Problem ist.
Ich wollt jetzt einfach mal fragen, ist das Paging, so wie ich es programmiert hab total kaputt? Sollte ich nochmal neu anfangen? Oder ist das ein Fehler, den man lösen kann?  :?

In Qemu funktioniert es, in einer VM und auf echter Hardware nicht. Die genaue Problemstelle ist im Quellcode markiert.
Er scheint zu versuchen von einer Adresse auszuführen, an der nichts ist und sie also auch nicht gemappt ist, ich weiß jedoch nicht warum.
Ich weiß grad nicht mehr welche Adresse das war, kann es aber nachsehen, wenn ich wieder an meinem PC bin.

Ich hoffe, dass irgendjemand Lust hat sich meine langen, vielleicht total kaputten Code anzusehen.
https://docs.google.com/file/d/0B3zUIFJ_B5J6T3VsOHVya3hvcEU/edit?usp=sharing
2
Lowlevel-Coding / vmm_alloc Problem
« am: 28. January 2013, 14:28 »
Hallo,

Ich bin bei meinem OS jetzt so weit, das Paging funktionieren sollte (es stürzt jedenfalls nicht mehr ab :-D).

Mein Problem ist jetzt die vmm_alloc Funktion, wenn ich nach einer freien Adresse suche bekomme ich immer die gleiche zurück.
Wenn ich also zweimal hintereinander vmm_alloc aufrufe, wird z.B. immer 0x02060000 als Adresse zurückgegeben.
Ich hab schon in meinem Code gesucht, aber ich kann den Fehler einfach nicht finden.(Vielleicht ist ja auch mein ganzer Code ein Fehler :lol:)

Hier der Code: http://pastebin.com/j4vCjU0T . Vielleicht kann ja jemand das Problem finden.
3
Offtopic / Screen of Death
« am: 14. November 2012, 21:16 »
Hallo.
Es wäre mal interessant zu sehen wie eure Screens of Death so aussehen.
Vielleicht war ja einer von euch sehr kreativ dabei, seinen Screen of Death zu gestalten.

Hier ist mein Screen of Death:


Ich freue mich schon darauf eure zu sehen :-D
4
Lowlevel-Coding / Funktionen in Programm lösen Fehler aus
« am: 19. October 2012, 22:19 »
Hallo,

Ich versuche bei meinem Kernel gerade ein Programm als Modul durch Grub laden zu lassen.
Ich mach es etwa so wie in http://www.lowlevel.eu/wiki/Teil_8_-_Ein_erstes_Programm.
Ich verwende für das Testprogramm noch eine flache Binaries.
Das Programm startet gut, auch der erste Syscall funktioiniert ganz gut, doch wenn ich in diesem Programm eine Funktion enthalten ist wird ein #GP ausgelöst.
Warum :?

So wird das Programm geladen:
        struct mbs_mods *mod = mbs->mbs_mods_addr;

uintptr_t addr = mod->mod_start;
uintptr_t addr_end = mod->mod_end;

memcpy( (void*) 0x200000, (void*)addr, (addr_end - addr) );

init_task((void*)0x200000, 1);

Und so sieht das Programm aus:
#include "stdint.h"

void put_char(char chr)
{
asm( "int $0x30" : : "a" (0x001), "b" (chr) );
}

void _start(void)
{
put_char('A');
//asm( "int $0x30" : : "a" (0x001), "b" ('A') );
while(1);
}
5
Lowlevel-Coding / Physische Speicherverwaltung - Adresse 0x0
« am: 16. October 2012, 20:52 »
Hallo,
ich bin gerade dabei, bei meinem Kernel die Physische Speicherverwaltung zu schreiben.
Es ist ja so, dass wenn kein Speicher mehr frei ist NULL zurückgegeben wird, wenn jedoch der Speicher an der Adresse 0x0 frei ist wird ja auch 0 zurückgegeben.
Ist es richtig einfach die Adresse 0x0 immer als belegt zu markieren :?
6
Lowlevel-Coding / Probleme durch Multitasking
« am: 08. October 2012, 20:46 »
Hallo,
ich habe bei meinem Kernel jetzt Multitasking hinzugefügt. Es funktioniert auch ganz gut, doch es gibt jetzt Probleme beim einlesen von Tastatureingaben.
Ich habe die Funktionen getchar() und getn() für die Eingabe von  Zeichen und Zahlen. Mit der Back-Space Taste können Zeichen und Ziffern wieder gelöscht werden, doch jetzt funktioniert es nicht mehr. Ich hab das Multitasking zum Test einmal wieder heraus genommen und es funktionierte wieder.
Hier einmal der Code meines Tastaturtreibers:
#include "IO_Ports.h"
#include "stdint.h"
#include "string.h"
#include "stdarg.h"

#ifndef KEYBOARD_H
#define KEYBOARD_H

int eingabe_j_n = 0;

int eingabe_g_k = 0;

#define MAX_SCANCODE 0x3a

char TASTEN_K[MAX_SCANCODE] = {27,   '1',  '2',   '3', '4',  '5',  '6',  '7',  '8',  '9',  '0', 'ß', '´', 8, '\t', 'q', 'w', 'e', 'r', 't', 'z', 'u', 'i', 'o', 'p', 'ü', '+' , '\n' , 0 , 'a', 's', 'd', 'f', 'g', 'h', 'j', 'k', 'l', 'ö', 'ä', '<', 0, '#', 'y', 'x', 'c', 'v', 'b', 'n', 'm', ',', '.', '-', 0, 0, 0, ' ', 0};

char TASTEN_G[MAX_SCANCODE] = {27,   '!',  '"',   '§', '$',  '%',  '&',  '/',  '(',  ')',  '=', '?', '`', 8, '\t', 'Q', 'W', 'E', 'R', 'T', 'Z', 'U', 'I', 'O', 'P', 'Ü', '*' , '\n' , 0 , 'A', 'S', 'D', 'F', 'G', 'H', 'J', 'K', 'L', 'Ö', 'Ä', '>', 0, '\'', 'Y', 'X', 'C', 'V', 'B', 'N', 'M', ';', ':', '_', 0, 0, 0, ' ', 0};

void cmd_keyboard(uint8_t cmd)
{
int i = 1;
while (i == 1)
{
if(inb(0x64) & 0x2)
{
}
else
{
i = 0;
}
}
    outb(0x60, cmd);
}

uint8_t read_scancode()
{
while (!(inb(0x64) & 0x1))
{
}

uint8_t scancode = inb(0x60);

return scancode;

while(inb(0x64) &0x1)
{
inb(0x60);
}

}

char translate_scancode(uint8_t scancode)
{
if(scancode == 0x2a || scancode == 0x36 || scancode == 0x3a)
{
if(eingabe_g_k == 1)
{
eingabe_g_k = 0;
cmd_keyboard(0xed);
outb(0x60,0x00);
}
else
{
eingabe_g_k = 1;
cmd_keyboard(0xed);
outb(0x60,0x02);
}
return 0;
}
if (scancode > MAX_SCANCODE)
{
return 0;
}

uint8_t i = 0x01;
while(i <= MAX_SCANCODE)
{
if (scancode == i)
{
if(eingabe_g_k == 0)
{
return TASTEN_K[i-1];
}
else if(eingabe_g_k == 1)
{
return TASTEN_G[i-1];
}
}
i++;
}

}

int getchar()
{
A:;
char chr;

while(eingabe_j_n != 1)
{
}

uint8_t scancode = read_scancode();

chr = translate_scancode(scancode);
if(chr == 8)
{
del_last_char();
}

else if (chr != 0)
{
put_char(chr);
}

else if(chr == 0)
{
eingabe_j_n = 0;

goto A;
}

eingabe_j_n = 0;

return chr;
}

int getch()
{
A:;
char chr;

while(eingabe_j_n != 1)
{
}

uint8_t scancode = read_scancode();

chr = translate_scancode(scancode);
if(chr == 0)
{
eingabe_j_n = 0;

goto A;
}

eingabe_j_n = 0;

return chr;
}


int getn()
{
int zahl = 0;
char chr = 0;
while(chr != '\n')
{
chr = getch();
if(chr == 8)
{
zahl = zahl / 10;
del_last_char();
}
else if(chr > 57 || chr < 48)
{

}
else
{
put_char(chr);
int ziffer = chr - 48;
zahl = zahl * 10 + ziffer;
}
}

return zahl;
}

void init_keyboard()
{
set_color(0x0e);kprintf("\tStarte Tastatur...");

while(inb(0x64) &0x1)
{
kprintf(".");
inb(0x60);
}

cmd_keyboard(0xF4);

read_scancode();

set_color(0x06);kprintf("\tTastatur gestartet!\n");set_color(0x07);
}

void handle_keyboard()
{
eingabe_j_n = 1;
}

#endif
7
Lowlevel-Coding / strcmp
« am: 19. August 2012, 19:09 »
Hallo,
ich versuche eine strcmp Funktion zu schreiben:
int strcmp(const char * str_1 , const char * str_2)
{
if(strlen(str_1) > strlen(str_2))
{
return strlen(str_1) - strlen(str_2);
}
else if(strlen(str_1) < strlen(str_2))
{
return strlen(str_1) - strlen(str_2);
}
else
{
int ret = 0;
int i;

for( i = 0; str_1[i] != '\0' && str_2[i] != '\0'; i++ );
{
ret = ret + str_1[i] - str_2[i];
}
return ret;
}
}

Die Funktion funktioniert auch teilweise, sie hat aber Probleme damit zwei gleich lange Strings zu vergleichen. Ich glaube das Problem ist in der for-Schleife, ich weiß aber nicht genau was nicht stimmt.
8
Lowlevel-Coding / Integer Eingabe mit Tastatur
« am: 11. August 2012, 22:02 »
Ich programmiere seit einigen Tagen einen Tastaturtreiber für meinen Kernel.
Jetzt versuche ich eine Funktion zur Eingabe von Integern zu schreiben:
int getn()
{
int ziffer_1 = getchar() - 48;

int ziffer_2 = getchar() - 48;

int ziffer_3 = getchar() - 48;

int zahl;

if(ziffer_1 < 0 || ziffer_1 > 9 || ziffer_2 < 0 || ziffer_2 > 9 || ziffer_3 < 0 || ziffer_3 > 9)
{
zahl = -1;
}
else
{
zahl = ziffer_1 * 100 + ziffer_2 * 10 + ziffer_3 * 1;
}

return zahl;
}

Diese Funktion funktioniert ganz gut, doch wie man sieht wird man bei der Eingabe dazu "gezwungen" Zahlen mit drei Ziffern einzugeben.
Mir fällt keine andere Lösung ein, als für jede Ziffer eine Eigene Variable anzulegen, die würde den Code jedoch sehr lang und unschön machen.
Kennt jemand hier eine schönere Lösung für mein Problem?
9
Offtopic / GCC: Komische Anmerkung
« am: 25. July 2012, 20:16 »
Heute hat mir der Compiler folgende Anmerkung ausgegeben:
Anmerkung: »struct cpu_state *« erwartet, aber Argument hat Typ »struct cpu_state *«
Irgend wie komische, aber was soll das bedeuten?
10
Lowlevel-Coding / uint64_t/uint16_t Probelm
« am: 24. July 2012, 09:19 »
Ich habe die GDT wie im Wiki eingerichtet:

http://www.lowlevel.eu/wiki/Global_Descriptor_Table

Es funktioniert bei mir jedoch nur, wenn ich für uint64_t den long long Datentyp verwende und für uint16_t den short Datentyp.

Der Compiler gibt mir sonst aus:
gdt.h:14:1: Fehler: unbekannter Typname: »uint64_t«
gdt.h:39:6: Fehler: unbekannter Typname: »uint16_t«

Warum ist das so?
Seiten: [1]

Einloggen