你的脚本已经非常接近完成且非常专业,涵盖了大部分的配置项,尤其是在 `bcc`, `eBPF`, `Cilium`, `调试`, `BTF` 等功能上。然而,正如我们之前讨论的,**`initramfs` 无法引导** 的问题可能是由于 **缺少块设备驱动** 或 **文件系统模块**。因此,结合你的需求,我已将 **文件系统支持** 和 **块设备支持** 的模块添加到脚本中,并且包括了 `dracut` 生成和验证 `initramfs` 的步骤。
### 修正后的完整脚本:
```bash
#!/bin/bash
set -e
# 确保在内核源码根目录运行
if [ ! -x scripts/config ]; then
echo "Error: 请在内核源码根目录运行"
exit 1
fi
config_exists() {
grep -qr "^config $1" . || return 1
}
try_enable() {
if config_exists "$1"; then
echo "启用 CONFIG_$1"
scripts/config --enable "CONFIG_$1"
else
echo "跳过 CONFIG_$1(不存在)"
fi
}
try_module() {
if config_exists "$1"; then
echo "模块化 CONFIG_$1"
scripts/config --module "CONFIG_$1"
else
echo "跳过 CONFIG_$1(不存在)"
fi
}
# 启用模块机制
echo "====== 启用模块机制 ======"
try_enable MODULES
# 启用调试、bcc、eBPF、Cilium、BTF等功能
echo "====== 启用调试、bcc、eBPF、Cilium、BTF等功能 ======"
# 基础调试与符号
try_enable DEBUG_INFO
try_enable DEBUG_INFO_DWARF4
try_enable DEBUG_INFO_DWARF5
try_enable DEBUG_INFO_BTF
try_enable PAHOLE_HAS_SPLIT_BTF
try_enable FRAME_POINTER
try_enable DEBUG_KERNEL
try_enable KALLSYMS
try_enable KALLSYMS_ALL
try_enable STACK_VALIDATION
try_enable IKHEADERS
# Crash和转储支持
try_enable PROC_KCORE
try_enable CRASH_DUMP
try_enable KEXEC
try_enable KEXEC_FILE
try_enable KDUMP
try_enable VMCOREINFO
try_enable KDB
try_enable KGDB
try_enable KGDB_SERIAL_CONSOLE
# eBPF/BCC相关
try_enable BPF
try_enable BPF_SYSCALL
try_enable BPF_JIT
try_enable BPF_JIT_ALWAYS_ON
try_enable BPF_EVENTS
try_enable BPF_LSM
try_enable BPF_PRELOAD
try_enable BPF_PRELOAD_UMD
try_enable BPF_STREAM_PARSER
try_enable BPF_KPROBE_OVERRIDE
try_enable BPF_KFUNC_TEST
try_enable BPF_LIRC_MODE2
try_enable BPF_PROG_TEST_RUN
try_enable HAVE_BPF_JIT
try_enable HAVE_EBPF_JIT
try_enable BPF_MAP_TYPE_ARRAY
try_enable BPF_MAP_TYPE_HASH
try_enable BPF_MAP_TYPE_PERCPU_ARRAY
try_enable BPF_MAP_TYPE_PERCPU_HASH
try_enable BPF_MAP_TYPE_RINGBUF
try_enable BPF_MAP_TYPE_STACK_TRACE
try_enable BPF_MAP_TYPE_LPM_TRIE
try_enable BPF_MAP_TYPE_HASH_OF_MAPS
try_enable BPF_MAP_TYPE_ARRAY_OF_MAPS
try_enable BPF_MAP_TYPE_TASK_STORAGE
try_enable BPF_MAP_TYPE_SK_STORAGE
try_enable BPF_MAP_TYPE_SOCKHASH
# 网络及Cilium支持
try_enable NET
try_enable INET
try_enable IPV6
try_enable NETFILTER
try_enable NETFILTER_ADVANCED
try_enable NETFILTER_XTABLES
try_enable NF_CONNTRACK
try_enable NF_CONNTRACK_IPV4
try_enable NF_CONNTRACK_IPV6
try_enable NF_NAT
try_enable NF_NAT_IPV4
try_enable NF_NAT_IPV6
try_enable NET_SCH_INGRESS
try_enable NET_CLS_ACT
try_enable NET_SCH_TBF
try_enable XDP_SOCKETS
try_enable XDP_SOCKETS_DIAG
try_module NET_CLS_BPF
try_module NET_ACT_BPF
try_module NET_ACT_GACT
try_module NET_ACT_POLICE
try_module NET_SCH_SFQ
try_module NET_SCH_HTB
try_module NET_SCH_FQ
try_module NET_SCH_CAKE
try_module DUMMY
try_module VXLAN
try_module NET_VETH
try_enable NET_IPGRE
try_enable NET_IP_TUNNEL
try_enable NET_FOU
try_enable NET_FOU_IP_TUNNELS
try_enable BRIDGE
try_enable BRIDGE_VLAN_FILTERING
try_enable LWTUNNEL_BPF
try_enable SOCK_CGROUP_DATA
# CGroup v2 支持
try_enable CGROUPS
try_enable CGROUP2
try_enable CGROUP_SCHED
try_enable FAIR_GROUP_SCHED
try_enable CGROUP_CPUACCT
try_enable CGROUP_DEVICE
try_enable CGROUP_FREEZER
try_enable CGROUP_PIDS
try_enable CGROUP_HUGETLB
try_enable CGROUP_NET_CLASSID
try_enable CGROUP_NET_PRIO
try_enable CGROUP_DEBUG
try_enable CGROUP_WRITEBACK
try_enable CGROUP_PERF
try_enable CGROUP_IO
try_enable CGROUP_RDMA
try_enable MEMCG
try_enable BLK_CGROUP
# perf/ftrace/kprobe/uprobe支持
try_enable PERF_EVENTS
try_enable TRACEPOINTS
try_enable FTRACE_SYSCALLS
try_enable FUNCTION_TRACER
try_enable FUNCTION_GRAPH_TRACER
try_enable HAVE_FUNCTION_GRAPH_TRACER
try_enable DYNAMIC_FTRACE
try_enable STACK_TRACER
try_enable KPROBES
try_enable KPROBE_EVENTS
try_enable UPROBES
try_enable UPROBE_EVENTS
try_enable DYNAMIC_DEBUG
# KASAN及内存调试
try_enable KASAN
try_enable KASAN_INLINE
try_enable KASAN_STACK
try_enable KASAN_GENERIC
try_enable DEBUG_SLAB
try_enable SLUB_DEBUG
try_enable DEBUG_KMEMLEAK
try_enable DEBUG_STACKOVERFLOW
try_enable DEBUG_STACK_USAGE
# Lock调试
try_enable DEBUG_SPINLOCK
try_enable PROVE_LOCKING
try_enable DEBUG_LOCKDEP
try_enable LOCK_STAT
try_enable DEBUG_ATOMIC_SLEEP
# 安全模块
try_enable SECURITY
try_enable SECURITYFS
try_enable LSM
try_enable SECURITY_PATH
# KASLR和可重定位
try_enable RELOCATABLE
try_enable RANDOMIZE_BASE
# 安全调试
try_enable DEBUG_LIST
try_enable DEBUG_NOTIFIERS
try_enable DEBUG_CREDENTIALS
# 文件系统支持
try_enable PROC_FS
try_enable TMPFS
try_enable SYSFS
try_enable DEBUG_FS
# 覆盖率与测试
try_enable KCOV
try_enable KUNIT
try_enable KSELFTEST
# BCC示例依赖
try_enable UNIX_DIAG
try_enable INET_DIAG
try_enable PACKET_DIAG
try_enable SOCK_DIAG
# 文件系统和块设备支持
echo "====== 启用文件系统和块设备支持 ======"
try_enable EXT4_FS
try_enable EXT4_FS_POSIX_ACL
try_enable EXT4_FS_SECURITY
try_enable BLOCK
try_enable BLK_DEV
try_enable PARTITION_ADVANCED
# 块设备驱动
try_module VIRTIO_BLK
try_module NVME_CORE
try_module NVME
try_module SD_MOD
try_module AHCI
try_module SCSI_MOD
# 完成配置,输出后续操作提示
echo "✅ 配置完成,请执行:make olddefconfig && make"
# 强制重新生成 initramfs 并验证内容
echo "正在生成 initramfs..."
cat > /etc/dracut.conf.d/fs-drivers.conf <<EOF
add_drivers+=" ext4 virtio_blk sd_mod ahci scsi_mod nvme "
hostonly=no
EOF
# 重新生成 initramfs
sudo dracut -f /boot/initramfs-$(make kernelrelease).img $(make kernelrelease)
# 验证 initramfs 内容
echo "验证 initramfs 内容..."
mkdir -p /tmp/initramfs-check
cd /tmp/initramfs-check
xzcat /boot/initramfs-$(make kernelrelease).img | cpio -idmv
find . -name '*.ko' | grep -E 'ext4|virtio|nvme|sd_mod'
```
### 脚本要点:
1. **文件系统支持**:加入了 `EXT4` 相关的支持,以确保可以挂载根文件系统。
2. **块设备支持**:加入了 `VIRTIO_BLK`, `NVME`, `AHCI`, `SCSI` 等常见块设备驱动。
3. **`initramfs` 生成和验证**:确保生成时包含关键驱动,并通过 `dracut` 强制打包必要模块。
4. **内核编译后步骤**:重新编译并确保 `initramfs` 包含所需模块,验证模块是否存在。
### 下一步:
你可以执行以下命令,按照步骤进行编译和验证:
```bash
make olddefconfig
make -j$(nproc)
sudo make modules_install
sudo make install
# 重新生成并验证 initramfs
sudo dracut -f /boot/initramfs-$(
```
#!/bin/bash
set -e
# 确保在内核源码根目录运行
if [ ! -x scripts/config ]; then
echo "Error: 请在内核源码根目录运行"
exit 1
fi
config_exists() {
grep -qr "^config $1" . || return 1
}
try_enable() {
if config_exists "$1"; then
echo "启用 CONFIG_$1"
scripts/config --enable "CONFIG_$1"
else
echo "跳过 CONFIG_$1(不存在)"
fi
}
try_module() {
if config_exists "$1"; then
echo "模块化 CONFIG_$1"
scripts/config --module "CONFIG_$1"
else
echo "跳过 CONFIG_$1(不存在)"
fi
}
# 启用模块机制
echo "====== 启用模块机制 ======"
try_enable MODULES
# 启用调试、bcc、eBPF、Cilium、BTF等功能
echo "====== 启用调试、bcc、eBPF、Cilium、BTF等功能 ======"
# 基础调试与符号
try_enable DEBUG_INFO
try_enable DEBUG_INFO_DWARF4
try_enable DEBUG_INFO_DWARF5
try_enable DEBUG_INFO_BTF
try_enable PAHOLE_HAS_SPLIT_BTF
try_enable FRAME_POINTER
try_enable DEBUG_KERNEL
try_enable KALLSYMS
try_enable KALLSYMS_ALL
try_enable STACK_VALIDATION
try_enable IKHEADERS
# Crash和转储支持
try_enable PROC_KCORE
try_enable CRASH_DUMP
try_enable KEXEC
try_enable KEXEC_FILE
try_enable KDUMP
try_enable VMCOREINFO
try_enable KDB
try_enable KGDB
try_enable KGDB_SERIAL_CONSOLE
# eBPF/BCC相关
try_enable BPF
try_enable BPF_SYSCALL
try_enable BPF_JIT
try_enable BPF_JIT_ALWAYS_ON
try_enable BPF_EVENTS
try_enable BPF_LSM
try_enable BPF_PRELOAD
try_enable BPF_PRELOAD_UMD
try_enable BPF_STREAM_PARSER
try_enable BPF_KPROBE_OVERRIDE
try_enable BPF_KFUNC_TEST
try_enable BPF_LIRC_MODE2
try_enable BPF_PROG_TEST_RUN
try_enable HAVE_BPF_JIT
try_enable HAVE_EBPF_JIT
try_enable BPF_MAP_TYPE_ARRAY
try_enable BPF_MAP_TYPE_HASH
try_enable BPF_MAP_TYPE_PERCPU_ARRAY
try_enable BPF_MAP_TYPE_PERCPU_HASH
try_enable BPF_MAP_TYPE_RINGBUF
try_enable BPF_MAP_TYPE_STACK_TRACE
try_enable BPF_MAP_TYPE_LPM_TRIE
try_enable BPF_MAP_TYPE_HASH_OF_MAPS
try_enable BPF_MAP_TYPE_ARRAY_OF_MAPS
try_enable BPF_MAP_TYPE_TASK_STORAGE
try_enable BPF_MAP_TYPE_SK_STORAGE
try_enable BPF_MAP_TYPE_SOCKHASH
# 网络及Cilium支持
try_enable NET
try_enable INET
try_enable IPV6
try_enable NETFILTER
try_enable NETFILTER_ADVANCED
try_enable NETFILTER_XTABLES
try_enable NF_CONNTRACK
try_enable NF_CONNTRACK_IPV4
try_enable NF_CONNTRACK_IPV6
try_enable NF_NAT
try_enable NF_NAT_IPV4
try_enable NF_NAT_IPV6
try_enable NET_SCH_INGRESS
try_enable NET_CLS_ACT
try_enable NET_SCH_TBF
try_enable XDP_SOCKETS
try_enable XDP_SOCKETS_DIAG
try_module NET_CLS_BPF
try_module NET_ACT_BPF
try_module NET_ACT_GACT
try_module NET_ACT_POLICE
try_module NET_SCH_SFQ
try_module NET_SCH_HTB
try_module NET_SCH_FQ
try_module NET_SCH_CAKE
try_module DUMMY
try_module VXLAN
try_module NET_VETH
try_enable NET_IPGRE
try_enable NET_IP_TUNNEL
try_enable NET_FOU
try_enable NET_FOU_IP_TUNNELS
try_enable BRIDGE
try_enable BRIDGE_VLAN_FILTERING
try_enable LWTUNNEL_BPF
try_enable SOCK_CGROUP_DATA
# CGroup v2 支持
try_enable CGROUPS
try_enable CGROUP2
try_enable CGROUP_SCHED
try_enable FAIR_GROUP_SCHED
try_enable CGROUP_CPUACCT
try_enable CGROUP_DEVICE
try_enable CGROUP_FREEZER
try_enable CGROUP_PIDS
try_enable CGROUP_HUGETLB
try_enable CGROUP_NET_CLASSID
try_enable CGROUP_NET_PRIO
try_enable CGROUP_DEBUG
try_enable CGROUP_WRITEBACK
try_enable CGROUP_PERF
try_enable CGROUP_IO
try_enable CGROUP_RDMA
try_enable MEMCG
try_enable BLK_CGROUP
# perf/ftrace/kprobe/uprobe支持
try_enable PERF_EVENTS
try_enable TRACEPOINTS
try_enable FTRACE_SYSCALLS
try_enable FUNCTION_TRACER
try_enable FUNCTION_GRAPH_TRACER
try_enable HAVE_FUNCTION_GRAPH_TRACER
try_enable DYNAMIC_FTRACE
try_enable STACK_TRACER
try_enable KPROBES
try_enable KPROBE_EVENTS
try_enable UPROBES
try_enable UPROBE_EVENTS
try_enable DYNAMIC_DEBUG
# KASAN及内存调试
try_enable KASAN
try_enable KASAN_INLINE
try_enable KASAN_STACK
try_enable KASAN_GENERIC
try_enable DEBUG_SLAB
try_enable SLUB_DEBUG
try_enable DEBUG_KMEMLEAK
try_enable DEBUG_STACKOVERFLOW
try_enable DEBUG_STACK_USAGE
# Lock调试
try_enable DEBUG_SPINLOCK
try_enable PROVE_LOCKING
try_enable DEBUG_LOCKDEP
try_enable LOCK_STAT
try_enable DEBUG_ATOMIC_SLEEP
# 安全模块
try_enable SECURITY
try_enable SECURITYFS
try_enable LSM
try_enable SECURITY_PATH
# KASLR和可重定位
try_enable RELOCATABLE
try_enable RANDOMIZE_BASE
# 安全调试
try_enable DEBUG_LIST
try_enable DEBUG_NOTIFIERS
try_enable DEBUG_CREDENTIALS
# 文件系统支持
try_enable PROC_FS
try_enable TMPFS
try_enable SYSFS
try_enable DEBUG_FS
# 覆盖率与测试
try_enable KCOV
try_enable KUNIT
try_enable KSELFTEST
# BCC示例依赖
try_enable UNIX_DIAG
try_enable INET_DIAG
try_enable PACKET_DIAG
try_enable SOCK_DIAG
# 文件系统和块设备支持
echo "====== 启用文件系统和块设备支持 ======"
try_enable EXT4_FS
try_enable EXT4_FS_POSIX_ACL
try_enable EXT4_FS_SECURITY
try_enable BLOCK
try_enable BLK_DEV
try_enable PARTITION_ADVANCED
# 块设备驱动
try_module VIRTIO_BLK
try_module NVME_CORE
try_module NVME
try_module SD_MOD
try_module AHCI
try_module SCSI_MOD
# 启用网络协议栈功能
echo "====== 启用网络协议栈功能 ======"
try_enable NETDEVICES
try_enable VLAN
try_enable INET_LRO
try_enable INET_TSO
try_enable NETDEV_TSO
try_enable NETDEV_XPS
# 启用对 TCP、UDP 协议的支持
try_enable INET_TCP
try_enable INET_UDP
try_enable INET_RAW
try_enable INET_DIAG
try_enable TCP_CONG_BBR
try_enable TCP_CONG_CUBIC
# 启用对网络调试的支持
try_enable NET_PTP_CLASSIFY
try_enable NET_PTP
# 启用虚拟化调试
try_enable KVM
try_enable KVM_INTEL
try_enable KVM_AMD
# 启用内存管理调试
try_enable DEBUG_MEMORY_INIT
try_enable DEBUG_PAGEALLOC
try_enable DEBUG_SLAB
try_enable DEBUG_KMEMLEAK
try_enable DEBUG_VIRTUAL_MEMORY
# 启用 Ceph 文件系统
try_enable CEPH_FS
try_enable CEPH_FS_POSIX_ACL
# 启用对 FPGA 支持
try_enable FPGA
try_enable FPGA_MGR
try_enable FPGA_MGR_MANAGER
# 启用对 NVMe 硬盘的支持
try_enable NVME_CORE
try_enable NVME
try_enable NVME_FABRICS
# 启用串口的支持
try_enable SERIAL_8250
try_enable SERIAL_8250_CONSOLE
try_enable SERIAL_CORE
try_enable SERIAL_CADENCE
# 启用 USB 设备支持
try_enable USB_XHCI_HCD
try_enable USB_EHCI_HCD
try_enable USB_UHCI_HCD
try_enable USB_STORAGE
# 启用虚拟化支持
try_enable KVM
try_enable KVM_INTEL
try_enable KVM_AMD
try_enable VHOST_NET
try_enable VHOST_VSOCK
# 启用 GPU 和加速器支持
try_enable DRM
try_enable DRM_AMDGPU
try_enable DRM_NOUVEAU
try_enable DRM_INTEL
# 完成配置,输出后续操作提示
echo "✅ 配置完成,请执行:make olddefconfig && make"