From 9f469025e194fa58b3119a7719e11e558b533b4f Mon Sep 17 00:00:00 2001 From: ArenM Date: Sun, 29 May 2022 20:18:56 -0400 Subject: [PATCH] pkg: pine64: device-pine64-pinephone: include boot script Move the u-boot configuration to the device meta-package, and change mmc_bootdev to devnum for compatibility with tow-boot. When booting from tow-boot mmc_bootdev points at the emmc, even if arch is installed to the sd card, devnum gets set to be the correct device though. --- .../pine64/device-pine64-pinephone/PKGBUILD | 19 +++++-- .../pine64/device-pine64-pinephone/boot.txt | 50 +++++++++++++++++++ .../device-pine64-pinephone.install | 9 ++-- .../pine64/device-pine64-pinephone/mkscr | 9 ++++ 4 files changed, 79 insertions(+), 8 deletions(-) create mode 100644 PKGBUILDS/pine64/device-pine64-pinephone/boot.txt create mode 100755 PKGBUILDS/pine64/device-pine64-pinephone/mkscr diff --git a/PKGBUILDS/pine64/device-pine64-pinephone/PKGBUILD b/PKGBUILDS/pine64/device-pine64-pinephone/PKGBUILD index be5a1e49..1f1fe964 100644 --- a/PKGBUILDS/pine64/device-pine64-pinephone/PKGBUILD +++ b/PKGBUILDS/pine64/device-pine64-pinephone/PKGBUILD @@ -1,19 +1,23 @@ # Maintainer: Danct12 pkgname=device-pine64-pinephone pkgver=0.2 -pkgrel=4 +pkgrel=5 pkgdesc="PinePhone device package" arch=(aarch64) url="https://github.com/dreemurrs-embedded/Pine64-Arch" license=('MIT') -depends=(danctnix-tweaks alsa-ucm-pinephone linux-megi uboot-pinephone rtl8723bt-firmware anx7688-firmware - ov5640-firmware eg25-manager) +depends=(danctnix-tweaks alsa-ucm-pinephone linux-megi rtl8723bt-firmware anx7688-firmware + ov5640-firmware eg25-manager uboot-tools) +optdepends=('uboot-pinephone: required if not using tow-boot') install="$pkgname.install" +backup=("boot/boot.txt") source=(10-proximity.rules 10-pinephone-brightness.rules pinephone-suspend-hook.sh machine-info - pulseaudio-pinetweaks.conf) + pulseaudio-pinetweaks.conf + boot.txt + mkscr) package() { # Kanged from Mobian, this is to make iio-sensor-proxy works with proximity sensor. @@ -28,10 +32,15 @@ package() { install -Dm644 "$srcdir"/machine-info "$pkgdir"/etc/machine-info install -Dm644 "$srcdir"/pulseaudio-pinetweaks.conf "$pkgdir"/etc/pulse/daemon.conf.d/pinetweaks.conf + + # u-boot startup script + install -Dm644 -t "${pkgdir}"/boot boot.txt mkscr } md5sums=('b72ff096c022588f72c226283ac328bd' '3a478fece4381cf41fb795009bfe8cc3' 'b0912b95d7d810a0f161d9bd79fc162b' 'b53781dde1d7a9a44e5076f3be463570' - '1504e684e5a2aec439e0674cdfc9d3c1') + '1504e684e5a2aec439e0674cdfc9d3c1' + '69400a6dfe94221172b2a00f18b1a8bd' + '021623a04afd29ac3f368977140cfbfd') diff --git a/PKGBUILDS/pine64/device-pine64-pinephone/boot.txt b/PKGBUILDS/pine64/device-pine64-pinephone/boot.txt new file mode 100644 index 00000000..d18bc5bb --- /dev/null +++ b/PKGBUILDS/pine64/device-pine64-pinephone/boot.txt @@ -0,0 +1,50 @@ +gpio set 98 # Enable vibrator + +if test ${devnum} -eq 0; then + echo "Booting from SD" + setenv linux_mmcdev 0 +else + echo "Booting from eMMC" + setenv linux_mmcdev 2 +fi + +# If we have at least 2 partitions, then the 1st one is /boot, and / is #2 +if part size mmc ${devnum} 2 none; then + setenv rootpart 2 +else + setenv rootpart 1 + setenv bootdir "/boot" +fi + +setenv bootargs loglevel=4 console=${console} console=tty0 root=/dev/mmcblk${linux_mmcdev}p${rootpart} rw rootwait quiet bootsplash.bootfile=bootsplash-themes/danctnix/bootsplash + +echo "Loading kernel..." +load mmc ${devnum}:1 ${ramdisk_addr_r} ${bootdir}/Image.gz + +echo "Uncompressing kernel..." +unzip ${ramdisk_addr_r} ${kernel_addr_r} + +echo "Loading initramfs..." +load mmc ${devnum}:1 ${ramdisk_addr_r} ${bootdir}/initramfs-linux.img +setenv ramdisk_size ${filesize} + +echo "Loading dtb..." +load mmc ${devnum}:1 ${fdt_addr_r} ${bootdir}/dtbs/${fdtfile} + +echo Resizing FDT +fdt addr ${fdt_addr_r} +fdt resize + +echo Adding FTD RAM clock +fdt mknode / memory +fdt set /memory ram_freq ${ram_freq} +fdt list /memory + +echo Loading user script +setenv user_scriptaddr 0x61dbc200 +load mmc ${devnum}:1 ${user_scriptaddr} ${bootdir}/user.scr +if test $? -eq 0; then source ${user_scriptaddr}; else echo No user script found; fi + +echo "Booting..." +gpio clear 98 # Disable vibrator +booti ${kernel_addr_r} ${ramdisk_addr_r}:0x${ramdisk_size} ${fdt_addr_r} diff --git a/PKGBUILDS/pine64/device-pine64-pinephone/device-pine64-pinephone.install b/PKGBUILDS/pine64/device-pine64-pinephone/device-pine64-pinephone.install index 23c4d680..a45bef8b 100644 --- a/PKGBUILDS/pine64/device-pine64-pinephone/device-pine64-pinephone.install +++ b/PKGBUILDS/pine64/device-pine64-pinephone/device-pine64-pinephone.install @@ -1,7 +1,10 @@ -post_install() { +post_upgrade() { + echo "Generating U-Boot script" + mkimage -A arm -O linux -T script -C none -n "U-Boot boot script" -d /boot/boot.txt /boot/boot.scr + systemctl enable eg25-manager } -post_upgrade() { - systemctl enable eg25-manager +post_install() { + post_upgrade } diff --git a/PKGBUILDS/pine64/device-pine64-pinephone/mkscr b/PKGBUILDS/pine64/device-pine64-pinephone/mkscr new file mode 100755 index 00000000..272b6a7a --- /dev/null +++ b/PKGBUILDS/pine64/device-pine64-pinephone/mkscr @@ -0,0 +1,9 @@ +#!/bin/bash + +if [[ ! -x /usr/bin/mkimage ]]; then + echo "mkimage not found. Please install uboot-tools:" + echo " pacman -S uboot-tools" + exit 1 +fi + +mkimage -A arm -O linux -T script -C none -n "U-Boot boot script" -d boot.txt boot.scr