Tsim Ubuntu duab rau ARM "los ntawm kos"

Thaum kev txhim kho nyuam qhuav pib, nws feem ntau tsis paub meej tias cov pob twg yuav mus rau lub hom phiaj rootfs.

Hauv lwm lo lus, nws ntxov dhau los rub LFS, buildroot lossis yocto (lossis lwm yam), tab sis koj twb xav tau pib. Rau cov neeg nplua nuj (Kuv muaj 4GB eMMC ntawm cov qauv sim) muaj ib txoj hauv kev tawm mus faib rau cov neeg tsim khoom xa tawm uas yuav tso cai rau lawv xa sai sai rau qee yam uas tam sim no ploj lawm, thiab tom qab ntawd peb tuaj yeem khaws cov npe ntawm cov pob thiab tsim cov npe rau. lub hom phiaj rootfs.

Kab lus no tsis yog tshiab thiab yog ib qho yooj yim luam-muab cov lus qhia.

Lub hom phiaj ntawm tsab xov xwm yog tsim Ubuntu rootfs rau ARM boards (hauv kuv rooj plaub, raws li Colibri imx7d).

Tsim ib daim duab

Peb sib sau ua ke lub hom phiaj rootfs rau replication.

Unpacking Ubuntu Base

Peb xaiv qhov tso tawm peb tus kheej raws li qhov xav tau thiab peb tus kheej nyiam. Ntawm no kuv tau muab 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

Tshawb xyuas BINFMT kev txhawb nqa hauv cov ntsiav

Yog tias koj muaj ib qho kev faib tawm, ces muaj kev txhawb nqa rau BINFMT_MISC thiab txhua yam tau teeb tsa, yog tias tsis yog, ces kuv paub tseeb tias koj paub yuav ua li cas pab txhawb BINFMT hauv cov ntsiav.

Xyuas kom tseeb tias BINFMT_MISC tau qhib rau hauv lub ntsiav:

$ zcat /proc/config.gz | grep BINFMT
CONFIG_BINFMT_ELF=y
CONFIG_COMPAT_BINFMT_ELF=y
CONFIG_BINFMT_SCRIPT=y
CONFIG_BINFMT_MISC=y

Tam sim no koj yuav tsum xyuas cov kev teeb tsa:

$ 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

Koj tuaj yeem sau npe manually siv, piv txwv li, ntawm no yog cov lus qhia.

Teeb tsa qemu static arm

Tam sim no peb xav tau statically sib sau ua ke qemu piv txwv.

!!! CEEB TOOM!!!
Yog tias koj npaj yuav siv lub thawv los tsim ib yam dab tsi, kos tawm:
https://sourceware.org/bugzilla/show_bug.cgi?id=23960
https://bugs.launchpad.net/qemu/+bug/1805913
Tom qab ntawd rau x86_64 host thiab arm qhua koj yuav tsum siv lub i386 version ntawm qemu:
http://ftp.ru.debian.org/debian/pool/main/q/qemu/qemu-user-static_5.0-13_i386.deb

$ 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

Txhab

Cov ntawv yooj yim:

ch-mount.sh

#!/bin/bash

function mnt() {
    echo "MOUNTING"
    sudo mount -t proc /proc proc
    sudo mount --rbind /sys sys
    sudo mount --make-rslave sys
    sudo mount --rbind /dev dev
    sudo mount --make-rslave dev
    sudo mount -o bind /dev/pts dev/pts
    sudo chroot 
}

function umnt() {
    echo "UNMOUNTING"
    sudo umount proc
    sudo umount sys
    sudo umount dev/pts
    sudo umount 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 : 
    echo 2nd parameter : 
fi

Peb qhuas qhov tshwm sim:

$ ./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

Tsuas yog kev lom zem, cia peb ntsuas qhov loj me ua ntej thiab tom qab txhim kho qhov tsawg kawg nkaus (rau kuv) cov pob khoom:

# du -d 0 -h / 2>/dev/null
63M     /

Cia peb hloov kho:

# apt update
# apt upgrade --yes

Cia peb nruab cov pob peb xav tau:

# 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

Kernel header cov ntaub ntawv thiab cov modules yog qhov sib txawv. Tau kawg, peb yuav tsis nruab lub bootloader, ntsiav, modules, ntaus ntawv ntawm Ubuntu. Lawv yuav tuaj rau peb los ntawm sab nraud los yog peb yuav sib sau ua ke rau lawv tus kheej los yog lawv yuav muab rau peb los ntawm pawg thawj coj saib xyuas, txawm li cas los xij, qhov no dhau ntawm qhov kev qhia no.

Rau qee qhov, version divergence tau txais, tab sis nws yog qhov zoo dua los coj lawv los ntawm cov ntsiav tsim.

# apt install --yes linux-headers-generic

Cia peb pom dab tsi tshwm sim thiab nws tig tawm ntau:

# apt clean
# du -d 0 -h / 2>/dev/null
770M    /

Tsis txhob hnov ​​qab teeb tus password.

Ntim cov duab

$ sudo tar -C rootfs --transform "s|^./||" --numeric-owner --owner=0 --group=0 -c ./ | tar --delete ./ | gzip > rootfs.tar.gz

Tsis tas li ntawd, peb tuaj yeem nruab etckeeper nrog rau qhov chaw autopush

Zoo, cia peb hais tias peb faib peb lub rooj sib txoos, kev ua haujlwm tau pib ua qhov zoo tshaj plaws los sib sau ua ke tom qab sib txawv ntawm peb lub cev.

etckeeper tuaj yeem pab peb.

Kev nyab xeeb yog ib qho teeb meem ntawm tus kheej:

  • koj muaj peev xwm tiv thaiv tej ceg
  • tsim kom muaj tus yuam sij tshwj xeeb rau txhua lub cuab yeej
  • disable quab yuam thawb
  • lwm. ...
# ssh-keygen
# apt install etckeeper
# etckeeper init
# cd /etc
# git remote add origin ...

Cia peb teeb tsa autopush

Peb tuaj yeem, tau kawg, tsim cov ceg ntawm lub cuab yeej ua ntej (cia peb hais tias peb ua tsab ntawv lossis kev pabcuam uas yuav khiav thawj zaug nws tau pib).

# cat /etc/etckeeper/etckeeper.conf
PUSH_REMOTE="origin"

Los yog peb tuaj yeem ua qee yam ntse dua ...

Tub nkeeg txoj kev

Cia peb muaj qee yam cim tshwj xeeb, hais tus lej ntawm tus processor (lossis MAC - cov tuam txhab loj yuav qhov ntau):

miv / 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

Tom qab ntawd peb tuaj yeem siv nws rau lub npe ntawm ceg uas peb yuav thawb:

# cat /proc/cpuinfo | grep Serial | cut -d':' -f 2 | tr -d [:blank:]
06372509

Wb tsim ib tsab ntawv yooj yim:

# 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

Thiab qhov ntawd yog txhua yam - tom qab ib pliag peb tuaj yeem saib cov kev hloov pauv thiab tsim cov npe ntawm pob khoom rau lub hom phiaj firmware.

Cov ntaub ntawv pom zoo

BINFMT_MISC
Kernel Kev them nyiaj yug rau lwm hom ntawv Binary (binfmt_misc)
Compiling nrog qemu neeg siv chroot
Tsim Ubuntu rootfs rau ARM
Yuav ua li cas los tsim ib qho kev cai Ubuntu nyob ntawm kos
Crossdev qemu-static-user-chroot
lwm tus tswv

getdents64 teeb meem

readdir() rov NULL (errno = EOVERFLOW) rau 32-ntsis user-static qemu ntawm 64-ntsis host
Ext4 64 ntsis hash tawg 32 ntsis glibc 2.28+
compiler_id_detection ua tsis tiav rau armhf thaum siv QEMU tus neeg siv hom emulation
CMake tsis ua haujlwm zoo nyob rau hauv qemu-arm

Tau qhov twg los: www.hab.com