• YuzukiNeko – en Linuxdator nästan lika liten som en Raspberry Pi Pico

    Kan en fullvärdig Linuxkärna köras på en dator med bara 16 MB arbetsminne? YuzukiNeko visar att svaret är ja. Den lilla enkortsdatorn bygger på en 64-bitars RISC-V-processor och är ungefär lika stor som en Raspberry Pi Pico.

    När vi i dag tänker på en Linuxdator föreställer vi oss kanske en vanlig PC eller en Raspberry Pi med flera gigabyte arbetsminne. Men Linux behöver inte alls kräva så kraftfull hårdvara.

    Det lilla utvecklingskortet YuzukiNeko visar hur långt åt andra hållet man kan gå.

    Kortet mäter bara omkring 51 × 21 millimeter. Trots det finns här en 64-bitars processor som arbetar med omkring 1 GHz, anslutning för minneskort och bildskärmar – och möjlighet att starta Linux.

    Det placerar YuzukiNeko i ett spännande gränsland mellan en mikrokontroller och en traditionell enkortsdator.

    RISC-V är processorns språk

    I centrum sitter systemkretsen Allwinner F101. Den innehåller en T-Head XuanTie C907, en 64-bitars processorkärna som använder processorarkitekturen RISC-V.

    RISC-V kan enklast beskrivas som regelboken som bestämmer vilka instruktioner en processor förstår.

    Intel- och AMD-datorer använder huvudsakligen x86-arkitekturen, medan mobiltelefoner och många enkortsdatorer använder ARM. RISC-V är ett yngre alternativ med en viktig skillnad: instruktionsarkitekturen är öppen och kan användas utan samma typ av licensmodell som flera etablerade processorarkitekturer.

    Det har gjort RISC-V allt mer intressant för allt från små mikrokontroller till betydligt kraftfullare datorer.

    Processorn i YuzukiNeko kan köras i upp till cirka 1,008 GHz. Det är inte särskilt imponerande jämfört med en modern PC, men för den typ av arbetsuppgifter kortet är konstruerat för kan det vara fullt tillräckligt.

    Linux med bara 16 MB RAM

    Den kanske mest fascinerande siffran är inte processorns klockfrekvens utan mängden arbetsminne.

    YuzukiNeko har 8 eller 16 MB PSRAM.

    Inte gigabyte – megabyte.

    En modern dator med 16 GB RAM har alltså ungefär tusen gånger mer arbetsminne än 16 MB-versionen av YuzukiNeko.

    Att försöka starta ett modernt skrivbord med exempelvis KDE Plasma eller GNOME på YuzukiNeko vore därför helt orealistiskt. En modern webbläsare kan ensam använda hundratals megabyte eller flera gigabyte minne.

    Men Linux är inte samma sak som ett grafiskt skrivbord.

    Själva operativsystemet kan byggas mycket mindre.

    Man tar bara med det som behövs

    YuzukiNeko har demonstrerats med Linux 7.2 och Buildroot.

    Buildroot är ett verktyg för att skapa små Linuxsystem för inbyggda datorer. I stället för att installera en stor Linuxdistribution med tusentals program och bibliotek bygger man ett system som bara innehåller de delar som apparaten faktiskt behöver.

    Om datorn exempelvis ska styra en display behöver den inte LibreOffice, en webbläsare och hundratals andra program.

    Den behöver Linuxkärnan, rätt drivrutiner, ett litet grundsystem och programmet som utför själva uppgiften.

    Det är lite som att packa inför en resa med en mycket liten väska. Man kan inte ta med hela garderoben – men om man vet exakt vad man ska göra kan man ta med precis det som behövs.

    Det är så Linux kan fungera även med mycket små resurser.

    Mer dator än mikrokontroller

    Utseendet gör det naturligt att jämföra YuzukiNeko med Raspberry Pi Pico, men under ytan är skillnaderna stora.

    Raspberry Pi Pico är ett mikrokontrollerkort. Sådana kort är utmärkta för att exempelvis läsa sensorer, styra motorer, blinka lysdioder och reagera snabbt på elektriska signaler.

    YuzukiNeko befinner sig närmare en traditionell dator.

    Med Linux får utvecklaren bland annat filsystem, processer, Unixverktyg och en stor mängd existerande programvara och bibliotek.

    Det betyder inte att Linux alltid är bättre. En mikrokontroller kan starta nästan omedelbart, använda mycket lite energi och ge mycket exakt kontroll över hårdvaran.

    Det handlar snarare om två olika verktyg.

    YuzukiNeko är intressant när man vill ha den lilla datorns format men samtidigt behöver funktioner från ett riktigt operativsystem.

    Gjord för att prata med bildskärmar

    Allwinner F101 avslöjar också vilken sorts produkter kretsen kan vara tänkt för.

    Den har ovanligt omfattande stöd för bildskärmar för att vara en så liten och billig krets.

    Här finns bland annat MIPI DSI, LVDS och RGB888. MIPI DSI kan driva bildskärmar med upp till 1280 × 800 pixlar vid 60 Hz, medan LVDS kan nå 1366 × 768 vid 60 Hz.

    Det finns även en enklare G2D-grafikaccelerator.

    Det gör kretsen intressant för sådant som kontrollpaneler, informationsskärmar, mätinstrument och små terminaler.

    Tänk exempelvis på displayen på en maskin, ett passagesystem eller en liten informationspanel. Där behövs inte prestandan hos en vanlig PC, men det kan ändå vara praktiskt att ha Linux under skalet.

    Ett helt system på några kvadratcentimeter

    Kortet har dessutom stöd för microSD, så lagringsutrymmet behöver inte begränsas av den inbyggda flashkretsen.

    Den inbyggda SPI NOR-flashen är på 128 Mbit, alltså 16 MB.

    USB-C används både för anslutning och strömförsörjning, och runt kortets kanter finns två rader med 20 anslutningar som kan användas för kommunikation med annan elektronik.

    Systemkretsen erbjuder dessutom gränssnitt som SPI, UART, I²C, SDIO och I²S/PCM samt en inbyggd ljud-DAC.

    Resultatet är en förvånansvärt komplett liten dator.

    Linux är inte det enda alternativet

    YuzukiNeko kan även användas med Zephyr.

    Zephyr är ett realtidsoperativsystem som framför allt riktar sig mot inbyggda system. Det är betydligt mindre än Linux och lämpar sig för situationer där förutsägbara svarstider och nära kontroll över hårdvaran är viktigare än funktionerna hos ett större operativsystem.

    Samma hårdvara kan alltså användas på två ganska olika sätt.

    Det gör också YuzukiNeko intressant som experimentplattform för den som vill studera skillnaderna mellan Linux och ett realtidsoperativsystem.

    Hårdvaran går att studera

    YuzukiNeko är dessutom ett open source-projekt.

    Konstruktionsmaterial som kretsschema, kortlayout, Gerber-filer, 3D-modell och komponentlista har publicerats.

    Det är betydelsefullt eftersom kortet då inte behöver vara en svart låda. Den tekniskt intresserade kan studera hur datorn är konstruerad och i princip använda konstruktionen som utgångspunkt för egna projekt.

    Hur billig kan en Linuxdator bli?

    Allwinner F101 är också intressant ur ett ekonomiskt perspektiv.

    Enligt CNX Software har själva systemkretsen uppgetts kosta omkring 18 kinesiska yuan, motsvarande ungefär 2,70 amerikanska dollar.

    Det betyder inte att YuzukiNeko går att köpa för det priset. Ett färdigt kort behöver minne, kretskort, kontakter, spänningsreglering och andra komponenter.

    YuzukiNeko var dessutom inte en vanlig kommersiellt tillgänglig produkt när projektet presenterades.

    Men det låga priset på processorn visar hur billiga 64-bitars RISC-V-system börjar bli.

    En glimt av en annan sorts Linuxdator

    YuzukiNeko kommer knappast att ersätta en vanlig Raspberry Pi.

    Det är heller inte särskilt intressant att fråga om den kan användas som vanlig skrivbordsdator. Med maximalt 16 MB RAM är svaret i praktiken nej.

    Det intressanta är i stället att Linux kan pressas ned till en dator som nästan har samma fysiska format som ett mikrokontrollerkort.

    En sådan dator behöver inte ha ett skrivbord, tangentbord eller ens en traditionell bildskärm. Den kan sitta dold bakom en liten kontrollpanel och ägna hela sitt liv åt en enda uppgift.

    Det är också där RISC-V kan få en stor roll.

    När processorer blir billigare och mindre samtidigt som Linuxstödet förbättras öppnas ett område mellan den enkla mikrokontrollern och den betydligt kraftfullare enkortsdatorn.

    YuzukiNeko är ett litet kort, men det illustrerar en betydligt större utveckling: Linux och RISC-V är på väg in i allt mindre och billigare datorer.

    Läs mer >>

    > FAKTA: YuzukiNeko
    Typ: Linux-kapabel enkortsdator
    Systemkrets: Allwinner F101
    Processor: T-Head XuanTie C907, 64-bit RISC-V
    Klockfrekvens: upp till cirka 1,008 GHz
    Arbetsminne: 8 eller 16 MB PSRAM
    Flashminne: 16 MB SPI NOR
    Lagring: microSD
    Operativsystem: Linux 7.2 / Buildroot samt Zephyr
    USB: USB-C, USB 2.0 DRD
    Bildutgång: MIPI DSI, LVDS och RGB888
    Storlek: cirka 51 × 21 mm
    Öppen hårdvara: Ja
    > En Linuxdator i ungefär samma storleksklass som Raspberry Pi Pico.
  • Linux startar på Atari Jaguar – spelkonsolen med bara 2 MB minne

    Atari Jaguar blev aldrig den försäljningssuccé som Atari hoppades på. Mer än 30 år senare har den omdiskuterade spelkonsolen ändå lyckats med något oväntat: att starta Linux direkt från en spelkassett.

    Linux har genom åren körts på allt från kraftfulla superdatorer och mobiltelefoner till routrar, mikrovågsugnar och gamla spelkonsoler. Nu har ytterligare en osannolik maskin lagts till på listan.

    Utvecklaren bakom namnet Cakehonolulu har lyckats starta Linux på Atari Jaguar, en spelkonsol som lanserades i Nordamerika i november 1993. Systemet kör en tidig version av Linuxkärnan 7.2 tillsammans med en mycket liten kommandotolk baserad på BusyBox.

    Resultatet är inte någon modern Linuxdator med skrivbord, webbläsare och nätverksanslutning. Det som visas är en enkel textbaserad kommandotolk. Men med tanke på konsolens extrema begränsningar är det ändå en imponerande teknisk bedrift.

    Atari satsade på ”64 bitar”

    När Atari Jaguar presenterades marknadsfördes den som världens första 64-bitars spelkonsol. Påståendet blev omdiskuterat eftersom maskinen egentligen bestod av flera olika processorer och kretsar med olika bitbredder.

    I centrum finns en Motorola 68000-processor, samma processorfamilj som användes i bland annat de första Macintosh-datorerna,Atari ST, Commodore Amiga, Sega Mega Drive och Neo Geo.

    Jaguar innehåller också två specialkretsar som Atari döpte till Tom och Jerry.

    Tom ansvarar främst för grafik, objektbehandling och bildöverföring, medan Jerry bland annat innehåller en digital signalprocessor, timers och funktioner för ljud och seriell kommunikation.

    Trots den påstådda 64-bitarsprestandan blev Atari Jaguar ett kommersiellt misslyckande. Konsolen fick svårt att konkurrera med bland annat Sega Saturn och den första Sony PlayStation. Inte heller tillbehöret Jaguar CD lyckades vända utvecklingen.

    En processor utan minneshantering

    Det första stora hindret för att starta Linux är Jaguars Motorola 68000-processor.

    Processorn saknar en så kallad Memory Management Unit, vanligtvis förkortad MMU. En sådan krets används av moderna operativsystem för att skapa virtuellt minne och hålla olika programs minnesområden åtskilda.

    Det är därför vanligt att säga att Linux kräver en MMU. Det är dock inte helt korrekt.

    Linux innehåller fortfarande stöd för system utan minneshanteringsenhet genom tekniken som ursprungligen utvecklades inom projektet uClinux. För Motorola 68000 kan Linux därför byggas i ett särskilt NOMMU-läge med en enklare och platt minnesmodell.

    Det innebär att programmen arbetar direkt mot datorns fysiska minne utan det skydd och den flexibilitet som virtuellt minne normalt ger.

    Det fungerar, men gör systemet betydligt känsligare för minnesfel och ställer särskilda krav på både program och kompilator.

    Bara 2 MB arbetsminne

    Nästa problem är minnet.

    Atari Jaguar har endast 2 MB RAM. Det är mindre arbetsminne än vad en enda vanlig bild från en modern mobilkamera kan kräva.

    Att kopiera både Linuxkärnan och ett komplett filsystem till arbetsminnet skulle därför snabbt fylla hela minnet.

    Lösningen blev att använda XIP, en förkortning av execute in place. Det betyder att delar av programkoden körs direkt från ROM-minnet i spelkassetten i stället för att först kopieras till RAM.

    Linuxkärnan delades därför upp i två delar.

    De skrivskyddade delarna, bland annat programkod och konstanta data, ligger kvar i spelkassettens ROM-minne. De delar som måste kunna ändras under körningen placeras i konsolens RAM.

    Det handlar bland annat om följande programsektioner:

    • .text innehåller körbar programkod.
    • .rodata innehåller skrivskyddade data.
    • .data innehåller föränderliga data med startvärden.
    • .bss innehåller föränderliga data som nollställs vid start.

    Genom att tala om för Linux var ROM och RAM finns kan kärnan själv hantera de nödvändiga flyttningarna mellan minnesområdena.

    Ljudkretsen blev Linux systemklocka

    Ett operativsystem behöver en regelbunden tidskälla.

    En timer skickar avbrott till processorn med jämna mellanrum och gör det möjligt för Linux att planera när olika processer ska få använda processorn. Utan en fungerande timer kan kärnans schemaläggare inte arbeta korrekt.

    Atari Jaguar saknar den typ av standardtimer som Linux normalt förväntar sig på en dator.

    Utvecklaren använde därför en av de timers som finns i Jerry-kretsen. Dessa var främst avsedda för ljud och signalbehandling men kan även skapa avbrott för Motorola-processorn.

    En krets som ursprungligen hjälpte spelutvecklare att skapa ljud används därmed som systemklocka för Linux.

    Först behövdes någon form av bildskärm

    När Linux anpassas till ny hårdvara måste utvecklaren kunna se kärnans meddelanden. Annars går det inte att veta om systemet har startat, hängt sig eller kraschat.

    I en vanlig dator skickas de första meddelandena ofta genom en seriell port.

    Jerry-kretsen har anslutningar för seriell sändning och mottagning, kallade TXD och RXD. Utvecklaren skrev därför en liten konsoldrivrutin som skickar ut tecken genom dessa anslutningar.

    På så sätt kunde Linux tidiga startmeddelanden läsas från en annan dator.

    Senare skrevs även en enkel konsoldrivrutin för Tom-kretsen. Den gör det möjligt att visa text på en bildskärm när Linux körs på en riktig Atari Jaguar och inte bara i en emulator.

    Kompilatorn skapade förbjudna minnesåtkomster

    När de första försöken gjordes kom inga startmeddelanden alls.

    Problemet visade sig ligga i den korskompilator för Motorola 68000 som följde med Ubuntu. Kompilatorn skapade instruktioner som försökte läsa data från felaktigt justerade minnesadresser.

    Nyare processorer kan ofta hantera sådana åtkomster automatiskt, men den ursprungliga Motorola 68000 kan inte göra det. Resultatet blev att processorn kraschade innan Linux hann skriva något på konsolen.

    Lösningen var att bygga en egen m68k-elf-kompilator särskilt anpassad för den ursprungliga 68000-processorn.

    Ytterligare ett problem var att processorns avbrottsvektorer normalt förväntas ligga vid minnesadress noll. Jaguars kassett-ROM börjar däremot vid adressen 0x80000.

    De nödvändiga vektorerna måste därför kopieras till början av RAM-minnet innan Linux kan hantera avbrott och fel korrekt.

    Efter dessa ändringar började Linux slutligen skriva ut sina startmeddelanden:

    Linux version 7.2.0-rc1+
    uClinux with CPU MC68000
    Flat model support
    

    BusyBox fick bli hela användarmiljön

    Att starta Linuxkärnan är bara halva arbetet. Kärnan måste även kunna starta ett användarprogram, vanligtvis processen init.

    På en vanlig Linuxdistribution startar init-processen flera systemtjänster och förbereder resten av användarmiljön. På Atari Jaguar finns inte minne för något sådant.

    Systemet byggdes därför med Buildroot och BusyBox.

    BusyBox samlar små versioner av många vanliga Unix-kommandon i ett enda program. Samma binärfil kan fungera som exempelvis sh, ls, cat eller echo, beroende på vilket namn den startas med.

    Vanligtvis skapas länkar för alla dessa kommandon. På Jaguar tog även den processen för mycket minne.

    Startskriptet förenklades därför till att direkt köra:

    #!/bin/busybox sh
    
    /bin/busybox sh
    

    Resultatet är en minimal kommandotolk utan något traditionellt Linuxsystem runt omkring.

    Det räcker ändå för att visa att både Linuxkärnan och ett användarprogram kan köras på maskinen.

    Inga vanliga ELF-program

    De flesta moderna Linuxprogram distribueras som ELF-filer. I system utan MMU används i stället ofta det enklare binärformatet FLAT.

    BusyBox byggdes därför som en FLAT-binär med hjälp av Buildroot och verktyget elf2flt.

    Även C-biblioteket behövde anpassas. Systemet använder det resurssnåla biblioteket uClibc, men dess normala minneshanterare behövde bytas mot alternativet malloc-simple.

    Mer avancerade minneshanterare sparar extra information för att kunna göra framtida minnesallokeringar snabbare. På en maskin med bara 2 MB RAM kan själva bokföringen använda en märkbar del av minnet.

    Den enklare minneshanteraren är mindre effektiv men kräver betydligt mindre utrymme.

    Ingen vanlig bootloader

    Datorer använder normalt en bootloader, exempelvis U-Boot eller GRUB, för att förbereda hårdvaran och läsa in operativsystemet.

    På Jaguar skulle en sådan bootloader ta värdefullt utrymme i både ROM och RAM.

    Linuxbilden placeras därför direkt på spelkassetten. När konsolen startar hoppar programmet i princip direkt till den adress där Linuxkärnan finns.

    För riktig hårdvara måste kärnbilden även innehålla Jaguars kassett-header och placeras på rätt fasta adresser i ROM-minnet.

    Den färdiga spelkassetten innehåller därmed Linuxkärnan, det minimala filsystemet och BusyBox.

    Vad kan man använda det till?

    I praktiken inte särskilt mycket.

    Användaren får en liten kommandotolk på en spelkonsol med 2 MB RAM, utan modernt nätverk, grafiskt skrivbord eller vanliga program.

    Ingen kommer sannolikt att ersätta sin vanliga dator med en Atari Jaguar som kör Linux.

    Projektet visar däremot hur anpassningsbar Linuxkärnan fortfarande är. Genom att återanvända ljudtimers, köra kod direkt från en spelkassett och bygga en extremt liten användarmiljö går det att starta Linux på hårdvara som aldrig konstruerades för något operativsystem av detta slag.

    Det är kanske inte praktiskt.

    Men inom retrodatorvärlden är det ofta just det som är poängen: att undersöka hur långt gammal hårdvara kan pressas och lära sig hur datorns mest grundläggande delar faktiskt fungerar.

    Den modifierade Linuxkällkoden har publicerats öppet i projektets GitHub-arkiv.

    https://cakehonolulu.github.io/linux-for-jaguar

    > TEKNISKA DATA: ATARI JAGUAR MED LINUX

    Lanseringsår: 1993

    Huvudprocessor: Motorola 68000

    Processorarkitektur: m68k

    Arbetsminne: 2 MB RAM

    Kassett-ROM: Upp till 6 MB

    ROM-adress: 0x80000

    Specialkretsar: Tom och Jerry

    Linuxkärna: Linux 7.2.0-rc1

    Minnesmodell: NOMMU / uClinux

    Körningsmetod: XIP, Execute In Place

    Användarmiljö: BusyBox och Buildroot

    Binärformat: FLAT, bFLT

    C-bibliotek: uClibc med malloc-simple

    Systemkonsol: Seriell utmatning via Jerry samt bildskärmskonsol via Tom

    Systemtimer: Timer i Jerry-kretsen

    Bootloader: Ingen traditionell bootloader

    Startmetod: Kärnan startas direkt från kassettens ROM

    Resultat: En minimal Linux-kommandotolk

Etikett: Buildroot

  • YuzukiNeko – en Linuxdator nästan lika liten som en Raspberry Pi Pico

    Kan en fullvärdig Linuxkärna köras på en dator med bara 16 MB arbetsminne? YuzukiNeko visar att svaret är ja. Den lilla enkortsdatorn bygger på en 64-bitars RISC-V-processor och är ungefär lika stor som en Raspberry Pi Pico. När vi i dag tänker på en Linuxdator föreställer vi oss kanske en vanlig PC eller en Raspberry…

  • Linux startar på Atari Jaguar – spelkonsolen med bara 2 MB minne

    Atari Jaguar blev aldrig den försäljningssuccé som Atari hoppades på. Mer än 30 år senare har den omdiskuterade spelkonsolen ändå lyckats med något oväntat: att starta Linux direkt från en spelkassett. Linux har genom åren körts på allt från kraftfulla superdatorer och mobiltelefoner till routrar, mikrovågsugnar och gamla spelkonsoler. Nu har ytterligare en osannolik maskin…