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

Seiten: [1]
1
Lowlevel-Coding / Treiber-Sourcecodes?
« am: 06. August 2007, 19:31 »
Hallo Community!

Ich wuerde mal gerne in anderen Betriebssystemen stoebern wie die Geraetetreiber funktionieren und programmiert sind. Alleine schon deswegen weil ich sogar in Google zu einigen Themen nur duerftige Informationen finde und zum anderen um mein Wissen ueber Lowlevel-Programmierung noch zu vertiefen (von den Profis kann man schliesslich noch lernen *g*).

Darum wuerde ich mal gerne wissen welches OS ihr mir zum Thema Treiber-Quellcodes empfehlen wuerdet. Von Linux hoert man ja dass es zwar eine umfangreiche Hardware-Unterstuetzung bietet aber dass alles etwas unuebersichtlich gehalten ist, darum wuerde ich gern mal die Freebsd-Quellen untersuchen, zumal das auch mein Lieblings-OS ist :) - Allerdings befuerchte ich dass ein OS das mit solchen extremen Abstraktionsebenen eine Wissenschaft fuer sich ist was die Sourcecodes betrifft. Sollte ich mir vllt. etwas anderes suchen wenn ich es einfach nur auf die Treiber abgesehen habe? Was fuer ein OS koenntet ihr mir empfehlen wenn FBSD euerer meinung nicht in frage kommt?

In erster linie interessiere ich mich fuer PCI-Handling und USB-Geraete.

lg, presswurst

2
Lowlevel-Coding / Kleines IDT-Problem
« am: 04. August 2007, 17:58 »
Hallo Community,

Schon den ganzen Tag versuche ich eine IDT anzulegen, leider ohne Erfolg so dass ich mal Teile meines Codes hier poste, vllt findet ja jemand den Fehler:

Zuerst die Struktur (habe ich von http://www.osdev.org/wiki/IDT):

#pragma pack(push,2)
struct idt {
unsigned short offset1;
unsigned short select;
unsigned char reserved;
unsigned char attr;
unsigned short offset2;
};
#pragma pack(pop)
-- das pragma sollte alignment-bytes verhindern.

Auf globaler Ebene habe ich einen Speicherbereich fuer die IDT reserviert (struct idt idt[256]).

Nun kommt die Funktion mit der ich einzelne IDT-Eintraege setze:

void setidt(struct idt *idt, unsigned int offset) {
unsigned short codesel;

asm ("mov %%cs, %%ax\n\tmov %%ax, %0" : "=r" (codesel) :: "%eax");

idt->select = codesel;
idt->offset1 = offset & 0xffff;
idt->offset2 = (offset >> 16) & 0xffff;
idt->attr = 0x8e;
}
(Man beachte dass es sich bei 'offset' um eine Adresse einer Funktion handelt)

Ich habe mal einen Test-Eintrag erstellt:
setidt(&idt[0x7f], (unsigned int)do_nothing);
(do_nothing ist eine Funtion die nur eine Anweisung enthaelt: 'iret', daher kann der fehler als auch nicht kommen).

Als Letztes kommt noch eine Funktion um die IDT zu laden (void loadidt(struct idt*)):

.globl _loadidt
_loadidt:

push %ebp
mov %esp, %ebp
mov 8(%ebp), %eax
mov %eax, (bas)
lidt (idts)
leave
ret

idts:
lim: .word 256*8-1
bas: .long 0


Das Ausfuehren eines int 0x7f erzeugt folgenden Fehler:

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


Kann mir vllt jemand sagen wo mein Fehler liegt? Bin schon fast am verzweifeln... :(


lg, presswurst
3
Lowlevel-Coding / Wieviel Speicher ist vorhanden?
« am: 03. August 2007, 16:23 »
Hallo Community!

Gerade stelle ich mir die Frage auf welche Weise man rausfinden koennte wieviel Speicher der Computer hat.

Kann mir das jemand beantworten?

lg, presswurst
4
Lowlevel-Coding / Cursorposition aendern?
« am: 02. August 2007, 22:20 »
Guten Abend ;)

Also da mein letzter Thread leider trollifiziert wurde und deshalb nun geschlossen ist danke ich dir mal hier fuer den Tip mit GRUB, bluecode! - Das Ding ist echt schick - und wieder was gelernt *g*

Aber jetzt wo ich im PM bin habe ich gleich mal noch eine Frage die etwas mit dne I/O Ports zu tun hat, und zwar wuerde ich gern die Cursorposition auf dem Bildschirm veraendern. Habe mir Ein paar Funktionen geschrieben wie clrscr() und puts() um in den Videospeicher zu schreiben, aber das sieht alles einfach nicht aus wenn der Cursor nicht folgt sondern immer an der einen Stelle herumduempelt:

http://666kb.com/i/aqlhcnmt8i93d64zw.png

Darum habe ich mal ein wenig gegoogled und auch das hier gefunden:

http://www4.informatik.uni-erlangen.de/Lehre/WS06/V_BS/oostubs/web/aufgaben/aufgabe1/cga.shtml

So wie ich das sehe muesste das also wie folgt funktionieren:

mov $14, %eax
mov $0x3d4, %dx
out %eax, (%dx)
mov $0x3d5, %dx
mov <neue_position>, %eax
out %eax, (%dx)

## und das gleiche nochmal mit register 15...

Aber das tut es auch nicht... Was mache ich denn da falsch?


lg, presswurst
5
Lowlevel-Coding / I/O Ports, externe Geraete etc?
« am: 31. July 2007, 21:23 »
Hallo Community!

Ich habe ja schon einige Erfahrungen mit Lowlevel-Programmierung gemacht, was mir aber bis heute ein Raetsel ist sind IO-Ports und auf den Speicher gemappte geraete (?) wie zb. der Grafikspeicher an den mal ueber den normalen Arbeitsspeicher rankommt.

So wie ich das bisher verstanden habe sind das zwei ziemlich verwandte Themen.

Also, die Fragen die mich bewegen sind folgende: Wie findet man raus welche Speicherbereiche auf ein Geraet gemappt (?) sind? Wie kann man diese "verknuepfung" zwischen Geraet und Speicher aufheben bzw. herstellen?

Was fuer I/O-Ports sind fuer was genau gut? wie komme ich an die Vendor-ID eines Speziellen PCI-Geraetes heran? usw usf.

Wie ihr seht ist mein Wissen ueber diese beiden Themen mehr als lueckenhaft und ich wuerde mich ueber jede Informationsquelle oder Erklaerung freuen die mit diesen Themen zu tun hat.

Danke schonmal im vorraus!
lg, presswurst
Seiten: [1]

Einloggen