From 6752f8de1e94b9646030c9cf79c61945f93609b9 Mon Sep 17 00:00:00 2001 From: Johan Gunnarsson Date: Mon, 2 Aug 2021 21:30:12 +0200 Subject: [PATCH] Add x86/x86_64 support --- .../etc/initramfs/post-update.d/zz-update-uimg | 17 +++++++++++++++++ .../etc/initramfs/post-update.d/zz-update-uimg | 17 +++++++++++++++++ Dockerfile | 9 ++++++--- boards.csv | 2 ++ chips.csv | 2 ++ debians.csv => debians-arm.csv | 0 debians-x86.csv | 10 ++++++++++ scripts/build-boot-qemu | 14 +++++++++++++- scripts/build-boot-qemu-x86 | 14 ++++++++++++++ scripts/build-boot-rk | 2 +- scripts/build-boot-rpi | 4 ++-- scripts/build-boot-sunxi | 2 +- scripts/build-debian | 12 +++++++++++- scripts/build-image | 12 ++++++++++-- scripts/build-u_boot | 3 +++ 15 files changed, 109 insertions(+), 11 deletions(-) create mode 100755 2nd-stage-files/pre-2nd-stage-files-amd64/etc/initramfs/post-update.d/zz-update-uimg create mode 100755 2nd-stage-files/pre-2nd-stage-files-i386/etc/initramfs/post-update.d/zz-update-uimg rename debians.csv => debians-arm.csv (100%) create mode 100644 debians-x86.csv create mode 100755 scripts/build-boot-qemu-x86 diff --git a/2nd-stage-files/pre-2nd-stage-files-amd64/etc/initramfs/post-update.d/zz-update-uimg b/2nd-stage-files/pre-2nd-stage-files-amd64/etc/initramfs/post-update.d/zz-update-uimg new file mode 100755 index 0000000..0dd2b5f --- /dev/null +++ b/2nd-stage-files/pre-2nd-stage-files-amd64/etc/initramfs/post-update.d/zz-update-uimg @@ -0,0 +1,17 @@ +#!/bin/sh +# Generate initrd.uimg and update U-Boot boot.scr + +# Kernel ABI string +ABI="${1}" + +# Create U-Boot boot script +cat << EOF > /boot/boot.cmd +load \${devtype} \${devnum}:\${distro_bootpart} \${kernel_addr_r} /boot/vmlinuz-${ABI} +load \${devtype} \${devnum}:\${distro_bootpart} \${ramdisk_addr_r} /boot/initrd.img-${ABI} +part uuid \${devtype} \${devnum}:\${distro_bootpart} partuuid +setenv bootargs root=PARTUUID=\${partuuid} rw rootwait +zboot \${kernel_addr_r} - \${ramdisk_addr_r} 0x2000000 +EOF + +# Create U-Boot boot script +mkimage -A x86_64 -T script -C none -d /boot/boot.cmd /boot/boot.scr diff --git a/2nd-stage-files/pre-2nd-stage-files-i386/etc/initramfs/post-update.d/zz-update-uimg b/2nd-stage-files/pre-2nd-stage-files-i386/etc/initramfs/post-update.d/zz-update-uimg new file mode 100755 index 0000000..62277b4 --- /dev/null +++ b/2nd-stage-files/pre-2nd-stage-files-i386/etc/initramfs/post-update.d/zz-update-uimg @@ -0,0 +1,17 @@ +#!/bin/sh +# Generate initrd.uimg and update U-Boot boot.scr + +# Kernel ABI string +ABI="${1}" + +# Create U-Boot boot script +cat << EOF > /boot/boot.cmd +load \${devtype} \${devnum}:\${distro_bootpart} \${kernel_addr_r} /boot/vmlinuz-${ABI} +load \${devtype} \${devnum}:\${distro_bootpart} \${ramdisk_addr_r} /boot/initrd.img-${ABI} +part uuid \${devtype} \${devnum}:\${distro_bootpart} partuuid +setenv bootargs root=PARTUUID=\${partuuid} rw rootwait +zboot \${kernel_addr_r} - \${ramdisk_addr_r} 0x2000000 +EOF + +# Create U-Boot boot script +mkimage -A x86 -T script -C none -d /boot/boot.cmd /boot/boot.scr diff --git a/Dockerfile b/Dockerfile index cfb26d0..f8d5667 100644 --- a/Dockerfile +++ b/Dockerfile @@ -31,11 +31,14 @@ RUN apt-get update && \ awscli && \ ([ "$(uname -m)" = "aarch64" ] && \ apt-get --assume-yes \ - install gcc-arm-linux-gnueabihf || :) && \ + install gcc-arm-linux-gnueabihf \ + gcc-i686-linux-gnu \ + gcc-x86-64-linux-gnu || :) && \ ([ "$(uname -m)" = "x86_64" ] && \ apt-get --assume-yes \ - install gcc-aarch64-linux-gnu \ - gcc-arm-linux-gnueabihf || :) && \ + install gcc-arm-linux-gnueabihf \ + gcc-aarch64-linux-gnu \ + gcc-i686-linux-gnu || :) && \ apt-get clean && \ rm -rf /var/lib/apt/lists/* && \ rm -f /var/log/*.log diff --git a/boards.csv b/boards.csv index ea4605d..68ec451 100644 --- a/boards.csv +++ b/boards.csv @@ -154,3 +154,5 @@ merrii_a80_optimus,Merrii A80 Optimus,Merrii,allwinner-a80,Merrii_A80_Optimus_de qemu_arm_virt,QEMU arm virt,QEMU,qemu-arm,qemu_arm_defconfig,arm-linux-gnueabihf,N/A qemu_aarch64_virt,QEMU aarch64 virt,QEMU,qemu-aarch64,qemu_arm64_defconfig,aarch64-linux-gnu,N/A +qemu_x86_virt,QEMU x86 virt,QEMU,qemu-x86,qemu-x86_defconfig,i686-linux-gnu,N/A +qemu_x86_64_virt,QEMU x86_64 virt,QEMU,qemu-x86_64,qemu-x86_64_defconfig,x86_64-linux-gnu,N/A diff --git a/chips.csv b/chips.csv index bfe3624..92b5e9b 100644 --- a/chips.csv +++ b/chips.csv @@ -33,3 +33,5 @@ rk3399,RK3399,Rockchip,ARM Cortex A72/A53,armv8 qemu-arm,arm,QEMU,ARM Cortex A15,armv7 qemu-aarch64,aarch64,QEMU,ARM Cortex A53,armv8 +qemu-x86_64,x86_64,QEMU,x86 qemu64,x86-64 +qemu-x86,x86,QEMU,x86 qemu64,x86 diff --git a/debians.csv b/debians-arm.csv similarity index 100% rename from debians.csv rename to debians-arm.csv diff --git a/debians-x86.csv b/debians-x86.csv new file mode 100644 index 0000000..a1b4190 --- /dev/null +++ b/debians-x86.csv @@ -0,0 +1,10 @@ +OS,Dist,Arch + +debian,buster,i386 +debian,buster,amd64 + +debian,bullseye,i386 +debian,bullseye,amd64 + +debian,sid,i386 +debian,sid,amd64 diff --git a/scripts/build-boot-qemu b/scripts/build-boot-qemu index 2245fa8..cfa3890 100755 --- a/scripts/build-boot-qemu +++ b/scripts/build-boot-qemu @@ -10,5 +10,17 @@ set -ex build-u_boot "${DEFCONFIG}" "${TUPLE}" +case "${CHIP_ID}" in +qemu-x86|qemu-x86_64) + FILE=u-boot.rom + ;; +qemu-arm|qemu-aarch64) + FILE=u-boot.bin + ;; +*) + echo "Unknown CHIP_ID \"${CHIP_ID}\"" + exit 1 +esac + # Copy U-Boot to 16 sectors from start -dd if=u-boot/u-boot.bin of=tmp.img seek=16 +dd if=u-boot/"${FILE}" of=tmp.img seek=16 conv=notrunc diff --git a/scripts/build-boot-qemu-x86 b/scripts/build-boot-qemu-x86 new file mode 100755 index 0000000..3289d04 --- /dev/null +++ b/scripts/build-boot-qemu-x86 @@ -0,0 +1,14 @@ +#!/bin/sh +# Build SD card image + +BOARD_ID="${1}" # For example "bananapi" +CHIP_ID="${2}" # For example "allwinner-a10" +DEFCONFIG="${3}" # For example "Bananapi_defconfig" +TUPLE="${4}" # For example "arm-linux-gnueabihf" + +set -ex + +build-u_boot "${DEFCONFIG}" "${TUPLE}" + +# Copy U-Boot to 16 sectors from start +dd if=u-boot/u-boot.rom of=tmp.img seek=16 conv=notrunc diff --git a/scripts/build-boot-rk b/scripts/build-boot-rk index e564756..591c309 100755 --- a/scripts/build-boot-rk +++ b/scripts/build-boot-rk @@ -20,4 +20,4 @@ esac build-u_boot "${DEFCONFIG}" "${TUPLE}" # Copy U-Boot to 64 sectors from start -dd if=u-boot/u-boot-rockchip.bin of=tmp.img seek=64 +dd if=u-boot/u-boot-rockchip.bin of=tmp.img seek=64 conv=notrunc diff --git a/scripts/build-boot-rpi b/scripts/build-boot-rpi index fb71a3f..4008d69 100755 --- a/scripts/build-boot-rpi +++ b/scripts/build-boot-rpi @@ -44,11 +44,11 @@ sed -i -e "s/BOOT_UART=0/BOOT_UART=1/" bootcode.bin # Create empty FAT partition rm -f vfat.img -fallocate -l 31MiB vfat.img +fallocate -l 28MiB vfat.img mkfs.vfat vfat.img # Copy boot files to FAT partition mcopy -v -i vfat.img u-boot/u-boot.bin config.txt fixup*.dat start*.elf bootcode.bin :: # Copy FAT partition to image -dd if=vfat.img of=tmp.img bs=1K seek=1K +dd if=vfat.img of=tmp.img bs=1K seek=1K conv=notrunc diff --git a/scripts/build-boot-sunxi b/scripts/build-boot-sunxi index 17e3a10..8eaaee0 100755 --- a/scripts/build-boot-sunxi +++ b/scripts/build-boot-sunxi @@ -24,4 +24,4 @@ esac build-u_boot "${DEFCONFIG}" "${TUPLE}" # Copy U-Boot to 8192 bytes from start -dd if=u-boot/u-boot-sunxi-with-spl.bin of=tmp.img bs=1K seek=8 +dd if=u-boot/u-boot-sunxi-with-spl.bin of=tmp.img bs=1K seek=8 conv=notrunc diff --git a/scripts/build-debian b/scripts/build-debian index 3a255b7..cd966b7 100755 --- a/scripts/build-debian +++ b/scripts/build-debian @@ -18,7 +18,17 @@ debian-arm64) URL=http://deb.debian.org/debian SCRIPT=/usr/share/debootstrap/scripts/sid ;; -ubuntu-armhf|ubuntu-arm64) +debian-i386) + KERNEL=linux-image-686 + URL=http://deb.debian.org/debian + SCRIPT=/usr/share/debootstrap/scripts/sid + ;; +debian-amd64) + KERNEL=linux-image-amd64 + URL=http://deb.debian.org/debian + SCRIPT=/usr/share/debootstrap/scripts/sid + ;; +ubuntu-armhf|ubuntu-arm64|ubuntu-amd64) KERNEL=linux-image-generic URL=http://ports.ubuntu.com/ubuntu-ports SCRIPT=/usr/share/debootstrap/scripts/gutsy diff --git a/scripts/build-image b/scripts/build-image index cfc7be4..7e3afe0 100755 --- a/scripts/build-image +++ b/scripts/build-image @@ -6,9 +6,17 @@ IMAGE="${1}" set -ex rm -f "${IMAGE}" -fallocate -l 2GB "${IMAGE}" # 2,000,000,000 bytes +fallocate -v -l 2GB "${IMAGE}" # 2,000,000,000 bytes parted -s "${IMAGE}" mklabel msdos -parted -s "${IMAGE}" mkpart primary fat32 -- 1MiB 32MiB # 31 MiB (32,505,856 bytes) +parted -s "${IMAGE}" mkpart primary fat32 -- 4MiB 32MiB # 28 MiB (50,331,648 bytes) parted -s "${IMAGE}" mkpart primary ext2 -- 32MiB -1 parted -s "${IMAGE}" set 2 boot on + +# Create empty FAT partition +rm -f vfat.img +fallocate -l 28MiB vfat.img +mkfs.vfat vfat.img + +# Copy FAT partition to image +dd if=vfat.img of="${IMAGE}" bs=1K seek=4K conv=notrunc diff --git a/scripts/build-u_boot b/scripts/build-u_boot index 9a0160f..1897be9 100755 --- a/scripts/build-u_boot +++ b/scripts/build-u_boot @@ -36,6 +36,9 @@ arm-*) aarch64-*) export ARCH="aarch64" ;; +x86_64-*|i?86-*) + export ARCH="x86" + ;; *) echo "Can't decide \$ARCH for tuple \"${TUPLE}\"" exit 1