Kconfig配置项详解-万字长文

在这个 Kconfig 文件中,定义了 ARM64 架构相关的配置选项。每一行都有特定的作用,用于控制内核的编译和功能。下面是对每个字段的详细解释和注释:

# SPDX-License-Identifier: GPL-2.0-only
  • 这是一个许可证标识符,指明这个文件遵循 GPL-2.0-only 许可证。
config ARM64
  • 定义一个名为 ARM64 的配置项。
	def_bool y
  • 设置 ARM64 的默认值为 y,意味着这个选项默认是开启的。
	select ACPI_APMT if ACPI
  • 如果 ACPI 配置项被启用,则自动选择 ACPI_APMT
	select ACPI_CCA_REQUIRED if ACPI
	select ACPI_GENERIC_GSI if ACPI
	select ACPI_GTDT if ACPI
	select ACPI_IORT if ACPI
	select ACPI_REDUCED_HARDWARE_ONLY if ACPI
  • 这些行表示如果 ACPI 被启用,将自动选择列出的各个 ACPI 相关的配置项。
	select ACPI_MCFG if (ACPI && PCI)
  • 如果 ACPIPCI 都被启用,则自动选择 ACPI_MCFG
	select ACPI_SPCR_TABLE if ACPI
	select ACPI_PPTT if ACPI
  • 如果 ACPI 被启用,则自动选择 ACPI_SPCR_TABLEACPI_PPTT
	select ARCH_HAS_DEBUG_WX
	select ARCH_BINFMT_ELF_EXTRA_PHDRS
	select ARCH_BINFMT_ELF_STATE
  • 自动选择与调试和 ELF 格式相关的配置项。
	select ARCH_CORRECT_STACKTRACE_ON_KRETPROBE
  • 自动选择 ARCH_CORRECT_STACKTRACE_ON_KRETPROBE,用于在使用 kretprobes 时修正栈跟踪。
	select ARCH_ENABLE_HUGEPAGE_MIGRATION if HUGETLB_PAGE && MIGRATION
  • 如果启用了大页支持 (HUGETLB_PAGE) 和内存迁移 (MIGRATION),则自动选择支持大页迁移的配置项。
	select ARCH_ENABLE_MEMORY_HOTPLUG
	select ARCH_ENABLE_MEMORY_HOTREMOVE
  • 自动选择支持内存热插拔和热移除的配置项。
	select ARCH_ENABLE_SPLIT_PMD_PTLOCK if PGTABLE_LEVELS > 2
  • 如果页表级数 (PGTABLE_LEVELS) 大于 2,则自动选择 ARCH_ENABLE_SPLIT_PMD_PTLOCK
	select ARCH_ENABLE_THP_MIGRATION if TRANSPARENT_HUGEPAGE
  • 如果启用了透明大页 (TRANSPARENT_HUGEPAGE),则自动选择支持透明大页迁移的配置项。
	select ARCH_HAS_CACHE_LINE_SIZE
	select ARCH_HAS_CURRENT_STACK_POINTER
	select ARCH_HAS_DEBUG_VIRTUAL
	select ARCH_HAS_DEBUG_VM_PGTABLE
  • 自动选择与架构特定功能相关的配置项,如缓存行大小、当前栈指针、虚拟内存调试等。
	select ARCH_HAS_DMA_PREP_COHERENT
	select ARCH_HAS_ACPI_TABLE_UPGRADE if ACPI
  • 自动选择与 DMA 和 ACPI 表升级相关的配置项。
	select ARCH_HAS_FAST_MULTIPLIER
	select ARCH_HAS_FORTIFY_SOURCE
	select ARCH_HAS_GCOV_PROFILE_ALL
  • 自动选择与性能优化和安全相关的配置项,如快速乘法器、源代码加固和 GCOV 分析。
	select ARCH_HAS_GIGANTIC_PAGE
	select ARCH_HAS_KCOV
  • 自动选择支持巨型页和内核代码覆盖 (KCOV) 的配置项。
	select ARCH_HAS_KERNEL_FPU_SUPPORT if KERNEL_MODE_NEON
  • 如果启用了内核模式 NEON 支持,则自动选择内核浮点单元 (FPU) 支持。
	select ARCH_HAS_KEEPINITRD
	select ARCH_HAS_MEMBARRIER_SYNC_CORE
  • 自动选择支持保留 initrd 和内存屏障同步核心的配置项。
	select ARCH_HAS_NMI_SAFE_THIS_CPU_OPS
	select ARCH_HAS_NON_OVERLAPPING_ADDRESS_SPACE
  • 自动选择支持 NMI 安全的 CPU 操作和非重叠地址空间的配置项。
	select ARCH_HAS_PTE_DEVMAP
	select ARCH_HAS_PTE_SPECIAL
  • 自动选择支持 PTE 设备映射和特殊 PTE 的配置项。
	select ARCH_HAS_HW_PTE_YOUNG
	select ARCH_HAS_SETUP_DMA_OPS
  • 自动选择支持硬件 PTE “young” 位和设置 DMA 操作的配置项。
	select ARCH_HAS_SET_DIRECT_MAP
	select ARCH_HAS_SET_MEMORY
  • 自动选择支持设置直接映射和设置内存属性的配置项。
	select ARCH_STACKWALK
	select ARCH_HAS_STRICT_KERNEL_RWX
	select ARCH_HAS_STRICT_MODULE_RWX
  • 自动选择支持栈遍历和严格的内核及模块读写执行权限的配置项。
	select ARCH_HAS_SYNC_DMA_FOR_DEVICE
	select ARCH_HAS_SYNC_DMA_FOR_CPU
  • 自动选择支持同步 DMA 操作的配置项。
	select ARCH_HAS_SYSCALL_WRAPPER
	select ARCH_HAS_TICK_BROADCAST if GENERIC_CLOCKEVENTS_BROADCAST
  • 自动选择支持系统调用包装器和时钟事件广播的配置项。
	select ARCH_HAS_ZONE_DMA_SET if EXPERT
  • 如果启用了专家模式 (EXPERT),则自动选择设置 DMA 区域的配置项。
	select ARCH_HAVE_ELF_PROT
	select ARCH_HAVE_NMI_SAFE_CMPXCHG
	select ARCH_HAVE_TRACE_MMIO_ACCESS
  • 自动选择支持 ELF 保护、NMI 安全的 CMPXCHG 操作和追踪 MMIO 访问的配置项。
	select ARCH_INLINE_READ_LOCK if !PREEMPTION
	select ARCH_INLINE_READ_LOCK_BH if !PREEMPTION
	select ARCH_INLINE_READ_LOCK_IRQ if !PREEMPTION
	select ARCH_INLINE_READ_LOCK_IRQSAVE if !PREEMPTION
  • 如果没有启用抢占 (PREEMPTION),则自动选择支持内联读锁的配置项。
	select ARCH_INLINE_READ_UNLOCK if !PREEMPTION
	select ARCH_INLINE_READ_UNLOCK_BH if !PREEMPTION
	select ARCH_INLINE_READ_UNLOCK_IRQ if !PREEMPTION
	select ARCH_INLINE_READ_UNLOCK_IRQRESTORE if !PREEMPTION
  • 如果没有启用抢占,同样自动选择支持内联读解锁的配置项。
	select ARCH_INLINE_WRITE_LOCK if !PREEMPTION
	select ARCH_INLINE_WRITE_LOCK_BH if !PREEMPTION
	select ARCH_INLINE_WRITE_LOCK_IRQ if !PREEMPTION
	select ARCH_INLINE_WRITE_LOCK_IRQSAVE if !PREEMPTION
  • 如果没有启用抢占,自动选择支持内联写锁的配置项。
	select ARCH_INLINE_WRITE_UNLOCK if !PREEMPTION
	select ARCH_INLINE_WRITE_UNLOCK_BH if !PREEMPTION
	select ARCH_INLINE_WRITE_UNLOCK_IRQ if !PREEMPTION
	select ARCH_INLINE_WRITE_UNLOCK_IRQRESTORE if !PREEMPTION
  • 如果没有启用抢占,自动选择支持内联写解锁的配置项。
	select ARCH_INLINE_SPIN_TRYLOCK if !PREEMPTION
	select ARCH_INLINE_SPIN_TRYLOCK_BH if !PREEMPTION
	select ARCH_INLINE_SPIN_LOCK if !PREEMPTION
	select ARCH_INLINE_SPIN_LOCK_BH if !PREEMPTION
	select ARCH_INLINE_SPIN_LOCK_IRQ if !PREEMPTION
	select ARCH_INLINE_SPIN_LOCK_IRQSAVE if !PREEMPTION
  • 如果没有启用抢占,自动选择支持内联自旋锁的配置项。
	select ARCH_INLINE_SPIN_UNLOCK if !PREEMPTION
	select ARCH_INLINE_SPIN_UNLOCK_BH if !PREEMPTION
	select ARCH_INLINE_SPIN_UNLOCK_IRQ if !PREEMPTION
	select ARCH_INLINE_SPIN_UNLOCK_IRQRESTORE if !PREEMPTION
  • 如果没有启用抢占,自动选择支持内联自旋解锁的配置项。
	select ARCH_KEEP_MEMBLOCK
	select ARCH_MHP_MEMMAP_ON_MEMORY_ENABLE
  • 自动选择支持保留内存块和在内存启用时映射大页的配置项。
	select ARCH_USE_CMPXCHG_LOCKREF
	select ARCH_USE_GNU_PROPERTY
	select ARCH_USE_MEMTEST
  • 自动选择支持 CMPXCHG 锁引用、GNU 属性和内存测试的配置项。
	select ARCH_USE_QUEUED_RWLOCKS
	select ARCH_USE_QUEUED_SPINLOCKS
  • 自动选择支持队列读写锁和队列自旋锁的配置项。
	select ARCH_USE_SYM_ANNOTATIONS
	select ARCH_SUPPORTS_DEBUG_PAGEALLOC
	select ARCH_SUPPORTS_HUGETLBFS
  • 自动选择支持符号注解、调试页分配和大页文件系统的配置项。
	select ARCH_SUPPORTS_MEMORY_FAILURE
	select ARCH_SUPPORTS_SHADOW_CALL_STACK if CC_HAVE_SHADOW_CALL_STACK
  • 如果编译器支持影子调用栈 (CC_HAVE_SHADOW_CALL_STACK),则自动选择支持内存故障和影子调用栈的配置项。
	select ARCH_SUPPORTS_LTO_CLANG if CPU_LITTLE_ENDIAN
	select ARCH_SUPPORTS_LTO_CLANG_THIN
	select ARCH_SUPPORTS_CFI_CLANG
  • 如果 CPU 是小端模式 (CPU_LITTLE_ENDIAN),则自动选择支持 Clang 的链接时优化 (LTO) 和控制流完整性 (CFI) 的配置项。
	select ARCH_SUPPORTS_ATOMIC_RMW
	select ARCH_SUPPORTS_INT128 if CC_HAS_INT128
  • 如果编译器支持 128 位整数 (CC_HAS_INT128),则自动选择支持原子读-修改-写操作和 128 位整数的配置项。
	select ARCH_SUPPORTS_NUMA_BALANCING
	select ARCH_SUPPORTS_PAGE_TABLE_CHECK
	select ARCH_SUPPORTS_PER_VMA_LOCK
  • 自动选择支持 NUMA 平衡、页表检查和每个 VMA 锁的配置项。
	select ARCH_WANT_BATCHED_UNMAP_TLB_FLUSH
	select ARCH_WANT_COMPAT_IPC_PARSE_VERSION if COMPAT
  • 如果启用了兼容模式 (COMPAT),则自动选择支持批量 TLB 刷新和兼容 IPC 解析版本的配置项。
	select ARCH_WANT_DEFAULT_BPF_JIT
	select ARCH_WANT_DEFAULT_TOPDOWN_MMAP_LAYOUT
  • 自动选择支持默认 BPF JIT 和默认自顶向下的内存映射布局的配置项。
	select ARCH_WANT_FRAME_POINTERS
	select ARCH_WANT_HUGE_PMD_SHARE if ARM64_4K_PAGES || (ARM64_16K_PAGES && !ARM64_VA_BITS_36)
  • 如果启用了 4K 或 16K 页,并且虚拟地址位数不是 36 位,则自动选择支持帧指针和大页 PMD 共享的配置项。
	select ARCH_WANT_LD_ORPHAN_WARN
	select ARCH_WANTS_EXECMEM_LATE if EXECMEM
  • 如果启用了执行内存 (EXECMEM),则自动选择支持链接器孤立警告和延迟执行内存配置的选项。
	select ARCH_WANTS_NO_INSTR
	select ARCH_WANTS_THP_SWAP if ARM64_4K_PAGES
  • 如果启用了 4K 页,则自动选择支持透明大页交换的配置项。
	select ARCH_HAS_UBSAN
	select ARM_AMBA
	select ARM_ARCH_TIMER
  • 自动选择支持未定义行为监测 (UBSAN)、AMBA 总线和 ARM 架构定时器的配置项。
	select ARM_GIC
	select AUDIT_ARCH_COMPAT_GENERIC
  • 自动选择支持通用中断控制器 (GIC) 和通用架构兼容审计的配置项。
	select ARM_GIC_V2M if PCI
	select ARM_GIC_V3
	select ARM_GIC_V3_ITS if PCI
  • 如果启用了 PCI,则自动选择支持 GICv2m 和 GICv3 ITS 的配置项。
	select ARM_PSCI_FW
	select BUILDTIME_TABLE_SORT
  • 自动选择支持 PSCI 固件接口和构建时表排序的配置项。
	select CLONE_BACKWARDS
	select COMMON_CLK
  • 自动选择支持向后克隆和通用时钟框架的配置项。
	select CPU_PM if (SUSPEND || CPU_IDLE)
  • 如果启用了挂起或 CPU 空闲,则自动选择 CPU 电源管理的配置项。
	select CPUMASK_OFFSTACK if NR_CPUS > 256
  • 如果 CPU 数量超过 256,则自动选择支持堆栈外 CPU 掩码的配置项。
	select CRC32
	select DCACHE_WORD_ACCESS
  • 自动选择支持 CRC32 计算和字访问数据缓存的配置项。
	select DYNAMIC_FTRACE if FUNCTION_TRACER
  • 如果启用了函数跟踪器,则自动选择动态 Ftrace 的配置项。
	select DMA_BOUNCE_UNALIGNED_KMALLOC
	select DMA_DIRECT_REMAP
  • 自动选择支持 DMA 弹跳缓冲区和直接 DMA 重映射的配置项。
	select EDAC_SUPPORT
	select FRAME_POINTER
  • 自动选择支持错误检测和校正 (EDAC) 和帧指针的配置项。
	select FUNCTION_ALIGNMENT_4B
	select FUNCTION_ALIGNMENT_8B if DYNAMIC_FTRACE_WITH_CALL_OPS
  • 如果启用了带调用操作的动态 Ftrace,则自动选择支持 4 字节和 8 字节函数对齐的配置项。
	select GENERIC_ALLOCATOR
	select GENERIC_ARCH_TOPOLOGY
  • 自动选择支持通用分配器和通用架构拓扑的配置项。
	select GENERIC_CLOCKEVENTS_BROADCAST
	select GENERIC_CPU_AUTOPROBE
  • 自动选择支持通用时钟事件广播和通用 CPU 自动探测的配置项。
	select GENERIC_CPU_DEVICES
	select GENERIC_CPU_VULNERABILITIES
  • 自动选择支持通用 CPU 设备和通用 CPU 漏洞处理的配置项。
	select GENERIC_EARLY_IOREMAP
	select GENERIC_IDLE_POLL_SETUP
  • 自动选择支持通用早期 IO 重映射和通用空闲轮询设置的配置项。
	select GENERIC_IOREMAP
	select GENERIC_IRQ_IPI
  • 自动选择支持通用 IO 重映射和通用中断处理器间中断 (IPI) 的配置项。
	select GENERIC_IRQ_PROBE
	select GENERIC_IRQ_SHOW
  • 自动选择支持通用 IRQ 探测和显示的配置项。
	select GENERIC_IRQ_SHOW_LEVEL
	select GENERIC_LIB_DEVMEM_IS_ALLOWED
  • 自动选择支持显示 IRQ 级别和允许通用设备内存库的配置项。
	select GENERIC_PCI_IOMAP
	select GENERIC_PTDUMP
  • 自动选择支持通用 PCI IO 映射和通用页表转储的配置项。
	select GENERIC_SCHED_CLOCK
	select GENERIC_SMP_IDLE_THREAD
  • 自动选择支持通用调度时钟和通用 SMP 空闲线程的配置项。
	select GENERIC_TIME_VSYSCALL
	select GENERIC_GETTIMEOFDAY
  • 自动选择支持通用虚拟系统调用时间和通用获取当前时间的配置项。
	select GENERIC_VDSO_TIME_NS
	select HARDIRQS_SW_RESEND
  • 自动选择支持通用 VDSO 纳秒时间和硬中断软件重发的配置项。
	select HAS_IOPORT
	select HAVE_MOVE_PMD
  • 自动选择支持 IO 端口和移动 PMD 的配置项。
	select HAVE_MOVE_PUD
	select HAVE_PCI
  • 自动选择支持移动 PUD 和 PCI 的配置项。
	select HAVE_ACPI_APEI if (ACPI && EFI)
  • 如果启用了 ACPI 和 EFI,则自动选择支持 ACPI 平台错误接口 (APEI) 的配置项。
	select HAVE_ALIGNED_STRUCT_PAGE
	select HAVE_ARCH_AUDITSYSCALL
  • 自动选择支持对齐的结构页
UDITSYSCALL
  • 自动选择支持对齐的结构页和架构级别的系统调用审计。
	select HAVE_ARCH_JUMP_LABEL
	select HAVE_ARCH_KGDB
  • 自动选择支持架构特定的跳转标签和内核调试器 (KGDB)。
	select HAVE_ARCH_PREL32_RELOCATIONS
	select HAVE_ARCH_SECCOMP_FILTER
  • 自动选择支持 32 位相对位置重定位和架构特定的 Seccomp 过滤。
	select HAVE_ARCH_TRACEHOOK
	select HAVE_ARCH_TRANSPARENT_HUGEPAGE
  • 自动选择支持架构级的跟踪钩子和透明大页。
	select HAVE_ARCH_VMAP_STACK
	select HAVE_ARCH_WITHIN_STACK_FRAMES
  • 自动选择支持虚拟内存映射的栈和架构级的栈帧内检查。
	select HAVE_AS_HAS_PAC
	select HAVE_ASM_MODVERSIONS
  • 自动选择支持指针认证 (PAC) 和汇编模块版本控制。
	select HAVE_BPF_JIT
	select HAVE_CC_STACKPROTECTOR
  • 自动选择支持 BPF JIT 编译器和编译器支持的栈保护。
	select HAVE_CMPXCHG_DOUBLE
	select HAVE_CMPXCHG_LOCAL
  • 自动选择支持双字比较和交换操作以及本地比较和交换操作。
	select HAVE_CONTEXT_TRACKING
	select HAVE_COPY_THREAD_TLS
  • 自动选择支持上下文跟踪和具有 TLS 支持的线程复制功能。
	select HAVE_CSUM_DBVAL
	select HAVE_DEBUG_BUGVERBOSE
  • 自动选择支持校验和双字值和详细的 bug 报告调试。
	select HAVE_DEBUG_KMEMLEAK
	select HAVE_DMA_CONTIGUOUS
  • 自动选择支持内存泄漏调试和连续 DMA 内存分配。
	select HAVE_DMA_DECLARE_COHERENT
	select HAVE_DYNAMIC_FTRACE
  • 自动选择支持声明一致性 DMA 内存和动态 Ftrace 功能。
	select HAVE_EBPF_JIT
	select HAVE_EFFICIENT_UNALIGNED_ACCESS
  • 自动选择支持 eBPF JIT 编译器和高效的非对齐访问。
	select HAVE_ENTRY_STACK
	select HAVE_EXIT_THREAD
  • 自动选择支持入口栈和线程退出处理。
	select HAVE_FENTRY
	select HAVE_FTRACE_MCOUNT_RECORD
  • 自动选择支持 fentry 跟踪和 ftrace 的 mcount 记录。
	select HAVE_FUNCTION_GRAPH_TRACER
	select HAVE_FUNCTION_TRACER
  • 自动选择支持函数图跟踪器和函数跟踪器。
	select HAVE_GCC_PLUGINS
	select HAVE_GENERIC_DMA_COHERENT
  • 自动选择支持 GCC 插件和通用一致性 DMA 操作。
	select HAVE_HARDLOCKUP_DETECTOR_PERF if PERF_EVENTS && HW_PERF_EVENTS
  • 如果启用了性能事件 (PERF_EVENTS) 和硬件性能事件 (HW_PERF_EVENTS),则自动选择硬件锁死检测器。
	select HAVE_HW_BREAKPOINT
	select HAVE_IOREMAP_PROT
  • 自动选择支持硬件断点和带保护的 IO 重映射。
	select HAVE_IRQ_TIME_ACCOUNTING
	select HAVE_MEMBLOCK
  • 自动选择支持 IRQ 时间核算和内存块管理。
	select HAVE_MEMBLOCK_NODE_MAP
	select HAVE_MEMORY_PRESENT
  • 自动选择支持内存块节点映射和内存存在检查。
	select HAVE_MOD_ARCH_SPECIFIC
	select HAVE_PERF_EVENTS
  • 自动选择支持模块架构特定数据和性能事件。
	select HAVE_PERF_REGS
	select HAVE_PERF_USER_STACK_DUMP
  • 自动选择支持性能寄存器和用户栈转储。
	select HAVE_REGS_AND_STACK_ACCESS_API
	select HAVE_RSEQ
  • 自动选择支持寄存器和栈访问 API 以及重试序列 (RSEQ)。
	select HAVE_STACKPROTECTOR
	select HAVE_SYSCALL_TRACEPOINTS
  • 自动选择支持栈保护和系统调用跟踪点。
	select HAVE_VIRT_CPU_ACCOUNTING_GEN
	help
	  ARM 64-bit (AArch64) Linux support.
  • 自动选择支持通用虚拟 CPU 计账。
  • help 字段提供了对 ARM64 配置项的描述,帮助用户理解其功能和用途。
  • 20
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值