G33K @ Work | Basteleien eines Geeks



TAG | Development

Jul/10

12

OS Development Demo Code

A while ago, I wrote some demo code to demonstrate various things you need to do to write your own operating system.
In May 2010 I held a lecture and workshop about this code and the concepts at SigInt conference in Cologne, Germany.

I just thought that this code may be interesting to other people who did not attend this conference. (weiterlesen…)

, , , , , , , , ,

Almost a year ago I bought an HTC Magic (also known as the G2) phone as a replacement for my iPhone.
I was quite happy with it since it had the newest Android 1.5 and there was also an update released by Google to get it to version 1.6.

Now, that there are much fancier phones out there, like the Nexus One and Motorola Milestone, there must be a reason for people to buy them. The consequence about that is that they are holding back any updates to Android 2.0 or 2.1 for older phones. At least that’s my impression.

I also ever wanted to build and run my own Android since it is open source. At least that’s what Google says.
My first steps were quite disappointing since there was no device specific package for my G2 in the source tree. There was only one for the HTC Dream (G1).

Yesterday I wanted to give it another try and it was a success. I will post my steps here which are especially for the HTC Magic (or G2, HTC Sapphire, MyTouch 3G, Google IO – they are all the same) but it should be possible to do this with other phones as long as you have all the device specific blobs like the GSM Baseband layer or low level hardware drivers for your specific device.
Also keep in mind that this won’t be a normal guide like “How can I root this phone?” I assume that you more or less know what you are doing. So don’t blame me when you brick your phone: Shit happens and I’m not going to fix it. (weiterlesen…)

, , , , , , , , , ,

Feb/10

19

StudiPlaner

Der StudiPlaner ist eine Datenbankbasierte Applikation, die ich damals zu Beginn meines Studiums angefangen habe zu entwickeln.
Grund war, dass ich einfach irgendeine Applikation unter .NET mit einer Datenbankschnittstelle schreiben wollte.

Es gibt einige Möglichkeiten Vorlesungen, Professoren, Dokumente, Termine etc. anzulegen, die Software ist aber lange nicht fertig und ich habe die Lust verloren weiter an ihr zu entwickeln.

Der Quellcode baut in der aktuellen Revision auch nicht, da ich mitten in einer Migration von SQL Compact Edition auf ein SQLite stecke. Einige Revisionen vorher sollten aber funktionieren.

Den Code findet man auf GitHub.

Screenshots:

, , , ,

Jan/10

17

I can haz FPGA?

Da ises weg, das Weihnachtsgeld.

Draufgegangen ist das unter anderem für dieses hübsche, aber leider teure FPGA-Board mit einem Xilinx Spartan 3 FPGA:

(weiterlesen…)

, , ,

Jan/10

3

Systemprogrammierung

Mein momentanes Interessenfeld bezieht sich ja sehr stark auf alles, was mit System- und Hardwarenaher Programmierung zu tun hat.
Da ich auf der Zugfahrt zum 26c3 nicht besonders viel zu tun hatte und die AMD und Intel Dokumentationen auf meinem Rechner hatte, habe ich mal angefangen mich um die Virtualisierungsfunktionen, die diese beiden Hersteller da so in ihre Prozessoren verpflanzen, zu kümmern. (weiterlesen…)

, , ,

Dez/09

14

GeexOS

Irgendwann, im Laufe eines Informatikstudiums, hört man auch mal sowas ähnliches wie “Architektur von Rechnersystemen und Betriebsystemen”. Und da sich die dort vorgestellten Verfahren ja alle so einfach anhören und man sowas schon immer mal machen wollte, fängt man als Geek dann plötzlich an ein Betriebssystem zusammenzuhacken: Das GeexOS.

Wer jetzt schon heiß auf Code ist, kann ihn hier bekommen: github

Die Architektur, die dieser Kernel haben soll, ist ein Mikrokernel. Bisher ist davon allerdings nicht viel implementiert, da ich mir seit ein paar Monaten versuche Gedanken über die Speicherverwaltung im Kernel zu machen und sowieso nicht immer Lust habe an diesem Projekt weiterzuarbeiten.

Aktuell Implementierte Features:

  • Ein-/Ausgabe von Text über einen 80×25 Zeichen Textmodus auf dem Monitor
  • Ein-/Ausgabe von Text über eine serielle Schnittstelle
  • Bootstrapping eines x86 Prozessors und Umgebung (Protected Mode, Interrupts, PIC, PIT)
  • Interrupthandling, welches bisher noch sehr Plattformabhängig ist
  • Ansätze eines HALs
  • Paging
  • Timer
  • Das Buildsystem, basierend auf GNU make

Im master-Branch auf GitHub findet man noch einen implementierten Heap, den ich mitlerweile aber wieder weggeworfen habe, da ich ihn durch einen SLAB-Allocator mit etwas besserem Virtuellem Speichermanagement im Hintergrund ersetzen möchte.
Eine weitere Designentscheidung, die ich im Züge des neuen Speichermanagements getroffen habe, ist das der Kernel auf einem 32 Bit System die vollen 32 Bit an virtuellem Speicher bekommen wird und nicht in den virtuellen Speicher eines jeden Prozesses eingeblendet wird. Dies geht zwar mit einem Performanceverlust einher, da ich bei jedem Systemaufruf oder Interrupt das Page Directory wechseln muss und somit der TLB (Translation Lookaside Buffer) geleert werden muss. Wie hoch dieser Verlust sein wird, weiß ich allerdings nicht. Mac OS X macht das auch so und das ist auch noch schnell.

Alle diese Änderungen befinden sich momentan im Branch 4gbKernel auf github.

Weitere geplante Features sind:

  • Ein Scheduler mit Interprozesskommunikation über Shared Memory
  • Dieser Shared Memory kann auch auf anderen Rechnern liegen und das System kann somit verteilt werden
  • Einige Userspace System-Daemons, die Sachen wie das Prozessmanagement, Userspace Speicherverwaltung, Netzwerk, Dateisysteme etc. übernehmen
  • Einige Userspace Libs, die Posix implementieren, um GNU-Software ausführen zu können
  • Evtl. einen DOS-Kompatiblitätslayer

Bis diese Sachen wirklich alle implementiert sind wird allerdings noch einiges an Zeit vergehen.

GeexOS 4gbKernel Branch
Screenshot des Aktuellen 4gbKernel-Branches in einem Qemu.

GeexOS Scheduler
Screenshot mit kleinem Scheduler, der Kontextwechsel zwischen 2 Threads ausführt.

, , , ,