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

Seiten: [1]
1
Offtopic / Beichte
« am: 23. November 2012, 23:46 »
Hi,

ich muss euch was beichten ...  :oops:
Ich hab Windows 8 gekauft und lebe noch ... Fragt mich nicht wieso, war ein Anfall geistiger Umnachtung :D

PS.: Nurmal so dass ich noch lebe und noch nicht ganz mit Osdev aufgegeben hab ;)

Grüße,
LittleFox
2
OS-Design / Ist das ein Kernel?
« am: 22. August 2012, 16:25 »
Hi,

auf Arbeit verwende ich gerade einen Microcontroller (einen etwas größeren, 128KB Speicher -> XMega128A1) und programmiere eine Firmware für den.
Da das Programm später leicht austauschbar sein soll, sind die ganzen Funktionen für das Board in einer statischen Bibliothek enthalten.
Kann man diese Bibliothek schon einen Kernel nennen obwohl sie mit im Programm liegt?
Die Bibliothek verwaltet die I/O-Pins, hat Treiber für UART/SPI/SD-Karten/TWI/FAT integriert und bietet Funktionen für das Programm an.

Das ging mir nur gerade durch den Kopf, vielleicht könnt ihr mich da ja aufklären :D

Grüße,
LittleFox
3
Offtopic / Netzteil
« am: 24. July 2012, 22:47 »
Hi,

ich habe meinem Rechner mal einen neuen Prozi spendiert und habe jetzt gemerkt dass ich nicht mehr annähernd genug Strom habe ...
Ich brauch ein neues Netzteil und wollte nur mal Fragen ob ihr Firmen kennt von denen man lieber die Finger lassen sollte :)
Mein Problem ist, dass ich nicht sehr viel Geld ausgeben kann :(

Danke schonmal im voraus :)

Grüße,
LittleFox
4
tyndur / Nightly Builds
« am: 15. July 2012, 23:37 »
Wollt ihr wieder nightlys haben? Mein Server dreht immernoch Däumchen^^
5
Das Wiki / Kleiner Fehler im Forums-Template
« am: 02. January 2012, 14:18 »
Hi,

mir ist gerade ein kleiner Fehler im Template des Forums aufgefallen, der in manchen Browsern zu ziemlichen Darstellungsproblemen führt:
Der a-Tag um die Headergrafik wird nicht geschlossen wenn man als Gast unterwegs ist. Wenn man eingeloggt ist, tritt der Fehler nicht auf.

Grüße,
LittleFox
6
Offtopic / Hostingangebot
« am: 21. December 2011, 10:22 »
Hi,

ich habe mir jetzt einen eigenen Server zugelegt und weiß einfach nicht was ich mit dem ganzen Speicher machen soll ;)

Also wenn jemand einen Server zum Sourcecode/Website hosten braucht, meldet euch bei mir :)
Verschiedene VCS kann ich auch noch installieren.

Grüße,
LittleFox
7
Offtopic / Auf Android entwickeln
« am: 08. December 2011, 23:37 »
Hi,

da ich so gerne den OT Bereich vollspamme, wieder mal ein neues Thema :P

Ich überlege momentan meinen Laptop zu verkaufen (NIE wieder Thinkpad Edge!) und mir etwas neues zu holen.
Da mir vorallem eine lange Akkulaufzeit wichtig ist, bin ich ziemlich schnell auf Tablet PCs gekommen.
Habe jetzt einen Favoriten gefunden der allerdings Android als Betriebssystem verwendet. Bei den Tablet PCs ist es ja leider so das sich andere Betriebssysteme nur schwer installieren lassen.

Meine Frage ist nun, ob man auf Android gut programmieren kann. Gibt es Entwicklungsumgebungen, gcc, etc.? Mir wäre auch noch wichtig x86 Code erzeugen zu können. Qemu wäre auch nicht schlecht ;)
Oder könnt ihr mir ein Tablet PC mit ähnlicher Ausstattung und langer Akkulaufzeit auf x86 Basis empfehlen? Tastatur wie bei deisem wäre schon nicht schlecht.

Danke für eure Hilfe :)

Grüße,
LittleFox
8
Offtopic / Elektronikunterforum?
« am: 14. November 2011, 20:40 »
Hi,

könnte man eine Art Elektronikunterforum einrichten? Hier sind ja auch ein paar CPU Bastler unterwegs und irgendwann wird dazu der OffTopic-Bereich vermutlich nicht mehr ausreichen. Außerdem wäre das ja immernoch Lowlevel ;)

Bitte um Meinungen :)

Grüße,
LittleFox
9
Lowlevel-Coding / PSE erkennen
« am: 11. November 2011, 23:21 »
Hi,

ich hab endlich etwas Zeit gefunden wiedermal an meinem OS zu arbeiten.
Da auf meiner Todo Liste momentan ganz oben Paging steht hab ich dort angefangen und mich dazu entschieden für den Kernel nur 4MiB Pages zu nehmen (bitte jetzt keine Design-Diskussion ;)). Um PSE verwenden zu können, muss der Prozessor dies ja unterstützen.
Ich weiß inzwischen das die PSE Unterstützung per CPUID erkannt werden kann (Befehl 1) aber welches Bit muss ich jetzt prüfen?
Im Wiki stehen 2 Bits die für 4MiB Pages gültig sind (3 und 17 in EDX). Welches ist jetzt das richtige?

Danke für eure Hilfe,
LittleFox
10
tyndur / tyndur.org Down
« am: 09. November 2011, 11:04 »
Hi,

mir ist gerade aufgefallen das tyndur.org nicht mehr funktioniert. Bei mir steht im Firefox ewig "Warten auf lowlevel.brainsware.org".
Vielleicht solltet ihr dort mal die Domain aktualisieren ;)

Grüße,
LittleFox
11
OS-Design / Design für mein OS
« am: 25. July 2011, 16:01 »
Moin,

Ich bin gerade dabei für mein Betriebssystem (wieder einmal) einen neuen Kernel zu schreiben. Da die anderen alle vor die Hunde gegangen sind, versuch ich jetzt aus meinen Fehlern zu lernen :)
Zum Beispiel hab ich dieses Mal eine Spezifikation geschrieben bevor ich überhaupt Quellcode getippt habe.

Damit der Kernel nicht auch schief geht, würde ich euch einfach mal Fragen ob ihr die Spezifikation mal durchlesen könnt.
Kleinere Fehler würden mir bei der Implementation selber auffallen aber größere sind dann wieder sehr nervig.

Hier kann man die Spezifikation lesen, die erste Datei ist design.txt:
http://lf-os.googlecode.com/svn/branches/Kernel%204/doc/

Falls die Sonderzeichen nicht stimmen: einfach auch UTF-8 stellen.

PS.: Die Spezifikationen für ABI und IPC sind noch in Arbeit - die also nicht so genau nehmen ;)

Zusammenfassung:
 - der Kernel wird ein Hybridkernel (Kernel mit Modulen im Kernelmode)
 - alles ist eine Datei, sogar der Prozesor
 - es gibt immer mindestens ein Modul, das Plattformmodul. Dieses muss ein CPU Gerät und ein Gerät zur Textein/-ausgabe registrieren
 - Bevor der Kernel gestartet wird, läuft ein Plattformspezifischer Starter (steht noch nicht in den docs)
 - als IPC Kommt SharedMemory und RPC zum einsatz
 - Syscalls, Interrupts und Exceptions werden auf Events gemappt

Danke für eure Hilfe :)

Grüße,
LittleFox
12
Offtopic / [erledigt] Komisches Problem ...
« am: 22. March 2011, 17:14 »
Moin,

ich hab wiedermal ein sehr seltsames Problem:

ich hab eine kleine Platine gebastelt auf der einfach 8 LEDs angelötet sind.
Diese Platine ist über einen Parallelport an meinen Laptop angeschlossen (ja, sowas gibt's ;)). Die LEDs sind dabei einfach die acht Datenleitungen.

7 der 8 LEDs funktionieren auch Problemlos - eine aber nicht (Bit 4, nullbasiert).

Ich hab jetzt schon die LED, die Platine, das Kabel, den Parallelport und das Programm zur Ansteuerung getestet - alles erfolgreich ...

kann dazwischen sonst noch irgendwas kaputt sein??? :? :?

Danke für eure Hilfe,

LittleFox
13
ein problem verschwindet, das nächste kommt ... :cry:

bin jetzt bei der physischen Speicherverwaltung angekommen.
Habe alles so gemacht wie es in dem Tutorial hier im Wiki steht.
meine pmm_alloc gibt aber immer NULL zurück.

Woran kann das liegen?

Der Code ist derselbe wie im Tutorial.
14
Lowlevel-Coding / Problem mit Multitasking im Ring3
« am: 03. July 2010, 12:32 »
Hallo,

nachdem ich mein OS nochmal von vorne angefangen habe, hänge ich nun wiedermal beim Multitasking am Wechsel in den Userspace.
Das komische ist, das mein Bluescreen nichtmal aufgerufen wird, obwohl er ansonsten funktioniert. Stattdessen stürzt QEMU ab.

Hier die Ausgaben von QEMU:
qemu: fatal trying to execute code outside RAM or ROM at 0x2e532074

EAX=00000000 EBX=32303032 ECX=00000000 EDX=00000000
ESI=6e614d20 EDI=6b617264 EBP666f5365 ESP=ffffff18
EIP=2e532074 EFL=00000002 [-------] CPL=0 II=0 A20=1 SMM=0 HLT=0
ES =0010 00000000 ffffffff 00cf9300
CS =0008 00000000 ffffffff 00cf9a00
SS =0010 00000000 ffffffff 00cf9300
DS =0010 00000000 ffffffff 00cf9300
FS =0000 00000000 00000000 00000000
GS =0000 00000000 00000000 00000000
LDT=0000 00000000 0000ffff 00008200
TR =0028 00103020 00000080 0000e910
GDT=     00104000 00000037
IDT=     001080c0 000007ff
CR0=60000011 CR2=00000000 CR3=00000000 CR4=00000000
DR0=00000000 DR1=00000000 DR2=00000000 DR3=00000000
DR6=ffff0ff0 DR7=00000400
CCS=0000007c CCD=00000000 CCO=LOGICL
FCW=037f FSW=0000 [ST=0] FTW=00 MXCSR=00001f80
FPR0-7 (alle gleich) = 0000000000000000 0000
XMM00-07 (alle gleich) = 00000000000000000000000000000000

meine GDT:
struct {uint16_t limit;
void* pointer;
} __attribute__((packed)) gdtp = {
.limit = GDT_ENTRIES * 8 - 1,
.pointer = gdt,
};

// GDT-Eintraege aufbauen
gdt_set_entry(0, 0, 0, 0);
gdt_set_entry(1, 0, 0xfffff, GDT_FLAG_SEGMENT | GDT_FLAG_32_BIT |
GDT_FLAG_CODESEG | GDT_FLAG_4K | GDT_FLAG_PRESENT);
gdt_set_entry(2, 0, 0xfffff, GDT_FLAG_SEGMENT | GDT_FLAG_32_BIT |
GDT_FLAG_DATASEG | GDT_FLAG_4K | GDT_FLAG_PRESENT);
gdt_set_entry(3, 0, 0xfffff, GDT_FLAG_SEGMENT | GDT_FLAG_32_BIT |
GDT_FLAG_CODESEG | GDT_FLAG_4K | GDT_FLAG_PRESENT | GDT_FLAG_RING3);
gdt_set_entry(4, 0, 0xfffff, GDT_FLAG_SEGMENT | GDT_FLAG_32_BIT |
GDT_FLAG_DATASEG | GDT_FLAG_4K | GDT_FLAG_PRESENT | GDT_FLAG_RING3);
gdt_set_entry(5, (uint32_t) tss, sizeof(tss),
GDT_FLAG_TSS | GDT_FLAG_PRESENT | GDT_FLAG_RING3);
// GDT neu laden
asm volatile("lgdt %0" : : "m" (gdtp));

// Segmentregister neu laden, damit die neuen GDT-Eintraege auch wirklich
// benutzt werden
asm volatile("mov $0x10, %ax;"
"mov %ax, %ds;"
"mov %ax, %es;"
"mov %ax, %ss;"
"ljmp $0x8, $.1;"
".1:");
// Taskregister neu laden
asm volatile("ltr %%ax" : : "a" (5 << 3));

init_multitasking():
task_states[0] = init_task(stack_a, user_stack_a, task_a);
task_states[1] = init_task(stack_b, user_stack_b, task_b);

irq_common_stub:
; CPU-Zustand sichern
    push ebp
    push edi
    push esi
    push edx
    push ecx
    push ebx
    push eax
 
; Kernel-Datensegmente laden
    mov ax, 0x10
    mov ds, ax
    mov es, ax
 
    ; Handler aufrufen
    push esp
    call interrupt_handler
    mov esp, eax

; User-Datensegmente laden
    mov ax, 0x23
    mov ds, ax
    mov es, ax
 
    ; CPU-Zustand wiederherstellen
    pop eax
    pop ebx
    pop ecx
    pop edx
    pop esi
    pop edi
    pop ebp
 
    ; Fehlercode und Interruptnummer vom Stack nehmen
    add esp, 8
 
    ; Ruecksprung zum unterbrochenen Code
    iret

Wenn ihr nochwas braucht, bitte bescheid sagen.
Bevor die Frage kommt, in meinem alten Kernel hatte ich nur Ring0 Multitasking
15
Offtopic / NEU Markierung im Forum geht nicht?
« am: 30. June 2010, 22:43 »
Kann das sein, dass die Markierung bei neuen Beiträgen hier im Forum nicht mehr funktioniert?
Das ist mir eben aufgefallen, als es neue Beiträge gab und die Markierung trotzdem nicht da war.
16
OS-Design / [erledigt] IPC - Callback Funktion registrieren
« am: 30. June 2010, 13:39 »
Moin,

bei mir geht es auch langsam in Richtung IPC.
Ich hab mir überlegt, dass Nachrichten über einen Syscall gesendet werden.
Zum empfangen muss sich jedes Programm einen Handler beim Kernel registrieren, der bei Nachrichten immer aufgerufen wird.
Momentan hänge ich beim Syscall fest, mit dem der Handler registriert werden soll. Am Ende soll etwas ähnliches rauskommen, wie in der WinAPI die WindowProcedure ;).

Hier ist mein Code aus dem Kernel:
if(r->int_no == 49)
{
     // RegisterEventHandler
     // eax = Funktionsnummer (momentan immer 0)
     // edx = Speicheradresse des Eventhandlers
     if(r->eax == 0)
     {
          currentEventHandler = (void*)r->edx;
     }
}

Die Variable CurrentEventHandler deklariere ich so:
void (*currentEventHandler)(int message, long params);
Und hier ist mein Testprogramm:
void eventHandler(int message, long params);

void _start(void)
{
asm("movl %0, %%edx;"::"r"(eventHandler));
asm("movl $0, %eax");
asm("int $49");
 
    while(1);
}

void eventHandler(int message, long params)
{
if(message == 0x00000001)
{
char temp[2] = "";
temp[0] = params;
temp[1] = 0;
asm("mov $0x07, %edx");
asm("movl %0, %%esi;"::"r"(temp));
asm("movl $0, %eax");
asm("movl $10, %ebx");
asm("movl $5, %ecx");
asm("int $48");
}
}

Die Nachricht 0x00000001 ist übrigens für Tastatureingaben.

So bekomme ich immer einen Bluescreen (Invalid Opcode), nachdem das Programm gestartet wurde.

Danke schonmal für die Hilfe.

LittleFox

EDIT: upps, im falschen Forum gelandet, müsste eigentlich nach OS-Design. Kann das bitte mal ein Mod verschieben? Danke  :-)
17
Das Wiki / Bug im Wiki?
« am: 09. June 2010, 11:40 »
Mir ist eben aufgefallen dass auf der Seite "Letzte Änderungen" der Link zum Lowlevel-Portal plötzlich in Gemeinschafts-Portal umbenannt wurde und nicht mehr geht.
Ist das ein Bug im Wiki oder ist da was im Umbau?

LittleFox
18
Lowlevel-Coding / [gelöst]Problem mit Diskettentreiber
« am: 11. May 2010, 18:55 »
moin,

kann mal bitte irgendjemand meinen diskettentreiber überfliegen? Irgendwie krieg ich den nicht auf die reihe ... :oops:

den sourcecode findet ihr hier:
http://lf-os.googlecode.com/svn/trunk/drivers/Floppy

ich wollte das jetzt nicht alles hier rein schreiben, wäre etwas viel geworden ...

Danke schonmal für die Hilfe
19
Offtopic / welches Linux?
« am: 29. April 2010, 17:19 »
Hi,

ich will mir wiedermla ein Linux auf meinen Rechner machen, weiß aber gerade nicht welches ich nehmen soll. Hauptsache kein openSuSE mehr.
Ich brauche es vor allem zum programmieren.

Was könnt ihr mir empfehlen? :?

Nachtrag: wenn möglich KDE 3, dass 4er kann ich nicht ab ...

LittleFox
20
Lowlevel-Coding / [gelöst]Problem mit Multitasking
« am: 03. February 2010, 17:50 »
Hallo,
ich schreibe auch gerade ein Betriebssystem und hänge gerade beim Multitasking.
Aus irgendeinen Grund krieg ich das Beispiel aus dem Tutorial nicht hin.
Statt As und Bs zu schreiben schreibt er nur As  :x

Hier meine multitasking.c
#include "main.h"

int yPos = 0;
int xPos = 0;

void task_a(void)
{
    while (1) {
        print_string_at_pos("A", 0x02, xPos, yPos);
xPos++;
    }
}
 
void task_b(void)
{
    while (1) {
        print_string_at_pos("B", 0x04, xPos, yPos);
xPos++;
    }
}

static char stack_a[4096];
static char stack_b[4096];
 
/*
 * Jeder Task braucht seinen eigenen Stack, auf dem er beliebig arbeiten kann,
 * ohne dass ihm andere Tasks Dinge ueberschreiben. Ausserdem braucht ein Task
 * einen Einsprungspunkt.
 */
struct cpu_state* init_task(char* stack, void* entry)
{
    /*
     * CPU-Zustand fuer den neuen Task festlegen
     */
    struct cpu_state new_state = {
        .eax = 0,
        .ebx = 0,
        .ecx = 0,
        .edx = 0,
        .esi = 0,
        .edi = 0,
        .ebp = 0,
        //.esp = unbenutzt (kein Ring-Wechsel)
        .eip = (unsigned long) entry,
 
        /* Ring-0-Segmentregister */
        .cs  = 0x08,
        //.ss  = unbenutzt (kein Ring-Wechsel)
 
        /* IRQs einschalten (IF = 1) */
        .eflags = 0x202,
    };
 
    /*
     * Den angelegten CPU-Zustand auf den Stack des Tasks kopieren, damit es am
     * Ende so aussieht als waere der Task durch einen Interrupt unterbrochen
     * worden. So kann man dem Interrupthandler den neuen Task unterschieben
     * und er stellt einfach den neuen Prozessorzustand "wieder her".
     */
    struct cpu_state* state = (void*) (stack + 4096 - sizeof(new_state));
    *state = new_state;
 
    return state;
}



static int current_task = 1;
static int num_tasks = 2;
static struct cpu_state* task_states[2];
 
void init_multitasking(void)
{
    task_states[0] = init_task(stack_a, task_a);
    task_states[1] = init_task(stack_b, task_b);
}
 
/*
 * Gibt den Prozessorzustand des naechsten Tasks zurueck. Der aktuelle
 * Prozessorzustand wird als Parameter uebergeben und gespeichert, damit er
 * beim naechsten Aufruf des Tasks wiederhergestellt werden kann
 */
struct cpu_state* schedule(struct cpu_state* cpu)
{
    /*
     * Wenn schon ein Task laeuft, Zustand sichern. Wenn nicht, springen wir
     * gerade zum ersten Mal in einen Task. Diesen Prozessorzustand brauchen
     * wir spaeter nicht wieder.
     */
    if (current_task >= 0) {
        task_states[current_task] = cpu;
    }
 
    /*
     * Naechsten Task auswaehlen. Wenn alle durch sind, geht es von vorne los
     */
    if(current_task == 0)
current_task = 1;

else if(current_task == 1)
current_task = 0;
 
    /* Prozessorzustand des neuen Tasks aktivieren */
    cpu = task_states[current_task];
 
    return cpu;
}

Ausschnitt aus der main.asm:
...

irq_common_stub:
    push ebp
    push edi
    push esi
    push edx
    push ecx
    push ebx
    push eax
 
    ; // Handler aufrufen
    ; // Der Rueckgabewert ist der Prozessorzustand des moeglicherweise
    ; // gewechselten Tasks. Wir muessen also den Stack dorthin wechseln
    ; // um die Register wiederherzustellen.
    push esp
    call irq_handler
    mov esp, eax
 
    ; // CPU-Zustand wiederherstellen

    pop eax
    pop ebx
    pop ecx
    pop edx
    pop esi
    pop edi
    pop ebp
 
    ; // Fehlercode und Interruptnummer vom Stack nehmen
    add esp, 8
 
    ; // Ruecksprung zum unterbrochenen Code
    iret
...

Multitasking initialisiere ich, direkt bevor ich die Hardwareinterrupts aktiviere, über init_multitasking();

Als Compiler verwende ich GCC und als Assembler NASM

Danke im Voraus für Hilfe  :-)
Seiten: [1]

Einloggen