tpinephone.sh - arm-sdk - os build toolkit for various embedded devices
HTML git clone https://git.parazyd.org/arm-sdk
DIR Log
DIR Files
DIR Refs
DIR Submodules
DIR README
DIR LICENSE
---
tpinephone.sh (4865B)
---
1 #!/usr/bin/env zsh
2 # Copyright (c) 2016-2021 Ivan J. <parazyd@dyne.org>
3 # arm-sdk is written and maintained by Ivan J. <parazyd@dyne.org>
4 #
5 # This file is part of arm-sdk
6 #
7 # This source code is free software: you can redistribute it and/or modify
8 # it under the terms of the GNU General Public License as published by
9 # the Free Software Foundation, either version 3 of the License, or
10 # (at your option) any later version.
11 #
12 # This software is distributed in the hope that it will be useful,
13 # but WITHOUT ANY WARRANTY; without even the implied warranty of
14 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 # GNU General Public License for more details.
16 #
17 # You should have received a copy of the GNU General Public License
18 # along with this source code. If not, see <http://www.gnu.org/licenses/>.
19
20
21 ## settings & config
22 vars+=(device_name arch size parted_type parted_boot parted_root bootfs inittab)
23 vars+=(gitkernel gitbranch atfgit crustgit crustbranch ubootgit ubootbranch)
24 arrs+=(custmodules)
25
26 device_name="pinephone"
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://github.com/maemo-leste/pine64-kernel"
41 gitbranch="pine64-kernel-5.4.0"
42
43 atfgit="https://github.com/ARM-software/arm-trusted-firmware.git"
44
45 crustgit="https://github.com/crust-firmware/crust.git"
46 crustbranch="master"
47
48 ubootgit="https://gitlab.com/pine64-org/u-boot"
49 ubootbranch="master"
50
51 prebuild() {
52 fn prebuild
53 req=(device_name)
54 ckreq || return 1
55
56 notice "executing $device_name prebuild"
57
58 mkdir -p $R/tmp/kernels/$device_name
59 }
60
61 postbuild() {
62 fn postbuild
63 req=(device_name compiler loopdevice or1ktc)
64 ckreq || return 1
65
66 notice "executing $device_name postbuild"
67
68 copy-root-overlay
69
70 notice "building arm-trusted-firmware"
71 git clone --depth 1 "$atfgit" "$R/tmp/kernels/arm-trusted-firmware" || zerr
72 pushd "$R/tmp/kernels/arm-trusted-firmware"
73 make $MAKEOPTS CROSS_COMPILE=$compiler PLAT=sun50i_a64 DEBUG=1 bl31 || zerr
74 popd
75
76 notice "building crust"
77 git clone --depth 1 "$crustgit" -b "$crustbranch" "$R/tmp/kernels/crust" || zerr
78 pushd "$R/tmp/kernels/crust"
79 or1ktc="or1k-linux-musl-"
80 wget -c "http://musl.cc/${or1ktc}cross.tgz"
81 tar xf "${or1ktc}cross.tgz"
82 export PATH="$PATH:$(pwd)/or1k-linux-musl/bin"
83 make $MAKEOPTS CROSS_COMPILE="$or1ktc" pinephone_defconfig || zerr
84 make $MAKEOPTS CROSS_COMPILE="$or1ktc" scp || zerr
85 popd
86
87 notice "building u-boot"
88 git clone --depth 1 "$ubootgit" -b "$ubootbranch" "$R/tmp/kernels/u-boot-pinephone" || zerr
89 pushd "$R/tmp/kernels/u-boot-pinephone"
90 make $MAKEOPTS \
91 BL31="$R/tmp/kernels/arm-trusted-firmware/build/sun50i_a64/debug/bl31.bin" \
92 SCP="$R/tmp/kernels/crust/build/scp/scp.bin" \
93 pinephone_defconfig || zerr
94 make $MAKEOPTS \
95 BL31="$R/tmp/kernels/arm-trusted-firmware/build/sun50i_a64/debug/bl31.bin" \
96 SCP="$R/tmp/kernels/crust/build/scp/scp.bin" \
97 ARCH=arm CROSS_COMPILE=$compiler || zerr
98 mkdir -p "$R/dist"
99 cp u-boot-sunxi-with-spl.bin "$R/dist/u-boot-sunxi-with-spl-pinephone.bin"
100 popd
101
102 cat <<EOF | sudo tee "${strapdir}/boot/boot.txt"
103 setenv bootargs console=tty0 console=\${console} root=/dev/mmcblk0p2 rw rootwait rootfstype=ext4 fbcon=rotate:1
104 setenv kernel_addr_z 0x44080000
105
106 if load \${devtype} \${devnum}:\${distro_bootpart} \${kernel_addr_z} Image.gz; then
107 unzip \${kernel_addr_z} \${kernel_addr_r}
108 if load \${devtype} \${devnum}:\${distro_bootpart} \${fdt_addr_r} \${fdtfile}; then
109 booti \${kernel_addr_r} - \${fdt_addr_r};
110 fi;
111 fi
112 EOF
113 pushd "${strapdir}/boot"
114 sudo mkimage -C none -A arm -T script -d boot.txt boot.scr
115 popd
116
117 sudo dd if="$R/dist/u-boot-sunxi-with-spl-pinephone.bin" of="${loopdevice}" seek=8 \
118 bs=1024 conv=notrunc,nocreat
119
120 postbuild-clean
121 }
122
123 build_kernel_arm64() {
124 fn build_kernel_arm64
125 req=(R arch device_name gitkernel gitbranch MAKEOPTS)
126 req+=(strapdir)
127 ckreq || return 1
128
129 notice "building $arch kernel"
130
131 prebuild || zerr
132
133 get-kernel-sources
134 pushd $R/tmp/kernels/$device_name/${device_name}-linux
135 wget -O- https://github.com/maemo-leste/pine64-kernel/raw/maemo/ascii-devel/debian/patches/0001-Include-rtl8723cs-staging-driver.patch | patch -p1
136
137 copy-kernel-config
138
139 # compile kernel and modules
140 make \
141 $MAKEOPTS \
142 ARCH=arm64 \
143 CROSS_COMPILE=$compiler \
144 Image.gz modules allwinner/sun50i-a64-pinephone.dtb || zerr
145
146 # install kernel modules
147 sudo -E PATH="$PATH" \
148 make \
149 $MAKEOPTS \
150 ARCH=arm \
151 CROSS_COMPILE=$compiler \
152 INSTALL_MOD_PATH=$strapdir \
153 modules_install || zerr
154
155 sudo cp -v arch/arm64/boot/Image $strapdir/boot/ || zerr
156 sudo cp -v arch/arm64/boot/dts/allwinner/sun50i-a64-pinephone.dtb \
157 "$strapdir/boot/" || zerr
158 popd
159
160 postbuild || zerr
161 }