arm-sdk

os build toolkit for various embedded devices
git clone https://git.parazyd.org/arm-sdk
Log | Files | Refs | Submodules | README | LICENSE

pinephone-dontbeevil.sh (4018B)


      1 #!/usr/bin/env zsh
      2 # Copyright (c) 2016-2021 Ivan J. <parazyd@dyne.org>
      3 # This file is part of arm-sdk
      4 #
      5 # This source code is free software: you can redistribute it and/or modify
      6 # it under the terms of the GNU General Public License as published by
      7 # the Free Software Foundation, either version 3 of the License, or
      8 # (at your option) any later version.
      9 #
     10 # This software is distributed in the hope that it will be useful,
     11 # but WITHOUT ANY WARRANTY; without even the implied warranty of
     12 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
     13 # GNU General Public License for more details.
     14 #
     15 # You should have received a copy of the GNU General Public License
     16 # along with this source code. If not, see <http://www.gnu.org/licenses/>.
     17 
     18 ## generic kernel build script for sunxi allwinner boards
     19 ##  http://linux-sunxi.org
     20 
     21 ## settings & config
     22 vars+=(device_name arch size parted_type parted_boot parted_root bootfs inittab)
     23 vars+=(gitkernel gitbranch)
     24 arrs+=(custmodules)
     25 
     26 device_name="pinephone-dontbeevil"
     27 arch="arm64"
     28 size=1891
     29 inittab=("T1:12345:respawn:/sbin/agetty -L ttyS0 115200 vt100")
     30 
     31 parted_type="dos"
     32 bootfs="ext2"
     33 rootfs="ext4"
     34 dos_boot="$bootfs 2048s 264191s"
     35 dos_root="$rootfs 264192s 100%"
     36 
     37 extra_packages+=()
     38 custmodules=()
     39 
     40 gitkernel="https://gitlab.com/pine64-org/linux.git"
     41 gitbranch="pinephone-dontbeevil-5.1-rc7"
     42 
     43 atfgit="https://github.com/ARM-software/arm-trusted-firmware.git"
     44 ubootgit="https://gitlab.com/pine64-org/u-boot.git"
     45 
     46 prebuild() {
     47 	fn prebuild
     48 	req=(device_name)
     49 	ckreq || return 1
     50 
     51 	notice "executing $device_name prebuild"
     52 
     53 	mkdir -p $R/tmp/kernels/$device_name
     54 }
     55 
     56 postbuild() {
     57 	fn postbuild
     58 	req=(device_name compiler loopdevice)
     59 	ckreq || return 1
     60 
     61 	notice "executing $device_name postbuild"
     62 
     63 	copy-root-overlay
     64 
     65 	notice "building arm-trusted-firmware"
     66 	git clone --depth 1 "$atfgit" "$R/tmp/kernels/arm-trusted-firmware" || zerr
     67 	pushd "$R/tmp/kernels/arm-trusted-firmware"
     68 		make CROSS_COMPILE=$compiler PLAT=sun50i_a64 DEBUG=1 bl31 || zerr
     69 	popd
     70 
     71 	notice "building u-boot"
     72 	git clone --depth 1 "$ubootgit" "$R/tmp/kernels/u-boot-pinephone" || zerr
     73 	pushd "$R/tmp/kernels/u-boot-pinephone"
     74 		make $MAKEOPTS sopine_baseboard_defconfig
     75 		cp "$R/tmp/kernels/arm-trusted-firmware/build/sun50i_a64/debug/bl31.bin" .
     76 		make $MAKEOPTS ARCH=arm CROSS_COMPILE=$compiler || zerr
     77 		mkdir -p "$R/dist"
     78 		cat spl/sunxi-spl.bin u-boot.itb > "$R/dist/u-boot-sunxi-with-spl-sopine.bin"
     79 	popd
     80 
     81 	cat <<EOF | sudo tee "${strapdir}/boot/boot.txt"
     82 setenv bootargs console=tty0 console=\${console} root=/dev/mmcblk0p2 rw rootwait rootfstype=ext4 fbcon=rotate:1
     83 setenv kernel_addr_z 0x44080000
     84 
     85 if load \${devtype} \${devnum}:\${distro_bootpart} \${kernel_addr_z} Image.gz; then
     86   unzip \${kernel_addr_z} \${kernel_addr_r}
     87   if load \${devtype} \${devnum}:\${distro_bootpart} \${fdt_addr_r} sun50i-a64-dontbeevil.dtb; then
     88     booti \${kernel_addr_r} - \${fdt_addr_r};
     89   fi;
     90 fi
     91 EOF
     92 	pushd "${strapdir}/boot"
     93 		sudo mkimage -C none -A arm -T script -d boot.txt boot.scr
     94 	popd
     95 
     96 	sudo dd if="$R/dist/u-boot-sunxi-with-spl-sopine.bin" of="${loopdevice}" seek=8 \
     97 		bs=1024 conv=notrunc,nocreat
     98 
     99 	postbuild-clean
    100 }
    101 
    102 build_kernel_arm64() {
    103 	fn build_kernel_arm64
    104 	req=(R arch device_name gitkernel gitbranch MAKEOPTS)
    105 	req+=(strapdir)
    106 	ckreq || return 1
    107 
    108 	notice "building $arch kernel"
    109 
    110 	prebuild || zerr
    111 
    112 	get-kernel-sources
    113 	pushd $R/tmp/kernels/$device_name/${device_name}-linux
    114 		copy-kernel-config
    115 
    116 		# compile kernel and modules
    117 		make \
    118 			$MAKEOPTS \
    119 			ARCH=arm64 \
    120 			CROSS_COMPILE=$compiler \
    121 			Image modules allwinner/sun50i-a64-dontbeevil.dtb || zerr
    122 
    123 		# install kernel modules
    124 		sudo -E PATH="$PATH" \
    125 			make \
    126 				$MAKEOPTS \
    127 				ARCH=arm \
    128 				CROSS_COMPILE=$compiler \
    129 				INSTALL_MOD_PATH=$strapdir \
    130 					modules_install || zerr
    131 
    132 		sudo cp -v arch/arm64/boot/Image $strapdir/boot/ || zerr
    133 		pushd "$strapdir/boot"
    134 		sudo gzip Image
    135 		popd
    136 		sudo cp -v arch/arm64/boot/dts/allwinner/sun50i-a64-dontbeevil.dtb \
    137 			"$strapdir/boot/" || zerr
    138 	popd
    139 
    140 	postbuild || zerr
    141 }