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.


Nachrichten - ChristianF

Seiten: [1] 2 3 ... 15
1
Lowlevel-Coding / 64 bit kernel mit grub 2 booten
« am: 25. June 2013, 08:57 »
Hallo,
lange ist es her, dass ich mich damit beschäftigt habe. Allerdings juckt es mich in den Fingern mal wieder was zu machen. Da ich mich mal mit was anderem als vorher 32-bit beschäftigen wollte, habe ich mich an einen 64-bit Feldversuch gehalten. Dabei habe ich folgendes Tutorial gelesen und versucht mein eigenes Ding zu machen: http://wiki.osdev.org/64-bit_Higher_Half_Kernel_with_GRUB_2
 
Zum kompilieren und linken des codes habe ich mir unter mingw einen cross-compiler nach der Anleitung im Wiki kompiliert.
 
Beim zwischendurch erstellen des Kernels wird immer folgender Fehler von ld ausgespuckt:
./obj/bootstrap.S.o: In function `asmKernelStartupGdt':
src/arch/x86-64/bootstrap.S:(.boot+0x86): relocation truncated to fit: R_X86_64_32 against `.text'

Jetzt bin ich mir allerdings nicht so sicher, ob das ganze so funktioniert/funktionieren kann, wie ich es gerne hätte. Ich würde gerne den assembler startup code in eine einzige Datei packen. Zuerst kommt also der 32-Bit Code, der eine temporäre GDT anlegt und das Paging für den 64-bit Modus aktiviert. Dann sollte zum 64-bit Startup-Code gesprungen werden, der in der gleichen Datei liegt, und schließlich die initKernel vom C-Code aufruft.
 
Kann ich das überhaupt so machen? Oder muss ich die Dateien doch auftrennen? Oder läuft da bei mir generell etwas schief? Ich bin, was die Fehlermeldung von ld angeht dezent ratlos.
 
Mein momentaner startup-code sieht wie folgt aus:
[BITS 32]

; just an own section for multiboot header in cause of a may
; be very large kernel at the future!
[SECTION .multiboot]

; some defines needed for multiboot header start
MULTIBOOT2_HEADER_MAGIC equ 0xe85250d6
GRUB_MULTIBOOT_ARCHITECTURE_I386 equ 0
MULTIBOOT_HEADER_TAG_FRAMEBUFFER equ 8
MULTIBOOT_HEADER_TAG_OPTIONAL equ 1
MULTIBOOT_HEADER_TAG_END equ 0

; align 64 bits boundary
ALIGN 8
; multiboot header
multibootHeaderStart:
; magic number for grub2
dd MULTIBOOT2_HEADER_MAGIC
; architecture: i386
dd GRUB_MULTIBOOT_ARCHITECTURE_I386
; Header length
dd multibootHeaderEnd - multibootHeaderStart
; Grub2 checksum
dd -(MULTIBOOT2_HEADER_MAGIC + GRUB_MULTIBOOT_ARCHITECTURE_I386 + (multibootHeaderEnd - multibootHeaderStart))

; enable vbe framebuffer (1024 * 768)
framebufferTagStart:
dw MULTIBOOT_HEADER_TAG_FRAMEBUFFER
dw MULTIBOOT_HEADER_TAG_OPTIONAL
dd framebufferTagEnd - framebufferTagStart
dd 1024
dd 768
dd 32
framebufferTagEnd:
dw MULTIBOOT_HEADER_TAG_END
dw 0
dd 8
multibootHeaderEnd:

; just an own section for startup code
[SECTION .boot]

; global declaration needed for linking
[GLOBAL asmKernelStartup]

; variables for holding the multiboot informations
[EXTERN varMultibootHeaderMagic]
[EXTERN varMultibootHeaderAddress]
[EXTERN varBootstrapStack]
[EXTERN varBootsrapPml4]
[EXTERN varBootstrapPdt]
[EXTERN varBootstrapPd]

; Initialise simple paging, initialise gdt and jump to 64 bit code
asmKernelStartup:

; disable interrupts
cli

; save multiboot header and address for longmode entry later
mov [varMultibootHeaderMagic], eax
mov [varMultibootHeaderAddress], ebx

; load initial gdt
lgdt [Gdtr1]
jmp 0x08:asmKernelStartupGdt

asmKernelStartupGdt:

; reset eflags
push dword 0
popf

; set registers after loading gdt
mov eax, 0x10
mov ds, ax
mov ss, ax

; initialise bootstrap stack
mov esp, varBootstrapStack

; check for available cpuid
pushfd ; Store the FLAGS-register.
pop eax ; Restore the A-register.
mov ecx, eax ; Set the C-register to the A-register.
xor eax, 1 << 21 ; Flip the ID-bit, which is bit 21.
push eax ; Store the A-register.
popfd ; Restore the FLAGS-register.
pushfd ; Store the FLAGS-register.
pop eax ; Restore the A-register.
push ecx ; Store the C-register.
popfd ; Restore the FLAGS-register.
xor eax, ecx ; Do a XOR-operation on the A-register and the C-register.
jz .noCpuid ; The zero flag is set => no CPUID!

; check for extended cpuid functions
mov eax, 0x80000000 ; Set the A-register to 0x80000000.
cpuid ; CPU identification.
cmp eax, 0x80000001 ; Compare the A-register with 0x80000001.
jb .noLongmodeSupport ; It is less => there is no long mode support!

; check for longmode available
mov eax, 0x80000001 ; Set the A-register to 0x80000001.
cpuid ; CPU identification.
test eax, 1 << 29 ; Test if the LM-bit, which is bit 29, is set in the D-register.
jz .noLongmodeSupport ; They aren't => there is no long mode support!

; check for page address extension
mov eax, 0x80000001 ; Set the A-register to 0x80000001.
cpuid ; CPU identification.
test edx, 1 << 6 ; Test if the PAE-bit, which is bit 6, is set in the D-register.
jz .noLongmodeSupport ; They aren't => there is no long mode support!

; check for page size extension
mov eax, 0x80000001 ; Set the A-Register
cpuid ; CPU identification
test edx, 1 << 3 ; Test if the PSE-bit, which is bit 3, is set in the D-register
jz .noLongmodeSupport ; They aren't => there is no long mode support!

; set up initial paging!
call setupInitialPaging

mov eax, Gdtr2
lgdt [eax]

; jump to long mode entry point!
jmp 0x08:asmLongmodeEntry

.noLongmodeSupport:
; TODO: print error message
jmp .errorEndlessLoop

.noCpuid:
; TODO: print error message
jmp .errorEndlessLoop

.errorEndlessLoop:
jmp .errorEndlessLoop

setupInitialPaging:
ret

; Some error messages for previous checks!
msgNoCpuid: db 'cpuid is not supported',13,10,0
msgNoLongmodeSupport: db 'long mode (64bit) is not supported',13,10,0

TmpGdt:
DQ 0x0000000000000000
DQ 0x00CF9A000000FFFF
DQ 0x00CF92000000FFFF
DQ 0x0000000000000000
DQ 0x00A09A0000000000
DQ 0x00A0920000000000

Gdtr1:
DW 23
DD TmpGdt

Gdtr2:
DW 23
DD TmpGdt + 24
DD 0

[BITS 64]
[SECTION .text]

; kernel startup c-code
[EXTERN initKernel]

; long mode kernel startup initialises stack and calls c-code
asmLongmodeEntry:

; initialise new kernel stack
mov rsp, kernelStack

; push multiboot data
mov rax, [varMultibootHeaderAddress]
mov rbx, [varMultibootHeaderMagic]

push rax
push rbx

; call c kernel
mov rax, initKernel
call [rax]

; disable interrupts and jump to never ending loop when initKernel returns
cli
jmp .longmodeEntryHalt

; hang within endless loop!
.longmodeEntryHalt:
jmp .longmodeEntryHalt

[SECTION .bss]
resb 8192
kernelStack:

Mein linker script sieht wie folgt aus:
OUTPUT_FORMAT(elf64-x86-64)
OUTPUT_ARCH(i386:x86-64)
ENTRY(asmKernelStartup)

KERNEL_PHYSICAL_BASE = 0x0000000000100000;
KERNEL_VIRTUAL_BASE = 0xFFFFFFFF80000000;
KERNEL_VIRTUAL_TO_PHYSICAL = KERNEL_VIRTUAL_BASE - KERNEL_PHYSICAL_BASE;

SECTIONS
{
. = KERNEL_PHYSICAL_BASE;

/* define variables for kernels start address */
kernelVirtualStartAddress = . + KERNEL_VIRTUAL_TO_PHYSICAL;
kernelPhysicalStartAddress = .;

/* kernels virtual base */
kernelVirtualBase = KERNEL_VIRTUAL_BASE;

/* the multiboot header MUST come early enough in the output object file */
    .boot :
{
*(.multiboot*)
*(.boot*)
. = ALIGN(0x1000);
varMultibootHeaderMagic = .;
. += 0x0020;
varMultibootHeaderAddress = .;
. += 0x0020;
. = ALIGN(0x1000);
varBootsrapPml4 = .;
. += 0x1000;
varBootstrapPdt = .;
. += 0x1000;
varBootstrapPd = .;
. += 0x1000;
. += 0x8000;
varBootstrapStack = .;
}

. += KERNEL_VIRTUAL_TO_PHYSICAL;

/* code section and read only data (e.g. strings within c-part) */
.text ALIGN(0x1000) : AT(ADDR(.text) - KERNEL_VIRTUAL_TO_PHYSICAL)
{
*(.text*)
*(.gnu.linkonce.t*)
}

/* Initialised data - should be page aligned */
.data ALIGN(0x1000) : AT(ADDR(.data) - KERNEL_VIRTUAL_TO_PHYSICAL)
{
*(.data*)
*(.gnu.linkonce.d*)
}

/* Read only data - should be page aligned too */
.rodata ALIGN(0x1000) : AT(ADDR(.rodata) - KERNEL_VIRTUAL_TO_PHYSICAL)
{
*(.rodata*)
*(.gnu.linkonce.r*)
}

/* Uninitialised data */
.bss : AT(ADDR(.bss) - KERNEL_VIRTUAL_TO_PHYSICAL)
{
*(.bss)
*(COMMON)
*(.gnu.linkonce.b*)
}

/* define variable for kernels end address */
kernelVirtualEndAddress = .;
kernelPhysicalEndAddress = . - KERNEL_VIRTUAL_TO_PHYSICAL;

/* discard comment sections */
/DISCARD/ :
{
*(.comment)
*(.eh_frame*)
}
}
2
Lowlevel-Coding / Re:C Kernel starten
« am: 22. June 2011, 09:40 »
Zitat
LOL. Was möchtest du uns damit eigentlich sagen, dass ein Rechner ohne PM nicht in den PM schalten kann und es somit besser wäre, ein RM-OS zu entwickeln für den Fall, das man gelegentlich auch mal solche exotische Retro-Hardware verwendet
Gibt es denn andere Gründe, sich den RM anzutun als "exotische Retro-Hardware"?
Eventuell langeweile.  :wink:
 
Das ist zumindest bei mir immer mal wieder ein Grund, warum ich teilweise ziemlich bescheuerte Projekte starte.  :-D
3
Softwareentwicklung / Re:Bit geschiebe mit Java
« am: 22. June 2011, 09:16 »
@MNemo:
Lol, woher weißt du das nur... Habe mein Profil hier noch nicht aktualisiert. Die Ausbildung habe ich ja hinter mir.  :wink:
 
Sinn der Aufgabe war im Groben einmal eine Kompression mit Huffman und dann mit einem Trie zu machen. Geht (meine Meinung) wohl nur darum Stoff aus der Vorlesung durch Praxis zu festigen...
 
ja... man hat 2 Wochen Zeit... Dumm nur, wenn eine Woche wegen einer Klausur praktisch wegfällt.
 
Zu einer Lösung bin ich auch irgendwann gekommen. Kleiner Hinweis, warum ich das gemacht habe: Ich habe im Trie alle Kinder in einem Array abgelegt (16 Elemente). Dadurch kann man dann anhand der "berechneten" Position einfach bestimmen, wo es weiter geht. Wie ich auf das (7 - i) gekommen bin weiß ich jetzt aber nicht mehr. ^^
4
Softwareentwicklung / Bit geschiebe mit Java
« am: 16. June 2011, 09:34 »
Moin moin,

ich sitze hier vor einem Problem und komme einfach nicht zur Lösung. Und zwar habe ich folgendes Problem:

Ich habe 4 Werte (Helligkeit, Rot, Grün und Blau), z.B. so: 0, 234, 12, 67. Binär sieht das ganze ja so aus (es werden von 32 Bit immer nur die ersten 8 genutzt):
0000 0000 -> 0
1110 1010 -> 234
0000 1100 -> 12
0100 0011 -> 67

Nun muss ich das ganze Bit für Bit durchgehen (angefangen beim höchsten) und das immer nach unten hin gruppieren, damit dann die folgende Bitfolge daraus wird:
0100 0101 0100 0000 0110 0010 0101 0001
Mein bisheriger Ansatz sah wie folgt aus:
  • Ich laufe von 7 ab runter bis einschließlich 0
  • Zusammenschieben der Bitfolge anhand des aktuellen Durchlaufs
for(int i = 7; i >= 0; i--)
{
int brightness, red, green, blue;
int pos = 0;

// get values
brightness = 0;
red = 234;
green = 12;
blue = 67;

// Bit abhängig von der aktuellen Position holen
// - Bit um i Stellen nach vorne schieben (>> i)
// - Bit ganz nach vorne schieben (>> (7 - i))
// - Überflüssige Daten wegschmeißen (&0x01)
// - Bit an die korrekte Position schieben.
pos |= ((((brightness >> i) >> (7 - i)) & 0x01) << 3);
pos |= ((((red >> i) >> (7 - i)) & 0x01) << 2);
pos |= ((((green >> i)>> (7 - i)) & 0x01) << 1);
pos |= ((((blue >> i) >> (7 - i)) & 0x01) << 0);

// Weitere basteleien mit der Position
}

Wenn meine Beispielwerte nicht gänzlich falsch sind, sollte ja beim 2. Durchlauf (i = 6) pos den Wert 5 haben, allerdings ist dem nicht so.
 
Ich bin das ganze auch schon mit dem Debugger durchgegangen, und deswegen weiß ich, dass das letzte Bit (blau) irgendwie verloren geht.
 
Könnt ihr mir da vielleicht weiter helfen?

Grüße Christian
5
Lowlevel-Coding / Frage zur .data-Sektion
« am: 24. October 2010, 15:58 »
Moin moin...
ich beschäftige mich seit längerem mal wieder mit dem Thema und habe direkt ein Problem, bzw. eine Frage... :roll:
 
Wie sieht es mit der Sektion .data aus? Muss diese immer da sein? Könnte das nicht existieren der Sektion .data eventuell auch mit einem Fehler im Linkerscript zusammen hängen?
 
mein objdump sieht nämlich so aus, und das hat mich doch etwas verwirrt, da nur .text und .bss vorhanden sind:
kernel.elf:     file format elf32-i386
kernel.elf
architecture: i386, flags 0x00000112:
EXEC_P, HAS_SYMS, D_PAGED
start address 0x0010000c

Program Header:
    LOAD off    0x00001000 vaddr 0x00100000 paddr 0x00100000 align 2**12
         filesz 0x0000002c memsz 0x00002030 flags rwx
   STACK off    0x00000000 vaddr 0x00000000 paddr 0x00000000 align 2**2
         filesz 0x00000000 memsz 0x00000000 flags rwx

Sections:
Idx Name          Size      VMA       LMA       File off  Algn
  0 .text         0000002c  00100000  00100000  00001000  2**2
                  CONTENTS, ALLOC, LOAD, READONLY, CODE
  1 .bss          00002004  0010002c  0010002c  0000102c  2**2
                  ALLOC
SYMBOL TABLE:
00100000 l    d  .text  00000000 .text
0010002c l    d  .bss   00000000 .bss
0010202c l       .bss   00000000 _sys_stack
00100019 l       .text  00000000 stop
00000000 l    df *ABS*  00000000 init.c
00100000 g       *ABS*  00000000 kernel_phys_start_address
0010002c g       .bss   00000000 _sbss
00102030 g       *ABS*  00000000 kernel_end_address
00102030 g       .bss   00000000 _ebss
00100000 g       *ABS*  00000000 KERNEL_VMA
00000000 g       *ABS*  00000000 KERNEL_VOFFSET
00002030 g       *ABS*  00000000 kernel_size
00100000 g       *ABS*  00000000 kernel_start_address
00100000 g       *ABS*  00000000 KERNEL_LMA
0010202c g     O .bss   00000004 globalData
0010000c g       .text  00000000 loader
00102030 g       *ABS*  00000000 kernel_phys_end_address
0010001c g     F .text  00000010 vKernelInit

Viel ist nicht da. Es gibt eine C-Funktion, die nichts macht außer einer Endlosschleife und einen Startup-Code, der diese C-Funktion lädt...
 
Grüße Christian
6
Offtopic / Re:Problem mit Kubuntu und dem Netzwerk
« am: 30. June 2010, 16:15 »
Für korrekte Einstellung des Netzwerkes per DHCP trägst du in die Datei /etc/network/interfaces die Zeile "iface eth0 inet dhcp" ein und das gewählte Interface dann noch in die "auto"-Zeile (meist "auto lo", daraus wird z.B. "auto lo eth0").
Thanks :) Der Tipp war Goldwert. In /etc/network/interfaces war nur ein "auto lo". Nach der Umstellung auf "auto lo eth0" und einem Neustart funzt nun wieder alles wie vorher. Anscheinend wurde meine Änderung bei irgendeinem Update überbügelt... *freu*
7
Offtopic / Problem mit Kubuntu und dem Netzwerk
« am: 28. June 2010, 12:04 »
Moin,
ich habe schon seit geraumer Zeit ein Problem mit meinem installierten Kubuntu. Und zwar habe ich vor einiger Zeit "Maßnahmen" ergriffen, um so Dingen wie ARP Poisoning vorzubeugen. Das war letzten Endes ein totaler Fehlschlag. So habe ich nun irgendwo ein "arp -s ..." samt "dhclient ..." rein geschrieben, damit das beim Starten des Systems ausgeführt wird. Dies war nie der Fall... :roll:
Allerdings ist seit dem beim starten nie eine Netzwerkverbindung vorhanden, was heißt, dass ich diese immer per Hand einrichten muss. Zu beginn hat mich das nicht weiter gestört, weshalb ich meine Änderungen auch nicht rückgängig gemacht habe. Mittlerweile geht mir das ganze aber ziemlich aufn Kecks und ich weiß nicht mehr, wo ich das reingeschrieben habe.  :cry:
 
Gibt es irgendeine Möglichkeit alle Dateien nach einer bestimmten Zeichenfolge zu durchsuchen? Oder weiß evtl. jemand von euch, wo man solche Konfigurationsdateien für gewöhnlich ablegt?
 
Gruß Christian
8
OS-Design / Re: Kernelparts in Modulen unterbringen
« am: 26. April 2010, 15:21 »
An ein ähnliches Konstrukt habe ich auch gedacht.  :-D
 
Wenn ich dein Konstrukt verwenden würde, müsste ich mir aber auch einen extra Loader schreiben, oder GRUB anpassen, oder eben einen zusätzlichen Kernel dazwischen schieben... :)
 
Momentan komme ich aber zu nix, da die Abschlussprüfungen ins Haus stehen und ich, um für den schriftlichen Part zugelassen zu werden, ein Projekt durchgeführt haben muss.
 
Vielleicht komme ich in der Zeit nach meiner Ausbildung, wenn ich meinen Zivildienst leiste wieder zu etwas mehr... ;)
9
Offtopic / Re: Mikrokontrollertechnik
« am: 10. March 2010, 20:06 »
Ich werde auf jedenfall mal weiterschauen...
 
Allerdings müsste ich erst einmal mein Grundwissen (Elektrotechnik, Digitaltechnik) auffrischen und erweitern. Was auch interessant ist, ist, dass man anscheinend einige Effekte direkt über die Hardware, sprich ohne Mikrocontroller usw., realisieren kann... wenn ich jetzt noch den Link wiederfinden würde -.-
10
Offtopic / Re: Mikrokontrollertechnik
« am: 09. March 2010, 13:45 »
Welche Schule war das denn? Wir hatten glaube ich auch irgend einen Mikrocontroller von Siemens...
11
Offtopic / Mikrokontrollertechnik
« am: 09. March 2010, 10:16 »
Moin moin,
ich möchte mich mal auf einem anderen Feld des Lowlevel beschäftigen, und habe mir dafür die Mikrokontrollertechnik, wie das bei mir in der Schule genannt wurde herausgesucht.
 
Was ich gerne machen möchte:
Ein kleines Gerät bauen, dass ein analoges Signal (z.B. von einer Gitarre) in ein digitales umwandelt, dieses irgendwie modifiziert (sollte hörbar sein :roll:), wieder in ein analoges umwandeln und an eine Box, einen Lautsprecher, schicken.
 
Nun ist es doch ein oder zwei Jahre her, als ich mich das letzte Mal mit so etwas beschäftigt habe. Ich müsste mich also wieder einlesen...  :roll:
Gibt es hier jemanden, der sich mit ähnlichen Themen beschäftigt hat? Könnt ihr mir eventuell etwas Literatur empfehlen, das die Grundlagen der Mikrokontrollertechnik abdeckt?
 
Gruß Christian
 
PS: So etwas kann man auch als Vertiefung zum Studiengang "Elektro- und Informationstechnik" studieren (evtl. ja ein Thema für mich nach meinem Zivi)  :evil:
 
EDIT:
Kann ich hier auf einen Mikroprozessor zurückgreifen, oder sollte ich mich besser mit FPGAs beschäftigen?
12
Lowlevel-Coding / Re: Verständnisfragen
« am: 03. March 2010, 08:38 »
Moin moin,
finde ich gut. :)
Trotzdem steht am Anfang des Assemblercodes ein ".code 32". Ich denke mal, dass das angibt, dass es sich bei dem nachfolgenden Code um 32 Bit Code handelt.
 
Nun ist da noch etwas. Ich experimentiere mal wieder mit C++. Nun werden im Wiki-Tutorial per Linkerscript die Destruktoren entfernt. Gilt dies nur für globale und statische Klasseninstanzen, oder werden da auch lokale destruktoren mit entfernt, die aufgerufen werden müssten, wenn z.B. eine Klasse nur in einem bestimmten Abschnitt, z.B. einem if, benutzt wird?
13
Offtopic / Re: CSS Spaß und der IE
« am: 01. March 2010, 17:34 »
ich ärgere mich gerade mal wieder mit dem Internet Explorer herum...
Für Nischenprodukte, wie den IE, würde ich keine Zeit verplempern. :-D
Ein Browser der sich nicht an geltende Standards halten kann muss auch nicht berücksichtigt werden. 8-)

Nicht wirklich...
Die Seite, wofür die scrollbalken gebraucht werden, ist keine Privatseite von mir, weswegen gerade der IE berücksichtigt werden muss. Leider leider benutzen noch viel zu viele Leute den Internet Explorer, da er halt mitgeliefert wird und ohne weiteres genutzt werden kann. Und die Seite wird primär im IE getestet, und was dort funktioniert, funktioniert meist auch im Firefox.
 
Es ist in meinen Augen so oder so sinnlos ständig neue Versionen einer Software herauszugeben, anstatt eine bestehende beständig zu warten und weiter zu entwickeln...
Aber da ist eben das Problem bei kommerziellen Produkten. Da kann es ja durchaus passieren, dass sich die Wartungs-/Erweiterungskosten nicht mehr mit dem Gewinn decken...
 
Wenn ich so darüber nachdenkt, macht Microsoft das ja eigentlich auch "IE5, IE5.5, IE6, IE7, IE8". Nur erscheint es mir so, dass man sich halt mal so nebenher um Dinge wie CSS 3 beschäftigt und das irgendwie einbaut, sei es nun richtig oder falsch...
 
 
Zumindest ein Bug wurde beim Sprung von 7 nach 8 behoben... :roll:
Beim IE7 wurde die Höhe von tbody an tr weitervererbt (was nicht passieren sollte). Beim IE8 passiert das nicht mehr...
14
Offtopic / CSS Spaß und der IE
« am: 01. March 2010, 14:18 »
Moin moin,
ich ärgere mich gerade mal wieder mit dem Internet Explorer herum...
 
Und zwar sollen der Inhalt einer Tabelle scrollbar sein. im Firefox war das schnell gemacht:
tbody {
     overflow: scroll;
     overflow-x: hidden;
     height: 250px;
}
Da das aber anscheinend noch nie im IE funktioniert hat, habe ich angefangen, den Tabellenkopf absolut über der Tabelle zu positionieren:
.tableContainer thead {
position: absolute; /* throws the header out of the table */
top: 0px;
left: 0px;

width: 100%
}
Damit bin ich der Lösung schon recht nahe gekommen, da der Kopf nun fest über dem Inhalt ist. Allerdings habe ich noch ein kleines Problem: Und zwar hat der Inhalt der Tabelle eine Breite von 100%, was auch korrekt dargestellt wird. Durch die absolute Positionierung des Kopfes passiert dies allerdings nicht mit dem Tabellenkopf. Ist das ein Bug vom IE und wenn ja, wie kann ich das beheben?
 
 
Solltet ihr den kompletten Code zum experimentieren brauchen, stelle ich diesen gerne zur Verfügung.
15
Lowlevel-Coding / Re: QEmu greift auf falschen Speicher zu
« am: 22. February 2010, 15:30 »
humm...
eigentlich sollte der Multibootheader an Offset 0 liegen, weswegen ich ja extra hierfür die Sektion "multiboot" in das Linkerscript eingebaut habe. Allerdings habe ich hier in der cygwin umgebung auch kein "mbchk" um das zu testen:
/* first of all the multiboot structure */ 
.multiboot : AT(ADDR(.multiboot) - KERNEL_VMA_TO_LMA)
{
  *(.multiboot)
}

Ich habe auch nochmal probiert, bin aber zu keinem Ergebnis mehr gekommen, nur dass irgendwas kaputt geht, wenn ich auch nur eine globale Variable einbaue...
16
Lowlevel-Coding / Re: QEmu greift auf falschen Speicher zu
« am: 22. February 2010, 13:47 »
Und da ist er: http://wp1127936.wp167.webpack.hosteurope.de/zeug/os.zip
 
Ich hab den ganzen anderen Mist entfernt (leere Ordner und so) :roll:
Sollte der Code funktionieren, dann macht der Crosscompiler irgend etwas kaputt...
 
EDIT:
Am Kernel muss noch einiges gemacht werden. Allen voran muss erst einmal das Konfigurationsscript fertig geschrieben werden. Nur wollte ich einfach mal etwas herumprobieren.
17
Lowlevel-Coding / Re: QEmu greift auf falschen Speicher zu
« am: 22. February 2010, 13:24 »
Den Sourcecode kann ich gerne hochladen, allerdings habe ich kein Diskettenimage, da ich den Kernel via "qemu -kernel ..." ausführe.
18
Lowlevel-Coding / Re: QEmu greift auf falschen Speicher zu
« am: 22. February 2010, 12:56 »
Es funktioniert nun etwas weiter.  :roll: Es lag daran, dass ich falsch herum gelinkt habe, sprich erst init.o (C/C++ Code) und dann startup.o (Assemblerstub).
 
Die Fehlermeldung sieht nun genau so aus, wie die im Eröffnungspost. Alles was ich gemacht habe war folgendes:
* eine Klasse eingebaut
* ein globales Objekt angelegt
Und genau da kommt der Absturz von qemu... Die Funktion "ConstructorsInit" will den Konstruktor der globalen Variable aufrufen und zerhaut dabei irgendwas ...  :-o
Mal schauen, ob ich herausfinden kann, was...
19
Lowlevel-Coding / Re: QEmu greift auf falschen Speicher zu
« am: 22. February 2010, 12:07 »
Der Dump ist hier: http://nopaste.info/40559b2d95.html
 
Was mir auffällt ist, dass die Startadresse 0x0010000c ist. Sollte das nicht eigentlich die Adresse von "loader" sein, sprich 0x00100098?
Ansonsten kann ich hier nicht wirklich erkennen, dass etwas falsch ist...
20
Lowlevel-Coding / Re: QEmu greift auf falschen Speicher zu
« am: 22. February 2010, 11:25 »
Da der Thread nun schon mal offen ist, frage ich einfach.  :roll:
 
Und zwar nutze ich momentan qemu 0.12.2 unter windows um meinen Kernel per "qemu -kernel kernel.zwerg" laufen zu lassen. Der Fehler, der auftritt ist dem von rizor sehr ähnlich: http://nopaste.info/b310717e31.html
 
Nun habe ich daran eine Weile herumprobiert und es schien, dass der Fehler auftritt, sobald C/C++ Code aufgerufen wird. Also habe ich die Aufrufe komplett aus dem Stub entfernt (auskommentiert). Nun tritt dieser Fehler immer noch auf... Kann es sein, dass dann in meinem Linkerscript/Assemblerstub ein Fehler ist?
Linkerscript: http://nopaste.info/8d64928881.html
Assemblerstub: http://nopaste.info/dfcca884b0.html
Seiten: [1] 2 3 ... 15

Einloggen