Wanneer de ontwikkeling net begint, is het vaak niet duidelijk welke pakketten naar de doel-rootfs zullen gaan.
Met andere woorden, het is te vroeg om LFS, buildroot of yocto (of iets anders) te pakken, maar je moet al beginnen. Voor de rijken (ik heb 4GB eMMC in pilot-voorbeelden) is er een uitweg om onder ontwikkelaars een distributie te distribueren waarmee ze snel iets kunnen leveren dat momenteel ontbreekt, en dan kunnen we altijd lijsten met pakketten verzamelen en een lijst maken voor de doelrootfs.
Dit artikel is niet nieuw en is een eenvoudige kopieer-plakinstructie.
Het doel van het artikel is om Ubuntu rootfs te bouwen voor ARM-boards (in mijn geval gebaseerd op Colibri imx7d).
Een imago opbouwen
We stellen de doel-rootfs samen voor replicatie.
Ubuntu-basis uitpakken
De release kiezen we zelf op basis van behoefte en onze eigen voorkeuren. Hier heb ik er 20 gegeven.
$ mkdir ubuntu20
$ cd ubuntu20
$ mkdir rootfs
$ wget http://cdimage.ubuntu.com/ubuntu-base/releases/20.04/release/ubuntu-base-20.04-base-armhf.tar.gz
$ tar xf ubuntu-base-20.04-base-armhf.tar.gz -C rootfs
BINFMT-ondersteuning in de kernel controleren
Als je een gemeenschappelijke distributie hebt, dan is er ondersteuning voor BINFMT_MISC en is alles geconfigureerd. Zo niet, dan weet ik zeker dat je weet hoe je BINFMT-ondersteuning in de kernel kunt inschakelen.
Zorg ervoor dat BINFMT_MISC is ingeschakeld in de kernel:
Kernelheaderbestanden en -modules zijn een aparte zaak. Natuurlijk zullen we de bootloader, kernel, modules en apparaatboom niet via Ubuntu installeren. Ze komen van buitenaf naar ons toe of we monteren ze zelf of ze worden ons gegeven door de fabrikant van het bord, dit valt in ieder geval buiten het bestek van deze instructie.
Tot op zekere hoogte zijn versieverschillen acceptabel, maar het is beter om ze uit de kernelbuild te halen.
# apt install --yes linux-headers-generic
Laten we eens kijken wat er gebeurde en het bleek veel:
# apt clean
# du -d 0 -h / 2>/dev/null
770M /
Vergeet niet een wachtwoord in te stellen.
Het beeld inpakken
$ sudo tar -C rootfs --transform "s|^./||" --numeric-owner --owner=0 --group=0 -c ./ | tar --delete ./ | gzip > rootfs.tar.gz
Bovendien kunnen we etckeeper installeren met de autopush-instelling
Laten we zeggen dat we onze assemblage hebben gedistribueerd, het werk begon over hoe we latere verschillende versies van ons systeem het beste konden assembleren.
We kunnen uiteraard vooraf vertakkingen op het apparaat maken (laten we zeggen dat we een script of een dienst maken die zal draaien wanneer het voor de eerste keer wordt gelanceerd).
Laten we een soort unieke identificatie hebben, laten we zeggen het serienummer van de processor (nou ja, of MAC - serieuze bedrijven kopen het assortiment):
cat / proc / cpuinfo
# cat /proc/cpuinfo
processor : 0
model name : ARMv7 Processor rev 5 (v7l)
BogoMIPS : 60.36
Features : half thumb fastmult vfp edsp neon vfpv3 tls vfpv4 idiva idivt vfpd32 lpae evtstrm
CPU implementer : 0x41
CPU architecture: 7
CPU variant : 0x0
CPU part : 0xc07
CPU revision : 5
processor : 1
model name : ARMv7 Processor rev 5 (v7l)
BogoMIPS : 60.36
Features : half thumb fastmult vfp edsp neon vfpv3 tls vfpv4 idiva idivt vfpd32 lpae evtstrm
CPU implementer : 0x41
CPU architecture: 7
CPU variant : 0x0
CPU part : 0xc07
CPU revision : 5
Hardware : Freescale i.MX7 Dual (Device Tree)
Revision : 0000
Serial : 06372509
Dan kunnen we het gebruiken voor de naam van de branch waarnaar we zullen pushen: