···538538539539build_kernel() {
540540 local LINUX_DIR="${BUILD_DIR}/linux-6.14.2"
541541+ local HOST_FW_DIR=""
541542 if [ ! -d "${LINUX_DIR}" ]; then
542543 err "Linux source not found at ${LINUX_DIR}"
543544 exit 1
···552553 else
553554 cd "${LINUX_DIR}"
554555 fi
556556+ copy_builtin_fw_blob() {
557557+ local rel="$1"
558558+ local dst="$2/$rel"
559559+ mkdir -p "$(dirname "${dst}")"
560560+ if [ -f "${HOST_FW_DIR}/${rel}" ]; then
561561+ cp -L "${HOST_FW_DIR}/${rel}" "${dst}"
562562+ return 0
563563+ fi
564564+ if [ -f "${HOST_FW_DIR}/${rel}.zst" ]; then
565565+ zstd -d "${HOST_FW_DIR}/${rel}.zst" -o "${dst}" 2>/dev/null && return 0
566566+ fi
567567+ if [ -f "${HOST_FW_DIR}/${rel}.xz" ]; then
568568+ xz -dc "${HOST_FW_DIR}/${rel}.xz" > "${dst}" 2>/dev/null && return 0
569569+ fi
570570+ return 1
571571+ }
572572+573573+ for d in /usr/lib/firmware /lib/firmware; do
574574+ if [ -d "${d}" ]; then
575575+ HOST_FW_DIR="${d}"
576576+ break
577577+ fi
578578+ done
579579+555580 # Inject built-in firmware paths if firmware blobs exist locally
556581 local FW_DIR="${BUILD_DIR}/firmware"
557557- if [ -d "${FW_DIR}" ] && ls "${FW_DIR}"/*.ucode &>/dev/null; then
558558- local FW_LIST=$(cd "${FW_DIR}" && ls *.ucode 2>/dev/null | tr '\n' ' ' | sed 's/ $//')
582582+ local FW_LIST
583583+ FW_LIST=$(sed -n 's/^CONFIG_EXTRA_FIRMWARE="\([^"]*\)"/\1/p' "${LINUX_DIR}/.config" | head -1)
584584+ if [ -n "${FW_LIST}" ]; then
585585+ mkdir -p "${FW_DIR}"
586586+ if [ -n "${HOST_FW_DIR}" ]; then
587587+ local missing_fw=""
588588+ local fw=""
589589+ for fw in ${FW_LIST}; do
590590+ if ! copy_builtin_fw_blob "${fw}" "${FW_DIR}"; then
591591+ missing_fw="${missing_fw} ${fw}"
592592+ fi
593593+ done
594594+ if [ -n "${missing_fw}" ]; then
595595+ err "Missing built-in firmware blobs:${missing_fw}"
596596+ err "Looked under: ${HOST_FW_DIR}"
597597+ exit 1
598598+ fi
599599+ fi
559600 sed -i "s|^CONFIG_EXTRA_FIRMWARE=.*|CONFIG_EXTRA_FIRMWARE=\"${FW_LIST}\"|" "${LINUX_DIR}/.config"
560601 sed -i "s|^CONFIG_EXTRA_FIRMWARE_DIR=.*|CONFIG_EXTRA_FIRMWARE_DIR=\"${FW_DIR}\"|" "${LINUX_DIR}/.config"
561602 log "Built-in firmware: ${FW_LIST}"
+23-8
fedac/native/initramfs/init
···5151export SSL_CERT_DIR="/etc/ssl/certs"
5252export HOME="/tmp"
53535454-# ── Mount USB EFI partition (for config.json, wifi_creds.json, logs) ──
5555-# Load filesystem modules and retry — USB takes time to appear
5454+# ── Mount USB config/log partition (for config.json, wifi creds, logs) ──
5555+# Prefer the writable config partition over the boot partitions.
5656modprobe vfat 2>/dev/null
5757modprobe nls_cp437 2>/dev/null
5858modprobe nls_ascii 2>/dev/null
5959USB_MOUNTED=0
6060-for attempt in 1 2 3 4 5 6 7 8 9 10; do
6161- for p in /dev/sda1 /dev/sdb1 /dev/sdc1 /dev/sdd1 /dev/nvme0n1p1; do
6060+USB_PARTS="/dev/sda1 /dev/sda2 /dev/sda3 /dev/sdb1 /dev/sdb2 /dev/sdb3 /dev/sdc1 /dev/sdc2 /dev/sdc3 /dev/sdd1 /dev/sdd2 /dev/sdd3 /dev/nvme0n1p1 /dev/nvme0n1p2 /dev/nvme0n1p3"
6161+6262+mount_usb_partition() {
6363+ pass="$1"
6464+ for p in $USB_PARTS; do
6265 if [ -b "$p" ]; then
6366 mkdir -p /mnt
6464- mount -t vfat "$p" /mnt 2>/dev/null && {
6565- if [ -f /mnt/EFI/BOOT/BOOTX64.EFI ]; then USB_MOUNTED=1; break 2; fi
6666- umount /mnt 2>/dev/null
6767- }
6767+ mount -t vfat "$p" /mnt 2>/dev/null || continue
6868+ if [ "$pass" = "config" ] && [ -f /mnt/config.json ]; then
6969+ USB_MOUNTED=1
7070+ return 0
7171+ fi
7272+ if [ "$pass" = "boot" ] && { [ -f /mnt/EFI/BOOT/BOOTX64.EFI ] || [ -f /mnt/EFI/BOOT/KERNEL.EFI ]; }; then
7373+ USB_MOUNTED=1
7474+ return 0
7575+ fi
7676+ umount /mnt 2>/dev/null
6877 fi
6978 done
7979+ return 1
8080+}
8181+8282+for attempt in 1 2 3 4 5 6 7 8 9 10; do
8383+ mount_usb_partition config && break
8484+ mount_usb_partition boot && break
7085 [ "$USB_MOUNTED" = "1" ] && break
7186 sleep 1
7287done