cat build_kernel.sh
-----------------------------------------------------------------------------------------------------------------------------
#!/bin/bash
TARGET=/boot
BOOTDIR=/boot
UCODE=$BOOTDIR/intel-ucode.img
EFISTUB=/usr/lib/systemd/boot/efi/linuxx64.efi.stub
echo "Updating EFI kernels..."
for k in $BOOTDIR/vmlinuz*; do
NAME=$(basename $k|sed 's/vmlinuz-//')
echo " Building $NAME"
INITRD="$BOOTDIR/initrd.img-$NAME"
ls /boot
if [ -f "$UCODE" ]; then
cat "$UCODE" "$INITRD" > /tmp/initrd.bin
INITRDFILE=/tmp/initrd.bin
else
# Do not fail on AMD systems
echo " Intel microcode not found. Skipping."
INITRDFILE="$INITRD"
fi
# Check for custom command line for the kernel.
CMDLINE="$BOOTDIR/cmdline-$NAME.txt"
if [ -f "$CMDLINE" ]; then
echo " Using custom command line $CMDLINE"
else
CMDLINE="$BOOTDIR/cmdline.txt"
if [ ! -f "$CMDLINE" ]; then
echo "CMDLINE missing. Extracting from running kernel..."
cat /proc/cmdline |sed 's/BOOT_IMAGE=[^ ]* \?//' > "$CMDLINE"
fi
fi
objcopy \
--add-section .osrel="/usr/lib/os-release" --change-section-vma .osrel=0x20000 \
--add-section .cmdline="$CMDLINE" --change-section-vma .cmdline=0x30000 \
--add-section .linux="$k" --change-section-vma .linux=0x40000 \
--add-section .initrd="$INITRDFILE" --change-section-vma .initrd=0x3000000 \
"$EFISTUB" "$TARGET/debian-$NAME.efi"
done
---------------------------------------------------------------------------------------------------------------------------
copy debian-xxx.efi to esp and add it to efi nvram using bios or efibootmgr.
src https://github.com/RobertCsordas/arch-efiboot
Comments
Post a Comment