TAG | OS
Sometimes, even if you don’t want to install a pirated Windows version, you may want to dump and modify the BIOS of a computer.
Especially if you are developing some kind of an ACPI subsystem for your own small operating system kernel.
Doing this with real hardware is kinda risky and complex.
But what about virtual machines like VMware? They have a BIOS, but how can we get our hands on it? (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…)
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…)
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.

Screenshot des Aktuellen 4gbKernel-Branches in einem Qemu.

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