Merge lp:~xnox/debian-cd/aarch64-laptops into lp:~ubuntu-cdimage/debian-cd/ubuntu

Proposed by Steve Langasek
Status: Rejected
Rejected by: Steve Langasek
Proposed branch: lp:~xnox/debian-cd/aarch64-laptops
Merge into: lp:~ubuntu-cdimage/debian-cd/ubuntu
Diff against target: 399 lines (+308/-9) (has conflicts)
2 files modified
tools/boot/focal/boot-arm64 (+40/-9)
tools/boot/groovy/boot-arm64 (+268/-0)
Text conflict in tools/boot/groovy/boot-arm64
To merge this branch: bzr merge lp:~xnox/debian-cd/aarch64-laptops
Reviewer Review Type Date Requested Status
Steve Langasek Pending
Review via email: mp+391733@code.launchpad.net

This proposal supersedes a proposal from 2020-04-26.

Commit message

Improve aarch64-laptops boot

Description of the change

Improve aarch64-laptops boot

To post a comment you must log in.
Revision history for this message
Steve Langasek (vorlon) wrote : Posted in a previous version of this proposal

Dimitri, is this still applicable?

review: Needs Information
Revision history for this message
Dimitri John Ledkov (xnox) wrote :

Yes, but needs reworking. Because dtbs need to be vendored via cd-boot-images now, i guess.

Unmerged revisions

2057. By Dimitri John Ledkov

Improve aarch64-laptops boot

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'tools/boot/focal/boot-arm64'
2--- tools/boot/focal/boot-arm64 2020-04-15 12:15:16 +0000
3+++ tools/boot/focal/boot-arm64 2020-10-02 00:11:21 +0000
4@@ -112,7 +112,7 @@
5 CASPER_INITRD="/casper/initrd$(initrd_suffix "$CDDIR/casper/filesystem.initrd-$FLAVOUR")"
6 mv $CDDIR/casper/filesystem.initrd-$FLAVOUR "$CDDIR$CASPER_INITRD"
7 fi
8- echo -n "-J -l -c boot/boot.cat -partition_offset 16 " >> $N.mkisofs_opts
9+ echo -n "-J -l -c boot/boot.cat -no-emul-boot -boot-load-size 4 -boot-info-table" >> $N.mkisofs_opts
10 # Once we move to xorriso >= 1.4.4, we should consider changing from
11 # "-e boot/grub/efi.img"
12 # to
13@@ -120,7 +120,7 @@
14 # This will point the el torito catalog to the appended partition instead
15 # of the in-ISO file, which will allow us to remove efi.img from the ISO
16 # filesystem and recover it's space.
17- echo -n "-append_partition 2 0xef $CDDIR/boot/grub/efi.img -e boot/grub/efi.img -no-emul-boot " >> $N.mkisofs_opts
18+ echo -n "-eltorito-alt-boot -e boot/grub/efi.img -no-emul-boot -isohybrid-gpt-basdat -isohybrid-apm-hfsplus" >> $N.mkisofs_opts
19 fi
20
21 #install_languages $CDDIR
22@@ -148,10 +148,41 @@
23 mkdir -p $CDDIR/boot
24 cat cdrom/debian-cd_info.tar.gz | (cd $CDDIR/boot/; tar xz)
25 # If we want a copy of grub on the ISO as well, seems redundant:
26-#mkdir -p $CDDIR/EFI/BOOT
27-#mcopy -i $CDDIR/boot/grub/efi.img ::EFI/BOOT/bootaa64.efi $CDDIR/EFI/BOOT/bootaa64.efi
28+mkdir -p $CDDIR/EFI/BOOT
29+mcopy -i $CDDIR/boot/grub/efi.img ::EFI/BOOT/bootaa64.efi $CDDIR/EFI/BOOT/bootaa64.efi
30 sed -i '/^menuentry/Q' $CDDIR/boot/grub/grub.cfg
31
32+### aarch64-laptops-support
33+if [ "$CDIMAGE_LIVE" = 1 ] && [ "$PROJECT" = ubuntu ]; then
34+ cat >> $CDDIR/boot/grub/grub.cfg <<EOF
35+insmod smbios
36+smbios --type 1 --get-string 4 --linux --set dmi_svn # DMI_SYS_VENDOR
37+smbios --type 1 --get-string 5 --linux --set dmi_pn # DMI_PRODUCT_NAME
38+dmi_product=svn\${dmi_svn}:pn\${dmi_pn}
39+dtb=
40+if [ \${dmi_product} = "svnASUSTeKCOMPUTERINC.:pnNovaGoTP370QL"]; then
41+ dtb="msm8998-asus-novago-tp370ql.dtb"
42+fi
43+if [ \${dmi_product} = "svnLENOVO:pn81JL"]; then
44+ dtb="sdm850-lenovo-yoga-c630.dtb"
45+fi
46+if loadfont /boot/grub/font.pf2 ; then
47+ set gfxmode=auto
48+ insmod efi_gop
49+ insmod efi_uga
50+ insmod gfxterm
51+ terminal_output gfxterm
52+fi
53+EOF
54+ cp $DI_PATH/current/legacy-images/device-tree/msm8998-asus-novago-tp370ql.dtb $CDDIR/boot/
55+ cp $DI_PATH/current/legacy-images/device-tree/sdm850-lenovo-yoga-c630.dtb $CDDIR/boot/
56+ LAPTOP_PARAMS=" efi=novamap clk_ignore_unused pd_ignore_unused module_blacklist=hid_sensor_hub initcall_blacklist=acpi_button_driver_init
57+ if [ \"\$dtb\" ]; then
58+ devicetree /boot/\$dtb
59+ fi"
60+fi
61+### aarch64-laptops-support end
62+
63 # Set a timeout for grub.
64 cat >> $CDDIR/boot/grub/grub.cfg <<EOF
65 set timeout=30
66@@ -176,14 +207,14 @@
67 cat >> $CDDIR/boot/grub/grub.cfg <<EOF
68 menuentry "${livelabel#^}" {
69 set gfxpayload=keep
70- linux $CASPER_KERNEL $KERNEL_PARAMS $DEFAULT_PRESEED$liveparams$LAYERFS_PATH_OPT quiet splash ---
71+ linux $CASPER_KERNEL $KERNEL_PARAMS $DEFAULT_PRESEED$liveparams$LAYERFS_PATH_OPT quiet splash ---${LAPTOP_PARAMS}
72 initrd $CASPER_INITRD
73 }
74 EOF
75 cat >> $CDDIR/boot/grub/loopback.cfg <<EOF
76 menuentry "${livelabel#^}" {
77 set gfxpayload=keep
78- linux $CASPER_KERNEL $KERNEL_PARAMS $DEFAULT_PRESEED$liveparams$LAYERFS_PATH_OPT iso-scan/filename=\${iso_path} quiet splash ---
79+ linux $CASPER_KERNEL $KERNEL_PARAMS $DEFAULT_PRESEED$liveparams$LAYERFS_PATH_OPT iso-scan/filename=\${iso_path} quiet splash ---${LAPTOP_PARAMS}
80 initrd $CASPER_INITRD
81 }
82 EOF
83@@ -191,13 +222,13 @@
84 cat >> $CDDIR/boot/grub/grub.cfg <<EOF
85 menuentry "Install $HUMANPROJECT" {
86 set gfxpayload=keep
87- linux $CASPER_KERNEL $KERNEL_PARAMS $DEFAULT_PRESEED$LAYERFS_PATH_OPT only-ubiquity quiet splash ---
88+ linux $CASPER_KERNEL $KERNEL_PARAMS $DEFAULT_PRESEED$LAYERFS_PATH_OPT only-ubiquity quiet splash ---${LAPTOP_PARAMS}
89 initrd $CASPER_INITRD
90 }
91 EOF
92 cat >> $CDDIR/boot/grub/loopback.cfg <<EOF
93 menuentry "Install $HUMANPROJECT" {
94- linux $CASPER_KERNEL $KERNEL_PARAMS $DEFAULT_PRESEED$LAYERFS_PATH_OPT only-ubiquity iso-scan/filename=\${iso_path} quiet splash ---
95+ linux $CASPER_KERNEL $KERNEL_PARAMS $DEFAULT_PRESEED$LAYERFS_PATH_OPT only-ubiquity iso-scan/filename=\${iso_path} quiet splash ---${LAPTOP_PARAMS}
96 initrd $CASPER_INITRD
97 }
98 EOF
99@@ -232,7 +263,7 @@
100 cat >> $CDDIR/boot/grub/grub.cfg <<EOF
101 menuentry "OEM install (for manufacturers)" {
102 set gfxpayload=keep
103- linux $CASPER_KERNEL $KERNEL_PARAMS $DEFAULT_PRESEED$LAYERFS_PATH_OPT only-ubiquity quiet splash oem-config/enable=true ---
104+ linux $CASPER_KERNEL $KERNEL_PARAMS $DEFAULT_PRESEED$LAYERFS_PATH_OPT only-ubiquity quiet splash oem-config/enable=true ---${LAPTOP_PARAMS}
105 initrd $CASPER_INITRD
106 }
107 EOF
108
109=== modified file 'tools/boot/groovy/boot-arm64'
110--- tools/boot/groovy/boot-arm64 2020-06-17 19:24:11 +0000
111+++ tools/boot/groovy/boot-arm64 2020-10-02 00:11:21 +0000
112@@ -15,6 +15,7 @@
113
114 > $N.mkisofs_opts
115
116+<<<<<<< TREE
117 # rename kernel+initrd
118 mv $CDDIR/casper/filesystem.kernel-generic $CDDIR/casper/vmlinuz
119 mv $CDDIR/casper/filesystem.initrd-generic $CDDIR/casper/initrd
120@@ -33,8 +34,153 @@
121
122 # generate grub.cfg
123 mkdir -p $CDDIR/boot/grub/
124+=======
125+# List of boot image for each CD
126+KTYPE[1]="" #isolinux multiboot in fact
127+KTYPE[2]=""
128+# XXX add net-image back when it's fixed
129+KTYPE[3]=""
130+KTYPE[4]=""
131+KTYPE[5]=""
132+KTYPE[6]=""
133+KTYPE[7]=""
134+KTYPE[8]=""
135+KTYPE[9]=""
136+KTYPE[10]=""
137+
138+THISTYPE=${KTYPE[$NN]}
139+
140+PREFIX_PRESEED="$(dirname "$DEFAULT_PRESEED")/"
141+PREFIX_GA=""
142+PREFIX_HWE=""
143+KERNEL_PREFIXES="PREFIX_GA"
144+if [ "$BACKPORT_KERNEL" ]; then
145+ PREFIX_HWE="hwe-"
146+ if [ "$PROJECT" = ubuntu-server ]; then
147+ KERNEL_PREFIXES="$KERNEL_PREFIXES PREFIX_HWE"
148+ fi
149+fi
150+
151+BOOT_IMAGES=""
152+TAR_IMAGES=""
153+DISK_IMAGES=""
154+for kp in $KERNEL_PREFIXES; do
155+ BOOT_IMAGES="$BOOT_IMAGES ${!kp}cdrom/vmlinuz ${!kp}cdrom/initrd.gz ${!kp}cdrom/debian-cd_info.tar.gz"
156+ TAR_IMAGES="$TAR_IMAGES ${!kp}netboot/netboot.tar.gz"
157+done
158+
159+FLAVOUR=generic
160+
161+# Download boot images
162+for image in MANIFEST.udebs $BOOT_IMAGES $DISK_IMAGES $TAR_IMAGES; do
163+ if [ ! -e "$image" ]; then
164+ dir=$(dirname $image)
165+ mkdir -p $dir
166+ if [ ! "$DI_WWW_HOME" ];then
167+ cp "$DI_PATH/current/legacy-images/$image" "$image"
168+ else
169+ wget "$DI_WWW_HOME/$image" -O "$image"
170+ fi
171+ fi
172+done
173+
174+if [ "$NN" = "1" ]; then
175+ list_kernel_abis $BOOT_IMAGES | check_kernel_sync $FLAVOUR
176+
177+ if [ "$CDIMAGE_INSTALL_BASE" = 1 ]; then
178+ for kp in $KERNEL_PREFIXES; do
179+ cp -lf "${!kp}cdrom/vmlinuz" "$CDDIR/install/${!kp}vmlinuz"
180+ cp -lf "${!kp}cdrom/initrd.gz" "$CDDIR/install/${!kp}initrd.gz"
181+ done
182+ fi
183+ if [ "$CDIMAGE_LIVE" = 1 ]; then
184+ if [ -e "$CDDIR/casper/filesystem.kernel-$FLAVOUR.efi.signed" ]; then
185+ mv $CDDIR/casper/filesystem.kernel-$FLAVOUR.efi.signed $CDDIR/casper/vmlinuz.efi
186+ rm -f $CDDIR/casper/filesystem.kernel-$FLAVOUR
187+ CASPER_KERNEL=/casper/vmlinuz.efi
188+ else
189+ mv $CDDIR/casper/filesystem.kernel-$FLAVOUR $CDDIR/casper/vmlinuz
190+ CASPER_KERNEL=/casper/vmlinuz
191+ fi
192+ CASPER_INITRD="/casper/initrd$(initrd_suffix "$CDDIR/casper/filesystem.initrd-$FLAVOUR")"
193+ mv $CDDIR/casper/filesystem.initrd-$FLAVOUR "$CDDIR$CASPER_INITRD"
194+ fi
195+ echo -n "-J -l -c boot/boot.cat -no-emul-boot -boot-load-size 4 -boot-info-table" >> $N.mkisofs_opts
196+ # Once we move to xorriso >= 1.4.4, we should consider changing from
197+ # "-e boot/grub/efi.img"
198+ # to
199+ # "-e --interval:appended_partition_2:all::"
200+ # This will point the el torito catalog to the appended partition instead
201+ # of the in-ISO file, which will allow us to remove efi.img from the ISO
202+ # filesystem and recover it's space.
203+ echo -n "-eltorito-alt-boot -e boot/grub/efi.img -no-emul-boot -isohybrid-gpt-basdat -isohybrid-apm-hfsplus" >> $N.mkisofs_opts
204+fi
205+
206+#install_languages $CDDIR
207+
208+# Only disk one gets the extra files installed
209+#
210+if [ "$NN" = "1" ]; then
211+
212+
213+# populate the install directory as well
214+for disk in $DISK_IMAGES; do
215+ dir=$(dirname $disk)
216+ mkdir -p $CDDIR/install/$dir
217+ cp -lf $disk $CDDIR/install/$dir
218+done
219+
220+if [ "$CDIMAGE_INSTALL" = 1 ]; then
221+ for tar in $TAR_IMAGES; do
222+ dir=$(dirname $tar)
223+ mkdir -p $CDDIR/install/$dir
224+ tar -C $CDDIR/install/$dir -xzpf $tar
225+ done
226+fi
227+
228+mkdir -p $CDDIR/boot
229+cat cdrom/debian-cd_info.tar.gz | (cd $CDDIR/boot/; tar xz)
230+# If we want a copy of grub on the ISO as well, seems redundant:
231+mkdir -p $CDDIR/EFI/BOOT
232+mcopy -i $CDDIR/boot/grub/efi.img ::EFI/BOOT/bootaa64.efi $CDDIR/EFI/BOOT/bootaa64.efi
233+sed -i '/^menuentry/Q' $CDDIR/boot/grub/grub.cfg
234+
235+### aarch64-laptops-support
236+if [ "$CDIMAGE_LIVE" = 1 ] && [ "$PROJECT" = ubuntu ]; then
237+ cat >> $CDDIR/boot/grub/grub.cfg <<EOF
238+insmod smbios
239+smbios --type 1 --get-string 4 --linux --set dmi_svn # DMI_SYS_VENDOR
240+smbios --type 1 --get-string 5 --linux --set dmi_pn # DMI_PRODUCT_NAME
241+dmi_product=svn\${dmi_svn}:pn\${dmi_pn}
242+dtb=
243+if [ \${dmi_product} = "svnASUSTeKCOMPUTERINC.:pnNovaGoTP370QL"]; then
244+ dtb="msm8998-asus-novago-tp370ql.dtb"
245+fi
246+if [ \${dmi_product} = "svnLENOVO:pn81JL"]; then
247+ dtb="sdm850-lenovo-yoga-c630.dtb"
248+fi
249+if loadfont /boot/grub/font.pf2 ; then
250+ set gfxmode=auto
251+ insmod efi_gop
252+ insmod efi_uga
253+ insmod gfxterm
254+ terminal_output gfxterm
255+fi
256+EOF
257+ cp $DI_PATH/current/legacy-images/device-tree/msm8998-asus-novago-tp370ql.dtb $CDDIR/boot/
258+ cp $DI_PATH/current/legacy-images/device-tree/sdm850-lenovo-yoga-c630.dtb $CDDIR/boot/
259+ LAPTOP_PARAMS=" efi=novamap clk_ignore_unused pd_ignore_unused module_blacklist=hid_sensor_hub initcall_blacklist=acpi_button_driver_init
260+ if [ \"\$dtb\" ]; then
261+ devicetree /boot/\$dtb
262+ fi"
263+fi
264+### aarch64-laptops-support end
265+
266+# Set a timeout for grub.
267+>>>>>>> MERGE-SOURCE
268 cat >> $CDDIR/boot/grub/grub.cfg <<EOF
269 set timeout=30
270+<<<<<<< TREE
271
272 loadfont unicode
273
274@@ -67,3 +213,125 @@
275 fwsetup
276 }
277 EOF
278+=======
279+EOF
280+
281+if [ "$BACKPORT_KERNEL" ]; then
282+ cat > $CDDIR/boot/grub/hwe-grub.cfg <<EOF
283+submenu 'Boot and Install with the HWE kernel' {
284+EOF
285+fi
286+
287+LAYERFS_PATH_OPT=$(add_layerfs_path_opt)
288+
289+if [ "$CDIMAGE_LIVE" = 1 ]; then
290+ if [ "$PROJECT" = kubuntu ] || [ "$PROJECT" = kubuntu-plasma5 ]; then
291+ livelabel="^Start $HUMANPROJECT"
292+ liveparams=' maybe-ubiquity'
293+ else
294+ livelabel="^Try $HUMANPROJECT without installing"
295+ liveparams=
296+ fi
297+ cat >> $CDDIR/boot/grub/grub.cfg <<EOF
298+menuentry "${livelabel#^}" {
299+ set gfxpayload=keep
300+ linux $CASPER_KERNEL $KERNEL_PARAMS $DEFAULT_PRESEED$liveparams$LAYERFS_PATH_OPT quiet splash ---${LAPTOP_PARAMS}
301+ initrd $CASPER_INITRD
302+}
303+EOF
304+ cat >> $CDDIR/boot/grub/loopback.cfg <<EOF
305+menuentry "${livelabel#^}" {
306+ set gfxpayload=keep
307+ linux $CASPER_KERNEL $KERNEL_PARAMS $DEFAULT_PRESEED$liveparams$LAYERFS_PATH_OPT iso-scan/filename=\${iso_path} quiet splash ---${LAPTOP_PARAMS}
308+ initrd $CASPER_INITRD
309+}
310+EOF
311+ if [ "$PROJECT" != ubuntu-mid ] && [ "$PROJECT" != kubuntu ] && [ "$PROJECT" != kubuntu-plasma5 ]; then
312+ cat >> $CDDIR/boot/grub/grub.cfg <<EOF
313+menuentry "Install $HUMANPROJECT" {
314+ set gfxpayload=keep
315+ linux $CASPER_KERNEL $KERNEL_PARAMS $DEFAULT_PRESEED$LAYERFS_PATH_OPT only-ubiquity quiet splash ---${LAPTOP_PARAMS}
316+ initrd $CASPER_INITRD
317+}
318+EOF
319+ cat >> $CDDIR/boot/grub/loopback.cfg <<EOF
320+menuentry "Install $HUMANPROJECT" {
321+ linux $CASPER_KERNEL $KERNEL_PARAMS $DEFAULT_PRESEED$LAYERFS_PATH_OPT only-ubiquity iso-scan/filename=\${iso_path} quiet splash ---${LAPTOP_PARAMS}
322+ initrd $CASPER_INITRD
323+}
324+EOF
325+ fi
326+fi
327+if [ "$CDIMAGE_INSTALL" = 1 ]; then
328+ if [ "$CDIMAGE_LIVE" != 1 ]; then
329+ for kp in $KERNEL_PREFIXES; do
330+ cat >> $CDDIR/boot/grub/${!kp}grub.cfg <<EOF
331+menuentry "Install $HUMANPROJECT" {
332+ set gfxpayload=keep
333+ linux /install/${!kp}vmlinuz $KERNEL_PARAMS ${DEFAULT_PRESEED/$PREFIX_PRESEED/$PREFIX_PRESEED${!kp}} quiet ---
334+ initrd /install/${!kp}initrd.gz
335+}
336+EOF
337+ done
338+ else
339+ cat >> $CDDIR/boot/grub/grub.cfg <<EOF
340+menuentry "Install $HUMANPROJECT in text mode" {
341+ set gfxpayload=keep
342+ linux /install/vmlinuz $KERNEL_PARAMS $DEFAULT_PRESEED quiet ---
343+ initrd /install/initrd.gz
344+}
345+EOF
346+ fi
347+fi
348+# The GRUB versions of this only correspond to single isolinux labels,
349+# because we don't yet have the necessary technology in our GRUB menu stack
350+# to have a two-dimensional set of boot options, as is implemented for
351+# isolinux using the gfxboot "applies" keyword.
352+if [ "$CDIMAGE_LIVE" = 1 ]; then
353+ cat >> $CDDIR/boot/grub/grub.cfg <<EOF
354+menuentry "OEM install (for manufacturers)" {
355+ set gfxpayload=keep
356+ linux $CASPER_KERNEL $KERNEL_PARAMS $DEFAULT_PRESEED$LAYERFS_PATH_OPT only-ubiquity quiet splash oem-config/enable=true ---${LAPTOP_PARAMS}
357+ initrd $CASPER_INITRD
358+}
359+EOF
360+else
361+ for kp in $KERNEL_PREFIXES; do
362+ cat >> $CDDIR/boot/grub/${!kp}grub.cfg <<EOF
363+menuentry "OEM install (for manufacturers)" {
364+ set gfxpayload=keep
365+ linux /install/${!kp}vmlinuz $KERNEL_PARAMS ${DEFAULT_PRESEED/$PREFIX_PRESEED/$PREFIX_PRESEED${!kp}} quiet oem-config/enable=true ---
366+ initrd /install/${!kp}initrd.gz
367+}
368+EOF
369+ done
370+fi
371+if [ "$CDIMAGE_INSTALL_BASE" = 1 ]; then
372+ for kp in $KERNEL_PREFIXES; do
373+ cat >> $CDDIR/boot/grub/${!kp}grub.cfg <<EOF
374+menuentry "Check disc for defects" {
375+ set gfxpayload=keep
376+ linux /install/${!kp}vmlinuz $KERNEL_PARAMS MENU=/bin/cdrom-checker-menu quiet ---
377+ initrd /install/${!kp}initrd.gz
378+}
379+EOF
380+ cat >> $CDDIR/boot/grub/${!kp}grub.cfg <<EOF
381+menuentry "Rescue a broken system" {
382+ set gfxpayload=keep
383+ linux /install/${!kp}vmlinuz $KERNEL_PARAMS rescue/enable=true ---
384+ initrd /install/${!kp}initrd.gz
385+}
386+EOF
387+ done
388+fi
389+if [ "$BACKPORT_KERNEL" ] && [ "$PROJECT" = ubuntu-server ]; then
390+ cat >> $CDDIR/boot/grub/hwe-grub.cfg <<EOF
391+}
392+EOF
393+ cat $CDDIR/boot/grub/hwe-grub.cfg >> $CDDIR/boot/grub/grub.cfg
394+fi
395+rm -f $CDDIR/boot/grub/hwe-grub.cfg
396+fi
397+
398+# th,th, thats all
399+>>>>>>> MERGE-SOURCE

Subscribers

People subscribed via source and target branches