Wed Apr 19 18:39:18 2023 UTC ()
Install /boot/boot.cfg with EFI bootloaders.

On ARM ports, the EFI boot loader handles a boot.cfg file if it
exists, but one is not installed by default.  In contrast, both the
i386 and amd64 ports do install boot.cfg by default.  Bring these
ports into agreement by installing boot.cfg on ARM ports with EFI boot
loaders.


(brook)
diff -r1.45 -r1.46 src/distrib/utils/embedded/conf/armv7.conf
diff -r0 -r1.1 src/distrib/utils/embedded/files/boot.cfg

cvs diff -r1.45 -r1.46 src/distrib/utils/embedded/conf/armv7.conf (switch to unified diff)

--- src/distrib/utils/embedded/conf/armv7.conf 2022/11/19 09:19:27 1.45
+++ src/distrib/utils/embedded/conf/armv7.conf 2023/04/19 18:39:18 1.46
@@ -1,151 +1,152 @@ @@ -1,151 +1,152 @@
1# $NetBSD: armv7.conf,v 1.45 2022/11/19 09:19:27 yamt Exp $ 1# $NetBSD: armv7.conf,v 1.46 2023/04/19 18:39:18 brook Exp $
2# ARMv7 customization script used by mkimage 2# ARMv7 customization script used by mkimage
3# 3#
4board=armv7 4board=armv7
5console=fb 5console=fb
6resize=true 6resize=true
7 7
8. ${DIR}/conf/evbarm.conf 8. ${DIR}/conf/evbarm.conf
9 9
10kernels_generic="GENERIC" 10kernels_generic="GENERIC"
11 11
12make_label() { 12make_label() {
13 make_label_evbarm 13 make_label_evbarm
14} 14}
15 15
16make_fstab() { 16make_fstab() {
17 make_fstab_evbarm 17 make_fstab_evbarm
18} 18}
19 19
20customize() { 20customize() {
21 customize_evbarm 21 customize_evbarm
22 cat >> "${mnt}/etc/rc.conf" << EOF 22 cat >> "${mnt}/etc/rc.conf" << EOF
23mdnsd=YES 23mdnsd=YES
24devpubd=YES 24devpubd=YES
25wscons=\$(dev_exists wsdisplay0) 25wscons=\$(dev_exists wsdisplay0)
26EOF 26EOF
27} 27}
28 28
29populate_common() { 29populate_common() {
30 if [ -f "${release}/usr/mdec/bootarm.efi" ]; then 30 if [ -f "${release}/usr/mdec/bootarm.efi" ]; then
31 # Install EFI bootloader 31 # Install EFI bootloader
32 mkdir -p "${mnt}/boot/EFI/BOOT" 32 mkdir -p "${mnt}/boot/EFI/BOOT"
33 cp "${release}/usr/mdec/bootarm.efi" "${mnt}/boot/EFI/BOOT/bootarm.efi" 33 cp "${release}/usr/mdec/bootarm.efi" "${mnt}/boot/EFI/BOOT/bootarm.efi"
34 34
35 # Install GENERIC kernel to root of the FFS partition 35 # Install GENERIC kernel to root of the FFS partition
36 ${GZIP_CMD} -dc ${kernel}/netbsd-${kernels_generic}.gz > "${mnt}/netbsd" 36 ${GZIP_CMD} -dc ${kernel}/netbsd-${kernels_generic}.gz > "${mnt}/netbsd"
37 echo "./netbsd type=file uname=root gname=wheel mode=0755" \ 37 echo "./netbsd type=file uname=root gname=wheel mode=0755" \
38 >> "$tmp/selected_sets" 38 >> "$tmp/selected_sets"
39 39
40 cp ${DIR}/files/armv7_boot.cmd ${mnt}/boot/boot.cmd 40 cp ${DIR}/files/armv7_boot.cmd ${mnt}/boot/boot.cmd
 41 cp ${DIR}/files/boot.cfg ${mnt}/boot/boot.cfg
41 else 42 else
42 # Fallback to non-EFI boot command 43 # Fallback to non-EFI boot command
43 cp ${DIR}/files/armv7_boot_nonefi.cmd ${mnt}/boot/boot.cmd 44 cp ${DIR}/files/armv7_boot_nonefi.cmd ${mnt}/boot/boot.cmd
44 fi 45 fi
45 46
46 # Install boot script 47 # Install boot script
47 "${MKUBOOTIMAGE}" -A arm -C none -O netbsd -T script -a 0 -n "NetBSD/armv7 boot" "${mnt}/boot/boot.cmd" "${mnt}/boot/boot.scr" 48 "${MKUBOOTIMAGE}" -A arm -C none -O netbsd -T script -a 0 -n "NetBSD/armv7 boot" "${mnt}/boot/boot.cmd" "${mnt}/boot/boot.scr"
48} 49}
49 50
50populate_rpi() { 51populate_rpi() {
51 firmwaredir="${src}/external/broadcom/rpi-firmware/dist" 52 firmwaredir="${src}/external/broadcom/rpi-firmware/dist"
52 firmwarefiles="LICENCE.broadcom bootcode.bin fixup.dat fixup_cd.dat start.elf start_cd.elf" 53 firmwarefiles="LICENCE.broadcom bootcode.bin fixup.dat fixup_cd.dat start.elf start_cd.elf"
53 54
54 # The GENERIC .img kernel img is used for RPI2 55 # The GENERIC .img kernel img is used for RPI2
55 if [ -f "${mnt}/boot/netbsd-GENERIC.img" ]; then 56 if [ -f "${mnt}/boot/netbsd-GENERIC.img" ]; then
56 cat > "${mnt}/boot/cmdline.txt" << EOF 57 cat > "${mnt}/boot/cmdline.txt" << EOF
57root=ld0a console=${console} 58root=ld0a console=${console}
58#fb=1280x1024 # to select a mode, otherwise try EDID 59#fb=1280x1024 # to select a mode, otherwise try EDID
59#fb=disable # to disable fb completely 60#fb=disable # to disable fb completely
60EOF 61EOF
61 62
62 cat > ${mnt}/boot/config.txt << EOF 63 cat > ${mnt}/boot/config.txt << EOF
63# 64#
64upstream_kernel=1 65upstream_kernel=1
65os_prefix=dtb/ 66os_prefix=dtb/
66cmdline=../cmdline.txt 67cmdline=../cmdline.txt
67kernel=/netbsd-GENERIC.img 68kernel=/netbsd-GENERIC.img
68# Boot options, see https://www.raspberrypi.com/documentation/computers/config_txt.html#boot-options 69# Boot options, see https://www.raspberrypi.com/documentation/computers/config_txt.html#boot-options
69kernel_address=0x01000040 70kernel_address=0x01000040
70# UART settings, see https://www.raspberrypi.com/documentation/computers/configuration.html#configuring-uarts 71# UART settings, see https://www.raspberrypi.com/documentation/computers/configuration.html#configuring-uarts
71enable_uart=1 72enable_uart=1
72force_turbo=0 73force_turbo=0
73EOF 74EOF
74 75
75 echo "${bar} installing firmware files ${bar}" 76 echo "${bar} installing firmware files ${bar}"
76 (cd "${mnt}/boot" && 77 (cd "${mnt}/boot" &&
77 for f in ${firmwarefiles}; do 78 for f in ${firmwarefiles}; do
78 echo " $f" 79 echo " $f"
79 cp "${firmwaredir}/${f}" . 80 cp "${firmwaredir}/${f}" .
80 done 81 done
81 ) 82 )
82 83
83 fi 84 fi
84 85
85 # 86 #
86 # If arm_freq is specified in config.txt, set CPU frequency 87 # If arm_freq is specified in config.txt, set CPU frequency
87 # to match at boot time. 88 # to match at boot time.
88 # 89 #
89 cp ${release}/etc/rc.local ${mnt}/etc/rc.local 90 cp ${release}/etc/rc.local ${mnt}/etc/rc.local
90 cat >> ${mnt}/etc/rc.local << EOF 91 cat >> ${mnt}/etc/rc.local << EOF
91if /sbin/sysctl -q machdep.cpu.frequency.max; then 92if /sbin/sysctl -q machdep.cpu.frequency.max; then
92 cpufreq_max=\$(/sbin/sysctl -n machdep.cpu.frequency.max) 93 cpufreq_max=\$(/sbin/sysctl -n machdep.cpu.frequency.max)
93 cpufreq_cur=\$(/sbin/sysctl -n machdep.cpu.frequency.current) 94 cpufreq_cur=\$(/sbin/sysctl -n machdep.cpu.frequency.current)
94 if [ ! "\$cpufreq_max" = "\$cpufreq_cur" ]; then 95 if [ ! "\$cpufreq_max" = "\$cpufreq_cur" ]; then
95 /sbin/sysctl -w machdep.cpu.frequency.target=\$cpufreq_max 96 /sbin/sysctl -w machdep.cpu.frequency.target=\$cpufreq_max
96 fi 97 fi
97fi 98fi
98EOF 99EOF
99 echo "./etc/rc.local type=file uname=root gname=wheel mode=0644" \ 100 echo "./etc/rc.local type=file uname=root gname=wheel mode=0644" \
100 >> "$tmp/selected_sets" 101 >> "$tmp/selected_sets"
101} 102}
102 103
103populate_amlogic() { 104populate_amlogic() {
104 odroidc1_kernelimg=netbsd-GENERIC.ub 105 odroidc1_kernelimg=netbsd-GENERIC.ub
105 106
106 # Create a boot.ini for Amlogic U-Boot 107 # Create a boot.ini for Amlogic U-Boot
107 cat >> "${mnt}/boot/boot.ini" << EOF 108 cat >> "${mnt}/boot/boot.ini" << EOF
108ODROIDC-UBOOT-CONFIG 109ODROIDC-UBOOT-CONFIG
109 110
110setenv bootargs "awge0.mac-address=\${ethaddr}" 111setenv bootargs "awge0.mac-address=\${ethaddr}"
111setenv bootcmd "fatload mmc 0:1 0x21000000 ${odroidc1_kernelimg}; fatload mmc 0:1 0x20000000 dtb/meson8b-odroidc1.dtb; bootm 0x21000000 - 0x20000000" 112setenv bootcmd "fatload mmc 0:1 0x21000000 ${odroidc1_kernelimg}; fatload mmc 0:1 0x20000000 dtb/meson8b-odroidc1.dtb; bootm 0x21000000 - 0x20000000"
112run bootcmd 113run bootcmd
113EOF 114EOF
114} 115}
115 116
116populate() { 117populate() {
117 echo "${bar} looking for kernels in ${kernel} ${bar}" 118 echo "${bar} looking for kernels in ${kernel} ${bar}"
118 kernels="" 119 kernels=""
119 # .ub kernels 120 # .ub kernels
120 for k in $kernels_generic; do 121 for k in $kernels_generic; do
121 f="${kernel}/netbsd-${k}.ub.gz" 122 f="${kernel}/netbsd-${k}.ub.gz"
122 test -f "${f}" && kernels="${kernels} ${f}" 123 test -f "${f}" && kernels="${kernels} ${f}"
123 done 124 done
124 # .img kernels 125 # .img kernels
125 for k in $kernels_generic; do 126 for k in $kernels_generic; do
126 f="${kernel}/netbsd-${k}.img.gz" 127 f="${kernel}/netbsd-${k}.img.gz"
127 test -f "${f}" && kernels="${kernels} ${f}" 128 test -f "${f}" && kernels="${kernels} ${f}"
128 done 129 done
129 130
130 # install kernels to /boot partition 131 # install kernels to /boot partition
131 for k in ${kernels}; do 132 for k in ${kernels}; do
132 tgt="$(basename ${k} | sed 's/\.gz$//')" 133 tgt="$(basename ${k} | sed 's/\.gz$//')"
133 echo "${bar} installing ${k} to /boot/${tgt} ${bar}" 134 echo "${bar} installing ${k} to /boot/${tgt} ${bar}"
134 case "${k}" in 135 case "${k}" in
135 *.gz) 136 *.gz)
136 ${GZIP_CMD} -dc "${k}" > "${mnt}/boot/${tgt}" 137 ${GZIP_CMD} -dc "${k}" > "${mnt}/boot/${tgt}"
137 ;; 138 ;;
138 *) 139 *)
139 cp "${k}" "${mnt}/boot/${tgt}" 140 cp "${k}" "${mnt}/boot/${tgt}"
140 ;; 141 ;;
141 esac || 142 esac ||
142 fail "Copy of ${k} to ${mnt}/boot/${tgt} failed" 143 fail "Copy of ${k} to ${mnt}/boot/${tgt} failed"
143 done 144 done
144 145
145 # board specific configuration 146 # board specific configuration
146 populate_amlogic 147 populate_amlogic
147 populate_rpi 148 populate_rpi
148 149
149 # common configuration 150 # common configuration
150 populate_common 151 populate_common
151} 152}

File Added: src/distrib/utils/embedded/files/boot.cfg
menu=Boot normally:rndseed /var/db/entropy-file;boot
menu=Boot single user:rndseed /var/db/entropy-file;boot -s
menu=Drop to boot prompt:prompt
default=1
timeout=5
clear=1