|
| 1 | +# PenguinLab ARM64 QEMU virt 学习配置 |
| 2 | +# ───────────────────────────────────── |
| 3 | +# 基于 allnoconfig,只开启内核学习所需的最小功能集 |
| 4 | +# |
| 5 | +# 设计原则: |
| 6 | +# - 能在 QEMU virt 机器上启动进入 BusyBox shell |
| 7 | +# - 支持内核模块加载和卸载 |
| 8 | +# - 支持 GDB 远程调试 |
| 9 | +# - 不包含任何真实 SoC/物理硬件驱动 |
| 10 | +# |
| 11 | +# 使用方法: |
| 12 | +# cd third_party/linux |
| 13 | +# make O=../../out/build_latest_arm64 allnoconfig |
| 14 | +# scripts/kconfig/merge_config.sh -m O=../../out/build_latest_arm64/.config ../../configs/arm64-qemu-virt-learn.config |
| 15 | +# make O=../../out/build_latest_arm64 olddefconfig |
| 16 | +# make O=../../out/build_latest_arm64 -j$(nproc) Image |
| 17 | +# |
| 18 | +# 或者用项目脚本(需先 config 再 build): |
| 19 | +# cd third_party/linux |
| 20 | +# make O=../../out/build_latest_arm64 allnoconfig |
| 21 | +# scripts/kconfig/merge_config.sh -m ../../out/build_latest_arm64/.config ../../configs/arm64-qemu-virt-learn.config |
| 22 | +# cd ../.. |
| 23 | +# ARCH=aarch64 ./scripts/linux-action-scripts.sh build |
| 24 | + |
| 25 | +# === 平台基础 === |
| 26 | +CONFIG_ARM64=y |
| 27 | +CONFIG_64BIT=y |
| 28 | +CONFIG_SMP=y |
| 29 | +CONFIG_NR_CPUS=2 |
| 30 | + |
| 31 | +# === 串口控制台 (QEMU virt 的 PL011 UART) === |
| 32 | +CONFIG_TTY=y |
| 33 | +CONFIG_VT=y |
| 34 | +CONFIG_VT_CONSOLE=y |
| 35 | +CONFIG_SERIAL_AMBA_PL011=y |
| 36 | +CONFIG_SERIAL_AMBA_PL011_CONSOLE=y |
| 37 | +CONFIG_CONSOLE_TRANSLATIONS=y |
| 38 | + |
| 39 | +# === initramfs (加载 BusyBox rootfs) === |
| 40 | +CONFIG_BLK_DEV_INITRD=y |
| 41 | +CONFIG_RD_GZIP=y |
| 42 | + |
| 43 | +# === 基础文件系统 === |
| 44 | +# devtmpfs: 内核自动填充 /dev 设备节点,BusyBox 的 mknod 才能工作 |
| 45 | +CONFIG_DEVTMPFS=y |
| 46 | +CONFIG_DEVTMPFS_MOUNT=y |
| 47 | +# procfs: ps、top、cat /proc/* 等都需要 |
| 48 | +CONFIG_PROC_FS=y |
| 49 | +# sysfs: ls /sys/*、设备模型浏览 |
| 50 | +CONFIG_SYSFS=y |
| 51 | +# tmpfs: BusyBox init 脚本用 mount -t tmpfs 挂载 /dev |
| 52 | +CONFIG_TMPFS=y |
| 53 | + |
| 54 | +# === 内核模块 === |
| 55 | +CONFIG_MODULES=y |
| 56 | +CONFIG_MODULE_UNLOAD=y |
| 57 | +CONFIG_MODULE_FORCE_UNLOAD=y |
| 58 | + |
| 59 | +# === 调试支持 (GDB + 学习必备) === |
| 60 | +# debugfs: 很多内核调试接口挂载在这里 |
| 61 | +CONFIG_DEBUG_FS=y |
| 62 | +# 调试信息:GDB 断点、变量查看、堆栈回溯都需要 |
| 63 | +CONFIG_DEBUG_INFO=y |
| 64 | +# GDB python 辅助脚本:lx-symbols、lx-ps 等便捷命令 |
| 65 | +CONFIG_GDB_SCRIPTS=y |
| 66 | +# printk:内核日志输出,没有它等于瞎了 |
| 67 | +CONFIG_PRINTK=y |
| 68 | +# BUG() 宏:内核断言失败时产生 oops |
| 69 | +CONFIG_BUG=y |
| 70 | +# kallsyms:/proc/kallsyms 里能看到所有内核符号地址 |
| 71 | +CONFIG_KALLSYMS=y |
| 72 | +CONFIG_KALLSYMS_ALL=y |
| 73 | + |
| 74 | +# === VirtIO (QEMU virt 机器的核心设备总线) === |
| 75 | +CONFIG_VIRTIO=y |
| 76 | +CONFIG_VIRTIO_MMIO=y |
| 77 | + |
| 78 | +# === BusyBox 运行所需的二进制格式 === |
| 79 | +# ELF:BusyBox 本体是 ELF 可执行文件 |
| 80 | +CONFIG_BINFMT_ELF=y |
| 81 | +# script:/init 是 #!/bin/sh 开头的脚本 |
| 82 | +CONFIG_BINFMT_SCRIPT=y |
| 83 | + |
| 84 | +# === POSIX 接口 (BusyBox shell 和基本命令需要) === |
| 85 | +CONFIG_MULTIUSER=y |
| 86 | +CONFIG_SYSVIPC=y |
| 87 | +CONFIG_FUTEX=y |
| 88 | +CONFIG_EPOLL=y |
| 89 | +CONFIG_SIGNALFD=y |
| 90 | +CONFIG_TIMERFD=y |
| 91 | +CONFIG_EVENTFD=y |
| 92 | +CONFIG_SHMEM=y |
| 93 | + |
| 94 | +# === 高精度定时器 (让 sleep 等命令精度正常) === |
| 95 | +CONFIG_HIGH_RES_TIMERS=y |
| 96 | +CONFIG_NO_HZ_IDLE=y |
0 commit comments