På visittkortet mitt kjører Linux

Oversettelse av artikkelen fra bloggen ingeniør George Hilliard

På visittkortet mitt kjører Linux
Klikkbar

Jeg er ingeniør innen innebygde systemer. På fritiden leter jeg ofte etter noe som kan brukes i design av fremtidige systemer, eller noe innenfor mine interesser.

Et av disse områdene er billige datamaskiner som kan kjøre Linux, og jo billigere, jo bedre. Derfor har jeg gravd meg ned i en dyp kaninhule av lite kjente prosessorer.

Jeg tenkte: «Disse prosessorene er så billige at man nærmest kan dele dem gratis». Og etter en stund fikk jeg tanken om å lage et bare-kort for Linux i et visittkortformat.

Så snart jeg tenkte på det, bestemte jeg meg for at det ville vært veldig kult å lage. Jeg hadde allerede sett elektroniske visittkort til dette, og de hadde en rekke interessante muligheter, som emulering av flash-minner, blinkende lys eller til og med trådløs datatransmisjon. Men visittkort med Linux-støtte hadde jeg ikke sett.

Så jeg laget meg et.

Dette er den ferdige versjonen av produktet. En fullverdig minimal datamaskin på ARM, som kjører min spesialversjon av Linux, laget med Buildroot.

På visittkortet mitt kjører Linux

I hjørnet har den en USB-port. Hvis man kobler den til en datamaskin, booter den på omtrent 6 sekunder og den vises som en flash-enhet og en virtuell seriell port, hvor man kan logge inn i kortets skall. På flash-enheten ligger det en README-fil, en kopi av CV-en min og noen av bildene mine. I skallet er det noen spill, klassikere fra Unix som fortune og rogue, en liten versjon av spillet 2048 og en MicroPython-tolk.

Alt dette er laget med en veldig liten 8 MB flash-brikke. Bootloaderen får plass i 256 KB, kjernen tar 1,6 MB, og hele rot-filsystemet er 2,4 MB. Derfor er det mye plass igjen for den virtuelle flash-enheten. Det finnes også hjemmemappe tilgjengelig for skriving – hvis noen gjør noe de ønsker å lagre. Alt dette lagres også på flash-brikken.

Hele enheten koster mindre enn $3. Den er billig nok til at man kan dele den. Hvis du har fått en slik enhet fra meg, betyr det mest sannsynlig at jeg prøver å imponere deg.

Design og montering

Jeg designet og samlet alt selv. Dette er arbeidet mitt, og jeg liker det, og størstedelen av utfordringene lå i å finne tilstrekkelig billige deler for en slik hobby.

Valg av prosessor var den viktigste beslutningen som påvirket kostnaden og gjennomføringen av prosjektet. Etter aktiv forskning valgte jeg F1C100s, en relativt lite kjent prosessor fra Allwinner, optimalisert for kostnad (dvs. utrolig billig). I en enkelt enhet er både RAM og CPU. Jeg kjøpte prosessorene på Taobao. Alle andre komponenter ble kjøpt på LCSC.

Kortene bestilte jeg fra JLC. For 8 dollar fikk jeg laget 10 kopier. Kvaliteten deres er imponerende, spesielt for prisen; de er ikke så pene som de fra OSHPark, men ser fortsatt bra ut.

Jeg laget den første batchen matte svarte. De så fine ut, men var veldig skitne.

På visittkortet mitt kjører Linux

Det var et par problemer med den første batchen. For det første var USB-kontakten ikke lang nok til å passe ordentlig i alle USB-porter. For det andre var sporene for flash laget feil, men jeg løste det ved å bøye kontaktene.

På visittkortet mitt kjører Linux

Etter å ha sjekket alt i bruk bestilte jeg en ny batch av kort; du kan se et bilde av ett av dem i begynnelsen av artikkelen.

På grunn av den lille størrelsen på alle disse små komponentene bestemte jeg meg for å bruke oppvarming av loddetinn [reflow solder] med hjelp av en billig ovn. Jeg har tilgang til en laser kutter, så jeg laget en stencil til lodding fra laminatorfilm. Stencilen ble ganske bra. Hullene for prosessorkontaktene med en diameter på 0,2 mm krevde spesiell oppmerksomhet for kvalitetsproduksjon – det var kritisk å fokusere laseren riktig og justere dens styrke.

På visittkortet mitt kjører Linux
For å holde kortet på plass under påføring av pasta, passer andre kort godt

Jeg påførte loddepasta og plasserte komponentene manuelt. Jeg passet på at det ikke ble brukt bly noe sted i prosessen – alle kort, komponenter og pasta overholder standarden RoHS – slik at jeg ikke skal få dårlig samvittighet når jeg gir dem bort til folk.

På visittkortet mitt kjører Linux
Med denne batchen traff jeg ikke helt, men loddepastaen tilgir feil, og alt ble samlet normalt.

Det tok omtrent 10 sekunder å plassere hver komponent, så jeg prøvde å holde antallet minimalt. Mer informasjon om design av kortet kan leses i en annen av mine detaljerte artikler.

Liste over materialer og kostnad

Jeg holdt meg til et strengt budsjett. Visittkortet ble akkurat som tenkt – jeg har ingen betenkeligheter med å gi det bort! Selvfølgelig vil jeg ikke dele det ut til alle og enhver, siden produksjonen av hver enkelt tar tid, og tiden min er ikke inkludert i kostnadene for visittkortet (den er på en måte gratis).

CursorObserverMultiplexer
Pris

F1C100s
$1.42

PCB
$0.80

8MB flash
$0.17

Alle andre komponenter
$0.49

Totalt
$2.88

Det er åpenbart andre kostnader som er vanskelige å beregne, for eksempel frakt (siden det er fordelt mellom komponenter beregnet for flere prosjekter). Men for et brett med støtte for Linux er dette definitivt svært billig. Denne oppdelingen gir også en god indikasjon på hva det koster for selskaper å produsere enheter i det laveste prissegmentet: du kan være sikker på at det er enda billigere for dem enn det er for meg!

Funksjoner

Hva skal jeg si? Kortet laster et svært begrenset Linux på 6 sekunder. På grunn av formfaktoren og kostnaden har kortet ingen I/O, nettverksstøtte, eller noe betydelig lagringsvolum for å kjøre tunge programmer. Likevel klarte jeg å presse inn masse interessant innhold i firmware-bildet.

USB

Med USB kunne man finne på mye interessant, men jeg valgte det enkleste alternativet, slik at folk med stor sannsynlighet kan få alt til å fungere hvis de bestemmer seg for å prøve visittkortet mitt. Linux lar kortet oppføre seg som en "enhet" med støtte for Gadget Framework. Jeg hentet noen drivere fra tidligere prosjekter som inkluderte denne prosessoren, så jeg har tilgang til all funksjonaliteten til USB gadget-rammeverket. Jeg bestemte meg for å emulere et forhåndsgenerert flash-stasjon og gi tilgang til skallet via en virtuell seriekontakt.

Skall

Etter innlogging som root-bruker på den serielle konsollen kan følgende programmer startes:

  • rogue: et klassisk Unix-eventyrspill om huler;
  • 2048: et enkelt spill i 2048 i konsollmodus;
  • fortune: viser ulike pompøse sitater. Jeg bestemte meg for ikke å inkludere hele sitatdatabasen for å spare plass til andre funksjoner;
  • micropython: en veldig liten Python-compiler.

Emulering av Flash-enhet

Under kompileringen genererer byggverktøyene et lite FAT32-bilde og legger det til som en av partisjonene i UBI. Linux-gadget-subsystemet presenterer PC-en som en lagringsenhet.

Hvis du er interessert i å se hva som ligger på minneskortet, er det enklest å gjøre dette ved å bli kjent med kildene. Der ligger det også noen bilder og CV-en min.

Ressurser

Kildene

Treverket mitt med Buildroot er delt på GitHub — thirtythreeforty/businesscard-linux. Der finner du koden for å generere NOR-flashbildet, som installeres ved hjelp av USB-nedlastingsmodus på prosessoren. Det er også alle pakke-definisjonene for spill og andre programmer som jeg la inn i Buildroot etter at alt fungerte. Hvis du ønsker å bruke F1C100s i prosjektet ditt, vil dette være et utmerket utgangspunkt (ikke nøl med å stille meg spørsmål).
Jeg brukte et utmerket prosjekt Linux v4.9 for F1C100s av Icenowy, som jeg har gjort noen endringer på. På kortet mitt fungerer nesten standard v5.2. Det ligger på GitHub — thirtythreeforty/linux.
Jeg tror jeg har verdens beste port av U-Boot for F1C100s i dag, og den er delvis også basert på arbeidet til Icenowy (overraskende nok var det ganske vanskelig å få U-Boot til å fungere som det skulle). Den kan også finnes på GitHub — thirtythreeforty/u-boot.

Dokumentasjonen for F1C100s

Fant en ganske knapp dokumentasjon for F1C100s, og legger den ut her:

For de som er nysgjerrige, laster jeg opp skjemaet for prosjektet mitt.

På visittkortet mitt kjører Linux

Konklusjon

Jeg har lært mye under utviklingen av dette prosjektet – dette er mitt første prosjekt hvor jeg har brukt en ovn til å lodde med smeltelodd. Jeg lærte også å finne ressurser for komponenter med dårlig dokumentasjon.

Jeg har brukt min erfaring med innebygd Linux og erfaring med plateteknikk. Prosjektet har sine feil, men viser ganske bra alle mine ferdigheter.

For de som er interessert i detaljene om innebygd Linux, anbefaler jeg å lese min artikkelserie om dette: Mastering Embedded Linux. Der forteller jeg detaljer om hvordan man lager programvare og maskinvare fra bunnen av for små og billige Linux-systemer som ligner på denne visittkortet mitt.

Kilde: habr.com

Kjøp pålitelig hosting for nettsteder med DDoS-beskyttelse, VPS VDS-servere 🔥 Kjøp pålitelig hosting for nettsteder med DDoS-beskyttelse, VPS VDS-servere | ProHoster