[gnome-build-meta] Initial buildable image
- From: Marge Bot <marge-bot src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-build-meta] Initial buildable image
- Date: Sun, 25 Sep 2022 19:50:44 +0000 (UTC)
commit e29dfcf65b4f4c97b3394815ad3aa48b87c79e59
Author: Lawrence Hunter <lawrence hunter codethink co uk>
Date: Tue Jul 26 21:20:41 2022 +0100
Initial buildable image
Add bootable PinePhone image with CI
Part-of: <https://gitlab.gnome.org/GNOME/gnome-build-meta/-/merge_requests/1727>
.gitignore | 6 +-
.gitlab-ci.yml | 58 ++++++
elements/boards/pinephone/arm-trusted-firmware.bst | 27 +++
elements/boards/pinephone/deps.bst | 9 +
elements/boards/pinephone/filesystem.bst | 10 +
elements/boards/pinephone/image-deps.bst | 7 +
elements/boards/pinephone/image.bst | 126 +++++++++++++
elements/boards/pinephone/initial-scripts.bst | 7 +
elements/boards/pinephone/initramfs.bst | 67 +++++++
elements/boards/pinephone/initramfs/deps.bst | 20 ++
.../boards/pinephone/initramfs/initial-scripts.bst | 7 +
elements/boards/pinephone/linux.bst | 209 +++++++++++++++++++++
elements/boards/pinephone/repo.bst | 29 +++
elements/boards/pinephone/u-boot.bst | 38 ++++
utils/test_pinephone_image.py | 124 ++++++++++++
15 files changed, 743 insertions(+), 1 deletion(-)
---
diff --git a/.gitignore b/.gitignore
index e136cb2b1..a7c2e0268 100644
--- a/.gitignore
+++ b/.gitignore
@@ -9,4 +9,8 @@ project.refs
# Produced by the gnomeos build scripts
ostree-gpg/
-ostree-repo/
\ No newline at end of file
+ostree-repo/
+
+**/*.DS_STORE
+logs/
+*.img
\ No newline at end of file
diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index fcf8d8c0d..5af165762 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -91,6 +91,22 @@ default:
- image
expire_in: '2 days'
+.image-template:
+ stage: deploy
+ needs:
+ - job: "track"
+ optional: true
+ when: always
+ allow_failure: false
+ script:
+ - ${BST_NO_PUSH} --max-jobs $(( $(nproc) / 4 )) -o arch "${ARCH}" build "${IMAGE}"
+ - ${BST} -o arch "${ARCH}" checkout --hardlinks "${IMAGE}" image
+ artifacts:
+ when: always
+ paths:
+ - image
+ expire_in: "2 days"
+
.deploy-rules:
rules:
- if: $EMERGENCY || $BST_TRACK_TAGS != "false"
@@ -276,6 +292,18 @@ pinebook-pro-image:
variables:
IMAGE: boards/pinebook-pro/image.bst
+pinephone-image:
+ extends:
+ - .manual-image-template
+ - .aarch64
+ needs:
+ - job: "track"
+ optional: true
+ - job: "build-aarch64"
+ artifacts: false
+ variables:
+ IMAGE: boards/pinephone/image.bst
+
rock64-image:
extends:
- .manual-image-template
@@ -486,6 +514,36 @@ test-iso-installer-x86_64:
- x86_64
- gnome-build-meta
+test-pinephone-aarch64:
+ image: ubuntu:latest
+ stage: test
+ when: always
+ variables:
+ IMAGE: boards/pinephone/image.bst
+ needs:
+ - job: "pinephone-image"
+ artifacts: true
+ before_script:
+ - export DEBIAN_FRONTEND=noninteractive
+ - apt update -y
+ - apt install software-properties-common -y
+ - add-apt-repository ppa:deadsnakes/ppa
+ - apt update
+ - apt install python3.8 -yqq
+ - python3 --version
+ - apt-get install qemu-system-arm expect wget -y
+ - wget
http://snapshots.linaro.org/components/kernel/leg-virt-tianocore-edk2-upstream/latest/QEMU-AARCH64/RELEASE_GCC5/QEMU_EFI.img.gz
+ - gunzip QEMU_EFI.img.gz
+ - qemu-img create -f qcow2 debian.img 32G
+ - qemu-img create -f qcow2 varstore.img 64M
+ - mv $(pwd)/image/disk.img.xz ./disk.img.xz
+ - unxz -T$(nproc) disk.img.xz
+ - chmod +x utils/test_pinephone_image.py
+ script:
+ - python3 utils/test_pinephone_image.py
+ tags:
+ - aarch64
+ - gnome-build-meta
pages:
stage: 'reports'
diff --git a/elements/boards/pinephone/arm-trusted-firmware.bst
b/elements/boards/pinephone/arm-trusted-firmware.bst
new file mode 100644
index 000000000..bf01413b9
--- /dev/null
+++ b/elements/boards/pinephone/arm-trusted-firmware.bst
@@ -0,0 +1,27 @@
+kind: manual
+
+sources:
+- kind: git_tag
+ url: github:ARM-software/arm-trusted-firmware.git
+ track: v2.7
+
+build-depends:
+- freedesktop-sdk.bst:bootstrap-import.bst
+# This is required because at part of the firmware has to be built for
+# armv7. freedesktop-sdk.bst:cross-compilers/gcc-arm.bst does not
+# seem to be able to compile like needed.
+- boards/common/arm-none-eabi-gcc.bst
+
+variables:
+ board: sun50i_a64
+
+environment:
+ CFLAGS: '-fno-stack-protector'
+ LDFLAGS: ''
+
+config:
+ build-commands:
+ - make -j$(nproc) PLAT=%{board} DEBUG=1 all
+
+ install-commands:
+ - install -Dm644 -t "%{install-root}%{indep-libdir}/u-boot/pinephone" build/%{board}/debug/bl31/bl31.elf
diff --git a/elements/boards/pinephone/deps.bst b/elements/boards/pinephone/deps.bst
new file mode 100644
index 000000000..b65aca92d
--- /dev/null
+++ b/elements/boards/pinephone/deps.bst
@@ -0,0 +1,9 @@
+kind: stack
+
+depends:
+- core/meta-gnome-core-mobile.bst
+
+- vm/common-deps.bst
+- vm/os-release-user.bst
+
+- boards/pinephone/initramfs.bst
diff --git a/elements/boards/pinephone/filesystem.bst b/elements/boards/pinephone/filesystem.bst
new file mode 100644
index 000000000..40f33bf4f
--- /dev/null
+++ b/elements/boards/pinephone/filesystem.bst
@@ -0,0 +1,10 @@
+kind: compose
+
+build-depends:
+- boards/pinephone/deps.bst
+- boards/pinephone/initramfs.bst
+
+config:
+ exclude:
+ - devel
+ - debug
diff --git a/elements/boards/pinephone/image-deps.bst b/elements/boards/pinephone/image-deps.bst
new file mode 100644
index 000000000..b95c0713a
--- /dev/null
+++ b/elements/boards/pinephone/image-deps.bst
@@ -0,0 +1,7 @@
+kind: stack
+
+depends:
+- boards/pinephone/u-boot.bst
+- core-deps/libostree.bst
+- freedesktop-sdk.bst:components/genimage.bst
+- freedesktop-sdk.bst:integration/mtab.bst
diff --git a/elements/boards/pinephone/image.bst b/elements/boards/pinephone/image.bst
new file mode 100644
index 000000000..f30368a4b
--- /dev/null
+++ b/elements/boards/pinephone/image.bst
@@ -0,0 +1,126 @@
+kind: script
+
+build-depends:
+- boards/pinephone/image-deps.bst
+- boards/pinephone/repo.bst
+- boards/pinephone/linux.bst
+
+variables:
+ linux-root: b921b045-1df0-41c3-af44-4c6f280d3fae
+ ostree-branch: gnome-os/aarch64/pinephone
+ board: pinephone
+
+ sysroot: "/sysroot"
+
+environment:
+ OSTREE_REPO: "%{sysroot}/ostree/repo"
+ XZFLAGS: -T%{max-jobs}
+
+environment-nocache:
+- XZFLAGS
+
+
+config:
+ layout:
+ - element: ''
+ destination: '/sysroot'
+ - element: components/genimage.bst
+ destination: '/'
+ - element: boards/pinephone/repo.bst
+ destination: '/source-repo'
+ - element: boards/pinephone/image-deps.bst
+ destination: '/'
+ - element: core-deps/libostree.bst
+ destination: '/'
+ - element: boards/pinephone/linux.bst
+ destination: '/kernel'
+
+ commands:
+ - mkdir -p "${OSTREE_REPO}"
+ - ostree init --repo="${OSTREE_REPO}" --mode=bare
+
+ - ostree config --group sysroot set bootloader auto
+ - ostree pull-local "/source-repo" %{ostree-branch}
+
+ - mkdir -p "%{sysroot}/boot"
+
+ - ostree admin init-fs "%{sysroot}"
+ - ostree admin os-init --sysroot="%{sysroot}" gnome-os
+
+ # U-Boot does not provide EFI variables at runtime. So /dev/gpt-auto-root
+ # is not available.
+ - |
+ ostree admin deploy --os="gnome-os" \
+ --sysroot="%{sysroot}" %{ostree-branch} \
+ --karg="rw" --karg="splash" \
+ --karg="root=LABEL=root" \
+ --karg="console=ttyS0,115200n8" \
+ --karg="earlycon=ttyS0,115200n8"
+
+ - |
+ mkdir -p "%{sysroot}/etc/ostree"
+ cp -r "%{sysroot}"/ostree/boot.1/gnome-os/*/*/etc/ostree/remotes.d "%{sysroot}/etc/ostree/remotes.d"
+
+ - |
+ ostree admin set-origin --sysroot="%{sysroot}" \
+ --index=0 \
+ gnome-os dummy \
+ %{ostree-branch}
+
+ - cp -r "%{sysroot}"/ostree/boot.1/gnome-os/*/*/boot/EFI/ "%{sysroot}/boot/"
+
+ - cp -r "/kernel/boot/dtbs" "%{sysroot}/boot/dtb"
+
+ - |
+ size=$(($(du -s -B 4K "%{sysroot}" | cut -f1)*4+200*1024))
+ cat >%{install-root}/genimage.cfg <<EOF
+ image efi.img {
+ vfat {
+ extraargs = "-F32 -n EFI"
+ }
+ mountpoint = "/boot"
+ size = 500M
+ }
+ image root.img {
+ ext4 {
+ label = "root"
+ use-mke2fs = true
+ }
+ size = ${size}K
+ }
+ image disk.img {
+ hdimage {
+ gpt = true
+ align = 1M
+ }
+ partition idbloader {
+ image = "idbloader.img"
+ offset = 32K
+ in-partition-table = false
+ }
+ partition uboot {
+ image = "u-boot.itb"
+ offset = 8M
+ in-partition-table = false
+ }
+ partition efi {
+ image = "efi.img"
+ partition-type-uuid = "U"
+ }
+ partition root {
+ image = "root.img"
+ partition-type-uuid = "%{linux-root}"
+ }
+ }
+ EOF
+
+ - |
+ cd %{install-root}
+ genimage --rootpath "%{sysroot}" --inputpath "%{indep-libdir}/u-boot/pinephone/"
+ mv images/disk.img .
+ rm -rf genimage.cfg images/ tmp/
+
+
+ - sfdisk --part-attrs %{install-root}/disk.img 2 55
+
+ - xz ${XZFLAGS} %{install-root}/disk.img
diff --git a/elements/boards/pinephone/initial-scripts.bst b/elements/boards/pinephone/initial-scripts.bst
new file mode 100644
index 000000000..a185f71c2
--- /dev/null
+++ b/elements/boards/pinephone/initial-scripts.bst
@@ -0,0 +1,7 @@
+kind: collect_initial_scripts
+
+build-depends:
+- boards/pinephone/deps.bst
+
+config:
+ path: /etc/fdsdk/initial_scripts
diff --git a/elements/boards/pinephone/initramfs.bst b/elements/boards/pinephone/initramfs.bst
new file mode 100644
index 000000000..e29599a47
--- /dev/null
+++ b/elements/boards/pinephone/initramfs.bst
@@ -0,0 +1,67 @@
+kind: script
+
+build-depends:
+- freedesktop-sdk.bst:vm/prepare-image.bst
+- boards/pinephone/initramfs/deps.bst
+- boards/pinephone/initramfs/initial-scripts.bst
+
+variables:
+ uuidnamespace: aea54278-2587-4075-ae67-8688ace4ce3d
+
+config:
+ layout:
+ - element: ''
+ destination: '/tmp'
+ - element: ''
+ destination: '/var/tmp'
+ - element: ''
+ destination: '/efi'
+ - element: boards/pinephone/initramfs/initial-scripts.bst
+ destination: '/'
+ - element: boards/pinephone/initramfs/deps.bst
+ destination: '/'
+ - element: vm/prepare-image.bst
+ destination: '/'
+
+ commands:
+ - |
+ prepare-image.sh \
+ --seed "%{uuidnamespace}" \
+ --rootsource LABEL=root \
+ --efisource LABEL=EFI \
+ --efipath /boot >/dev/null
+
+ - |
+ mkdir -p "%{install-root}/usr/lib/"
+ cp -r /usr/lib/modules "%{install-root}/usr/lib/"
+
+ - |
+ version="$(ls -1 /lib/modules | head -n1)"
+ mkdir -p "%{install-root}/usr/lib/modules/${version}"
+ dracut -v --fstab \
+ --no-machineid \
+ --kver "${version}" \
+ --add ostree \
+ --add plymouth \
+ --add eos-repartition \
+ --add-drivers "rockchipdrm panfrost panel_simple analogix_dp pwm_bl drm_kms_helper" \
+ --install 'fsck.ext4' \
+ "%{install-root}/usr/lib/modules/${version}/initramfs"
+
+ - |
+ version="$(ls -1 /lib/modules | head -n1)"
+ cp /boot/vmlinuz "%{install-root}/usr/lib/modules/${version}/vmlinuz"
+
+ - dbus-uuidgen >/etc/machine-id
+ - SYSTEMD_RELAX_ESP_CHECKS=1 bootctl --path='/efi' --no-variables install
+ - rm /etc/machine-id
+
+ - cp -r /efi "%{install-root}/boot"
+
+ - |
+ cat <<EOF >"%{install-root}/boot/loader/loader.conf"
+ timeout 3
+ editor no
+ console-mode max
+ default *
+ EOF
diff --git a/elements/boards/pinephone/initramfs/deps.bst b/elements/boards/pinephone/initramfs/deps.bst
new file mode 100644
index 000000000..87cd9b33a
--- /dev/null
+++ b/elements/boards/pinephone/initramfs/deps.bst
@@ -0,0 +1,20 @@
+kind: stack
+
+depends:
+- freedesktop-sdk.bst:bootstrap-import.bst
+- freedesktop-sdk.bst:components/util-linux.bst
+- freedesktop-sdk.bst:components/systemd.bst
+- freedesktop-sdk.bst:components/dbus.bst
+- freedesktop-sdk.bst:components/dracut.bst
+- freedesktop-sdk.bst:components/os-release.bst
+- freedesktop-sdk.bst:components/shadow.bst
+- freedesktop-sdk.bst:components/tzdata.bst
+- freedesktop-sdk.bst:components/pkg-config.bst
+- vm/plymouth-gnome-theme.bst
+
+- boards/pinephone/linux.bst
+- freedesktop-sdk.bst:components/linux-firmware.bst
+- freedesktop-sdk.bst:components/wireless-regdb-bin.bst
+
+- core-deps/libostree.bst
+- vm/eos-repartition.bst
diff --git a/elements/boards/pinephone/initramfs/initial-scripts.bst
b/elements/boards/pinephone/initramfs/initial-scripts.bst
new file mode 100644
index 000000000..ea5223955
--- /dev/null
+++ b/elements/boards/pinephone/initramfs/initial-scripts.bst
@@ -0,0 +1,7 @@
+kind: collect_initial_scripts
+
+build-depends:
+- boards/pinephone/initramfs/deps.bst
+
+config:
+ path: /etc/fdsdk/initial_scripts
diff --git a/elements/boards/pinephone/linux.bst b/elements/boards/pinephone/linux.bst
new file mode 100644
index 000000000..7b304fe71
--- /dev/null
+++ b/elements/boards/pinephone/linux.bst
@@ -0,0 +1,209 @@
+kind: manual
+
+sources:
+- kind: git_tag
+ url: github:megous/linux.git
+ track: orange-pi-5.10
+ ref: orange-pi-5.10-20210226-1254-0-g5aa571dfc47b2fa92615ea5774475fa3650e8eb3
+
+depends:
+- freedesktop-sdk.bst:components/kmod.bst
+
+build-depends:
+- freedesktop-sdk.bst:bootstrap-import.bst
+- freedesktop-sdk.bst:components/bison.bst
+- freedesktop-sdk.bst:components/flex.bst
+- freedesktop-sdk.bst:components/bc.bst
+- freedesktop-sdk.bst:components/gzip.bst
+- freedesktop-sdk.bst:components/openssl.bst
+
+variables:
+ bootdir: /boot
+ kernel_arch: arm64
+ image-name: arch/arm64/boot/Image
+
+environment:
+ ARCH: '%{kernel_arch}'
+
+config:
+ configure-commands:
+ - make clean defconfig
+
+ - |
+ # Modify the kernel config for additional features
+
+ # Kernel Config Options
+ scripts/config -e DEVTMPFS
+ scripts/config -e CGROUPS
+ scripts/config -e INOTIFY_USER
+ scripts/config -e SIGNALFD
+ scripts/config -e TIMERFD
+ scripts/config -e EPOLL
+ scripts/config -e NET
+ scripts/config -e SYSFS
+ scripts/config -e PROC_FS
+ scripts/config -e FHANDLE
+
+ # Kernel crypto/hash API
+ scripts/config -e CRYPTO_USER_API_HASH
+ scripts/config -e CRYPTO_HMAC
+ scripts/config -e CRYPTO_SHA256
+
+ # udev will fail to work with legacy sysfs
+ scripts/config -d SYSFS_DEPRECATED
+
+ # Boot is very slow with systemd when legacy PTYs are present
+ scripts/config -d LEGACY_PTYS
+ scripts/config -d LEGACY_PTY_COUNT
+
+ # Legacy hotplug confuses udev
+ scripts/config --set-str UEVENT_HELPER_PATH ""
+
+ # Userspace firmware loading not supported
+ scripts/config -d FW_LOADER_USER_HELPER
+
+ # Some udev/virtualization requires
+ scripts/config -e DMIID
+
+ # Support for some SCSI devices serial number retrieval
+ scripts/config -e BLK_DEV_BSG
+
+ # Required for PrivateNetwork= in service units
+ scripts/config -e NET_NS
+ scripts/config -e USER_NS
+
+ # Required for 9p support
+ scripts/config -e NET_9P
+ scripts/config -e NET_9P_VIRTIO
+ scripts/config -e 9P_FS
+ scripts/config -e 9P_FS_POSIX_ACL
+ scripts/config -e 9P_FS_SECURITY
+ scripts/config -e VIRTIO_PCI
+
+ # Strongly Recommended
+ scripts/config -e IPV6
+ scripts/config -e AUTOFS4_FS
+ scripts/config -e TMPFS_XATTR
+ scripts/config -e TMPFS_POSIX_ACL
+ scripts/config -e EXT4_FS_POSIX_ACL
+ scripts/config -e EXT4_FS_SECURITY
+ scripts/config -e XFS_POSIX_ACL
+ scripts/config -e BTRFS_FS_POSIX_ACL
+ scripts/config -e SECCOMP
+ scripts/config -e SECCOMP_FILTER
+ scripts/config -e CHECKPOINT_RESTORE
+
+ # Required for CPUShares= in resource control unit settings
+ scripts/config -e CGROUP_SCHED
+ scripts/config -e FAIR_GROUP_SCHED
+
+ # Required for CPUQuota= in resource control unit settings
+ scripts/config -e CFS_BANDWIDTH
+
+ # Required for IPAddressDeny=, IPAddressAllow= in resource control unit settings
+ scripts/config -e CGROUP_BPF
+
+ # For UEFI systems
+ scripts/config -e EFIVAR_FS
+ scripts/config -e EFI_PARTITION
+
+ # RT group scheduling (effectively) makes RT scheduling unavailable for userspace
+ scripts/config -d RT_GROUP_SCHED
+
+ # Required for 3D acceleration in qemu
+ scripts/config -e CONFIG_DRM_VIRTIO_GPU
+
+ # Required for systemd-nspawn
+ scripts/config -e DEVPTS_MULTIPLE_INSTANCES
+
+ # Sound with QEMU
+ scripts/config -e SND_HDA_GENERIC
+
+ scripts/config -e MMC
+ scripts/config -m PWRSEQ_SD8787
+ scripts/config -e MMC_BLOCK_MINORS=32
+ scripts/config -m SDIO_UART
+ scripts/config -e MMC_SDHCI
+ scripts/config -e MMC_SDHCI_PCI
+ scripts/config -e MMC_SDHCI_ACPI
+ scripts/config -e MMC_SDHCI_PLTFM
+ scripts/config -e MMC_SDHCI_OF_ARASAN
+ scripts/config -e MMC_SPI
+ scripts/config -e MMC_DW
+ scripts/config -e MMC_DW_PCI
+ scripts/config -e MMC_DW_ROCKCHIP
+
+ scripts/config -d DRM_LIMA
+
+ scripts/config -e DRM_PANFROST
+ scripts/config -m DRM_MALI_DISPLAY
+ scripts/config -m DRM_ANALOGIX_ANX78XX
+ scripts/config -m DRM_DW_HDMI_CEC
+ scripts/config -e DRM_LOAD_EDID_FIRMWARE
+
+ scripts/config -m BATTERY_CW2015
+
+ scripts/config -e FIRMWARE_EDID
+
+ scripts/config -m CRYPTO_DEV_ROCKCHIP
+ scripts/config -e PCIE_ROCKCHIP_HOST
+ scripts/config -e PHY_ROCKCHIP_DP
+ scripts/config -e PHY_ROCKCHIP_INNO_HDMI
+ scripts/config -e PHY_ROCKCHIP_PCIE
+ scripts/config -e ROCKCHIP_LVDS
+ scripts/config -e ROCKCHIP_MBOX
+ scripts/config -e ROCKCHIP_RGB
+ scripts/config -m SND_SOC_ROCKCHIP_MAX98090
+ scripts/config -m SND_SOC_ROCKCHIP_PDM
+ scripts/config -m VIDEO_ROCKCHIP_RGA
+ scripts/config -e ROCKCHIP_SUSPEND_MODE
+ scripts/config -e ROCKCHIP_SIP
+
+ scripts/config -e DRM_PANEL
+ scripts/config -m DRM_PANEL_LVDS
+ scripts/config -m DRM_PANEL_SIMPLE
+
+ scripts/config -m HID_MULTITOUCH
+
+ scripts/config -m SND_SOC_ES8316
+ scripts/config -m SND_SOC_SIMPLE_AMPLIFIER
+ scripts/config -m SND_SIMPLE_CARD
+
+ scripts/config -e CHARGER_GPIO
+ scripts/config -m PWRSEQ_SD8787
+ scripts/config -m PWRSEQ_SIMPLE
+ scripts/config -e GPIO_SYSCON
+
+ scripts/config -e RTC_DRV_RK808
+
+ scripts/config -e WIRELESS
+ scripts/config -m CFG80211
+ scripts/config -e CFG80211_WEXT
+ scripts/config -e MAC80211
+ scripts/config -e NETDEVICES
+ scripts/config -e WLAN
+
+
+ build-commands:
+ - make -j$(nproc)
+
+ install-commands:
+ - install -Dm644 "%{image-name}" '%{install-root}%{bootdir}/vmlinuz'
+ - install -Dm644 System.map '%{install-root}%{bootdir}/System.map'
+ - make INSTALL_MOD_PATH='%{install-root}%{prefix}' modules_install
+ - rm %{install-root}%{indep-libdir}/modules/*/{source,build}
+ - make INSTALL_DTBS_PATH='%{install-root}%{bootdir}/dtbs' dtbs_install
+
+public:
+ bst:
+ integration-commands:
+ - |
+ cd '%{indep-libdir}/modules'
+ for version in *; do
+ depmod -b '%{prefix}' -a "$version";
+ done
+
+ split-rules:
+ devel:
+ (>):
+ - '%{bootdir}/System.map'
diff --git a/elements/boards/pinephone/repo.bst b/elements/boards/pinephone/repo.bst
new file mode 100644
index 000000000..9d2409098
--- /dev/null
+++ b/elements/boards/pinephone/repo.bst
@@ -0,0 +1,29 @@
+kind: ostree
+
+build-depends:
+- freedesktop-sdk.bst:vm/prepare-image.bst
+- core-deps/libostree.bst
+- boards/pinephone/filesystem.bst
+- boards/pinephone/initial-scripts.bst
+
+variables:
+ uuidnamespace: aea54278-2587-4075-ae67-8688ace4ce3d
+ ostree-branch: gnome-os/aarch64/pinephone
+
+config:
+ environment:
+ - core-deps/libostree.bst
+ - vm/prepare-image.bst
+ - boards/pinephone/initial-scripts.bst
+ ostree-branch: '%{ostree-branch}'
+ initial-commands:
+ - |
+ prepare-image.sh \
+ --sysroot %{sysroot} \
+ --seed "%{uuidnamespace}" \
+ --rootpasswd root \
+ --rootsource LABEL=root \
+ --efisource LABEL=EFI \
+ --efipath /boot >/dev/null
+
+ - mv %{sysroot}/etc %{sysroot}/usr/etc
diff --git a/elements/boards/pinephone/u-boot.bst b/elements/boards/pinephone/u-boot.bst
new file mode 100644
index 000000000..ccb3d4fbf
--- /dev/null
+++ b/elements/boards/pinephone/u-boot.bst
@@ -0,0 +1,38 @@
+kind: manual
+
+sources:
+- kind: git
+ url: gitlab:pine64-org/u-boot.git
+ track: pinephone-2021-06-22
+ ref: 378121422954a58bc0072b0c8965fdc7b2332e55
+
+build-depends:
+- freedesktop-sdk.bst:components/bison.bst
+- freedesktop-sdk.bst:components/dtc.bst
+- freedesktop-sdk.bst:components/flex.bst
+- freedesktop-sdk.bst:components/gzip.bst
+- freedesktop-sdk.bst:components/bc.bst
+- freedesktop-sdk.bst:components/swig.bst
+- freedesktop-sdk.bst:components/python3-setuptools.bst
+- boards/common/python3-as-python2.bst
+- boards/pinephone/arm-trusted-firmware.bst
+
+environment:
+ BL31: "%{indep-libdir}/u-boot/pinephone/bl31.elf"
+
+variables:
+ board: pinephone
+
+config:
+ configure-commands:
+ - make distclean
+ - make "%{board}_defconfig"
+
+ build-commands:
+ - make -j$(nproc) V=1 all
+
+ install-commands:
+ - mv u-boot.img idbloader.img
+ - install -Dm644 -t "%{install-root}%{indep-libdir}/u-boot/%{board}" idbloader.img
+ - mv u-boot-sunxi-with-spl.fit.itb u-boot.itb
+ - install -Dm644 -t "%{install-root}%{indep-libdir}/u-boot/%{board}" u-boot.itb
diff --git a/utils/test_pinephone_image.py b/utils/test_pinephone_image.py
new file mode 100644
index 000000000..96f6185d8
--- /dev/null
+++ b/utils/test_pinephone_image.py
@@ -0,0 +1,124 @@
+"""test_pinephone_image.py: Boots a disk image and tests that it works."""
+
+import argparse
+import asyncio
+import asyncio.subprocess
+import logging
+import sys
+import os
+import signal
+
+FAILURE_TIMEOUT = 1800 # seconds
+BUFFER_SIZE = 80 # how many characters to read at once
+
+DIALOGS = {
+ 'root-login':
+ [
+ 'login:',
+ 'root',
+ 'Password:',
+ 'root',
+ '#',
+ 'uname -a',
+ '#',
+ 'sudo shutdown now',
+ 'Power down'
+
+ ]
+}
+
+
+def argument_parser():
+ parser = argparse.ArgumentParser(
+ description="Test that PinePhone image works as expected")
+ parser.add_argument('--dialog', dest='dialog', default='root-login',
+ help='dialog to follow\
+ (valid values {}, default: root-login)'
+ .format(DIALOGS.keys()))
+
+ return parser
+
+
+async def await_line(stream, marker):
+ """Read from 'stream' until a line appears contains 'marker'."""
+ marker = marker.encode("utf-8")
+ buf = b""
+
+ while not stream.at_eof():
+ chunk = await stream.read(BUFFER_SIZE)
+ sys.stdout.buffer.write(chunk)
+ buf += chunk
+ lines = buf.split(b'\n')
+ for line in lines:
+ if marker in line:
+ try:
+ return line.decode("utf-8")
+ except UnicodeDecodeError:
+ break
+ buf = lines[-1]
+
+
+async def run_test(command, dialog):
+ dialog = DIALOGS[dialog]
+
+ logging.debug("Starting process: {}", command)
+ process = await asyncio.create_subprocess_exec(
+ *command,
+ stdin=asyncio.subprocess.PIPE,
+ stdout=asyncio.subprocess.PIPE,
+ start_new_session=True)
+
+ success = False
+ try:
+ while dialog:
+ prompt = await await_line(process.stdout, dialog.pop(0))
+
+ assert prompt is not None
+ if dialog:
+ process.stdin.write(dialog.pop(0).encode('ascii') + b'\n')
+
+ print("Test successful")
+ success = True
+ except asyncio.CancelledError:
+ # Move straight to killing the process group
+ pass
+ finally:
+ try:
+ os.killpg(os.getpgid(process.pid), signal.SIGKILL)
+ except ProcessLookupError:
+ pass
+
+ await process.communicate()
+ await process.wait()
+ return success
+
+
+def fail_timeout(qemu_task):
+ sys.stderr.write("Test failed as timeout of %i seconds was reached.\n" %
+ FAILURE_TIMEOUT)
+ qemu_task.cancel()
+
+
+def main():
+ args = argument_parser().parse_args()
+
+ command = ['qemu-system-aarch64', '-cpu', 'cortex-a57', '-M', 'virt', '-m',
+ '4096', '--nographic', '-drive',
+ 'if=pflash,format=raw,file=QEMU_EFI.img',
+ '-drive', 'if=pflash,file=varstore.img',
+ '-drive', 'if=virtio,file=debian.img',
+ '-drive', 'if=virtio,format=raw,file=disk.img']
+
+ loop = asyncio.get_event_loop()
+ qemu_task = loop.create_task(run_test(command, args.dialog))
+ loop.call_later(FAILURE_TIMEOUT, fail_timeout, qemu_task)
+ loop.run_until_complete(qemu_task)
+ loop.close()
+
+ if qemu_task.result():
+ return 0
+ return 1
+
+
+result = main()
+sys.exit(result)
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]