]> git.zerfleddert.de Git - m1-debian/blob - m1n1_uboot_kernel.sh
72727a8916237c003b5725b9546b9b7d79bd27a7
[m1-debian] / m1n1_uboot_kernel.sh
1 #!/usr/bin/env bash
2
3 # SPDX-License-Identifier: MIT
4
5 set -o errexit
6 set -o nounset
7 set -o pipefail
8 set -o xtrace
9
10 cd "$(dirname "$0")"
11
12 export CARGO_HOME="$(pwd)/build/cargo"
13 export RUSTUP_HOME="$(pwd)/build/rust"
14 source "$(pwd)/build/cargo/env"
15
16 unset LC_CTYPE
17 unset LANG
18
19 export M1N1_VERSION=1.4.11
20 export KERNEL_VERSION=asahi-6.6-14
21 export UBOOT_VERSION=asahi-v2023.07.02-4
22
23 build_linux()
24 {
25 (
26 test -d linux || git clone https://github.com/AsahiLinux/linux
27 cd linux
28 git fetch -a -t
29 git reset --hard $KERNEL_VERSION
30 git clean -f -x -d > /dev/null
31 cat ../../config.txt > .config
32 make LLVM=-15 rustavailable
33 make LLVM=-15 olddefconfig
34 make -j `nproc` LLVM=-15 V=0 bindeb-pkg > /dev/null
35 )
36 }
37
38 build_m1n1()
39 {
40 (
41 test -d m1n1 || git clone --recursive https://github.com/AsahiLinux/m1n1
42 cd m1n1
43 git fetch -a -t
44 git reset --hard v${M1N1_VERSION};
45 git clean -f -x -d > /dev/null
46 make -j `nproc`
47 )
48 }
49
50 build_uboot()
51 {
52 (
53 test -d u-boot || git clone https://github.com/AsahiLinux/u-boot
54 cd u-boot
55 git fetch -a -t
56 git reset --hard $UBOOT_VERSION
57 git clean -f -x -d > /dev/null
58
59 make apple_m1_defconfig
60 make -j `nproc`
61 )
62 cat m1n1/build/m1n1.bin `find linux/arch/arm64/boot/dts/apple/ -name \*.dtb` <(gzip -c u-boot/u-boot-nodtb.bin) > u-boot.bin
63 }
64
65 package_boot_bin()
66 {
67 (
68 rm -rf m1n1_${M1N1_VERSION}_arm64
69 mkdir -p m1n1_${M1N1_VERSION}_arm64/DEBIAN m1n1_${M1N1_VERSION}_arm64/usr/lib/m1n1/
70 cp u-boot.bin m1n1_${M1N1_VERSION}_arm64/usr/lib/m1n1/boot.bin
71 cat <<EOF > m1n1_${M1N1_VERSION}_arm64/DEBIAN/control
72 Package: m1n1
73 Version: $M1N1_VERSION
74 Section: base
75 Priority: optional
76 Architecture: arm64
77 Maintainer: Thomas Glanzmann <thomas@glanzmann.de>
78 Description: Apple silicon boot loader
79 Next to m1n1 this also contains the device trees and u-boot.
80 EOF
81
82 cat > m1n1_${M1N1_VERSION}_arm64/DEBIAN/postinst <<'EOF'
83 #!/bin/bash
84
85 export PATH=/bin
86 if [ -f /boot/efi/m1n1/boot.bin ]; then
87 cp /boot/efi/m1n1/boot.bin /boot/efi/m1n1/`date +%Y%m%d%H%M`.bin
88 fi
89 mkdir -p /boot/efi/m1n1/
90 cp /usr/lib/m1n1/boot.bin /boot/efi/m1n1/
91 EOF
92
93 chmod 755 m1n1_${M1N1_VERSION}_arm64/DEBIAN/postinst
94 dpkg-deb --build m1n1_${M1N1_VERSION}_arm64
95 )
96 }
97
98 mkdir -p build
99 cd build
100
101 build_linux
102 build_m1n1
103 build_uboot
104 package_boot_bin
Impressum, Datenschutz