diff --git a/dev-embedded/u-boot-pinephone-pro/files/boot.txt b/dev-embedded/u-boot-pinephone-pro/files/boot.txt new file mode 100644 index 0000000..f3811cc --- /dev/null +++ b/dev-embedded/u-boot-pinephone-pro/files/boot.txt @@ -0,0 +1,36 @@ +# +# /boot/boot.txt +# After modifying, run "ppp-uboot-mkscr" to re-generate the U-Boot boot script. +# +# +# This is the description of the GPIO lines used in this boot script: +# +# GPIO #105 is GPIO3_B1, or RK3399 ball C27, which controls the vibrator motor +# GPIO #154 is GPIO4_D2, or RK3399 ball AH3, which controls the red part of the multicolor LED +# GPIO #157 is GPIO4_D5, or RK3399 ball AJ3, which controls the green part of the multicolor LED +# GPIO #158 is GPIO4_D6, or RK3399 ball AG4, which controls the blue part of the multicolor LED +# + +gpio set 105 +gpio set 154 + +# Set root partition to the second partition of boot device +<> uuid_boot +<> uuid_root + +setenv bootargs loglevel=4 console=ttyS2,1500000 console=tty0 earlycon=uart8250,mmio32,0xff1a0000 consoleblank=0 boot=PARTUUID=${uuid_boot} root=PARTUUID=${uuid_root} rw rootwait quiet audit=0 bootsplash.bootfile=bootsplash-themes/manjaro/bootsplash + +if load ${devtype} ${devnum}:${distro_bootpart} ${kernel_addr_r} /Image; then + gpio clear 105 + if load ${devtype} ${devnum}:${distro_bootpart} ${fdt_addr_r} /dtbs/${fdtfile}; then + if load ${devtype} ${devnum}:${distro_bootpart} ${ramdisk_addr_r} /initramfs-linux.img; then + gpio set 157 + booti ${kernel_addr_r} ${ramdisk_addr_r}:${filesize} ${fdt_addr_r}; + else + gpio set 158 + booti ${kernel_addr_r} - ${fdt_addr_r}; + fi; + fi; +fi + +# EOF diff --git a/dev-embedded/u-boot-pinephone-pro/files/ppp-uboot-mkscr b/dev-embedded/u-boot-pinephone-pro/files/ppp-uboot-mkscr new file mode 100644 index 0000000..b04d1d6 --- /dev/null +++ b/dev-embedded/u-boot-pinephone-pro/files/ppp-uboot-mkscr @@ -0,0 +1,66 @@ +#!/bin/bash + +# +# /usr/bin/ppp-uboot-mkscr +# Utility that generates the U-Boot boot script. +# + +# Source and destination file paths +BOOT_TXT="/boot/boot.txt" +BOOT_SCR="/boot/boot.scr" + +# Boot script description +IMAGE_DESC="U-Boot boot script" + +# Determine the performed action +if [[ ! -r ${BOOT_SCR} ]]; then + ACTION="Generating" +else + ACTION="Re-generating" +fi + +# Check that we're running as root +if [[ ${EUID} != 0 ]]; then + echo "${ACTION} ${IMAGE_DESC} not possible, please execute this utility as root." + exit 1 +fi + +# Make sure that the required utility is available +if [[ ! -x /usr/bin/mkimage ]]; then + echo "${ACTION} ${IMAGE_DESC} not possible, mkimage utility not found." + echo "Please emerge the u-boot-tools package, by running the following command:" + echo " emerge dev-embedded/u-boot-tools" + exit 1 +fi + +# Check that the source file exists +if [[ ! -r ${BOOT_TXT} ]]; then + echo "${ACTION} ${IMAGE_DESC} not possible, file ${BOOT_TXT} not found." + echo "Please emerge the u-boot-pinephone-pro package, by running the following command:" + echo " emerge dev-embedded/u-boot-pinephone-pro" + exit 1 +fi + +# Is this a quiet execution? +VERBOSE=true +while getopts "q" SWITCH; do + if [[ ${SWITCH} = "q" ]]; then + VERBOSE=false + fi +done + +# Generate the U-Boot boot script +echo "${ACTION} ${IMAGE_DESC} ${BOOT_SCR}..." +if [[ ${VERBOSE} = true ]]; then + mkimage -A arm -O linux -T script -C none -n "${IMAGE_DESC}" -d ${BOOT_TXT} ${BOOT_SCR} +else + mkimage -A arm -O linux -T script -C none -n "${IMAGE_DESC}" -d ${BOOT_TXT} ${BOOT_SCR} > /dev/null 2>&1 + if [[ $? = 0 ]]; then + echo "${ACTION} ${IMAGE_DESC} from ${BOOT_TXT} completed successfully." + else + echo "${ACTION} ${IMAGE_DESC} from ${BOOT_TXT} failed due to unknown reason." + echo "Please try generating the boot script again, or your phone may no longer boot properly." + fi +fi + +# EOF diff --git a/dev-embedded/u-boot-pinephone-pro/u-boot-pinephone-pro-2022.07.ebuild b/dev-embedded/u-boot-pinephone-pro/u-boot-pinephone-pro-2022.07.ebuild index 857f950..133617f 100755 --- a/dev-embedded/u-boot-pinephone-pro/u-boot-pinephone-pro-2022.07.ebuild +++ b/dev-embedded/u-boot-pinephone-pro/u-boot-pinephone-pro-2022.07.ebuild @@ -31,6 +31,7 @@ BDEPEND=" sys-devel/flex virtual/pkgconfig sys-devel/crossdev + dev-embedded/u-boot-tools " src_prepare() { @@ -94,19 +95,20 @@ src_test() { :; } src_install() { insinto /boot/ doins ${S}/u-boot.itb - - insinto /boot/ doins ${S}/idbloader.img + doins ${FILESDIR}/boot.txt + + dobin ${FILESDIR}/ppp-uboot-mkscr } pkg_postinst() { einfo "In order to get the U-Boot to work you will need a crosscompiler for arm-none-eabi you can do this by running: crossdev --target arm-none-eabi (if not done allready) and then re-emerge this packages" einfo "This U-Boot is only to be used for the PinePhone Pro." + einfo "Edit the /boot/boot.txt file with your uuid's and then run ppp-uboot-mkscr" einfo "After compiling a new Gentoo kernel, copy the resulting Image from /usr/src/linux/arch/arm64/boot/Image to the boot partition (replacing the existing Image)." einfo "New version of U-Boot firmware can be flashed to your microSD card or eMMc module." einfo "You can do that by running:" einfo "# dd if=/boot/idbloader.img of=/dev/mmcblkX seek=64 conv=notrunc,fsync" einfo "# dd if=/boot/u-boot.itb of=/dev/mmcblkX seek=16384 conv=notrunc,fsync" einfo "Due to the Boot Priority for the PPP it is HIGHLY recommended to not put U-Boot on the eMMc because there is no easy way to recover is something went wrong." - einfo "If you want U-Boot tools installed you can emerge dev-embedded/u-boot-tools." }