Pan fydd datblygiad newydd ddechrau, yn aml nid yw'n glir pa becynnau fydd yn mynd i'r gwreiddiau targed.
Mewn geiriau eraill, mae'n rhy gynnar i fachu LFS, buildroot neu yocto (neu rywbeth arall), ond mae angen i chi ddechrau eisoes. Ar gyfer y cyfoethog (mae gen i 4GB eMMC ar samplau peilot) mae yna ffordd allan i ddosbarthu dosbarthiad i ddatblygwyr a fydd yn caniatΓ‘u iddynt gyflwyno rhywbeth sydd ar goll ar hyn o bryd yn gyflym, ac yna gallwn bob amser gasglu rhestrau o becynnau a chreu rhestr ar gyfer y rootfs targed.
Nid yw'r erthygl hon yn newydd ac mae'n gyfarwyddyd copi-gludo syml.
Pwrpas yr erthygl yw cydosod Ubuntu rootfs ar gyfer byrddau ARM (yn fy achos i yn seiliedig ar Colibri imx7d).
Adeiladu delwedd
Rydym yn cydosod y gwreiddiau targed ar gyfer atgynhyrchu.
Dadbacio Ubuntu Sylfaen
Rydym yn dewis y datganiad ein hunain yn seiliedig ar angen a'n dewisiadau ein hunain. Yma rwyf wedi rhoi 20.
$ 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
Gwirio cefnogaeth BINFMT yn y cnewyllyn
Os oes gennych chi ddosbarthiad cyffredin, yna mae cefnogaeth i BINFMT_MISC ac mae popeth wedi'i ffurfweddu, os na, yna rwy'n siΕ΅r eich bod chi'n gwybod sut i alluogi cefnogaeth BINFMT yn y cnewyllyn.
Sicrhewch fod BINFMT_MISC wedi'i alluogi yn y cnewyllyn:
$ zcat /proc/config.gz | grep BINFMT
CONFIG_BINFMT_ELF=y
CONFIG_COMPAT_BINFMT_ELF=y
CONFIG_BINFMT_SCRIPT=y
CONFIG_BINFMT_MISC=y
Nawr mae angen i chi wirio'r gosodiadau:
$ ls /proc/sys/fs/binfmt_misc
qemu-arm register status
$ cat /proc/sys/fs/binfmt_misc/qemu-arm
enabled
interpreter /usr/bin/qemu-arm
flags: OC
offset 0
magic 7f454c4601010100000000000000000002002800
mask ffffffffffffff00fffffffffffffffffeffffff
Gallwch gofrestru Γ’ llaw gan ddefnyddio, er enghraifft, .
Sefydlu braich statig qemu
Nawr mae angen enghraifft qemu wedi'i gydosod yn statig.
!!! SYLW!!!
Os ydych chi'n bwriadu defnyddio cynhwysydd i adeiladu rhywbeth, edrychwch ar:
Yna ar gyfer gwesteiwr x86_64 a gwestai braich mae angen i chi ddefnyddio'r fersiwn i386 o qemu:
$ wget http://ftp.debian.org/debian/pool/main/q/qemu/qemu-user-static_5.0-13_amd64.deb
$ alient -t qemu-user-static_5.0-13_amd64.deb
# ΠΏΡΡΡ Π² rootfs ΠΈ ΠΈΠΌΡ ΠΈΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΠΎΠ³ΠΎ ΡΠ°ΠΉΠ»Π° Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΡΠΎΠ²ΠΏΠ°Π΄Π°ΡΡ Ρ /proc/sys/fs/binfmt_misc/qemu-arm
$ mkdir qemu
$ tar xf qemu-user-static-5.0.tgz -C qemu
$ file qemu/usr/bin/qemu-arm-static
qemu/usr/bin/qemu-arm-static: ELF 64-bit LSB executable, x86-64, version 1 (GNU/Linux), statically linked, BuildID[sha1]=be45f9a321cccc5c139cc1991a4042907f9673b6, for GNU/Linux 3.2.0, stripped
$ cp qemu/usr/bin/qemu-arm-static rootfs/usr/bin/qemu-arm
$ file rootfs/usr/bin/qemu-arm
rootfs/usr/bin/qemu-arm: ELF 64-bit LSB executable, x86-64, version 1 (GNU/Linux), statically linked, BuildID[sha1]=be45f9a321cccc5c139cc1991a4042907f9673b6, for GNU/Linux 3.2.0, stripped
chroot
Sgript syml:
ch-mount.sh
#!/bin/bash
function mnt() {
echo "MOUNTING"
sudo mount -t proc /proc ${2}proc
sudo mount --rbind /sys ${2}sys
sudo mount --make-rslave ${2}sys
sudo mount --rbind /dev ${2}dev
sudo mount --make-rslave ${2}dev
sudo mount -o bind /dev/pts ${2}dev/pts
sudo chroot ${2}
}
function umnt() {
echo "UNMOUNTING"
sudo umount ${2}proc
sudo umount ${2}sys
sudo umount ${2}dev/pts
sudo umount ${2}dev
}
if [ "$1" == "-m" ] && [ -n "$2" ] ;
then
mnt $1 $2
elif [ "$1" == "-u" ] && [ -n "$2" ];
then
umnt $1 $2
else
echo ""
echo "Either 1'st, 2'nd or both parameters were missing"
echo ""
echo "1'st parameter can be one of these: -m(mount) OR -u(umount)"
echo "2'nd parameter is the full path of rootfs directory(with trailing '/')"
echo ""
echo "For example: ch-mount -m /media/sdcard/"
echo ""
echo 1st parameter : ${1}
echo 2nd parameter : ${2}
fi
Rydym yn edmygu'r canlyniad:
$ ./ch-mount.sh -m rootfs/
# cat /etc/os-release
NAME="Ubuntu"
VERSION="20.04 LTS (Focal Fossa)"
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME="Ubuntu 20.04 LTS"
VERSION_ID="20.04"
HOME_URL="https://www.ubuntu.com/"
SUPPORT_URL="https://help.ubuntu.com/"
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
VERSION_CODENAME=focal
UBUNTU_CODENAME=focal
# uname -a
Linux NShubin 5.5.9-gentoo-x86_64 #1 SMP PREEMPT Mon Mar 16 14:34:52 MSK 2020 armv7l armv7l armv7l GNU/Linux
Er mwyn cael hwyl, gadewch i ni fesur y maint cyn ac ar Γ΄l gosod y set leiaf o becynnau (i mi):
# du -d 0 -h / 2>/dev/null
63M /
Gadewch i ni ddiweddaru:
# apt update
# apt upgrade --yes
Gadewch i ni osod y pecynnau y mae gennym ddiddordeb ynddynt:
# SYSTEMD_IGNORE_CHROOT=yes apt install --yes autoconf kmod socat ifupdown ethtool iputils-ping net-tools ssh g++ iproute2 dhcpcd5 incron ser2net udev systemd gcc minicom vim cmake make mtd-utils util-linux git strace gdb libiio-dev iiod
Mae ffeiliau pennawd cnewyllyn a modiwlau yn bwnc ar wahΓ’n. Mae'r llwythwr cychwyn, y cnewyllyn, y modiwlau, a'r goeden ddyfeisiau i gyd yn cael eu trin drwy Ubuntu Yn sicr ni fyddwn yn eu cyflenwi. Byddant yn dod o'r tu allan, byddwn yn eu cydosod ein hunain, neu bydd gwneuthurwr y bwrdd yn eu darparu i ni. Beth bynnag, mae y tu hwnt i gwmpas y llawlyfr hwn.
I ryw raddau, mae dargyfeiriad fersiwn yn dderbyniol, ond mae'n well eu cymryd o'r adeiladu cnewyllyn.
# apt install --yes linux-headers-generic
Gawn ni weld beth ddigwyddodd ac fe drodd allan lawer:
# apt clean
# du -d 0 -h / 2>/dev/null
770M /
Peidiwch ag anghofio gosod cyfrinair.
Pacio'r ddelwedd
$ sudo tar -C rootfs --transform "s|^./||" --numeric-owner --owner=0 --group=0 -c ./ | tar --delete ./ | gzip > rootfs.tar.gz
Yn ogystal, gallwn osod etckeeper gyda'r gosodiad autopush
Wel, gadewch i ni ddweud ein bod wedi dosbarthu ein gwasanaeth, dechreuodd y gwaith ar y ffordd orau o gydosod gwahanol fersiynau diweddarach o'n system.
gall ceidwad etc ddod i'n cymorth.
Mae diogelwch yn fater personol:
- gallwch amddiffyn rhai canghennau
- cynhyrchu allwedd unigryw ar gyfer pob dyfais
- analluogi gwthio grym
- etc. ...
# ssh-keygen
# apt install etckeeper
# etckeeper init
# cd /etc
# git remote add origin ...
Gadewch i ni sefydlu autopush
Gallwn, wrth gwrs, greu canghennau ar y ddyfais ymlaen llaw (gadewch i ni ddweud ein bod ni'n gwneud sgript neu wasanaeth a fydd yn rhedeg y tro cyntaf iddo gael ei lansio).
# cat /etc/etckeeper/etckeeper.conf
PUSH_REMOTE="origin"
Neu gallwn wneud rhywbeth callach...
Ffordd ddiog
Gadewch inni gael rhyw fath o ddynodwr unigryw, dywedwch rif cyfresol y prosesydd (neu MAC - mae cwmnΓ―au difrifol yn prynu'r ystod):
cath / 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
Yna gallwn ei ddefnyddio ar gyfer enw'r gangen y byddwn yn gwthio iddi:
# cat /proc/cpuinfo | grep Serial | cut -d':' -f 2 | tr -d [:blank:]
06372509
Gadewch i ni greu sgript syml:
# cat /etc/etckeeper/commit.d/40myown-push
#!/bin/sh
set -e
if [ "$VCS" = git ] && [ -d .git ]; then
branch=$(cat /proc/cpuinfo | grep Serial | cut -d':' -f 2 | tr -d [:blank:])
cd /etc/
git push origin master:${branch}
fi
A dyna i gyd - ar Γ΄l ychydig gallwn edrych ar y newidiadau a chreu rhestr o becynnau ar gyfer y firmware targed.
Deunyddiau a argymhellir
problem getdents64
Ffynhonnell: hab.com
