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

DatumMijlpaal
13-10-2026Kernel boot door tot BusyBox /init (log)
13-10-2026Interactieve shell via de USB gadget seriële poort
14-10-2026Eerste beeld op het E6-paneel vanuit Linux: VideoCore geboot door de kernel, /dev/fb0 + fbcon (log, notes)

Hardware Specificaties

ComponentDetails
Application CPUARM1176JZF-S, ARMv6K
SoCNokia RapuYama
RAM256 MiB op fysiek adres 0x10000000
DisplayBroadcom BCM2727B1 / VideoCore III, 640x480 paneel (id 01 8b 79), aangestuurd via de ViSSI host bus
BootomgevingSymbian^3 / EKA2, met een eenrichtings-overdracht (handoff) naar Linux
KernelLinux 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:

  1. 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

PadInhoud
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.