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 - Martin Erhardt

Seiten: [1] 2 3 ... 9
1
Offtopic / Re: Besonders kompartible Tablets?
« am: 29. August 2014, 16:15 »
Droiden der Transformer Reihe von Asus kann ich empfehlen. Tastaturdock dran und schon ist es Netbook. Hab auf meinem TF300T auch schon ein Arch gebootet, ging aber eher ne so gut .. Debian im chroot und Cyanogenmod aber kein Problem.
Asus hat bei dem TF300 auch ein brauchbares Office-Paket dabei.

Mit Aide kann man auf den Droiden sogar für Android Apps schreiben - hab ich sogar mal produktiv gemacht^^
Das hab ich auch mal ausprobiert, allerdings halt nur auf meinem android handy, wo ich weder viel sehen noch viel schreiben kann. Außerdem ging das mit dem Android NDK nicht auf Anhieb.
Wenn du ein Android Tablet nimmst kann ich folgende Apps empfehlen:
https://play.google.com/store/apps/details?id=champion.gnuroot
https://play.google.com/store/apps/details?id=com.spartacusrex.spartacuside
https://play.google.com/store/apps/details?id=com.pdaxrom.cctools
Ansonsten ist ein IBM-PC kompatibles Tablet immer noch am besten nur leider nur noch schwer zu bekommen. Aber Vorsicht unbedingt drauf achten das es einen richtigen PS/2 Tastaturanschluss hat.
Das sieht wirklich interessant aus. Ich möchte hier noch auf limbo einen qemu port hinweisen, der zwar in keinem so ausgereiften Stadium ist und nicht mehr weiterentwickelt wird aber trotzdem zum testen des eignen OS interessant sein könnte:
http://sourceforge.net/projects/limbopcemulator/?source=navbar
Ansonsten könnte man auch versuchen mit deinen obigen Tools Qemu selbst zu kompilieren und mit -curses zu starten, sofern curses oder ncurses in deren Lieferumfang ist.
2
Offtopic / Re: NSA und die Sicherheit von Betriebssystemen
« am: 23. August 2014, 21:55 »
Ich möchte übrigens in diesem zusammenhang mal auf cjdns und das hyperboria Network hinweisen( https://github.com/cjdelisle/cjdns http://hyperboria.net/ ) Ich hab darin schon mit Leuten über IRC gechattet, nachdem wir gemerkt haben dass die Behörden Geheimdienste oder sonstwer bei Tor die Exit-nodes besitzen könnten(:P), aber die Configuration von cjdns war nicht ganz einfach und der Nutzen von solchen Netzwerken hängt ganz davon ab wie viele das sind und das sind momentan wenige die cjdns benutzen, weil Bequemlichkeit den meisten Nutzern dann doch wichtiger als Privatsphäre ist.

Ich kann mir persönlich durchaus vorstellen, dass man mit einem neuen Betriebssystem erfolgreich sein könnte, wenn es nicht aus den USA kommt und wenn es zusätzlich einige einzigartige Features mitliefert. Ich habe mir da schon einiges überlegt, aber ich werde es nicht ausführen.
Das soll jetzt wirklich keine Unterstellung sein, mit deinem Profilnamen sieht es bloß ziemlich schlecht aus einen so plumpen Antiamerikanismus vor sich herzutragen. Obwohl Ich Linux insgesamt doch als internationales Projekt bewerten würde, das übrigens ganz ursprünglich aus Finnland kommt, stimmt es zwar, dass Linux insofern US-amerikanisch ist, da die US-amerikanische Nationalität unter Kernel-Entwicklern am häufigsten ist, bloß werden die allermeisten von ihnen, wie auch die allermeisten anderen Amerikaner nie etwas mit der NSA zu tun gehabt haben. Nach deiner Logik wäre übrigens ein doitsches Betriebssystem kein bisschen glaubwürdiger als ein amerikanisches, weil dann ja der BND seine Finger im Spiel gehabt haben wird.
3
Lowlevel-Coding / Re: Ports und Index
« am: 09. May 2014, 18:31 »
CPU: Denke x86 (...) Ist das nicht AVR Programmierung?
1. Du wiedersprichst dich, oder meinst du mit x86 nur die Entwicklungsumgebung.

2. Ist das eigentlich doch gar kein syntaktisch korrekter inline Assembler. Denn das Assembler kommt doch in anführungszeichen und in klammern und der austausch mit C Variablen funktioniert über die Doppelpunktschreibweise.

Also bei mir sehen INB und OUTB als Makros so aus https://github.com/MartinErhardt/Lizarx/blob/master/src/kernel/inc/HAL/x86/asm_inline.h ,was auch funktioniert , wobei ich da aber auch besser inline Funktionen draus machen sollte, wegen den Datentypen:
#define OUTB( PORT, DATA) asm volatile ("outb %0, %1" : : "a" ((uint8_t)DATA), "Nd" ((uint16_t)PORT));
#define INB( PORT,DATA ) asm ("inb %1, %0" : "=a" (DATA) : "Nd" (PORT));
4
Softwareentwicklung / Re: [All In One]-Question lolxdfly
« am: 08. May 2014, 15:06 »
Etwas was Ich dir auch absolut empfehlen würde ist memory examining. Setze einfach kurz vor der Aktivierung von Paging eine Endlos-schleife und lass dir die Adresse der Pagedirectory table ausgeben. Dann Qemu starten, in den Qemu monitor wechseln(Strg-Alt-2) und mit xp <addresse der page_directory table> schauen was dort steht. Dann kannst du so zu den pagetables navigieren und schauen ob die Einträge stimmen die Flags gesetzt sind, überhaupt irgendwas im Eintrag steht oder die Flags vielleicht von den addressen überschrieben wurden. Häufig ist in solchen Fällen einfach ein Datentyp, eine Struktur, oder ein Mokro falsch definiert. Mit memory examining siehst du das sofort.
5
Das versteh ich jetzt nicht,
also wenn ich auf 0x0B zeige kann ich auch irgendwas anderes ansprechen als die CMOS?
Wie sprech ich denn dann die CMOS an ohne das ich was falsches anspreche?

Ist das so richtig (mit den Bits)?:
typedef unsigned char  uint;

#define Bit0
#define Bit1
#define Bit2
#define Bit3
#define Bit4
#define Bit5
#define Bit6
#define Bit7

uint* address = (uint*)0x0B;
uint bit;

void read_bit()
{
*address = bit;
}

void change_bit()
{
*address = ((1 << Bit0) | (1 << Bit2 | (0 << Bit7)));
}

LG

Nun ja wenn du den Artikel gelesen hättest wüsstest du, dass über die I/O Ports ins CMOS geschrieben und daraus gelesen wird.

Außerdem liest du mit *address = bit; nicht den Wert an "address" in "bit" ein, sondern schreibst "bit" an "address" und wie schon Svenska angemerkt hat leerst du Bit7 an "address" so:

*address &= ~(1<<Bit7)Außerdem empfiehlt es sich die Makros auch mit den dazugehörigen Werten zu definieren was dann eg. so aus sieht:
#define Bit0 0
#define Bit1 1
#define Bit2 2
#define Bit3 3
#define Bit4 4
#define Bit5 5
#define Bit6 6
#define Bit7 7




Allerdings kann hinter einer Adresse auch eine Hardware stehen. Dafür ist der I/O-Adressraum da, geht aber auch im Speicheradressraum (MMIO). Dann liest man nicht das, was man da vorher reingeschrieben hat, sondern das, was die Hardware z.B. gerade denkt. Und man schreibt nicht, was man später wieder lesen will, sondern man weist das Gerät z.B. an, etwas zu tun. (Anmerkung: Deswegen sollte man nicht auf wahllose Adressen schreiben. Manche Hardware geht kaputt, wenn man sie falsch anspricht.)

:-o Im moment liegen bei mir in x86_64(src/kernel/inc/HAL/x86_64/macros.h):
//-------------------------------------------------------------------------memory-map--------------------------------------------------------------
#define GDT_X86_64 0x114000
#define INIT_PAGE_TBL_ADDR 0x113000
#define INIT_PAGEDIR_TBL_ADDR 0x112000
#define INIT_PAGEDIRPTR_TBL_ADDR 0x111000
#define INIT_PAGEMAPLEVEL4_TBL_ADDR 0x110000
#define BSP_STACK 0x104000
#define TRAMPOLINE 0x007000
und in x86(src/kernel/inc/HAL/x86/macros.h):
#define BSP_STACK 0x104000
#define TRAMPOLINE 0x007000
Ich wusst zwar schon, dass das auf die Dauer nicht so gut ist(falls die addressen nicht frei sind in der Bios memory map), aber die Vorstellung damit Hardware zu beschädigen ist schon - ich nenns mal gruselig.
6
Lowlevel-Coding / Re: SSE benutzen
« am: 17. July 2013, 17:05 »
Warum muss man denn SSE oder AVX initialisieren? Mein Kernel initialisiert nur die FPU aber SSE nicht und die Programme können SSE ohne Probleme verwenden.
Zumindest ein Programm zu einem Zeitpunkt. Wenn man FPU/SSE erlaubt, muss man beim Taskwechsel ggf. darauf achten, den Zustand der FP- bzw. XMM-Register zu sichern (fxsave/fxrestor). Wie man die obere Hälfte der YMM-Register sichert, weiß ich nicht.
In den Intel Manuals in 13.10.1 und .2 steht wie man AVX aktiviert. Man muss wohl zusätzlich bit 18 in cr4 setzen(CR4.OSXSAVE), um dann XSETBV auszuführen wobei EDX=0x0 und EAX=7 seien sollte. Dann wird mit fxstor und fxrestor auch die obere Hälfte von ymm gesichert und erst wenn man das so getan hat, kann man AVX Instruktionen ausführen, womit ich meine eigene Frage beantwortet hätte :D
7
Lowlevel-Coding / Re: SSE benutzen
« am: 17. July 2013, 16:05 »
Warum muss man denn SSE oder AVX initialisieren? Mein Kernel initialisiert nur die FPU aber SSE nicht und die Programme können SSE ohne Probleme verwenden.
Nunja eigentlich löst eine SSE Instruktion einen #UD Undefined Opcode aus, wenn nicht entsprechende bits in CR0 (Bit 2 leeren und 1 setzen)und CR4 (Bit 9 und 10 setzen) gesetzt wurden. Allerdings sehe ich hier http://wiki.osdev.org/FPU dass man bei der FPU dasselbe machen muss, du SSE also schon mitinitialisiert hast.
8
Lowlevel-Coding / Re: SSE benutzen
« am: 17. July 2013, 10:44 »
Eine Liste von SSE-Befehlen (bis SSSE3) hätte ich unter http://xanclic.bplaced.net/sse.html. Eine Möglichkeit zum Potenzieren kenne ich nicht.
AVX ist allerdings nicht gut dokumentiert.
Eigentlich ist AVX schon ziemlich gut dokumentiert – soweit ich weiß, erweitert es einfach die 128-Bit-XMM-Register zu 256-Bit-YMM-Registern (auf denen man dann weiterhin die SSE-Befehle ausführen kann) und führt (für zumindest einige SSE-Befehle) das drei-Operanden-Format ein, oder gibt es da sonst noch was neues?

EDIT: Hm, ja, WP sagt, es gibt auch ein paar neue Befehle, die im Allgemeinen der Behandlung der neuen oberen Hälfte der YMM-Register geschuldet sind. Die stehen aber auch alle in meinem Intelmanual.
stimmt schon aber ich dachte jetzt eher an die Initialisierung von AVX(auch wenn OsDevNewbie das vielleicht nicht primär gemaint hat :) ); Oder wird AVX auch gleichzeitig aktiviert wenn SSE initialisiert wird?
9
Lowlevel-Coding / Re: SSE benutzen
« am: 16. July 2013, 23:44 »
Ist dies nihct möglich?
http://wiki.osdev.org/SSE
sowie chapter 11.3 in den AMD und 9.6 in den Intel Manuals. AVX ist allerdings nicht gut dokumentiert.
10
Lowlevel-Coding / Re: Was genau ist ein Sprung?
« am: 24. June 2013, 17:49 »
So wie ich es sehe, sind viele Antworten bezüglich zu einem Prozessor (80x86) geschrieben worden.
Allgemein und unabhängig vom Prozessortyp kann man sagen, daß ein Sprung nichts weiteres ist, daß ein Register welcher der Befehlszähler ist, mit einem Adresswert geladen wird. Im Prinzip kann ein Prozessor ohne Sprungbefehle auskommen, wenn beispielsweise ein Move-Befehl wie move <Programmzähler>,<Adresswert> existieren würde. Ein Jump-Befehl tut genau dieses, wo der Programmzähler nicht explizit angegeben werden muß.
Einige Jump-Befehle werden nur in Abhängigkeit von Flags ausgeführt, so daß nach einer Bedingung gesprungen wird, sofern sie erfüllt ist, oder der Jump-Befehl wird ignoriert und der Programmzähler erhöht sich um den Betrag, um den nächsten folgenden Befehl auszuführen.
Ja ein unbedingter Sprung ist nichts anderes als ein mov $Addresswert, %eip in X86. Allerdings deutest du auch schon an das es bedingte Sprünge gibt etwa jnz jz jl jg etc.. Da sich auf X86 nur diese Sprünge bedingt ausführenlassen, sind Sprung Anweisungen als Implementierung von if else in den Hochsprachen unumgänglich. Interessant ist hier allerdings ARM; Dort lässt sich jede Instruktion durch einen Suffix bedingt ausführen. jz entspräche dann:

cmp r0. r1
moveq r15, #addr
11
tyndur / Re: týndur einrichten unter Win7 64-bit
« am: 06. June 2013, 16:46 »
oha mal ein anderer user als Jidder :-o . Hab nen Raspberri PI 2.0 mit Linux aber dort laggt das mega. Mal gucken ob ich nen Linux als 2. Betriebssystem nehme. Welche is den dafür gut geeignet Ubuntu?
Naja Ubuntu mit Unity ist nicht so gut wegen der Suchleiste bei der alle Sucheingaben protokolliert werden, aber Linux Mint oder Kubuntu sind einfach zu installieren und erfüllen(mit einem leistungsstarken Pc zumindest :D ) alle Ansprüche.

Was das Raspberry Pi angeht müsstest du dort tyndur oder dein eigenes OS crosscompilern für x86 oder x86_64, was die ganze entwicklung komplizierter macht ganz abgesehen dafür das man auch einen X86 Emulator braucht der auf ARM lauffähig ist, (weiß nicht ob das mit qemu geht).
12
Lowlevel-Coding / Re: kbc scancode translate
« am: 30. May 2013, 21:53 »
translate_scancode in dem KBC Beispiel ist eine C Funktion wie jede andere.
Natürlich musst du die selber deklarieren und definieren.

Und im Artikel steht ausdrücklich:
Zitat
Dieses Codestück unternimmt genau die oben beschriebenen Schritte. Die Funktion „translate_scancode“ übersetzt, wie oben im Kommentar angegeben, die Scancodes in interne Keycodes der Code dazu findet sich ebenfalls im tyndur-Repositoryhttp://git.tyndur.org/?p=tyndur.git;a=blob;f=src/modules/kbc/sc2kc.c. Es handelt sich dabei aber nur um eine mögliche Umsetzung und keineswegs um die einzig mögliche, hier muss man sich selbst überlegen wie das für den konkreten Anwendungsfall am komfortabelsten ist.

Du siehst lesen lohnt sich! :D
13
Softwareentwicklung / Re: String mit Syscall übergeben
« am: 17. May 2013, 22:27 »
Du übergibst die addresse auf den string(dafür erstellt  man in C mit dem & Operator einen Pointer den man dann zu einem Int typ casten kann).
Geht ungefähr so:

//----------------------------------------------------------user---------------------------------------------------------
char[10]string = "hello world";
char * str_ptr = &string[0];// get pointer
asm volatile ("int $0x30"::"a"((unsigned int)str_ptr));//cast pointer to int, coz we can only pass integral values over asm-inline
//----------------------------------------------------------kernel-------------------------------------------------------
char * str = (char*)cpu->eax;
kprintf(str);
Keine Garantie aber so ähnlich sollte das aussehen.
14
Softwareentwicklung / Re: Paging Error 14
« am: 14. May 2013, 23:01 »
Es gibt verschiedene Möglichkeiten. Die einfachste(die auch in unserem tollen Tutorial(http://www.lowlevel.eu/wiki/Teil_6_-_Multitasking) angesprochen wird ist die Realisierung als soft-Interrupts).
Das heißt du registrierst einen neuen Interrupt-handler (bei Linux bspw. für Interrupt 0x80).

Diesen Interrupt kannst du nun vom Userspace mit asm volatile ("int $0x80"); oder sowas auffrufen.

Damit dein Syscall-Handler auch weiß, dass der print syscall gemeint ist empfiehlt es sich vorher ein Interrupt-nummer nach (z.B) EAX zu verschieben und ein pointer auf den zu printenden String kann man vorher (z.B) nach EDX verschieben.
15
Softwareentwicklung / Re: fprintf Funktioniert nicht
« am: 03. April 2013, 14:22 »
Ich verstehe dich nicht  :?
Solange du den Code nicht veröffentlichst ist es sowieso egal und wenn du es veröffentlichst interessiert es eig auch keinen, aber es gibt keine Garantie.
Außerdem kann man mit kopiertem eig proprietären Code nicht gut angeben und das wollen wir doch alle ;) .
16
Softwareentwicklung / Re: fprintf Funktioniert nicht
« am: 02. April 2013, 21:05 »
/* Copyright (c) 1988 AT&T */
/*   All Rights Reserved  */

/* THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF AT&T */
/* The copyright notice above does not evidence any    */
/* actual or intended publication of such source code. */
Darf ich das sehen?
17
Softwareentwicklung / Re: fprintf Funktioniert nicht
« am: 12. March 2013, 00:29 »
Die optionalen Parameter vom printf können nicht einfach so an das fprintf weitergereicht werden. Du musst in printf das Zeug mit va_list arg; va_start ... machen, und das dann an eine Funktion (z.B. int vfprintf(FILE *, const char *, va_list arg);) übergeben, die dann die eigentlich Ausgabe macht. Beispiel hier: http://www.cplusplus.com/reference/cstdio/vfprintf/
Siehe auch:
http://stackoverflow.com/questions/3672753/how-to-pass-variable-number-of-arguments-from-one-function-to-another
18
Stimmt es ,dass man bei smp nur mehrere threads DESSELBEN Prozesses gleichzeitig auf den verschiedenen kernen laufen lassen kann,weil sich alle Kerne eine MMU teilen?

PS: Welche pros haben schon alle SMP Unterstützung implementiert?
19
Lowlevel-Coding / Re: Wo wird UEFI gespeichert?
« am: 21. February 2013, 22:36 »
Also wenn du sowas machst überschreibe doch einfach den BIOS CHIP, und ACHTUNG!
Problem ist nur, dass Das Bios auf EEPROM speichern gespeichert wird dieser speicher kann zwar addressiert werden von der Cpu wie, steht aber für "Read Only Memory" mit Überschreben is also nix, das lässt sich höchstens einmal beschreiben oder muss schon mit Inhalt gefertigt werden). Man könnte den EEPROM in dem Bios vllt ersetzen durch einen frisch gebrannten, aber
ich denke das der fest auf dem Motherboard verlötet ist, gibt ja kein Grund den mal auszutauschen, oder? ;)
Neuere Flash-EEPROMs kann man schon neu reflashen, sogar so schnell das er in USB-Sticks eingesetzt wird dort greift dann aber ein Mikro-Controller auf die ROM zu und nicht die eig CPU. (Linkshttp://www.searchstorage.de/themenbereiche/storage-hardware/halbleiterspeicher/articles/115148/index2.html)
wenn du es mit deinem eigenen BIOS versemmelst, und der pc nicht mehr bootet hast du ein problem ;)
Wenn du eine neue Firmware proggst bootet erst mal gar nichts
Und dadurch, das der Code ebend nicht offen ist, denke ich, dass es einige Sicherheitsfallen geben wird. Im schlimmsten Fall könnte es sein (nur eine Idee, weiß nicht, ob es möglich ist), dass die Gesamte Festplatte übers Internet verschickt wird. Zudem weiß ich nicht, ob UEFI nach dem Booten des Betriebssystems abgeschaltet wird. Wäre es noch an, könnte es Daten mitlesen. Und da ich ein zu 100% sicheres Betriebssystem entwerfen und Programmieren will, stellt dies eine Gefahr dar. Viele Grüße, Sören
PS: Sollte etwas nicht stimmen - korrigiert mich bitte :D
Wer? wo? was? verschickt dein BIOS deine Festplatte ^^? Und ein 100% sicheres OS ist eins das gar keine Programme ausführt also eig kein OS.


Eig finde ich aber schon, dass eine eigene Firmware recht interressant ist. Gut Ich will erst mal ein OS auf die Beine stellen.
20
Moin Niklas,
Ich bin mir relativ sicher deinen Fehler gefunden zu haben; In AT&T ASM Syntax werden die einzelnen Asm Instruktionen nicht mit einem Semilkon abgeschlossen.
Bloß der gesamte ASM inline aufruf in C wird mit einem Semilkon abgeschlossen(wie man z.b. hier in den Beispielen sieht: http://www.lowlevel.eu/wiki/Teil_2_-_Assembler_101)
(Es kann sinnvoll sein dem Forum mitzuteilen ob es sich um einen Syntax oder Laufzeitfehler handelt, bei letzterem hilft nämlich kein Debugging sondern besser C oder ASM lernen ;) )
Seiten: [1] 2 3 ... 9

Einloggen