kernel: add x86_64 defconfig and arch-aware build script

Same feature set as the arm64 config (virtio-pci, virtio-console, vsock,
netfilter, cgroup2 + k3s set); the arch section swaps GICv3/PL011 for
PVH direct boot, kvmclock, and ACPI. cloud-hypervisor loads the
uncompressed ELF vmlinux via its PVH entry, so the build strips vmlinux
into Image instead of taking arch/*/boot/Image.

Co-authored-by: Hanzo Dev <[email protected]>
This commit is contained in:
2026-09-01 16:08:47 -07:00
co-authored by Hanzo Dev
parent 7f93ae353d
commit d1191359f4
2 changed files with 242 additions and 1 deletions
+227
View File
@@ -0,0 +1,227 @@
# Hanzo VM microVM kernel config — x86_64 / cloud-hypervisor
# Same feature set as vm_defconfig (arm64); arch section swapped for
# PVH direct boot, kvmclock, and ACPI CPU/device enumeration.
# All drivers built-in (no loadable modules)
# Architecture
CONFIG_64BIT=y
CONFIG_SMP=y
CONFIG_NR_CPUS=16
CONFIG_HYPERVISOR_GUEST=y
CONFIG_PARAVIRT=y
CONFIG_KVM_GUEST=y
CONFIG_PVH=y
CONFIG_ACPI=y
# No loadable modules
# CONFIG_MODULES is not set
# General
CONFIG_SYSVIPC=y
CONFIG_POSIX_MQUEUE=y
CONFIG_NO_HZ_IDLE=y
CONFIG_HIGH_RES_TIMERS=y
CONFIG_PREEMPT_VOLUNTARY=y
CONFIG_HZ_100=y
CONFIG_SYSCTL=y
CONFIG_MULTIUSER=y
CONFIG_FHANDLE=y
CONFIG_EPOLL=y
CONFIG_SIGNALFD=y
CONFIG_TIMERFD=y
CONFIG_EVENTFD=y
CONFIG_AIO=y
CONFIG_IO_URING=y
# Size optimization
CONFIG_CC_OPTIMIZE_FOR_SIZE=y
# CONFIG_DEBUG_KERNEL is not set
# CONFIG_DEBUG_INFO is not set
# CONFIG_FTRACE is not set
# CONFIG_KPROBES is not set
# CONFIG_PROFILING is not set
# PCI (cloud-hypervisor uses PCI transport)
CONFIG_PCI=y
CONFIG_PCI_MSI=y
# VirtIO core
CONFIG_VIRTIO=y
CONFIG_VIRTIO_PCI=y
CONFIG_VIRTIO_MENU=y
# VirtIO devices (all built-in)
CONFIG_VIRTIO_BLK=y
CONFIG_VIRTIO_CONSOLE=y
CONFIG_VIRTIO_NET=y
CONFIG_VIRTIO_BALLOON=y
CONFIG_VIRTIO_MMIO=y
CONFIG_HW_RANDOM=y
CONFIG_HW_RANDOM_VIRTIO=y
CONFIG_VIRTIO_FS=y
CONFIG_VIRTIO_INPUT=y
# vsock (all built-in)
CONFIG_VSOCKETS=y
CONFIG_VIRTIO_VSOCKETS=y
CONFIG_VIRTIO_VSOCKETS_COMMON=y
# Block layer
CONFIG_BLOCK=y
CONFIG_BLK_DEV=y
CONFIG_BLK_DEV_INITRD=y
# Filesystems
CONFIG_EXT4_FS=y
CONFIG_EXT4_FS_POSIX_ACL=y
CONFIG_EXT4_USE_FOR_EXT2=y
CONFIG_OVERLAY_FS=y
CONFIG_FUSE_FS=y
CONFIG_TMPFS=y
CONFIG_TMPFS_POSIX_ACL=y
CONFIG_PROC_FS=y
CONFIG_PROC_SYSCTL=y
CONFIG_SYSFS=y
CONFIG_DEVTMPFS=y
CONFIG_DEVTMPFS_MOUNT=y
CONFIG_DEVPTS_FS=y
CONFIG_CONFIGFS_FS=y
# Networking
CONFIG_NET=y
CONFIG_NETDEVICES=y
CONFIG_LOOPBACK=y
CONFIG_PACKET=y
CONFIG_UNIX=y
CONFIG_INET=y
CONFIG_IP_MULTICAST=y
CONFIG_IP_ADVANCED_ROUTER=y
CONFIG_IP_MULTIPLE_TABLES=y
CONFIG_IP_ROUTE_MULTIPATH=y
CONFIG_IPV6=y
CONFIG_BRIDGE=y
# Netfilter (for iptables REDIRECT in proxy mode)
CONFIG_NETFILTER=y
CONFIG_NETFILTER_ADVANCED=y
CONFIG_NETFILTER_XTABLES=y
CONFIG_NETFILTER_XT_MATCH_CONNTRACK=y
CONFIG_NETFILTER_XT_MATCH_STATE=y
CONFIG_NETFILTER_XT_TARGET_REDIRECT=y
CONFIG_NF_CONNTRACK=y
CONFIG_NF_NAT=y
CONFIG_NF_TABLES=y
CONFIG_NF_TABLES_INET=y
CONFIG_NFT_NAT=y
CONFIG_NFT_REDIR=y
CONFIG_NFT_CT=y
CONFIG_IP_NF_IPTABLES=y
CONFIG_IP_NF_FILTER=y
CONFIG_IP_NF_NAT=y
CONFIG_IP_NF_TARGET_REDIRECT=y
CONFIG_IP_NF_TARGET_MASQUERADE=y
# CRC32 (required by ext4)
CONFIG_CRC32=y
CONFIG_LIBCRC32C=y
CONFIG_CRYPTO_CRC32C=y
# TTY / Console
CONFIG_TTY=y
CONFIG_VT=y
CONFIG_HVC_DRIVER=y
CONFIG_PRINTK=y
# PTY support (for shell/TTY exec)
CONFIG_UNIX98_PTYS=y
# Cgroups (future container features)
CONFIG_CGROUPS=y
CONFIG_CGROUP_CPUACCT=y
CONFIG_CGROUP_DEVICE=y
CONFIG_CGROUP_FREEZER=y
CONFIG_CGROUP_PIDS=y
CONFIG_CGROUP_SCHED=y
CONFIG_MEMCG=y
# Namespaces
CONFIG_NAMESPACES=y
CONFIG_UTS_NS=y
CONFIG_IPC_NS=y
CONFIG_PID_NS=y
CONFIG_NET_NS=y
CONFIG_USER_NS=y
# inotify (used by many tools)
CONFIG_INOTIFY_USER=y
# Disable unnecessary subsystems
# CONFIG_SOUND is not set
# CONFIG_USB_SUPPORT is not set
# CONFIG_WLAN is not set
# CONFIG_WIRELESS is not set
# CONFIG_INPUT_KEYBOARD is not set
# CONFIG_INPUT_MOUSE is not set
# CONFIG_INPUT_TOUCHSCREEN is not set
# CONFIG_SCSI is not set
# CONFIG_ATA is not set
# CONFIG_DRM is not set
# CONFIG_FB is not set
# CONFIG_VGA_CONSOLE is not set
# CONFIG_SELINUX is not set
# CONFIG_SECURITY is not set
# CONFIG_AUDIT is not set
# CONFIG_SWAP is not set
# CONFIG_NFS_FS is not set
# CONFIG_CIFS is not set
# CONFIG_BTRFS_FS is not set
# CONFIG_XFS_FS is not set
# CONFIG_BLK_DEV_LOOP is not set
# CONFIG_BLK_DEV_RAM is not set
# CONFIG_PCMCIA is not set
# CONFIG_HWMON is not set
# CONFIG_THERMAL is not set
# CONFIG_WATCHDOG is not set
# CONFIG_MEDIA_SUPPORT is not set
# CONFIG_POWER_SUPPLY is not set
# CONFIG_MD is not set
# Cgroup v2 controllers k3s requires (cpuset is fatal when missing)
CONFIG_CPUSETS=y
CONFIG_PROC_PID_CPUSET=y
CONFIG_FAIR_GROUP_SCHED=y
CONFIG_CFS_BANDWIDTH=y
CONFIG_BLK_CGROUP=y
CONFIG_CGROUP_BPF=y
CONFIG_BPF=y
CONFIG_BPF_SYSCALL=y
# Container runtime (runc: session keyring, seccomp, cgroup2 device bpf)
CONFIG_KEYS=y
CONFIG_SECCOMP=y
CONFIG_SECCOMP_FILTER=y
# Pod networking: flannel vxlan, CNI bridge/veth, kube-proxy iptables
CONFIG_VETH=y
CONFIG_VXLAN=y
CONFIG_BRIDGE_NETFILTER=y
CONFIG_NETFILTER_XT_MARK=y
CONFIG_NETFILTER_XT_NAT=y
CONFIG_NETFILTER_XT_MATCH_ADDRTYPE=y
CONFIG_NETFILTER_XT_MATCH_COMMENT=y
CONFIG_NETFILTER_XT_MATCH_MULTIPORT=y
CONFIG_NETFILTER_XT_MATCH_STATISTIC=y
CONFIG_NETFILTER_XT_MATCH_PHYSDEV=y
CONFIG_NETFILTER_XT_TARGET_MASQUERADE=y
CONFIG_IP_NF_MANGLE=y
CONFIG_IP_NF_RAW=y
CONFIG_IP_NF_TARGET_REJECT=y
CONFIG_IP6_NF_IPTABLES=y
CONFIG_IP6_NF_FILTER=y
CONFIG_IP6_NF_MANGLE=y
CONFIG_IP6_NF_NAT=y
CONFIG_IP6_NF_TARGET_MASQUERADE=y
CONFIG_IP6_NF_TARGET_REJECT=y
CONFIG_NFT_COMPAT=y
CONFIG_NFT_MASQ=y
CONFIG_NFT_REJECT=y
+15 -1
View File
@@ -28,7 +28,21 @@ if [ ! -d "${BUILD_DIR}/linux-${KERNEL_VERSION}" ]; then
rm -f "${BUILD_DIR}/linux-${KERNEL_VERSION}.tar.xz"
fi
if [ "$(uname -m)" = "aarch64" ] && [ "$(uname -s)" = "Linux" ]; then
if [ "$(uname -m)" = "x86_64" ] && [ "$(uname -s)" = "Linux" ]; then
echo " Native x86_64 Linux detected, building without Docker"
cd "${BUILD_DIR}/linux-${KERNEL_VERSION}"
cp "${REPO_DIR}/kernel/vm_defconfig_x86" arch/x86/configs/vm_defconfig
make ARCH=x86_64 vm_defconfig
echo " Compiling kernel (this takes a few minutes)..."
make ARCH=x86_64 -j"$(nproc)" vmlinux 2>&1 | tail -5
# cloud-hypervisor direct-boots the uncompressed ELF via its PVH entry.
strip -o "${DATA_DIR}/Image" vmlinux
echo " Kernel built: $(du -h "${DATA_DIR}/Image" | cut -f1)"
elif [ "$(uname -m)" = "aarch64" ] && [ "$(uname -s)" = "Linux" ]; then
echo " Native aarch64 Linux detected, building without Docker"
cd "${BUILD_DIR}/linux-${KERNEL_VERSION}"