内核编译1

./include/config/kernel.release

https://mirror.hostart.az/AltArch/7.8.2003/kernel/x86_64/Packages/
https://buildlogs.centos.org/c7-kernels.x86_64/kernel/20200916135108/5.4.65-200.el7.x86_64/




yum clean all 
yum install make 
yum install gcc
yum install flex 
yum install bison 
yum install lrzsz 
yum install elfutils-libelf-devel 
yum install openssl-devel 
yum install bc
yum install rpm-build rpmdevtools

rpmdev-setuptree
# tree /root/rpmbuild/
/root/rpmbuild/
├── BUILD
├── RPMS
├── SOURCES
├── SPECS
└── SRPMS

/usr/local/src/linux-5.4.177
cp /boot/config-3.10.0-862.el7.x86_64 ./.config
make clean
make mrproper
make menuconfig
make -j 32 
make modules_install
make install
make -j$(nproc) rpm-pkg 

下面是包含你已有配置及所有建议补充项的**完整内核配置脚本**,用于构建支持 **bcc + eBPF + Cilium + BTF + 全调试功能** 的 Linux 内核配置环境:

---

### ✅ 完整脚本 `enable_kernel_features.sh`:

```bash
#!/bin/bash
set -e

# 确保在内核源码根目录执行
if [ ! -x scripts/config ]; then
  echo "Error: scripts/config not found or not executable. 请在内核源码根目录运行该脚本"
  exit 1
fi

config_exists() {
  local cfg=$1
  grep -qr "^config $cfg" . || return 1
}

try_enable() {
  local cfg=$1
  if config_exists "$cfg"; then
    echo "启用配置: CONFIG_$cfg"
    scripts/config --enable "CONFIG_$cfg"
  else
    echo "警告: CONFIG_$cfg 不存在,跳过"
  fi
}

try_module() {
  local cfg=$1
  if config_exists "$cfg"; then
    echo "设置模块化: CONFIG_$cfg"
    scripts/config --module "CONFIG_$cfg"
  else
    echo "警告: CONFIG_$cfg 不存在,跳过"
  fi
}

echo "====== 开始设置内核配置 ======"

#################################
# 基础调试和符号支持
#################################
try_enable DEBUG_INFO
try_enable DEBUG_INFO_DWARF4
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

# DWARF5(如支持)
try_enable DEBUG_INFO_DWARF5

#################################
# 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 支持
#################################
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

# JIT 能力标识(版本适配)
try_enable HAVE_BPF_JIT
try_enable HAVE_EBPF_JIT

# 支持的 map 类型
for m in ARRAY HASH PERCPU_ARRAY PERCPU_HASH RINGBUF STACK_TRACE LPM_TRIE HASH_OF_MAPS ARRAY_OF_MAPS TASK_STORAGE SK_STORAGE SOCKHASH; do
  try_enable BPF_MAP_TYPE_${m}
done

#################################
# 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

# 模块形式
for m in NET_CLS_BPF NET_ACT_BPF NET_ACT_GACT NET_ACT_POLICE NET_SCH_SFQ NET_SCH_HTB NET_SCH_FQ NET_SCH_CAKE DUMMY VXLAN NET_VETH; do
  try_module $m
done

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/tracepoint/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

#################################
# KASAN / 内存调试 / kmemleak
#################################
try_enable KASAN
try_enable KASAN_INLINE
scripts/config --disable CONFIG_KASAN_STACK || true
try_enable KASAN_GENERIC
try_enable DEBUG_SLAB
try_enable SLUB_DEBUG
try_enable DEBUG_KMEMLEAK
scripts/config --disable CONFIG_DEBUG_KMEMLEAK_DEFAULT_OFF || true
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

#################################
# 安全 / LSM
#################################
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 "✅ 配置完成!请执行: make olddefconfig && make"
```

---

## ✅ 后续步骤

执行脚本后,运行以下命令生成 `.config`:

```bash
make olddefconfig
```

编译内核或模块:

```bash
make -j$(nproc)
make modules_install
make install
```

---

如需为特定内核版本适配(如 5.4、5.10、6.x),可以告诉我,我将根据版本帮你做兼容性调整。需要 `.config` 文件样本也可以提供。
你这次配置启用了非常全面且重要的内核调试和追踪功能,包括:

---

### 关键启用配置说明

* **调试信息**

  * `CONFIG_DEBUG_INFO`:生成内核调试信息,支持GDB等调试器。
  * `CONFIG_DEBUG_INFO_DWARF4`、`CONFIG_DEBUG_INFO_BTF`:增强调试信息格式,特别是BPF相关的BTF调试信息。
  * `CONFIG_FRAME_POINTER`:保存函数调用栈信息,方便栈回溯。
  * `CONFIG_DEBUG_KERNEL`:开启内核自带的调试支持。
  * `CONFIG_KALLSYMS`及`CONFIG_KALLSYMS_ALL`:允许内核导出符号表,方便调试和内核分析。
  * `CONFIG_PROC_KCORE`:支持/proc/kcore,核心转储信息读取。
  * `CONFIG_CRASH_DUMP`和`CONFIG_KEXEC`系列:支持内核崩溃转储和重启机制。

* **调试辅助工具**

  * `CONFIG_KDB`、`CONFIG_KGDB`:内核调试器和远程调试支持。
  * `CONFIG_DEBUG_SLAB`、`CONFIG_SLUB_DEBUG`、`CONFIG_DEBUG_KMEMLEAK`:内存分配器及泄漏检测。
  * `CONFIG_DEBUG_STACKOVERFLOW`、`CONFIG_DEBUG_STACK_USAGE`:栈溢出和栈使用调试。
  * `CONFIG_DEBUG_SPINLOCK`、`CONFIG_PROVE_LOCKING`、`CONFIG_DEBUG_LOCKDEP`、`CONFIG_LOCK_STAT`:锁机制及死锁检测。
  * `CONFIG_DEBUG_ATOMIC_SLEEP`:检测原子上下文内的睡眠操作。

* **BPF/eBPF支持**

  * `CONFIG_BPF`及相关JIT和安全模块。
  * `CONFIG_BPF_LSM`:将BPF用作Linux安全模块。
  * 你启用了XDP、netfilter的BPF相关模块,对网络性能追踪和过滤很有帮助。

* **网络子系统**

  * `CONFIG_NET`,支持IPv4/IPv6,Netfilter防火墙框架。
  * 支持多种网络队列调度(TBF、SFQ、HTB、CAKE等)。
  * 支持VXLAN、GRE、IP隧道、FOU、桥接等多种隧道和虚拟网络设备。
  * 支持网络的BPF分类和动作(net\_cls\_bpf, net\_act\_bpf等)。

* **cgroup相关**

  * 你启用了内存、CPU、设备、冻结、PIDs、hugetlb、网络类别和优先级等多个cgroup子系统。
  * 但有一些警告显示 `CONFIG_CGROUPS` 和 `CONFIG_CGROUP2` 不存在,可能你的内核版本或配置环境缺少这部分支持,建议确认内核版本,cgroup通常非常重要,尤其是容器化场景。

* **性能分析和追踪**

  * `CONFIG_PERF_EVENTS`、`CONFIG_TRACEPOINTS`、`CONFIG_FTRACE_SYSCALLS`、`CONFIG_FUNCTION_TRACER`、`CONFIG_DYNAMIC_FTRACE` 等,全面支持perf和ftrace。
  * `CONFIG_STACK_TRACER`,用于栈追踪。

* **安全模块**

  * 启用了 `CONFIG_SECURITY`、`CONFIG_LSM`、`CONFIG_SECURITYFS` 等,方便安全模块开发与加载。

* **文件系统**

  * 基本文件系统支持:`CONFIG_PROC_FS`、`CONFIG_TMPFS`、`CONFIG_SYSFS`。
  * 调试文件系统 `CONFIG_DEBUG_FS` 用于内核调试信息暴露。

* **其他**

  * `CONFIG_KUNIT`:内核单元测试支持,方便持续集成和自动化测试。
  * `CONFIG_KCOV`:代码覆盖率工具,用于测试。
  * 启用了大量调试辅助功能,如 `CONFIG_DEBUG_LIST`、`CONFIG_DEBUG_NOTIFIERS`、`CONFIG_DEBUG_CREDENTIALS`。

---

### 警告和跳过项

* 你配置中有若干警告,例如:

  * `CONFIG_PAHOLE_HAS_SPLIT_BTF`、`CONFIG_DEBUG_INFO_DWARF5`、`CONFIG_KDUMP`、`CONFIG_VMCOREINFO`等不存在。
  * BPF MAP类型相关的配置不存在。
  * cgroup相关(`CONFIG_CGROUPS`、`CONFIG_CGROUP2`)不存在。
  * 某些网络设备(如 `CONFIG_NET_VETH`)不存在。
  * 这些多数是因为你的内核版本或者当前内核源码配置限制,没有对应配置项。建议确认内核版本(最好是5.10及以上,部分功能在较新内核中支持更完善)。

---

### 建议执行步骤

1. **确认内核版本和源码树完整性**
   建议使用5.10以上内核源码,如果你对BPF、cgroup等现代特性有需求,最好用5.15或更高版本。

2. **执行 `make olddefconfig`**
   这一步会根据你当前配置,自动填充缺失的默认选项,减少配置不完整导致的编译失败。

3. **执行 `make`** 编译内核及模块。

4. **安装并测试新内核**

   * 安装编译好的内核(`make modules_install install`)。
   * 更新bootloader配置,重启。
   * 启动后检查 `dmesg` 是否正常,有无调试功能加载提示。

---

### 需要帮助我帮你做什么?

* 你需要我帮你检查并补充完整某些特定的配置吗?
* 你希望我帮你写一个自动化的内核配置脚本吗?
* 你想知道怎么验证你启用的调试功能是否生效吗?
* 或者你需要我帮你解决某些警告或缺失配置的具体问题?

告诉我,我随时帮你!
# 1. 从一个已有的配置开始(比如 defconfig 或旧 .config)
make defconfig

# 2. 修改配置(用 menuconfig 等交互界面)
make menuconfig
# 这里修改后,确保选择保存并退出

# 3. 如果用 scripts/config 方式修改
scripts/config --enable CONFIG_DEBUG_INFO

# 4. 运行旧配置更新(同步依赖)
make olddefconfig

# 5. 准备环境
make prepare
make scripts

# 6. 编译内核
make -j$(nproc)



#!/bin/bash
set -e

# 确认在内核源码根目录执行该脚本,确保 scripts/config 存在
if [ ! -x scripts/config ]; then
  echo "Error: scripts/config not found or not executable. 请在内核源码根目录运行该脚本"
  exit 1
fi

# 基础调试和符号支持
scripts/config --enable CONFIG_DEBUG_INFO
scripts/config --enable CONFIG_DEBUG_INFO_DWARF4
scripts/config --enable CONFIG_DEBUG_INFO_BTF
scripts/config --enable CONFIG_FRAME_POINTER
scripts/config --enable CONFIG_DEBUG_KERNEL
scripts/config --enable CONFIG_KALLSYMS
scripts/config --enable CONFIG_KALLSYMS_ALL
scripts/config --enable CONFIG_PAHOLE_HAS_SPLIT_BTF
scripts/config --enable CONFIG_STACK_VALIDATION

# KGDB / Crash 支持
scripts/config --enable CONFIG_KGDB
scripts/config --enable CONFIG_KGDB_SERIAL_CONSOLE
scripts/config --enable CONFIG_PROC_KCORE
scripts/config --enable CONFIG_CRASH_DUMP
scripts/config --enable CONFIG_KEXEC

# eBPF 支持(JIT / LSM / Preload / map)
scripts/config --enable CONFIG_BPF
scripts/config --enable CONFIG_BPF_SYSCALL
scripts/config --enable CONFIG_BPF_JIT
scripts/config --enable CONFIG_BPF_JIT_ALWAYS_ON
scripts/config --enable CONFIG_HAVE_EBPF_JIT
scripts/config --enable CONFIG_HAVE_BPF_JIT
scripts/config --enable CONFIG_BPF_EVENTS
scripts/config --enable CONFIG_BPF_LSM
scripts/config --enable CONFIG_BPF_PRELOAD
scripts/config --enable CONFIG_BPF_PRELOAD_UMD
scripts/config --enable CONFIG_BPF_STREAM_PARSER
scripts/config --enable CONFIG_BPF_KPROBE_OVERRIDE
scripts/config --enable CONFIG_BPF_LPM_TRIE
scripts/config --enable CONFIG_BPF_MAP_TYPE_ARRAY
scripts/config --enable CONFIG_BPF_MAP_TYPE_HASH
scripts/config --enable CONFIG_BPF_MAP_TYPE_PERCPU_HASH
scripts/config --enable CONFIG_BPF_MAP_TYPE_PERCPU_ARRAY
scripts/config --enable CONFIG_BPF_MAP_TYPE_RINGBUF
scripts/config --enable CONFIG_BPF_MAP_TYPE_STACK_TRACE

# Cilium 所需网络子系统与设备
scripts/config --enable CONFIG_NET
scripts/config --enable CONFIG_INET
scripts/config --enable CONFIG_IPV6
scripts/config --enable CONFIG_NETFILTER
scripts/config --enable CONFIG_NETFILTER_ADVANCED
scripts/config --enable CONFIG_NF_CONNTRACK
scripts/config --enable CONFIG_NF_CONNTRACK_IPV4
scripts/config --enable CONFIG_NF_CONNTRACK_IPV6
scripts/config --enable CONFIG_NF_NAT
scripts/config --enable CONFIG_NF_NAT_IPV4
scripts/config --enable CONFIG_NF_NAT_IPV6
scripts/config --enable CONFIG_NET_SCH_INGRESS
scripts/config --enable CONFIG_NET_CLS_ACT
scripts/config --module CONFIG_NET_CLS_BPF
scripts/config --module CONFIG_NET_ACT_BPF
scripts/config --module CONFIG_NET_ACT_POLICE
scripts/config --module CONFIG_NET_ACT_GACT
scripts/config --module CONFIG_NET_SCH_SFQ
scripts/config --enable CONFIG_XDP_SOCKETS
scripts/config --module CONFIG_DUMMY
scripts/config --module CONFIG_VXLAN
scripts/config --module CONFIG_NET_VETH
scripts/config --enable CONFIG_NET_IPGRE
scripts/config --enable CONFIG_BRIDGE
scripts/config --enable CONFIG_BRIDGE_VLAN_FILTERING
scripts/config --enable CONFIG_LWTUNNEL_BPF
scripts/config --enable CONFIG_SOCK_CGROUP_DATA

# CGroup v2 和子系统
scripts/config --enable CONFIG_CGROUPS
scripts/config --enable CONFIG_CGROUP2
scripts/config --enable CONFIG_FAIR_GROUP_SCHED
scripts/config --enable CONFIG_CGROUP_SCHED
scripts/config --enable CONFIG_CGROUP_CPUACCT
scripts/config --enable CONFIG_CGROUP_DEVICE
scripts/config --enable CONFIG_CGROUP_FREEZER
scripts/config --enable CONFIG_CGROUP_PIDS
scripts/config --enable CONFIG_CGROUP_HUGETLB
scripts/config --enable CONFIG_CGROUP_NET_CLASSID
scripts/config --enable CONFIG_CGROUP_NET_PRIO
scripts/config --enable CONFIG_CGROUP_DEBUG
scripts/config --enable CONFIG_CGROUP_WRITEBACK
scripts/config --enable CONFIG_CGROUP_BLK
scripts/config --enable CONFIG_CGROUP_PERF
scripts/config --enable CONFIG_CGROUP_IO
scripts/config --enable CONFIG_CGROUP_RDMA
scripts/config --enable CONFIG_BLK_CGROUP
scripts/config --enable CONFIG_MEMCG

# perf / trace / ftrace / syscall trace
scripts/config --enable CONFIG_PERF_EVENTS
scripts/config --enable CONFIG_TRACEPOINTS
scripts/config --enable CONFIG_FTRACE_SYSCALLS
scripts/config --enable CONFIG_FUNCTION_TRACER
scripts/config --enable CONFIG_FUNCTION_GRAPH_TRACER
scripts/config --enable CONFIG_HAVE_FUNCTION_GRAPH_TRACER
scripts/config --enable CONFIG_DYNAMIC_FTRACE
scripts/config --enable CONFIG_STACK_TRACER
scripts/config --enable CONFIG_KPROBES
scripts/config --enable CONFIG_KPROBE_EVENTS
scripts/config --enable CONFIG_UPROBES
scripts/config --enable CONFIG_UPROBE_EVENTS

# 内存调试 / kasan / kmemleak
scripts/config --enable CONFIG_KASAN
scripts/config --enable CONFIG_KASAN_INLINE
scripts/config --enable CONFIG_KASAN_STACK        # 解决 warning 的关键
scripts/config --enable CONFIG_KASAN_GENERIC
scripts/config --enable CONFIG_DEBUG_SLAB
scripts/config --enable CONFIG_SLUB_DEBUG
scripts/config --enable CONFIG_DEBUG_KMEMLEAK
scripts/config --disable CONFIG_DEBUG_KMEMLEAK_DEFAULT_OFF
scripts/config --enable CONFIG_DEBUG_STACKOVERFLOW
scripts/config --enable CONFIG_DEBUG_STACK_USAGE

# 锁调试 / Lockdep
scripts/config --enable CONFIG_DEBUG_SPINLOCK
scripts/config --enable CONFIG_PROVE_LOCKING
scripts/config --enable CONFIG_DEBUG_LOCKDEP
scripts/config --enable CONFIG_LOCK_STAT
scripts/config --enable CONFIG_DEBUG_ATOMIC_SLEEP

# 安全模块 / LSM
scripts/config --enable CONFIG_SECURITY
scripts/config --enable CONFIG_SECURITYFS
scripts/config --enable CONFIG_LSM

# KASLR / relocatable
scripts/config --enable CONFIG_RANDOMIZE_BASE
scripts/config --enable CONFIG_RELOCATABLE

# 运行时 headers(bcc 使用)
scripts/config --enable CONFIG_IKHEADERS

# 推荐开启的安全调试
scripts/config --enable CONFIG_DEBUG_LIST
scripts/config --enable CONFIG_DEBUG_NOTIFIERS
scripts/config --enable CONFIG_DEBUG_CREDENTIALS

# 文件系统支持
scripts/config --enable CONFIG_PROC_FS
scripts/config --enable CONFIG_TMPFS
scripts/config --enable CONFIG_SYSFS
scripts/config --enable CONFIG_DEBUG_FS

# 覆盖率和测试(可选)
scripts/config --enable CONFIG_KCOV

echo "配置修改完成!请运行 'make olddefconfig' 和 'make' 重新编译内核。"
你已经正确编译并安装了新版 `pahole`,但依然出现:

```
symbol lookup error: /usr/local/bin/pahole: undefined symbol: tabs
```

说明:**`pahole` 仍然链接到了不兼容版本的 `libdwarves.so.1`**,或者你编译出的 `libdwarves.so.1` 不包含或导出了错误的符号。

---

## ✅ 彻底修复:完全静态链接 `pahole`(推荐)

我们使用 `cmake` 编译时,让 `pahole` **静态链接它自己的 `libdwarves`**,避免系统库干扰。

### 🔄 步骤:

1. 清除旧编译文件:

```bash
cd /usr/src/pahole
rm -rf build
mkdir build && cd build
```

2. 重新配置构建为**静态链接**:

```bash
cmake -D__LIB=lib -DBUILD_SHARED_LIBS=OFF ..
make clean
make -j$(nproc)
sudo make install
```

这将确保:

* `pahole` 静态链接内置 `libdwarves`
* 不依赖系统 `/lib64/libdwarves.so.1`

3. 验证链接和版本:

```bash
ldd /usr/local/bin/pahole
# 应该 **不再**显示 libdwarves.so.1

/usr/local/bin/pahole --version
# 应该成功输出版本信息
```

---

## 🔍 如果仍失败,请排查以下几点:

### ✅ 检查 pahole 是否正确链接:

```bash
nm -D /usr/local/bin/pahole | grep tabs
```

如果没有 `U tabs`,说明已经不是外部未解析符号。

---

## 🧼 彻底卸载并重新安装(可选)

如果你仍然遇到问题,可执行以下命令 **彻底卸载**旧的:

```bash
sudo rm -f /usr/local/bin/pahole
sudo rm -f /usr/local/lib/libdwarves*
sudo ldconfig
```

然后重新走一遍上面的静态链接流程。

---

如果你希望我生成一键修复脚本,包含:

* 删除旧文件
* 静态重新编译 `pahole`
* 检查安装和链接

我可以立即为你生成,是否需要?
在 Linux 内核构建过程中,`make prepare` 和 `make scripts` 是两个用于准备内核源码和构建工具的关键步骤。以下是它们的详细作用和执行流程:

---

### **1. `make prepare`**
#### **作用**  
`make prepare` 主要用于准备内核源码树,确保其处于可编译状态。它会完成以下任务:

1. **生成头文件和符号链接**  
   - 创建必要的内核头文件(如 `include/generated/` 下的文件)。  
   - 建立内核版本相关的符号链接(如 `source` 和 `build` 目录的链接)。

2. **检查编译环境**  
   - 验证编译器(如 `gcc` 或 `clang`)和工具链的兼容性。  
   - 生成编译所需的配置文件(如 `auto.conf` 和 `autoconf.h`)。

3. **处理 Kconfig 配置**  
   - 根据 `.config` 文件生成依赖关系(`include/config/` 目录)。  
   - 为模块编译生成 `modules.order` 和 `modules.builtin` 文件。

4. **架构相关准备**  
   - 如果是交叉编译,会初始化架构特定的代码(如 `arch/x86/` 或 `arch/arm/` 下的准备工作)。

#### **典型输出**  
执行时可能会看到如下日志:  
```bash
  SYNC    include/config/auto.conf
  CALL    scripts/checksyscalls.sh
  DESCEND objtool
```

#### **何时需要运行**  
- 首次下载内核源码后。  
- 修改了 `.config` 文件或切换了架构(如从 `x86` 改为 `arm64`)。  
- 更新了内核版本或关键头文件。

---

### **2. `make scripts`**
#### **作用**  
`make scripts` 专门用于构建内核编译过程中依赖的**脚本和工具**,主要包括:

1. **构建 `fixdep` 工具**  
   - `fixdep` 是一个依赖关系修复工具,用于解析 `Makefile` 中的依赖关系,确保文件变更后能正确触发重新编译。

2. **构建 `bin2c` 工具**  
   - 将二进制文件转换为 C 语言数组(某些内核功能需要嵌入二进制数据)。

3. **构建其他辅助工具**  
   - 如 `kconfig` 相关的解析工具(`conf`、`mconf` 等),用于菜单配置界面。  
   - 部分架构可能需要额外的工具(如 DT——设备树编译器)。

#### **典型输出**  
```bash
  HOSTCC  scripts/fixdep
  HOSTCC  scripts/bin2c
  HOSTCC  scripts/kconfig/conf.o
```

#### **何时需要运行**  
- 首次编译内核前(通常 `make prepare` 会间接调用它)。  
- 修改了内核构建脚本(如 `scripts/` 目录下的代码)。  
- 切换编译器或工具链后。

---

### **完整编译流程中的顺序**
这两个命令通常由顶层 `make` 自动调用,但手动执行场景如下:  
```bash
# 1. 生成默认配置(可选)
make defconfig

# 2. 准备源码树(包含头文件、环境检查)
make prepare

# 3. 构建编译工具(如 fixdep)
make scripts

# 4. 正式编译内核
make -j$(nproc)
```

---

### **常见问题**
1. **为什么需要手动执行?**  
   - 如果自动构建失败(如工具链更新后),可能需要手动执行这些步骤修复。  
   - 开发者修改了 `Kconfig` 或构建脚本时,需显式重新生成工具。

2. **错误处理**  
   - 若 `make prepare` 失败,检查编译器版本或 `.config` 文件是否损坏。  
   - 若 `make scripts` 失败,确认主机工具(如 `gcc`、`flex`、`bison`)是否安装。

3. **跳过这些步骤**  
   - 直接运行 `make` 会按需自动调用它们,但手动执行可以更早发现问题。

---

### **总结**
| 命令            | 主要功能                              | 关键输出/工具                  |
|-----------------|-------------------------------------|-------------------------------|
| `make prepare`  | 准备头文件、符号链接、环境检查         | `include/generated/`, `auto.conf` |
| `make scripts`  | 构建内核编译依赖的工具(如 `fixdep`)  | `scripts/fixdep`, `bin2c`       |

这两个步骤确保了内核源码和工具链处于一致状态,是成功编译的前提条件。
#!/bin/bash
set -e

# 确保在内核源码根目录执行
if [ ! -x scripts/config ]; then
  echo "Error: scripts/config not found or not executable. 请在内核源码根目录运行该脚本"
  exit 1
fi

config_exists() {
  local cfg=$1
  grep -qr "^config $cfg" . || return 1
}

try_enable() {
  local cfg=$1
  if config_exists "$cfg"; then
    echo "启用配置: CONFIG_$cfg"
    scripts/config --enable "CONFIG_$cfg"
  else
    echo "警告: CONFIG_$cfg 不存在,跳过"
  fi
}

try_module() {
  local cfg=$1
  if config_exists "$cfg"; then
    echo "设置模块化: CONFIG_$cfg"
    scripts/config --module "CONFIG_$cfg"
  else
    echo "警告: CONFIG_$cfg 不存在,跳过"
  fi
}

echo "====== 开始设置内核配置 ======"

#################################
# 基础调试和符号支持
#################################
try_enable DEBUG_INFO
try_enable DEBUG_INFO_DWARF4
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

# DWARF5(如支持)
try_enable DEBUG_INFO_DWARF5

#################################
# 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 支持
#################################
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

# JIT 能力标识(版本适配)
try_enable HAVE_BPF_JIT
try_enable HAVE_EBPF_JIT

# 支持的 map 类型
for m in ARRAY HASH PERCPU_ARRAY PERCPU_HASH RINGBUF STACK_TRACE LPM_TRIE HASH_OF_MAPS ARRAY_OF_MAPS TASK_STORAGE SK_STORAGE SOCKHASH; do
  try_enable BPF_MAP_TYPE_${m}
done

#################################
# 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

# 模块形式
for m in NET_CLS_BPF NET_ACT_BPF NET_ACT_GACT NET_ACT_POLICE NET_SCH_SFQ NET_SCH_HTB NET_SCH_FQ NET_SCH_CAKE DUMMY VXLAN NET_VETH; do
  try_module $m
done

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/tracepoint/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

#################################
# KASAN / 内存调试 / kmemleak
#################################
try_enable KASAN
try_enable KASAN_INLINE
scripts/config --disable CONFIG_KASAN_STACK || true
try_enable KASAN_GENERIC
try_enable DEBUG_SLAB
try_enable SLUB_DEBUG
try_enable DEBUG_KMEMLEAK
scripts/config --disable CONFIG_DEBUG_KMEMLEAK_DEFAULT_OFF || true
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

#################################
# 安全 / LSM
#################################
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 "✅ 配置完成!请执行: make olddefconfig && make"
下面是你需要的**完整调试支持内核配置脚本**,在上一版基础上:

✅ **已集成**:

* `crash` / `kdump`
* `gdb` / `kgdb`
* `ftrace` / `dynamic_debug`
* `bpf` / `bcc`
* ✅ **Lock 相关调试功能**

---

## 🧩 `set_debug_full.sh`:完整调试配置脚本

```bash
#!/bin/bash
set -e

if [ ! -x scripts/config ]; then
  echo "Error: scripts/config not found or not executable. 请在内核源码根目录运行该脚本"
  exit 1
fi

config_exists() {
  local cfg=$1
  grep -qr "^config $cfg" . || return 1
}

try_enable() {
  local cfg=$1
  if config_exists "$cfg"; then
    echo "启用配置: CONFIG_$cfg"
    scripts/config --enable "CONFIG_$cfg"
  else
    echo "警告: CONFIG_$cfg 不存在,跳过"
  fi
}

echo "====== 开始设置完整调试配置 ======"

#################################
# 基础调试符号支持(gdb/bcc/crash)
#################################
try_enable DEBUG_KERNEL
try_enable DEBUG_INFO
try_enable DEBUG_INFO_DWARF4
try_enable DEBUG_INFO_BTF
try_enable FRAME_POINTER
try_enable KALLSYMS
try_enable KALLSYMS_ALL
try_enable STACK_VALIDATION

#################################
# crash/kdump 支持
#################################
try_enable PROC_KCORE
try_enable CRASH_DUMP
try_enable KDUMP
try_enable KEXEC
try_enable KEXEC_FILE
try_enable VMCOREINFO

#################################
# gdb/kgdb 支持
#################################
try_enable KGDB
try_enable KGDB_SERIAL_CONSOLE

#################################
# dynamic debug
#################################
try_enable DYNAMIC_DEBUG

#################################
# ftrace 支持
#################################
try_enable TRACEPOINTS
try_enable FUNCTION_TRACER
try_enable FUNCTION_GRAPH_TRACER
try_enable DYNAMIC_FTRACE
try_enable STACK_TRACER

#################################
# lock 调试相关
#################################
try_enable DEBUG_SPINLOCK
try_enable DEBUG_MUTEXES
try_enable PROVE_LOCKING
try_enable DEBUG_LOCKDEP
try_enable LOCK_STAT
try_enable DEBUG_ATOMIC_SLEEP
try_enable DEBUG_WW_MUTEX_SLOWPATH

#################################
# bpf/ebpf 支持
#################################
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_PROG_TEST_RUN

# JIT 能力标识
try_enable HAVE_BPF_JIT
try_enable HAVE_EBPF_JIT

# 支持 map 类型
for m in ARRAY HASH PERCPU_ARRAY RINGBUF STACK_TRACE LPM_TRIE TASK_STORAGE SOCKHASH; do
  try_enable BPF_MAP_TYPE_${m}
done

#################################
# BCC 所需诊断接口
#################################
try_enable UNIX_DIAG
try_enable INET_DIAG
try_enable PACKET_DIAG
try_enable SOCK_DIAG
try_enable DEBUG_FS

echo "✅ 完整调试内核配置完成!请执行: make olddefconfig && make"
```

---

## 🛠 使用说明

```bash
cd /usr/src/linux-<version>
chmod +x set_debug_full.sh
./set_debug_full.sh
make olddefconfig
```

---

## 🔍 功能涵盖汇总

| 模块功能           | 覆盖配置项                                                                                   |
| -------------- | --------------------------------------------------------------------------------------- |
| crash/kdump    | `CRASH_DUMP`, `KDUMP`, `KEXEC`, `PROC_KCORE`, `VMCOREINFO`                              |
| gdb/kgdb       | `KGDB`, `KGDB_SERIAL_CONSOLE`                                                           |
| ftrace         | `FUNCTION_TRACER`, `FUNCTION_GRAPH_TRACER`, `DYNAMIC_FTRACE`, `STACK_TRACER`            |
| dynamic\_debug | `DYNAMIC_DEBUG`                                                                         |
| lockdep        | `DEBUG_SPINLOCK`, `PROVE_LOCKING`, `LOCK_STAT`, `DEBUG_LOCKDEP`, `DEBUG_ATOMIC_SLEEP` 等 |
| bpf/ebpf       | `BPF_*`, JIT、map、LSM 支持                                                                 |
| bcc支持模块        | `DEBUG_INFO*`, `SOCK_DIAG`, `DEBUG_FS`, `UNIX_DIAG` 等                                   |

---

如你还希望我生成对应的 `.config` 示例文件,或提供精简编译建议(比如只编译 bzImage、不编模块),我可以继续生成。是否需要我同时生成 `.config` 文件供参考?

  

明白!下面给你一套完整方案,包含:

* **内核配置脚本(确保启用模块、bcc、eBPF、Cilium、全调试等)**
* **编译并使用 `make rpm-pkg` 生成 RPM 包**
* **生成和验证 initramfs/initrd**
* **更新 grub 引导**

---

# 一、完整内核配置脚本 (`config_full.sh`)

```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

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 "✅ 配置完成,请执行:make olddefconfig && make"
```

---

# 二、编译并打包成RPM

```bash
bash ./config_full.sh

make olddefconfig

# 使用 rpm-pkg 生成 rpm 包(默认在 ~/rpmbuild/RPMS/ 目录)
make -j$(nproc) rpm-pkg
```

---

# 三、安装 RPM 包

```bash
sudo dnf install ~/rpmbuild/RPMS/x86_64/kernel-*.rpm \
                 ~/rpmbuild/RPMS/x86_64/kernel-devel-*.rpm \
                 ~/rpmbuild/RPMS/x86_64/kernel-headers-*.rpm
```

---

# 四、生成并验证 initramfs

```bash
# 生成 initramfs
sudo dracut --force --kver $(make kernelrelease) /boot/initramfs-$(make kernelrelease).img

# 验证 initramfs 内容(解压查看)
mkdir /tmp/initramfs
cd /tmp/initramfs
xzcat /boot/initramfs-$(make kernelrelease).img | cpio -idmv
# 查看关键模块是否存在,如 netfilter、ebpf 等
find . -name '*.ko' | grep -E 'xt_nat|bpf|nf_conntrack'
```

---

# 五、更新 grub 并重启

```bash
sudo grub2-mkconfig -o /boot/grub2/grub.cfg
sudo reboot
```

---

# 备注

* `make rpm-pkg` 会自动打包内核和模块,不需你手动调用 `rpmbuild`
* 生成的 RPM 默认存放在 `~/rpmbuild/RPMS/x86_64/`
* `dracut` 会根据当前内核配置打包驱动到 initramfs,确保你的关键驱动(如网络、存储)已编译模块化且正确安装
* 生成 initramfs 后解压查看,确认关键模块已被打包进去,可以排查启动时驱动缺失问题

---

如果你需要,我也能帮你写一键脚本,从配置到打包到安装再到更新 grub 全自动完成。需要告诉我\~

  

 

posted on 2025-05-13 12:57  吃草的青蛙  阅读(70)  评论(0)    收藏  举报

导航