Paglikha ng imahe ng Ubuntu para sa ARM "mula sa simula"
Kapag nagsisimula pa lang ang pag-unlad, madalas na hindi malinaw kung aling mga pakete ang mapupunta sa mga target na rootfs.
Sa madaling salita, masyadong maaga para kunin ang LFS, buildroot o yocto (o iba pa), ngunit kailangan mo nang magsimula. Para sa mga mayayaman (mayroon akong 4GB na eMMC sa mga pilot sample) mayroong isang paraan upang maipamahagi sa mga developer ang isang pamamahagi na magbibigay-daan sa kanila na mabilis na makapaghatid ng isang bagay na kasalukuyang nawawala, at pagkatapos ay maaari kaming palaging mangolekta ng mga listahan ng mga pakete at lumikha ng isang listahan para sa ang target na rootfs.
Ang artikulong ito ay hindi bago at ito ay isang simpleng copy-paste na pagtuturo.
Ang layunin ng artikulo ay upang bumuo ng Ubuntu rootfs para sa ARM boards (sa aking kaso, batay sa Colibri imx7d).
Pagbuo ng isang imahe
Binubuo namin ang mga target na rootfs para sa pagtitiklop.
Pag-unpack ng Ubuntu Base
Pinipili namin ang pagpapalaya sa aming sarili batay sa pangangailangan at sa aming sariling mga kagustuhan. Dito ako nagbigay ng 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
Sinusuri ang suporta ng BINFMT sa kernel
Kung mayroon kang isang karaniwang pamamahagi, pagkatapos ay mayroong suporta para sa BINFMT_MISC at lahat ay na-configure, kung hindi, pagkatapos ay sigurado ako na alam mo kung paano paganahin ang suporta ng BINFMT sa kernel.
Ang mga file at module ng kernel header ay isang hiwalay na usapin. Siyempre, hindi namin i-install ang bootloader, kernel, modules, device tree sa pamamagitan ng Ubuntu. Darating sila sa amin mula sa labas o kami mismo ang magtitipon sa kanila o sila ay ibibigay sa amin ng tagagawa ng board, sa anumang kaso ito ay lampas sa saklaw ng pagtuturo na ito.
Sa ilang mga lawak, ang pagkakaiba-iba ng bersyon ay katanggap-tanggap, ngunit ito ay mas mahusay na kunin ang mga ito mula sa kernel build.
# apt install --yes linux-headers-generic
Tingnan natin kung ano ang nangyari at ito ay naging marami:
# apt clean
# du -d 0 -h / 2>/dev/null
770M /
Huwag kalimutang magtakda ng password.
Pag-iimpake ng imahe
$ sudo tar -C rootfs --transform "s|^./||" --numeric-owner --owner=0 --group=0 -c ./ | tar --delete ./ | gzip > rootfs.tar.gz
Bukod pa rito, maaari tayong mag-install ng etckeeper gamit ang setting ng autopush
Buweno, sabihin nating ipinamahagi namin ang aming pagpupulong, nagsimula ang trabaho sa kung paano pinakamahusay na mag-assemble sa ibang pagkakataon sa ibang mga bersyon ng aming system.
Siyempre, maaari tayong gumawa ng mga sangay sa device nang maaga (sabihin nating gumawa tayo ng script o serbisyo na tatakbo sa unang pagkakataong ilunsad ito).
# 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
At iyon lang - pagkatapos ng ilang sandali maaari naming tingnan ang mga pagbabago at lumikha ng isang listahan ng mga pakete para sa target na firmware.