# U-Boot: sunXi # Maintainer: Isaac David # Contributor: André Silva # Contributor: Timothy Redaelli # Contributor: Denis 'GNUtoo' Carikli # To add a new board (that uses an Allwinner System On a Chip) you need: # - The package name. Example: uboot4extlinux-a20-olinuxino_micro # - The u-boot configuration. Example: A20-OLinuXino_MICRO_defconfig # - The name of the board(s). Example: A20 OLinuXino Micro # A single package / u-boot configuration sometimes support multiple # boards and the configuration name doesn't always have the boards names # in it. Example: uboot4extlinux-am335x_bone supports various BeagleBones, # the AM335x GP EVM and the EVM SK all in one u-boot binary and package. # - If relevant, the packages it replaces, if there are older u-boot packages # also supporting that board. Example:uboot-a20-olinuxino-micro # # Ideally we'd like to enable people to only add these 4 variables in this # package to add a new board. These 4 variables could go in something like # a CVS file that is parsed, but that would require to be able to dynamically # define packages, but even if eval package_{$_pkgname}() { [...] } works, # it doesn't make that package function visible to makepkg. # # Because of that, contributors wanting to add new boards will have to search # for example of the information mentioned above and add it in the PKGBUILD # for their boards. # # After adding a new board in this PKGBUILD, to get the board officially # supported by Parabola.you also need to create a page for it in the # Parabola wiki for that board and update the ARM installation guide to # point to it when relevant. Examples of that are available for other # boards in the ARM installation guide. pkgbase=uboot4extlinux-sunxi pkgname=("${pkgbase}" 'uboot4extlinux-a10-olinuxino-lime' 'uboot4extlinux-a10s-olinuxino-m' 'uboot4extlinux-a13-olinuxino' 'uboot4extlinux-a13-olinuxinom' 'uboot4extlinux-a20-olinuxino-lime' 'uboot4extlinux-a20-olinuxino-lime2' 'uboot4extlinux-a20-olinuxino-lime2-emmc' 'uboot4extlinux-a20-olinuxino_micro' 'uboot4extlinux-bananapi' 'uboot4extlinux-bananapro' 'uboot4extlinux-chip' 'uboot4extlinux-cubieboard' 'uboot4extlinux-cubieboard2' 'uboot4extlinux-cubietruck' 'uboot4extlinux-linksprite_pcduino' 'uboot4extlinux-linksprite_pcduino3' 'uboot4extlinux-linksprite_pcduino3_nano' 'uboot4extlinux-orangepi_2' 'uboot4extlinux-orangepi_one' 'uboot4extlinux-orangepi_pc' 'uboot4extlinux-orangepi_plus') pkgver=2021.07 pkgrel=2 arch=('armv7h' 'i686' 'x86_64') url="http://git.denx.de/u-boot.git/" license=('GPL') makedepends=('bc' 'dtc' 'python' 'python-setuptools' 'python2' 'swig') makedepends_i686+=('arm-none-eabi-gcc') makedepends_ppc64le+=('arm-none-eabi-gcc') makedepends_x86_64+=('arm-none-eabi-gcc') source=("ftp://ftp.denx.de/pub/u-boot/u-boot-${pkgver}.tar.bz2" 'extlinux.conf' "${pkgbase}.hook.in" 'install-uboot4extlinux.sh.in' "generate-${pkgbase}-install-text.sh") sha256sums=('312b7eeae44581d1362c3a3f02c28d806647756c82ba8c72241c7cdbe68ba77e' 'SKIP' 'SKIP' 'SKIP' 'SKIP') _defconfigs=('A10-OLinuXino-Lime_defconfig' 'A10s-OLinuXino-M_defconfig' 'A13-OLinuXino_defconfig' 'A13-OLinuXinoM_defconfig' 'A20-OLinuXino-Lime_defconfig' 'A20-OLinuXino-Lime2_defconfig' 'A20-OLinuXino-Lime2-eMMC_defconfig' 'A20-OLinuXino_MICRO_defconfig' 'Bananapi_defconfig' 'Bananapro_defconfig' 'CHIP_defconfig' 'Cubieboard_defconfig' 'Cubieboard2_defconfig' 'Cubietruck_defconfig' 'Linksprite_pcDuino_defconfig' 'Linksprite_pcDuino3_defconfig' 'Linksprite_pcDuino3_Nano_defconfig' 'orangepi_2_defconfig' 'orangepi_one_defconfig' 'orangepi_pc_defconfig' 'orangepi_plus_defconfig') # Offset at which to install u-boot u_boot_with_spl_offset=8192 case "$CARCH" in armv7h) ARCH=arm;; i686|ppc64le|x86_64) ARCH=arm;CROSS_COMPILE=arm-none-eabi-;; esac _nr_targets=0 for _defconfig in ${_defconfigs[@]}; do _nr_targets=$(expr ${_nr_targets} + 1) done _get_target_name() { _defconfig="$1" echo ${_defconfig} | \ sed 's/_defconfig$//' | \ awk '{print tolower($0)}' } _get_target_destdir() { _defconfig="$1" _target_name="$(_get_target_name ${_defconfig})" echo "build/uboot4extlinux-${_target_name}" } _build_uboot_target() { _defconfig="$1" _destdir="$(_get_target_destdir ${_defconfig})" _target_name="$(_get_target_name ${_defconfig})" unset CFLAGS CXXFLAGS LDFLAGS make "ARCH=${ARCH}" distclean make "ARCH=${ARCH}" ${_defconfig} echo 'CONFIG_IDENT_STRING=" Parabola GNU/Linux-libre"' >> .config if [ "$CARCH" = "armv7h" ]; then make "ARCH=${ARCH}" EXTRAVERSION=-${pkgrel} else make "ARCH=${ARCH}" "CROSS_COMPILE=${CROSS_COMPILE}" \ EXTRAVERSION=-${pkgrel} fi echo "==> Installing ${_target_name} to ${_destdir}" install -d ${_destdir} mv -f u-boot-sunxi-with-spl.bin "${_destdir}" } build() { cd u-boot-${pkgver} _target_nr=0 for _defconfig in ${_defconfigs[@]}; do _target_nr=$(expr ${_target_nr} + 1) _target_name="$(_get_target_name ${_defconfig})" echo "==> Building ${_target_name} " \ "[${_target_nr} of ${_nr_targets} targets]" _build_uboot_target "${_defconfig}" done } _check_uboot_target() { _defconfig="$1" _image="$(_get_target_destdir ${_defconfig})/u-boot-sunxi-with-spl.bin" _image_size="$(du --bytes --apparent-size ${_image} | awk '{print $1}')" _offset="${u_boot_with_spl_offset}" _image_end=$(expr ${_image_size} + ${_offset}) # This test comes from install-uboot4extlinux.sh.in if [ ${_image_end} -gt $(expr 1024 \* 1024) ] ; then echo "Error: ${_image} is too big:" echo " offset: ${_offset}" echo " size: ${_image_size}" echo " By default, "\ "partitioing tools makes the first partition start at 1MiB" echo " Instaling ${_image} "\ "would overwrite that first partition (if it's present)." false # Fail the test fi } check() { cd u-boot-${pkgver} _target_nr=0 for _defconfig in ${_defconfigs[@]}; do _target_nr=$(expr ${_target_nr} + 1) _target_name="$(_get_target_name ${_defconfig})" echo "==> Testing target ${_target_name} " \ "[${_target_nr} of ${_nr_targets} targets]" _check_uboot_target "${_defconfig}" done } _make_uboot_package() { _pkgname="$1" if [ -n "${pkgdir}" ] ; then cd "u-boot-${pkgver}" # Install the u-boot binary install -d "${pkgdir}/usr/lib/u-boot/${_pkgname}/" install -Dm644 "build/${_pkgname}/u-boot-sunxi-with-spl.bin" \ "${pkgdir}/usr/lib/u-boot/${_pkgname}" # Install the u-boot installation script sed < "${srcdir}/install-uboot4extlinux.sh.in" > \ "${pkgdir}/usr/lib/u-boot/${_pkgname}/install-uboot4extlinux.sh" \ -e "s|@u_boot_with_spl[@]|/usr/lib/u-boot/${_pkgname}/u-boot-sunxi-with-spl.bin|g" \ -e "s|@u_boot_with_spl_offset[@]|${u_boot_with_spl_offset}|g" chmod +x \ "${pkgdir}/usr/lib/u-boot/${_pkgname}/install-uboot4extlinux.sh" # Install what is required for the pacman hook install -d "${pkgdir}/usr/share/libalpm/hooks/" sed < "${srcdir}/${pkgbase}.hook.in" > \ "${pkgdir}/usr/share/libalpm/hooks/${_pkgname}.hook" \ -e "s|@pkgname[@]|${_pkgname}|g" install -d "${pkgdir}/usr/share/doc/u-boot/${_pkgname}/" # If we install several uboot4extlinux, we need a way to clearly # separate each postinstall message. To do that we wrapped the # text in an ASCII art square, but doing that is complicated when # using sed as the package name as well as the installation script # path both have variable length. sh "${srcdir}/generate-${pkgbase}-install-text.sh" \ "${_pkgname}" \ "${pkgbase}" \ "/usr/lib/u-boot/${_pkgname}/install-uboot4extlinux.sh" > \ "${pkgdir}/usr/share/doc/u-boot/${_pkgname}/install-uboot4extlinux.txt" fi } _make_pkgdesc() { board_name="$1" echo "U-Boot with Extlinux support for ${board_name}" } package_uboot4extlinux-sunxi() { pkgdesc="Scripts for managing U-Boot installations for computers with Allwinner System On a Chip" depends=('uboot-tools') # Users are expected to use this as a base for /boot/extlinux/extlinux.conf install -d "${pkgdir}/usr/lib/u-boot/${pkgname}/" install -Dm644 \ "${srcdir}/extlinux.conf" \ "${pkgdir}/usr/lib/u-boot/${pkgname}/" } package_uboot4extlinux-a10-olinuxino-lime() { pkgdesc=$(_make_pkgdesc "A10 OLinuXino Lime") # util-linux is needed for blkid for install-uboot4extlinux.sh depends=("${pkgbase}" 'util-linux') _make_uboot_package "${pkgname}" } package_uboot4extlinux-a10s-olinuxino-m() { pkgdesc=$(_make_pkgdesc "A10s OLinuXino Micro") replaces=('uboot4extlinux-a10s-olinuxino-micro') # util-linux is needed for blkid for install-uboot4extlinux.sh depends=("${pkgbase}" 'util-linux') _make_uboot_package "${pkgname}" } package_uboot4extlinux-a13-olinuxino() { pkgdesc=$(_make_pkgdesc "A13 OLinuXino") # util-linux is needed for blkid for install-uboot4extlinux.sh depends=("${pkgbase}" 'util-linux') _make_uboot_package "${pkgname}" } package_uboot4extlinux-a13-olinuxinom() { pkgdesc=$(_make_pkgdesc "uboot4extlinux-a13-olinuxino-micro") replaces=('uboot4extlinux-a13-olinuxino-micro') # util-linux is needed for blkid for install-uboot4extlinux.sh depends=("${pkgbase}" 'util-linux') _make_uboot_package "${pkgname}" } package_uboot4extlinux-a20-olinuxino-lime() { pkgdesc=$(_make_pkgdesc "A20 OLinuXino Lime") # util-linux is needed for blkid for install-uboot4extlinux.sh depends=("${pkgbase}" 'util-linux') _make_uboot_package "${pkgname}" } package_uboot4extlinux-a20-olinuxino-lime2() { pkgdesc=$(_make_pkgdesc "A20 OLinuXino Lime2") # util-linux is needed for blkid for install-uboot4extlinux.sh depends=("${pkgbase}" 'util-linux') _make_uboot_package "${pkgname}" } package_uboot4extlinux-a20-olinuxino-lime2-emmc() { pkgdesc=$(_make_pkgdesc "A20 OLinuXino Lime2 with eMMC") # util-linux is needed for blkid for install-uboot4extlinux.sh depends=("${pkgbase}" 'util-linux') _make_uboot_package "${pkgname}" } package_uboot4extlinux-a20-olinuxino_micro() { pkgdesc=$(_make_pkgdesc "uboot-a20-olinuxino-micro") replaces=('uboot-a20-olinuxino-micro') # util-linux is needed for blkid for install-uboot4extlinux.sh depends=("${pkgbase}" 'util-linux') _make_uboot_package "${pkgname}" } package_uboot4extlinux-bananapi() { pkgdesc=$(_make_pkgdesc "Banana Pi") # util-linux is needed for blkid for install-uboot4extlinux.sh depends=("${pkgbase}" 'util-linux') _make_uboot_package "${pkgname}" } package_uboot4extlinux-bananapro() { pkgdesc=$(_make_pkgdesc "Banana Pro") # util-linux is needed for blkid for install-uboot4extlinux.sh depends=("${pkgbase}" 'util-linux') _make_uboot_package "${pkgname}" } package_uboot4extlinux-chip() { pkgdesc=$(_make_pkgdesc "C.H.I.P") # util-linux is needed for blkid for install-uboot4extlinux.sh depends=("${pkgbase}" 'util-linux') _make_uboot_package "${pkgname}" } package_uboot4extlinux-cubieboard() { pkgdesc=$(_make_pkgdesc "Cubieboard") # util-linux is needed for blkid for install-uboot4extlinux.sh depends=("${pkgbase}" 'util-linux') _make_uboot_package "${pkgname}" } package_uboot4extlinux-cubieboard2() { pkgdesc=$(_make_pkgdesc "Cubieboard 2") # util-linux is needed for blkid for install-uboot4extlinux.sh depends=("${pkgbase}" 'util-linux') _make_uboot_package "${pkgname}" } package_uboot4extlinux-cubietruck() { pkgdesc=$(_make_pkgdesc "Cubietruck") # util-linux is needed for blkid for install-uboot4extlinux.sh depends=("${pkgbase}" 'util-linux') _make_uboot_package "${pkgname}" } package_uboot4extlinux-linksprite_pcduino() { pkgdesc=$(_make_pkgdesc "uboot4extlinux-pcduino") replaces=('uboot4extlinux-pcduino') # util-linux is needed for blkid for install-uboot4extlinux.sh depends=("${pkgbase}" 'util-linux') _make_uboot_package "${pkgname}" } package_uboot4extlinux-linksprite_pcduino3() { pkgdesc=$(_make_pkgdesc "uboot4extlinux-pcduino3") replaces=('uboot4extlinux-pcduino3') # util-linux is needed for blkid for install-uboot4extlinux.sh depends=("${pkgbase}" 'util-linux') _make_uboot_package "${pkgname}" } package_uboot4extlinux-linksprite_pcduino3_nano() { pkgdesc=$(_make_pkgdesc "uboot4extlinux-pcduino3-nano") replaces=('uboot4extlinux-pcduino3-nano') # util-linux is needed for blkid for install-uboot4extlinux.sh depends=("${pkgbase}" 'util-linux') _make_uboot_package "${pkgname}" } package_uboot4extlinux-orangepi_2() { pkgdesc=$(_make_pkgdesc "Orange Pi 2") # util-linux is needed for blkid for install-uboot4extlinux.sh depends=("${pkgbase}" 'util-linux') _make_uboot_package "${pkgname}" } package_uboot4extlinux-orangepi_one() { pkgdesc=$(_make_pkgdesc "Orange Pi One") # util-linux is needed for blkid for install-uboot4extlinux.sh depends=("${pkgbase}" 'util-linux') _make_uboot_package "${pkgname}" } package_uboot4extlinux-orangepi_pc() { pkgdesc=$(_make_pkgdesc "Orange Pi PC") # util-linux is needed for blkid for install-uboot4extlinux.sh depends=("${pkgbase}" 'util-linux') _make_uboot_package "${pkgname}" } package_uboot4extlinux-orangepi_plus() { pkgdesc=$(_make_pkgdesc "Orange Pi Plus") # util-linux is needed for blkid for install-uboot4extlinux.sh depends=("${pkgbase}" 'util-linux') _make_uboot_package "${pkgname}" }