From cc5cce79a09c8a417e94ca0f5b7acf01a4d5f27b Mon Sep 17 00:00:00 2001 From: Rob Landley Date: Fri, 28 Jul 2023 20:05:42 -0500 Subject: [PATCH] Replace $TARGET with $CROSS, fix .config dependency on sh, move OUTDOC= TARGET was mostly CROSS already, except "host" becomes "$(uname -m)" during kernel build, but $LOG needed the old value right at the end. Fix: set LOG=$"LOG/$CROSS" after we mkdir "$LOG". (All the filenames in there start with the architecture we're building for already.) Move OUTDOC assignment up top with the rest of the overrideable paths. A perennial problem is "make defconfig; mkroot/mkroot.sh" and then the result won't boot because no /bin/sh due to the pending overrides never getting added. So change the "config exists" test with grep CONFIG_SH=y and replace the .config if it hasn't got a shell. --- mkroot/mkroot.sh | 60 ++++++++++++++++++++++++------------------------ 1 file changed, 30 insertions(+), 30 deletions(-) diff --git a/mkroot/mkroot.sh b/mkroot/mkroot.sh index b520cb36..689faa4f 100755 --- a/mkroot/mkroot.sh +++ b/mkroot/mkroot.sh @@ -45,7 +45,7 @@ elif [ -n "$CROSS" ]; then # CROSS=all/allnonstop/$ARCH else list known $ARCHes fi # Set per-target output directory (using "host" if not cross-compiling) -: ${CROSS:=host} ${OUTPUT:=$TOP/$CROSS} +: ${CROSS:=host} ${OUTPUT:=$TOP/$CROSS} ${OUTDOC:=$OUTPUT/docs} # Verify selected compiler works ${CROSS_COMPILE}cc --static -xc - -o /dev/null <<< "int main(void){return 0;}"|| @@ -70,6 +70,7 @@ fi TEMP="$BUILD/${CROSS}-tmp" && rm -rf "$TEMP" && mkdir -p "$TEMP" "$OUTPUT" "$LOG" || exit 1 [ -z "$ROOT" ] && ROOT="$OUTPUT/fs" && rm -rf "$ROOT" +LOG="$LOG/$CROSS" # ----- log build output @@ -78,15 +79,15 @@ if [ -z "$NOLOGPATH" ]; then # Move cross compiler into $PATH so calls to it get logged [ -n "$CROSS_COMPILE" ] && PATH="${CROSS_COMPILE%/*}:$PATH" && CROSS_COMPILE=${CROSS_COMPILE##*/} - export WRAPDIR="$BUILD/record-commands" LOGPATH="$LOG/$CROSS-commands.txt" + export WRAPDIR="$BUILD/record-commands" LOGPATH="$LOG"-commands.txt rm -rf "$WRAPDIR" "$LOGPATH" generated/obj && WRAPDIR="$WRAPDIR" CROSS_COMPILE= NOSTRIP=1 source mkroot/record-commands || exit 1 fi # Start logging stdout/stderr -rm -f "$LOG/$CROSS".{n,y} || exit 1 -[ -z "$NOLOG" ] && exec > >(tee "$LOG/$CROSS.n") 2>&1 +rm -f "$LOG".{n,y} || exit 1 +[ -z "$NOLOG" ] && exec > >(tee "$LOG".n) 2>&1 echo "Building for $CROSS" # ---------------------- Part 2: Create root filesystem ----------------------- @@ -157,7 +158,7 @@ done # Build static toybox with existing .config if there is one, else defconfig+sh announce toybox [ -n "$PENDING" ] && rm -f .config -[ -e .config ] && CONF=silentoldconfig || unset CONF +grep -q CONFIG_SH=y .config 2>/dev/null && CONF=silentoldconfig || unset CONF for i in $PENDING sh route; do XX="$XX"$'\n'CONFIG_${i^^?}=y; done [ -e "$ROOT"/lib/libc.so ] || export LDFLAGS=--static PREFIX="$ROOT" make clean \ @@ -176,21 +177,20 @@ if [ -z "$LINUX" ] || [ ! -d "$LINUX/kernel" ]; then else # Which architecture are we building a kernel for? LINUX="$(realpath "$LINUX")" - [ -z "$TARGET" ] && - { [ "$CROSS" == host ] && TARGET="$(uname -m)" || TARGET="$CROSS"; } + [ "$CROSS" == host ] && CROSS="$(uname -m)" # Target-specific info in an (alphabetical order) if/else staircase # Each target needs board config, serial console, RTC, ethernet, block device. - if [ "$TARGET" == armv5l ]; then + if [ "$CROSS" == armv5l ]; then # This could use the same VIRT board as armv7, but let's demonstrate a # different one requiring a separate device tree binary. QEMU="arm -M versatilepb -net nic,model=rtl8139 -net user" KARCH=arm KARGS=ttyAMA0 VMLINUX=arch/arm/boot/zImage KCONF=CPU_ARM926T,MMU,VFP,ARM_THUMB,AEABI,ARCH_VERSATILE,ATAGS,DEPRECATED_PARAM_STRUCT,ARM_ATAG_DTB_COMPAT,ARM_ATAG_DTB_COMPAT_CMDLINE_EXTEND,SERIAL_AMBA_PL011,SERIAL_AMBA_PL011_CONSOLE,RTC_CLASS,RTC_DRV_PL031,RTC_HCTOSYS,PCI,PCI_VERSATILE,BLK_DEV_SD,SCSI,SCSI_LOWLEVEL,SCSI_SYM53C8XX_2,SCSI_SYM53C8XX_MMIO,NET_VENDOR_REALTEK,8139CP,SCSI_SYM53C8XX_DMA_ADDRESSING_MODE=0 DTB=arch/arm/boot/dts/versatile-pb.dtb - elif [ "$TARGET" == armv7l ] || [ "$TARGET" == aarch64 ]; then - if [ "$TARGET" == aarch64 ]; then + elif [ "$CROSS" == armv7l ] || [ "$CROSS" == aarch64 ]; then + if [ "$CROSS" == aarch64 ]; then QEMU="aarch64 -M virt -cpu cortex-a57" KARCH=arm64 VMLINUX=arch/arm64/boot/Image else @@ -198,51 +198,51 @@ else fi KARGS=ttyAMA0 KCONF=MMU,ARCH_MULTI_V7,ARCH_VIRT,SOC_DRA7XX,ARCH_OMAP2PLUS_TYPICAL,ARCH_ALPINE,ARM_THUMB,VDSO,CPU_IDLE,ARM_CPUIDLE,KERNEL_MODE_NEON,SERIAL_AMBA_PL011,SERIAL_AMBA_PL011_CONSOLE,RTC_CLASS,RTC_HCTOSYS,RTC_DRV_PL031,VIRTIO_MENU,VIRTIO_NET,PCI,PCI_HOST_GENERIC,VIRTIO_BLK,VIRTIO_PCI,VIRTIO_MMIO,ATA,ATA_SFF,ATA_BMDMA,ATA_PIIX,PATA_PLATFORM,PATA_OF_PLATFORM,ATA_GENERIC,ARM_LPAE - elif [ "$TARGET" == hexagon ]; then + elif [ "$CROSS" == hexagon ]; then QEMU="hexagon -M comet" KARGS=ttyS0 VMLINUX=vmlinux KARCH="hexagon LLVM_IAS=1" KCONF=SPI,SPI_BITBANG,IOMMU_SUPPORT - elif [ "$TARGET" == i486 ] || [ "$TARGET" == i686 ] || - [ "$TARGET" == x86_64 ] || [ "$TARGET" == x32 ]; then - if [ "$TARGET" == i486 ]; then + elif [ "$CROSS" == i486 ] || [ "$CROSS" == i686 ] || + [ "$CROSS" == x86_64 ] || [ "$CROSS" == x32 ]; then + if [ "$CROSS" == i486 ]; then QEMU="i386 -cpu 486 -global fw_cfg.dma_enabled=false" KCONF=M486 - elif [ "$TARGET" == i686 ]; then + elif [ "$CROSS" == i686 ]; then QEMU="i386 -cpu pentium3" KCONF=MPENTIUMII else QEMU=x86_64 KCONF=64BIT - [ "$TARGET" == x32 ] && KCONF=X86_X32 + [ "$CROSS" == x32 ] && KCONF=X86_X32 fi KARCH=x86 KARGS=ttyS0 VMLINUX=arch/x86/boot/bzImage KCONF=$KCONF,UNWINDER_FRAME_POINTER,PCI,BLK_DEV_SD,ATA,ATA_SFF,ATA_BMDMA,ATA_PIIX,NET_VENDOR_INTEL,E1000,SERIAL_8250,SERIAL_8250_CONSOLE,RTC_CLASS - elif [ "$TARGET" == m68k ]; then + elif [ "$CROSS" == m68k ]; then QEMU="m68k -M q800" KARCH=m68k KARGS=ttyS0 VMLINUX=vmlinux KCONF=MMU,M68040,M68KFPU_EMU,MAC,SCSI,SCSI_LOWLEVEL,BLK_DEV_SD,SCSI_MAC_ESP,MACINTOSH_DRIVERS,NET_VENDOR_NATSEMI,MACSONIC,SERIAL_PMACZILOG,SERIAL_PMACZILOG_TTYS,SERIAL_PMACZILOG_CONSOLE - elif [ "$TARGET" == mips ] || [ "$TARGET" == mipsel ]; then + elif [ "$CROSS" == mips ] || [ "$CROSS" == mipsel ]; then QEMU="mips -M malta" KARCH=mips KARGS=ttyS0 VMLINUX=vmlinux KCONF=MIPS_MALTA,CPU_MIPS32_R2,SERIAL_8250,SERIAL_8250_CONSOLE,PCI,BLK_DEV_SD,ATA,ATA_SFF,ATA_BMDMA,ATA_PIIX,NET_VENDOR_AMD,PCNET32,POWER_RESET,POWER_RESET_SYSCON - [ "$TARGET" == mipsel ] && KCONF=$KCONF,CPU_LITTLE_ENDIAN && + [ "$CROSS" == mipsel ] && KCONF=$KCONF,CPU_LITTLE_ENDIAN && QEMU="mipsel -M malta" - elif [ "$TARGET" == powerpc ]; then + elif [ "$CROSS" == powerpc ]; then KARCH=powerpc QEMU="ppc -M g3beige" KARGS=ttyS0 VMLINUX=vmlinux KCONF=ALTIVEC,PPC_PMAC,PPC_OF_BOOT_TRAMPOLINE,ATA,ATA_SFF,ATA_BMDMA,PATA_MACIO,BLK_DEV_SD,MACINTOSH_DRIVERS,ADB,ADB_CUDA,NET_VENDOR_NATSEMI,NET_VENDOR_8390,NE2K_PCI,SERIO,SERIAL_PMACZILOG,SERIAL_PMACZILOG_TTYS,SERIAL_PMACZILOG_CONSOLE,BOOTX_TEXT - elif [ "$TARGET" == powerpc64 ] || [ "$TARGET" == powerpc64le ]; then + elif [ "$CROSS" == powerpc64 ] || [ "$CROSS" == powerpc64le ]; then KARCH=powerpc QEMU="ppc64 -M pseries -vga none" KARGS=hvc0 VMLINUX=vmlinux KCONF=PPC64,PPC_PSERIES,PPC_OF_BOOT_TRAMPOLINE,BLK_DEV_SD,SCSI_LOWLEVEL,SCSI_IBMVSCSI,ATA,NET_VENDOR_IBM,IBMVETH,HVC_CONSOLE,PPC_TRANSACTIONAL_MEM,PPC_DISABLE_WERROR,SECTION_MISMATCH_WARN_ONLY - [ "$TARGET" == powerpc64le ] && KCONF=$KCONF,CPU_LITTLE_ENDIAN - elif [ "$TARGET" = s390x ]; then + [ "$CROSS" == powerpc64le ] && KCONF=$KCONF,CPU_LITTLE_ENDIAN + elif [ "$CROSS" = s390x ]; then QEMU="s390x" KARCH=s390 VMLINUX=arch/s390/boot/bzImage KCONF=MARCH_Z900,PACK_STACK,VIRTIO_NET,VIRTIO_BLK,SCLP_TTY,SCLP_CONSOLE,SCLP_VT220_TTY,SCLP_VT220_CONSOLE,S390_GUEST - elif [ "$TARGET" == sh2eb ]; then + elif [ "$CROSS" == sh2eb ]; then BUILTIN=1 KARCH=sh VMLINUX=vmlinux KCONF=CPU_SUBTYPE_J2,CPU_BIG_ENDIAN,SH_JCORE_SOC,SMP,BINFMT_ELF_FDPIC,JCORE_EMAC,SERIAL_UARTLITE,SERIAL_UARTLITE_CONSOLE,HZ_100,CMDLINE_OVERWRITE,SPI,SPI_JCORE,MMC,PWRSEQ_SIMPLE,MMC_BLOCK,MMC_SPI,BINMT_FLAT,BINFMT_MISC,DNOTIFY,INOTIFY_USER,FUSE_FS,I2C,I2C_HELPER_AUTO,LOCALVERSION_AUTO,MTD,MTD_SPI_NOR,MTD_SST25L,MTD_OF_PARTS,POSIX_MQUEUE,SYSVIPC,UEVENT_HELPER,UIO,UIO_PDRV_GENIRQ,FLATMEM_MANUAL,MEMORY_START=0x10000000,CMDLINE=\"console=ttyUL0\ earlycon\" KCONF+=,BFP_SYSCALL,CRYPTO_DES,CRYPTO_DH,CRYPTO_ECHAINIV,CRYPTO_LZO,CRYPTO_MANAGER_DISABLE_TESTS,CRYPTO_RSA,CRYPTO_SHA1,CRYPTO_SHA3,INET_DIAG,SERIAL_8250 # TODO NET_9P,9P_FS fails to boot in 6.3, unaligned access? - elif [ "$TARGET" == sh4 ]; then + elif [ "$CROSS" == sh4 ]; then QEMU="sh4 -M r2d -serial null -serial mon:stdio" KARCH=sh KARGS="ttySC1 noiotrap" VMLINUX=arch/sh/boot/zImage KCONF=CPU_SUBTYPE_SH7751R,MMU,VSYSCALL,SH_FPU,SH_RTS7751R2D,RTS7751R2D_PLUS,SERIAL_SH_SCI,SERIAL_SH_SCI_CONSOLE,PCI,NET_VENDOR_REALTEK,8139CP,PCI,BLK_DEV_SD,ATA,ATA_SFF,ATA_BMDMA,PATA_PLATFORM,BINFMT_ELF_FDPIC,BINFMT_FLAT,MEMORY_START=0x0c000000 #see also SPI SPI_SH_SCI MFD_SM501 RTC_CLASS RTC_DRV_R9701 RTC_DRV_SH RTC_HCTOSYS - else die "Unknown \$TARGET $TARGET" + else die "Unknown \$CROSS=$CROSS" fi # Write the qemu launch script @@ -250,7 +250,7 @@ else [ -z "$BUILTIN" ] && INITRD="-initrd initramfs.cpio.gz" { echo qemu-system-"$QEMU" -m 256 '"$@"' $QEMU_MORE -nographic -no-reboot \ -kernel linux-kernel $INITRD ${DTB:+-dtb linux.dtb} \ - "-append \"panic=1 HOST=$TARGET console=$KARGS \$KARGS\"" && + "-append \"panic=1 HOST=$CROSS console=$KARGS \$KARGS\"" && echo "echo -e '\\e[?7h'" } > "$OUTPUT"/run-qemu.sh && chmod +x "$OUTPUT"/run-qemu.sh || exit 1 @@ -261,7 +261,7 @@ else cp -sfR "$LINUX" "$TEMP/linux" && pushd "$TEMP/linux" && # Write linux-miniconfig - mkdir "${OUTDOC=$OUTPUT/docs}" && + mkdir "$OUTDOC" && { echo "# make ARCH=$KARCH allnoconfig KCONFIG_ALLCONFIG=linux-miniconfig" echo -e "# make ARCH=$KARCH -j \$(nproc)\n# boot $VMLINUX\n\n" @@ -305,5 +305,5 @@ if [ -z "$BUILTIN" ]; then > "$OUTPUT"/initramfs.cpio.gz || exit 1 fi -mv "$LOG/$CROSS".{n,y} && echo "Output is in $OUTPUT" -rmdir "$TEMP" "$BUILD" 2>/dev/null || exit 0 # remove if empty, not an error +mv "$LOG".{n,y} && echo "Output is in $OUTPUT" +rmdir "$TEMP" 2>/dev/null || exit 0 # remove if empty, not an error -- 2.39.2