Het RapuYama-Linux project is gericht op het poorten van de Linux-kernel naar het RapuYama SoC-platform, met een specifieke focus op de Nokia E6. Door een combinatie van Symbian-side loaders, reverse engineering van firmware en experimentele drivers, is het gelukt om een ARM Linux-kernel (versie 6.12) succesvol op te starten.
Huidige mijlpalen:
- De kernel boot door tot BusyBox
/init.
- Er is een interactieve shell beschikbaar via een USB-serieelpoort.
- De Broadcom VideoCore III is geconfigureerd om een framebuffer-console op het eigen display van de telefoon te tonen.
Technische specificaties: Het platform maakt gebruik van een ARM1176JZF-S CPU en 256 MiB RAM. Het project omvat een volledige toolchain voor het bouwen van de kernel en de Device Tree (DTB), waarbij de bootsequentie start vanuit Symbian.
Beperkingen: Het project bevindt zich in een vroege fase. De display-driver is nog traag vanwege het gebruik van PIO voor frame-updates, en diverse randapparatuur is nog experimenteel of niet volledig gevalideerd.
RapuYama-Linux: Linux-bring-up voor het RapuYama-hardwareplatform
Huidige Status
Linux start nu op de telefoon op en geeft beelden weer op het scherm. De eerste bootlog laat zien dat de RapuYama-interruptcontroller de timer IRQ ontvangt, de kernel overschakelt naar zijn RapuYama-clocksource en dat BusyBox /init start. Er kan een interactieve shell worden gedraaid via USB-serieel. Daarnaast boot Linux nu de Broadcom VideoCore, zet het LCD-paneel onder stroom en toont een framebuffer-console op het eigen display van de telefoon.
Mijlpalen
| Datum | Mijlpaal |
| 13-10-2026 | Kernel boot door tot BusyBox /init (log) |
| 13-10-2026 | Interactieve shell via de USB gadget seriële poort |
| 14-10-2026 | Eerste beeld op het E6-paneel vanuit Linux: VideoCore geboot door de kernel, /dev/fb0 + fbcon (log, notes) |
Hardware Specificaties
| Component | Details |
| Application CPU | ARM1176JZF-S, ARMv6K |
| SoC | Nokia RapuYama |
| RAM | 256 MiB op fysiek adres 0x10000000 |
| Display | Broadcom BCM2727B1 / VideoCore III, 640x480 paneel (id 01 8b 79), aangestuurd via de ViSSI host bus |
| Bootomgeving | Symbian^3 / EKA2, met een eenrichtings-overdracht (handoff) naar Linux |
| Kernel | Linux 6.12, gebouwd voor ARMv6 |
Dit is een apparaatspecifieke poort en geen generieke EKA2-compatibelijkheidslaag. Hoewel sommige resultaten mogelijk overdraagbaar zijn naar andere telefoons met dezelfde SoC, heeft elk model een eigen board-beschrijving, geheugen- en bootvalidatie en peripheral bring-up nodig.
Functionaliteiten
Het project bevat de volgende onderdelen:
- Symbian takeover en probes: Inspectie van geheugenmappings en peripheral registers, het uitvoeren van kleine ARM-payloads en het overdragen van de controle aan Linux.
- Linux kernel port: Een ARMv6-kernelconfiguratie inclusief experimentele RapuYama-ondersteuning voor interrupt-afhandeling, timers, GPIO, klokken, watchdog, UART en andere randapparatuur.
- VideoCore display-driver: Boot de BCM2727B1 met Nokia-firmware (geëxtraheerd uit een eigen ROM-dump), communiceert via VCHI, zet het paneel onder stroom (vergelijkbaar met Symbian) en stelt
/dev/fb0 beschikbaar met fbcon.
- Symbian display-stack emulator: Draait Nokia-displaydrivers uit de ROM in Unicorn en registreert elk bericht dat naar de VideoCore wordt gestuurd; de Linux-driver speelt deze sequenties vervolgens af.
- RAM-backed early logging: Bewaart vroege kernel-output in gereserveerd RAM-geheugen, zodat deze kan worden opgehaald na een mislukte boot, zelfs zonder seriële console.
- Hardware notes: Resultaten van reverse engineering op basis van firmware-analyse en live probes.
De basisboot, timer/IRQ-pad, initramfs userspace, USB-serieel shell en het VideoCore-display zijn getest op de telefoon. Andere apparaten en drivers zijn experimenteel; hun aanwezigheid in de broncode betekent niet dat ze op hardware zijn gevalideerd.
De Kernel Bouwen
Installeer op een Linux-host een ARM GNU EABI cross-toolchain (arm-linux-gnu-gcc en binutils). Initialiseer vervolgens de kernel-submodule en voer de build uit:
git submodule update --init --depth 1 linux/kernel/linux
cd linux/kernel
./build-kernel.sh e6config
./build-kernel.sh build
Het kernel-image wordt weggeschreven naar: linux/kernel/build/arch/arm/boot/zImage
Het build-script gebruikt standaard ARCH=arm, CROSS_COMPILE=arm-linux-gnu- en alle beschikbare CPU-cores. e6config installeert de opgenomen E6-configuratie; build compileert het kernel-image en de DTB's van de kernel-tree.
De Nokia E6 Device Tree bouwen
De board DTB die door de E6-loader wordt gebruikt, komt uit linux/boot/e6.dts. Deze is gescheiden van de DTB's die door het bovenstaande kernel-target worden gebouwd. Voer na het bouwen van de kernel (wat ook de in-tree dtc-compiler bouwt) het volgende uit vanaf de root van de repository:
linux/kernel/build/scripts/dtc/dtc -I dts -O dtb -o linux/boot/e6.dtb linux/boot/e6.dts
Het resulterende bestand linux/boot/e6.dtb is de board-beschrijving die bij het kernel-image hoort. Als de DTS wordt gewijzigd, moet dit bestand opnieuw worden gebouwd vóór implementatie.
Bootproces
Het bootproces volgt deze stappen:
- Symbian
boot.sis / boot.exe
- Laadt
zImage en e6.dtb in het fysieke RAM
- Bereidt de handoff voor (MMU en caches uitgeschakeld)
- Springt naar de Linux ARM-kernel
- Vroege logs worden vastgelegd in gereserveerd RAM
De loader plaatst het kernel-image en de DTB in een aaneengesloten fysiek blok en geeft het DTB-adres door aan Linux. De E6-kernel is geconfigureerd met de vaste fysieke RAM-basis 0x10000000. Dit voorkomt dat de geheugenbasis van de kernel moet worden afgeleid van het variabele blokadres van de loader.
Het pakket aan de telefoonzijde en de bootsequentie zijn gedocumenteerd in linux/boot/README.md. Let op: verwar een diagnostic probe-image niet met het reguliere zImage.
Interactieve USB-shell
Voor de interactieve USB-shell dient de USB-enabled DTB als E:\e6.dtb te worden gebruikt. Verbind de telefoon via USB met de host en start het bootpakket. Op een Linux-host kun je verbinding maken met de gedetecteerde gadget seriële poort (meestal via):
picocom -b 115200 /dev/ttyACM0
De shell draait op de ttyGS0 van de telefoon. De USB-enabled DTB activeert deze shell, terwijl de basis-DTB het niet-interactieve init-pad gebruikt.
Bouwen met de Display-driver
Het script build-kernel.sh bouwt de standaard USB-shell kernel. Voor het display wordt build-vc.sh gebruikt. Hiervoor is een dump van de kernel-ROM van de telefoon nodig (kern.bin), omdat de VideoCore-firmware tijdens het bouwen wordt geëxtraheerd en geen deel uitmaakt van deze repository:
KERN_BIN=/path/to/kern.bin linux/kernel/build-vc.sh
Boot linux/kernel/build-vc/arch/arm/boot/zImage samen met linux/kernel/build-vc/e6-vc.dtb (als E:\zImage / E:\e6.dtb). Na ongeveer 5 seconden toont het paneel 3 seconden lang kleurpatronen, gevolgd door de console. Driverparameters, de bring-up sequentie en bekende problemen staan in docs/videocore-display.md.
Repository Structuur
| Pad | Inhoud |
linux/kernel/ | Kernelconfiguratie, build-script en kernel-source submodule |
linux/boot/ | E6 DTS, trampoline en boot-documentatie |
linux/stage0/ | Symbian-side loader en low-level experimenten |
driver/ | Symbian kernel-drivers, SIS-verpakking en deployment-notities |
tools/ | Log-parsers en reverse-engineering utilities |
docs/ | Hardware-kaarten, driver-notities, onderzoeksrapporten en de porting-gids |
logs/ | Vastgelegde output van experimenten |
Notities en Referenties
De volgende documentatie is beschikbaar in de repository:
- Linux bring-up notities
- Kernel build gids
- Boot-pijplijn en instructies voor de telefoonzijde
- RapuYama driver reverse engineering
- Hardware geheugenkaart (memory map)
- ROM-analyse notities
- VideoCore display: overzicht en driver
- VideoCore link: wire-level notities
- Porting-gids voor andere RapuYama / VideoCore telefoons
Huidige Beperkingen
Dit is een vroege userspace bring-up en nog geen volledig operationeel besturingssysteem voor dagelijks gebruik.
- Display: Het display werkt, maar is nieuw. Er zijn zichtbare artefacten, elke update verzendt het volledige frame van 1,2 MB via PIO (~170 ms), en blanking/backlight-controle zijn niet geïmplementeerd. Het display start pas na ongeveer 5 seconden; gebruik de USB-shell of de RAM-log voor vroege berichten.
- Validatie: Beschouw registeradressen en ongedocumenteerd peripheral gedrag als hypothesen, tenzij expliciet vermeld dat deze op live hardware zijn gecontroleerd.
- Implementatie: Een succesvolle boot betekent niet dat elke peripheral of power-management path is geïmplementeerd.
- Herstel: De boot-handoff is eenrichtingsverkeer. Een mislukte run kan een reset van de watchdog van de telefoon vereisen om het apparaat te herstellen.
RapuYama-Linux: Linux-bring-up voor het RapuYama-hardwareplatform
Huidige Status
Linux start nu op de telefoon op en geeft beelden weer op het scherm. De eerste bootlog laat zien dat de RapuYama-interruptcontroller de timer IRQ ontvangt, de kernel overschakelt naar zijn RapuYama-clocksource en dat BusyBox /init start. Er kan een interactieve shell worden gedraaid via USB-serieel. Daarnaast boot Linux nu de Broadcom VideoCore, zet het LCD-paneel onder stroom en toont een framebuffer-console op het eigen display van de telefoon.
Mijlpalen
| Datum | Mijlpaal |
| 13-10-2026 | Kernel boot door tot BusyBox /init (log) |
| 13-10-2026 | Interactieve shell via de USB gadget seriële poort |
| 14-10-2026 | Eerste beeld op het E6-paneel vanuit Linux: VideoCore geboot door de kernel, /dev/fb0 + fbcon (log, notes) |
Hardware Specificaties
| Component | Details |
| Application CPU | ARM1176JZF-S, ARMv6K |
| SoC | Nokia RapuYama |
| RAM | 256 MiB op fysiek adres 0x10000000 |
| Display | Broadcom BCM2727B1 / VideoCore III, 640x480 paneel (id 01 8b 79), aangestuurd via de ViSSI host bus |
| Bootomgeving | Symbian^3 / EKA2, met een eenrichtings-overdracht (handoff) naar Linux |
| Kernel | Linux 6.12, gebouwd voor ARMv6 |
Dit is een apparaatspecifieke poort en geen generieke EKA2-compatibelijkheidslaag. Hoewel sommige resultaten mogelijk overdraagbaar zijn naar andere telefoons met dezelfde SoC, heeft elk model een eigen board-beschrijving, geheugen- en bootvalidatie en peripheral bring-up nodig.
Functionaliteiten
Het project bevat de volgende onderdelen:
- Symbian takeover en probes: Inspectie van geheugenmappings en peripheral registers, het uitvoeren van kleine ARM-payloads en het overdragen van de controle aan Linux.
- Linux kernel port: Een ARMv6-kernelconfiguratie inclusief experimentele RapuYama-ondersteuning voor interrupt-afhandeling, timers, GPIO, klokken, watchdog, UART en andere randapparatuur.
- VideoCore display-driver: Boot de BCM2727B1 met Nokia-firmware (geëxtraheerd uit een eigen ROM-dump), communiceert via VCHI, zet het paneel onder stroom (vergelijkbaar met Symbian) en stelt
/dev/fb0 beschikbaar met fbcon.
- Symbian display-stack emulator: Draait Nokia-displaydrivers uit de ROM in Unicorn en registreert elk bericht dat naar de VideoCore wordt gestuurd; de Linux-driver speelt deze sequenties vervolgens af.
- RAM-backed early logging: Bewaart vroege kernel-output in gereserveerd RAM-geheugen, zodat deze kan worden opgehaald na een mislukte boot, zelfs zonder seriële console.
- Hardware notes: Resultaten van reverse engineering op basis van firmware-analyse en live probes.
De basisboot, timer/IRQ-pad, initramfs userspace, USB-serieel shell en het VideoCore-display zijn getest op de telefoon. Andere apparaten en drivers zijn experimenteel; hun aanwezigheid in de broncode betekent niet dat ze op hardware zijn gevalideerd.
De Kernel Bouwen
Installeer op een Linux-host een ARM GNU EABI cross-toolchain (arm-linux-gnu-gcc en binutils). Initialiseer vervolgens de kernel-submodule en voer de build uit:
git submodule update --init --depth 1 linux/kernel/linux
cd linux/kernel
./build-kernel.sh e6config
./build-kernel.sh build
Het kernel-image wordt weggeschreven naar: linux/kernel/build/arch/arm/boot/zImage
Het build-script gebruikt standaard ARCH=arm, CROSS_COMPILE=arm-linux-gnu- en alle beschikbare CPU-cores. e6config installeert de opgenomen E6-configuratie; build compileert het kernel-image en de DTB's van de kernel-tree.
De Nokia E6 Device Tree bouwen
De board DTB die door de E6-loader wordt gebruikt, komt uit linux/boot/e6.dts. Deze is gescheiden van de DTB's die door het bovenstaande kernel-target worden gebouwd. Voer na het bouwen van de kernel (wat ook de in-tree dtc-compiler bouwt) het volgende uit vanaf de root van de repository:
linux/kernel/build/scripts/dtc/dtc -I dts -O dtb -o linux/boot/e6.dtb linux/boot/e6.dts
Het resulterende bestand linux/boot/e6.dtb is de board-beschrijving die bij het kernel-image hoort. Als de DTS wordt gewijzigd, moet dit bestand opnieuw worden gebouwd vóór implementatie.
Bootproces
Het bootproces volgt deze stappen:
- Symbian
boot.sis / boot.exe
- Laadt
zImage en e6.dtb in het fysieke RAM
- Bereidt de handoff voor (MMU en caches uitgeschakeld)
- Springt naar de Linux ARM-kernel
- Vroege logs worden vastgelegd in gereserveerd RAM
De loader plaatst het kernel-image en de DTB in een aaneengesloten fysiek blok en geeft het DTB-adres door aan Linux. De E6-kernel is geconfigureerd met de vaste fysieke RAM-basis 0x10000000. Dit voorkomt dat de geheugenbasis van de kernel moet worden afgeleid van het variabele blokadres van de loader.
Het pakket aan de telefoonzijde en de bootsequentie zijn gedocumenteerd in linux/boot/README.md. Let op: verwar een diagnostic probe-image niet met het reguliere zImage.
Interactieve USB-shell
Voor de interactieve USB-shell dient de USB-enabled DTB als E:\e6.dtb te worden gebruikt. Verbind de telefoon via USB met de host en start het bootpakket. Op een Linux-host kun je verbinding maken met de gedetecteerde gadget seriële poort (meestal via):
picocom -b 115200 /dev/ttyACM0
De shell draait op de ttyGS0 van de telefoon. De USB-enabled DTB activeert deze shell, terwijl de basis-DTB het niet-interactieve init-pad gebruikt.
Bouwen met de Display-driver
Het script build-kernel.sh bouwt de standaard USB-shell kernel. Voor het display wordt build-vc.sh gebruikt. Hiervoor is een dump van de kernel-ROM van de telefoon nodig (kern.bin), omdat de VideoCore-firmware tijdens het bouwen wordt geëxtraheerd en geen deel uitmaakt van deze repository:
KERN_BIN=/path/to/kern.bin linux/kernel/build-vc.sh
Boot linux/kernel/build-vc/arch/arm/boot/zImage samen met linux/kernel/build-vc/e6-vc.dtb (als E:\zImage / E:\e6.dtb). Na ongeveer 5 seconden toont het paneel 3 seconden lang kleurpatronen, gevolgd door de console. Driverparameters, de bring-up sequentie en bekende problemen staan in docs/videocore-display.md.
Repository Structuur
| Pad | Inhoud |
linux/kernel/ | Kernelconfiguratie, build-script en kernel-source submodule |
linux/boot/ | E6 DTS, trampoline en boot-documentatie |
linux/stage0/ | Symbian-side loader en low-level experimenten |
driver/ | Symbian kernel-drivers, SIS-verpakking en deployment-notities |
tools/ | Log-parsers en reverse-engineering utilities |
docs/ | Hardware-kaarten, driver-notities, onderzoeksrapporten en de porting-gids |
logs/ | Vastgelegde output van experimenten |
Notities en Referenties
De volgende documentatie is beschikbaar in de repository:
- Linux bring-up notities
- Kernel build gids
- Boot-pijplijn en instructies voor de telefoonzijde
- RapuYama driver reverse engineering
- Hardware geheugenkaart (memory map)
- ROM-analyse notities
- VideoCore display: overzicht en driver
- VideoCore link: wire-level notities
- Porting-gids voor andere RapuYama / VideoCore telefoons
Huidige Beperkingen
Dit is een vroege userspace bring-up en nog geen volledig operationeel besturingssysteem voor dagelijks gebruik.
- Display: Het display werkt, maar is nieuw. Er zijn zichtbare artefacten, elke update verzendt het volledige frame van 1,2 MB via PIO (~170 ms), en blanking/backlight-controle zijn niet geïmplementeerd. Het display start pas na ongeveer 5 seconden; gebruik de USB-shell of de RAM-log voor vroege berichten.
- Validatie: Beschouw registeradressen en ongedocumenteerd peripheral gedrag als hypothesen, tenzij expliciet vermeld dat deze op live hardware zijn gecontroleerd.
- Implementatie: Een succesvolle boot betekent niet dat elke peripheral of power-management path is geïmplementeerd.
- Herstel: De boot-handoff is eenrichtingsverkeer. Een mislukte run kan een reset van de watchdog van de telefoon vereisen om het apparaat te herstellen.