Booten von der MMC-Card (Dual-boot)
Die Betriebssysteme von N800 und N770 lassen sich mit einem Boot-Loader ausstatten, der beim Starten nachfragt, von wo gebootet werden soll:

Vorteile
- Es ist immer ein funktionierendes Betriebssystem in Reserve vorhanden
- Mit mehreren MMC-Karten lassen sich mehrere optimierte Systeme bauen (eins zum Surfen, eins für Multimedia, eins für Navi...)
- Das System kann schneller werden, weil kein komprimiertes Filesystem verwendet wird (hängt natürlich vom Speed der MMC-Card ab: Bei meiner 1GB Kingston ist das look&feel etwa gleich wie beim Original-System)
Nachteile
- Speicherplatz wird verbraten
- Die MMC-Karte, von der gebootet wird, ist nicht mehr per USB für den PC als Laufwerk erreichbar (außer, man bootet wieder das interne Original-System)
- Henne-Ei-Problem: Die Installation des Boot-Loaders kann theoretisch schief gehen: Dann hat man ja noch kein bootfähiges Ersatzsystem, hat sich evtl. das Original-System zerschossen und muß neu flashen.
Bei dieser Beschreibung habe ich mich an diesem Artikel orientiert.
Root-Rechte
Zunächst benötigt man Root-Rechte und eine Linux-Konsole auf dem N800. Einfach geht das, wenn man folgende Pakete mit dem Programmmanager installiert:
- osso-xterm
- becomeroot
(Ggf. muß man zunächst noch zwei "Programmkataloge" (Repositories) installieren. Dazu klickt man z.B. auf dieser Seite auf "Maemo 3.0" und "Eko One". Bei der Browserabfrage "Öffnen" wählen, anschließend "OK". Osso-Xterm und becomeroot werden dann in der Liste der installierbaren Programme angezeigt.)
Nun läßt sich über System -> X Terminal die Konsole starten.
$ sudo gainroot
eintippen, gefolgt von Enter - und schon ist man der Herr und Meister des Betriebssystems...;-)
Speicherkarte partitionieren
Die Speicherkarte sollte groß genug sein - ich gehe hier von 1GB aus - das reicht locker aus.
Mit
# apt-get install e2fsprogs
werden die Treiber für ein benötigtes Linux-Dateisystem installiert. Die Abfragen zweimal mit "Y" bestätigen. Mit
# umount /media/mmc1
# umount /media/mmc2
hängen wir die Speicherkarten aus. Ist eine der Karten nicht eingesteckt, kommt die Fehlermeldung "not mounted" oder "Invalid argument". Das ist OK. Erscheint dagegen "device is busy", ist wahrscheinlich der "erweiterte virtuelle Speicher" eingeschaltet: Über System -> Steuerung -> Speicher -> Virtuell das Häkchen entfernen und nochmal umounten...
Haben wir die zu bearbeitende SD-Card im internen Slot stecken, geben wir jetzt den Befehl
# sfdisk /dev/mmcblk0
ein (ggf. für den externen Slot "sfdisk /dev/mmcblk1"). Der durchrauschende Hilfetext interessiert uns nicht weiter. Am Eingabeprompt folgendes eingeben (die beiden Kommas ohne Leerzeichen!)
Hinweis: 15000 entspricht im Folgenden der Anzahl an Zylindern für die Daten-Partition, d.h. z.B. bei 32768 Bytes/Zylinder ergeben sich ca. 469 MB für Daten. Wer also eine größere Speicherkarte verwendet sollte die erste Partition größer machen, so dass für die zweite Partition (Betriebssytem) noch etwa 500 MB bleiben.
Beispiel: 8 GB-SD-Karte / 250304 Zylinder je 32768 bytes (lässt sich über "sfdisk -l /dev mmcblk0" auslesen)
- erste Partition (mmcblk0p1 - Daten): 250303 Zylinder
- zweite Partition (mmcblk0p2 - Betriebssystem): 15000 Zylinder (ca. 469 MB)
Im Folgenden die Befehle für eine 1 GB-Karte:
# /dev/mmcblk0p1 : 1,15000,6
# /dev/mmcblk0p2 : 15001,,
# /dev/mmcblk0p3 : mit Enter bestätigen
# /dev/mmcblk0p4 : ebenfalls Enter
Die folgende Frage beantworten wir mit "y". Nun werden die Partitionen auf der Speicherkarte erstellt.
Partitionen formatieren
Mit
# mkdosfs /dev/mmcblk0p1
formatieren wir die erste Partition der internen SD-Card mit FAT (entsprechend "mkdosfs /dev/mmcblk1p1" für eine externe Card)
Nun das Gerät neu starten mit
# shutdown -r now
Nach dem Reboot öffnen wir wieder die X-Term-Konsole und werden mit "sudo gainroot" erneut zum Admin.
Mit
# mke2fs /dev/mmcblk0p2
(bzw. "mke2fs /dev/mmcblk1p2" bei externer SD-Card) formatieren wir die 2. Partition mit einem Linux-Dateisystem.
...und nochmal neu starten mit "shutdown -r now", Konsole öffnen, Root werden wie gehabt.
Nun müssen wir dem Kernel noch beibringen, daß es ein neues Filesystem gibt:
# insmod /mnt/initfs/lib/modules/2.6.18-omap1/mbcache.ko
# insmod /mnt/initfs/lib/modules/2.6.18-omap1/ext2.ko
und jetzt wieder mounten mit
# mount /dev/mmcblk0p2 /media/mmc2
Boot-Menue installieren
Der nachfolgende Vorgang kann länger dauern, deshalb entweder das N800 jetzt ans Ladegerät hängen oder sicherstellen, daß der Akku voll aufgeladen ist!!
Wir laden mit dem Browser die Datei http://fanoush.wz.cz/maemo/initfs_flasher.tgz herunter und speichern sie z.B. im Ordner "Dokumente".
Die folgenden Befehle packen das Script aus und starten es:
# cd /home/user/MyDocs/.documents/
# tar zxvf initfs_flasher.tgz
# cd initfs_flasher/
# ./initfs_flash
Die Sicherheitsabfragen bestätigen wir mit "yes", dann Enter. Die Frage "Remove unneeded extra stuff?" mit "no" ablehnen(!). Bei "Ready for flashing" wieder "yes". Schließlich wird mit "Enter" wieder mal neu gestartet und - voila - wir sehen das Boot-Menue!
Jetzt mit der Wipptaste den Eintrag "Internal flash" auswählen (auf MMC ist ja noch kein Betriebssystem vorhanden) und mit der Mittel-Taste bestätigen.
Betriebssystem-Clon erzeugen
Wir werden in der Konsole wieder Root (so langsam können wird das im Schlaf...) und tippen ein:
# insmod /mnt/initfs/lib/modules/2.6.18-omap1/mbcache.ko
# insmod /mnt/initfs/lib/modules/2.6.18-omap1/ext2.ko
# mkdir /opt/ (falls das Verzeichnis nicht schon existiert...)
# mount /dev/mmcblk0p2 /opt
# mkdir /floppy/
# mount -t jffs2 /dev/mtdblock4 /floppy
Die folgenden Befehle können Warnungen ausgeben, die wir alle mit "Yes" bestätigen:
# apt-get -d install tar
# cd /var/cache/apt/archives/
# mkdir /tar-temp/
# dpkg -x tar*.deb /tar-temp/
# /tar-temp/bin/tar cf - -C /floppy . | /tar-temp/bin/tar xvf - -C /opt
Achtung die genannten Kommandos funktionieren unter Umständen nicht mit einem frischen Diablo. In diesem Fall die folgenden Kommandos verwenden:
# apt-get -d install gnutar
# cd /var/cache/apt/archives/
# mkdir /tar-temp/
# dpkg -x gnutar*.deb /tar-temp/
# /tar-temp/bin/gtar cf - -C /floppy . | /tar-temp/bin/gtar xvf - -C /opt
(Der senkrechte Strich "|" findet sich auf der Touch-Screen-Tastatur unter "Sonderzeichen" zwischen "Integral" und "pi").
Jetzt werden die Dateien auf die SD-Card kopiert.
Nun noch mit
# umount /opt
# umount /floppy
die temporären Laufwerke aushängen.
Danach den Boot-Loader impfen (die Standardauswahl auf das Speicherkarten-System umstellen)
# chroot /mnt/initfs cal-tool --set-root-device ask:immc2
Hinweise:
- Wenn man "ask:" weglässt, dann wird die Auswahl übersprungen (das Booten geht also schneller). Man kann immer noch die Menü-Taste biem Booten drücken (siehe Boot-Hinweis) damit die Bootauswahl angezeigt wird
- Wer wieder zum System im Flash-Speicher wechseln möchte muss obigen Befehl mit "ask:flash" anstelle von "ask:immc2" ausführen um die Standardauswahl zu ändern
Schließlich das N800 neu starten
# shutdown -r now
Jetzt kann von MMC gebootet werden und als Reserve haben wir nun immer noch die Möglichkeit, mit "Internal Flash" das Originalsystem zu starten.
Zum Schluß:
- Von der frisch beschriebenen SD-Card am besten jetzt gleich ein Backup am PC oder auf eine weitere SD-Karte machen (via Card-Reader oder vom anderen Slot aus)
- Nicht vergessen, ggf. den virtuellen Speicher wieder zu aktivieren!
- Die Ordner /tar-temp/ und Dokumente/initfs_flasher/ kann man nun - in beiden Betriebssystemen - wieder löschen.