# Required kernel configuration (RFC 005 §2.5), checked against the FINAL .config by # check-required-config.sh: olddefconfig silently drops symbols whose dependencies are unmet # (libkrunfw lost x86_64's DRM that way, S1), so the fragment alone proves nothing. # # Format: libkrunfw's "EXACT_CONFIG_LINE|why", one per line, plus # "# CONFIG_X is not set|why" negative line: CONFIG_X must not be =y/=m/=value (absent is fine) # "release:" / "debug:" prefix the line applies to that kernel variant only # # --- positive: what the guest needs -------------------------------------------------------- CONFIG_64BIT=y|RV64 (D2) CONFIG_MMU=y|Sv39 user space (D2) CONFIG_FPU=y|RV64GC: the JDK and musl use F/D CONFIG_RISCV_ISA_C=y|RV64GC: compressed instructions CONFIG_RISCV_SBI=y|the emulator is the SBI firmware (RFC 004 §2.4): timer, IPI, RFENCE, SRST, DBCN CONFIG_RISCV_TIMER=y|SBI/Sstc timer is the only clock source (no CLINT, RFC 004 §2.1) CONFIG_SIFIVE_PLIC=y|the only interrupt controller (RFC 004 §3.5) CONFIG_OF=y|devices come from the emulator's FDT (RFC 004 §2.3) CONFIG_HZ_100=y|D9; 1.6 M instructions per tick at 16 insns/tick (RFC 004 §2.5) CONFIG_NO_HZ_IDLE=y|D9: idle dynticks only; the emulator skips idle time to the next deadline CONFIG_PREEMPT_NONE=y|fewest instructions per syscall; one hart CONFIG_VIRTIO_MMIO=y|virtio transport (D10) CONFIG_VIRTIO_BLK=y|/dev/vda EROFS root, /dev/vdb ext4 home (D10, D24) CONFIG_VIRTIO_CONSOLE=y|hvc0 and the xvm.agent port (D10, D44) CONFIG_HVC_DRIVER=y|hvc0 console CONFIG_HW_RANDOM_VIRTIO=y|virtio-rng entropy (D10, RFC 005 §2.3) CONFIG_SERIAL_EARLYCON_RISCV_SBI=y|earlycon=sbi (DBCN) for debug boots; without it nothing prints early (E5) CONFIG_EROFS_FS=y|read-only root (D11, D24) CONFIG_EXT4_FS=y|/home/student on /dev/vdb (D24) CONFIG_TMPFS=y|/tmp, /run, /dev/shm (RFC 005 §3.2) CONFIG_OVERLAY_FS=y|D9; unused in v1, the tmpfs-upper fallback of D24 CONFIG_PROC_FS=y|/proc (the JDK reads /proc/self/*) CONFIG_SYSFS=y|/sys/class/virtio-ports/*/name finds the agent port CONFIG_DEVTMPFS=y|/dev without an initramfs CONFIG_DEVTMPFS_MOUNT=y|the kernel mounts /dev on the read-only root CONFIG_UNIX98_PTYS=y|agent PTY sessions (RFC 005 §3.5) CONFIG_NET=y|sockets CONFIG_UNIX=y|the compile server's socket (RFC 005 §5.2) CONFIG_INET=y|lo; InetAddress.getLocalHost, the JDK probes socket() (E1) CONFIG_BINFMT_ELF=y|executables CONFIG_BINFMT_SCRIPT=y|#! scripts (busybox sh scripts, train.sh) CONFIG_COMPACTION=y|prepare_snapshot compacts memory (RFC 005 §6.2) CONFIG_FUTEX=y|JDK syscall group (E1) CONFIG_EPOLL=y|JDK syscall group (E1); agent event loop CONFIG_EVENTFD=y|JDK syscall group (E1) CONFIG_SIGNALFD=y|JDK syscall group (E1); agent reaps children via signalfd CONFIG_TIMERFD=y|JDK syscall group (E1) CONFIG_POSIX_TIMERS=y|JDK syscall group (E1) CONFIG_MEMBARRIER=y|JDK syscall group (E1) CONFIG_ADVISE_SYSCALLS=y|JDK syscall group (E1): madvise CONFIG_SHMEM=y|JDK syscall group (E1); tmpfs, memfd CONFIG_FILE_LOCKING=y|flock/fcntl locks CONFIG_INOTIFY_USER=y|java.nio WatchService CONFIG_MULTIUSER=y|student uid 1000 vs root (RFC 005 §3.5) CONFIG_PRINTK=y|kernel log on hvc0 CONFIG_RISCV_EFFICIENT_UNALIGNED_ACCESS=y|D64: no boot-time unaligned probe (-6 M insns, E4); the core handles misaligned RAM accesses at ~1.3 insns (E13), so the kernel uses word-sized unaligned accesses (§15) CONFIG_PANIC_TIMEOUT=-1|a panic reboots at once through SBI SRST; the host sees it (RFC 005 §2.4) CONFIG_CMDLINE_FALLBACK=y|the built-in CONFIG_CMDLINE applies only when the FDT has no bootargs release:CONFIG_CONSOLE_LOGLEVEL_QUIET=3|`quiet loglevel=3`: errors only on hvc0 debug:CONFIG_KALLSYMS=y|debug kernel: symbolic oops traces debug:CONFIG_DEBUG_BUGVERBOSE=y|debug kernel: BUG() file and line # --- negative: what must stay out --------------------------------------------------------- # CONFIG_CRYPTO_JITTERENTROPY is not set|D9: its self-test is ~150 M of 276 M boot instructions (E4) # CONFIG_CRYPTO_DRBG is not set|selects jitterentropy (RFC 005 §2.2 crypto note) # CONFIG_CRYPTO_DRBG_MENU is not set|pulled in by RNG_DEFAULT <- GENIV; selects DRBG # CONFIG_CRYPTO_FIPS is not set|needs DRBG # CONFIG_SMP is not set|one hart (D9, RFC 001 §3) # CONFIG_BLK_DEV_INITRD is not set|no initramfs; the kernel mounts EROFS from /dev/vda (RFC 005 §2.4) # CONFIG_MODULES is not set|everything built in; no modules in the image (D9) # CONFIG_PCI is not set|virtio-mmio only (D9, D10) # CONFIG_NO_HZ_FULL is not set|context tracking on every kernel entry (D9) # CONFIG_SERIAL_8250 is not set|no UART in D10/D22; its probe costs ~13 M boot insns (E4) # CONFIG_RISCV_PROBE_UNALIGNED_ACCESS is not set|~6 M boot insns (E4) # CONFIG_RISCV_SLOW_UNALIGNED_ACCESS is not set|D64 replaced it with RISCV_EFFICIENT_UNALIGNED_ACCESS (G4, RFC 005 §15) # CONFIG_RISCV_ISA_V is not set|D2: RV64GC only # CONFIG_NETFILTER is not set|D10: no network # CONFIG_IPV6 is not set|D10: no network # CONFIG_VIRTIO_NET is not set|D10: no network # CONFIG_VSOCKETS is not set|D10: no vsock # CONFIG_VIRTIO_FS is not set|D10: no virtio-fs # CONFIG_VIRTIO_BALLOON is not set|D10: no balloon # CONFIG_SCSI is not set|no such devices # CONFIG_BLK_DEV_LOOP is not set|no loop devices # CONFIG_MSDOS_PARTITION is not set|whole-disk filesystems; no partition scan of vdb (RFC 005 §3.2) # CONFIG_EFI_PARTITION is not set|whole-disk filesystems; no partition scan of vdb (RFC 005 §3.2) # CONFIG_EROFS_FS_ZIP is not set|uncompressed EROFS (RFC 005 §4.3) # CONFIG_XFS_FS is not set|unused filesystem # CONFIG_BTRFS_FS is not set|unused filesystem # CONFIG_VT is not set|no VT; console is virtio # CONFIG_INPUT is not set|no input devices # CONFIG_DRM is not set|no display # CONFIG_SOUND is not set|no sound # CONFIG_CGROUPS is not set|no containers in the guest (S1) # CONFIG_NAMESPACES is not set|no containers in the guest (S1) # CONFIG_BPF_SYSCALL is not set|unused # CONFIG_IO_URING is not set|unused # CONFIG_EFI is not set|Image entered directly (RFC 004 §2.2) # CONFIG_COMPAT is not set|no 32-bit user space # CONFIG_PARAVIRT is not set|no hypervisor # CONFIG_RELOCATABLE is not set|fixed load address, no KASLR (RFC 005 §6.3) # CONFIG_RANDOMIZE_BASE is not set|no KASLR (RFC 005 §6.3) # CONFIG_SLAB_FREELIST_RANDOM is not set|reproducible snapshots (RFC 005 §6.3) # CONFIG_SHUFFLE_PAGE_ALLOCATOR is not set|reproducible snapshots (RFC 005 §6.3) # CONFIG_RANDOMIZE_KSTACK_OFFSET is not set|reproducible snapshots (RFC 005 §6.3) # CONFIG_INIT_ON_FREE_DEFAULT_ON is not set|§6.2 zero-fills free RAM once instead # CONFIG_KEYS is not set|no keyrings, no X.509 loading (-4 M insns, E4) # CONFIG_IKHEADERS is not set|size release:# CONFIG_KALLSYMS is not set|release size (-1.38 MB, E4) release:# CONFIG_DEBUG_FS is not set|release release:# CONFIG_MAGIC_SYSRQ is not set|release