[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6K2WF2TAT3WHEWZETMYQYXP":3,"skill-same:01M6K2WF2TAT3WHEWZETMYQYXP":164},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":16,"categories":17,"keywords":23,"publishedAt":37,"linkOnly":38,"markdownContent":39,"markdownBody":40,"frontMatter":41,"refName":44,"commitSha":45,"skillDirectory":46,"forksCount":47,"repositoryHtmlUrl":48,"repositoryHomepageUrl":49,"ownerHtmlUrl":50,"ownerBlogUrl":49,"ownerDescription":6,"updatedAt":51,"install":52,"resources":65},"01M6K2WF2TAT3WHEWZETMYQYXP","kernel-dev",null,"Linux 内核研发自动化技能（RPM 包管理系统），提供内核编译（SRPM\u002FUpstream 双方法）、内核 module 开发环境搭建、依赖安装、示例代码生成等功能。Linux 官方内核及上游最新内核，兼容 x86_64 和 aarch64 双架构。使用场景：内核定制开发、驱动模块研发、内核漏洞修复验证。适用于 RPM 包管理的 Linux 系统（如 Alibaba Cloud Linux）。","agentic-os-org\u002FANOLISA","agentic-os-org","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F326861446?v=4","01M6K2QGJPXKNJFSPNB3FYW1R3","Agentic OS","01M6K2QGQ6W3S1A9J9DR1G88NZ",663,"Apache-2.0","https:\u002F\u002Fgithub.com\u002Fagentic-os-org\u002FANOLISA\u002Fblob\u002Fmain\u002Fsrc\u002Fos-skills\u002Fdevops\u002Fkernel-dev\u002FSKILL.md",[18],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000030","开发工程师","PROFESSION","适用职业",[24,25,26,27,28,29,30,31,32,33,34,35,36],"kernel","dev","kernel dev","linux","core","cloud","Production","生成","upstream","module","自动化","rpm","alibaba","2026-11-10 10:12:30",false,"---\nname: kernel-dev\nversion: 1.0.0\ndescription: Linux 内核研发自动化技能（RPM 包管理系统），提供内核编译（SRPM\u002FUpstream 双方法）、内核 module 开发环境搭建、依赖安装、示例代码生成等功能。Linux 官方内核及上游最新内核，兼容 x86_64 和 aarch64 双架构。使用场景：内核定制开发、驱动模块研发、内核漏洞修复验证。适用于 RPM 包管理的 Linux 系统（如 Alibaba Cloud Linux）。\nlayer: core\nlifecycle: production\n---\n\n# Kernel Development - Linux 内核研发自动化\n\n## 核心定位\n\n**五大功能：**\n1. **依赖检测与安装** - 自动检测并安装内核开发所需的软件包\n2. **工具链安装** - 安装编译器（gcc）、make、git 等开发工具\n3. **内核 devel 包安装** - 下载并安装当前系统内核的 devel 包\n4. **内核编译** - 支持两种编译方法：\n   - **SRPM 方法**：Alinux4 官方内核，输出 RPM 包，适合生产环境\n   - **Upstream 方法**：kernel.org 最新内核，编译快速，适合新特性测试\n5. **Module 编译测试** - 测试编译示例内核 module\n\n**支持架构：**\n- `x86_64` — Intel\u002FAMD 64 位服务器\n- `aarch64` — ARM 64 位服务器（如倚天 710）\n\n**重要约束：**\n- ? 需要 root 权限执行内核相关操作\n- ? 仅Linux操作系统\n- ⚠️ 内核编译会消耗大量系统资源（建议至少 4GB 内存）\n- ⏱️ 编译时间：SRPM 方法 1-3 小时，Upstream 方法 30-60 分钟\n\n---\n\n## 快速开始\n\n### 一键搭建开发环境\n\n```bash\n# 1. 检测系统架构\nARCH=$(uname -m)\nKERNEL_VER=$(uname -r)\necho \"架构: $ARCH | 内核: $KERNEL_VER\"\n# x86_64 示例输出：架构: x86_64 | 内核: 6.6.102-5.2.alnx4.x86_64\n# aarch64 示例输出：架构: aarch64 | 内核: 6.6.102-5.2.alnx4.aarch64\n\n# 2. 检查 Alinux4 系统\ngrep -i 'alinux\\|alnx' \u002Fetc\u002Fos-release || echo \"[警告] 非 Alinux4 系统\"\n\n# 3. 安装所有依赖（两种架构通用）\nsudo yum install -y \\\n  gcc gcc-c++ make binutils \\\n  flex bison \\\n  libelf-devel openssl-devel ncurses-devel \\\n  pahole perl python3 python3-devel \\\n  git ccache dwarves wget curl kmod \\\n  rpm-build rpmdevtools\n\n# 4. 安装内核 devel 包（yum 自动匹配当前架构）\nsudo yum install -y kernel-devel-$KERNEL_VER kernel-headers-$KERNEL_VER\n\n# 5. 验证环境\nls -l \u002Flib\u002Fmodules\u002F$KERNEL_VER\u002Fbuild\ngcc --version\n\n# 6. 编译内核（可选，两种方法）\n# 方法 A: Upstream 方法（推荐，快速）\nsudo .\u002Fscripts\u002Fbuild-kernel.sh upstream latest 8 defconfig\n\n# 方法 B: SRPM 方法（Alinux4 官方）\nsudo .\u002Fscripts\u002Fbuild-kernel.sh srpm 6.6.102-5.2.alnx4.x86_64\n```\n\n### 创建第一个内核模块\n\n```bash\nMODULE_NAME=\"hello_module\"\nmkdir -p $MODULE_NAME && cd $MODULE_NAME\n\n# 创建模块代码\ncat > ${MODULE_NAME}.c \u003C\u003C 'EOF'\n#include \u003Clinux\u002Finit.h>\n#include \u003Clinux\u002Fmodule.h>\n#include \u003Clinux\u002Fkernel.h>\n\nMODULE_LICENSE(\"GPL\");\nMODULE_AUTHOR(\"Alinux4 Kernel Dev\");\nMODULE_DESCRIPTION(\"Hello World kernel module for alnx4\");\nMODULE_VERSION(\"0.1\");\n\nstatic int __init hello_init(void)\n{\n    printk(KERN_INFO \"hello_module: Module loaded (alnx4)\\n\");\n    return 0;\n}\n\nstatic void __exit hello_exit(void)\n{\n    printk(KERN_INFO \"hello_module: Module unloaded\\n\");\n}\n\nmodule_init(hello_init);\nmodule_exit(hello_exit);\nEOF\n\n# 创建 Makefile\ncat > Makefile \u003C\u003C 'EOF'\nobj-m += hello_module.o\n\nKERNEL_DIR := \u002Flib\u002Fmodules\u002F$(shell uname -r)\u002Fbuild\nPWD := $(shell pwd)\n\nall:\n\tmake -C $(KERNEL_DIR) M=$(PWD) modules\n\nclean:\n\tmake -C $(KERNEL_DIR) M=$(PWD) clean\n\ninstall:\n\tsudo insmod hello_module.ko\n\nunload:\n\tsudo rmmod hello_module\n\n.PHONY: all clean install unload\nEOF\n\n# 编译和加载\nmake\nsudo make install\n\n# 查看日志\ndmesg | tail\n\n# 卸载\nsudo make unload\n```\n\n---\n\n## Step-by-Step 环境搭建\n\n### Step 1: 检测系统架构与信息\n\n```bash\n# 检测架构并设置架构相关变量\nARCH=$(uname -m)\nKERNEL_VER=$(uname -r)\n\necho \"系统架构: $ARCH\"\necho \"内核版本: $KERNEL_VER\"\n# x86_64 典型输出：6.6.102-5.2.alnx4.x86_64\n# aarch64 典型输出：6.6.102-5.2.alnx4.aarch64\n\n# 查看操作系统版本\ncat \u002Fetc\u002Fos-release\n\n# 检查是否为 Alinux4 系统\ngrep -i 'alinux\\|alnx' \u002Fetc\u002Fos-release\n\n# 确认架构支持\ncase \"$ARCH\" in\n    x86_64)  echo \"[✓] x86_64 架构，支持\" ;;\n    aarch64) echo \"[✓] aarch64 架构，支持\" ;;\n    *)       echo \"[✗] 不支持的架构: $ARCH\" ; exit 1 ;;\nesac\n```\n\n### Step 2: 安装内核开发依赖\n\n以下依赖包为 x86_64 和 aarch64 通用，yum 会自动匹配当前架构下载对应包：\n\n```bash\n# 通用依赖（两种架构均适用）\nsudo yum install -y \\\n  gcc gcc-c++ make binutils \\\n  flex bison \\\n  libelf-devel openssl-devel ncurses-devel \\\n  pahole perl python3 python3-devel \\\n  git ccache dwarves wget curl kmod\n```\n\n**依赖包说明：**\n\n| 软件包 | 用途 | 必需 | 架构 |\n|--------|------|------|------|\n| gcc, gcc-c++ | GNU 编译器 | ✓ | 通用 |\n| make | 构建工具 | ✓ | 通用 |\n| binutils | 二进制工具 | ✓ | 通用 |\n| flex, bison | 词法\u002F语法分析器 | ✓ | 通用 |\n| libelf-devel | ELF 文件处理 | ✓ | 通用 |\n| openssl-devel | SSL\u002FTLS 库 | ✓ | 通用 |\n| ncurses-devel | 终端 UI 库 | ✓ | 通用 |\n| pahole | DWARF 调试工具 | ✓ | 通用 |\n| kmod | 内核模块工具 | ✓ | 通用 |\n| git | 版本控制 | ○ | 通用 |\n| ccache | 编译加速 | ○ | 通用 |\n\n> **注意**：yum 仓库的 baseurl 中架构路径不同：\n> - x86_64: `https:\u002F\u002Fmirrors.aliyun.com\u002Falinux\u002F4\u002Fupdates\u002Fx86_64\u002Fos\u002F`\n> - aarch64: `https:\u002F\u002Fmirrors.aliyun.com\u002Falinux\u002F4\u002Fupdates\u002Faarch64\u002Fos\u002F`\n\n**检查依赖是否已安装：**\n\n```bash\necho \"当前架构: $(uname -m)\"\nfor pkg in gcc make flex bison libelf-devel openssl-devel ncurses-devel pahole perl python3 kmod; do\n    if rpm -q $pkg &>\u002Fdev\u002Fnull; then\n        echo \"[✓] $pkg 已安装\"\n    else\n        echo \"[✗] $pkg 未安装\"\n    fi\ndone\n```\n\n### Step 3: 安装内核 devel 包\n\n```bash\n# 获取当前内核版本和架构\nKERNEL_VER=$(uname -r)\nARCH=$(uname -m)\necho \"当前内核：$KERNEL_VER （架构：$ARCH）\"\n# x86_64 示例：6.6.102-5.2.alnx4.x86_64\n# aarch64 示例：6.6.102-5.2.alnx4.aarch64\n\n# 安装匹配的 devel 包和 headers 包（yum 自动匹配架构）\nsudo yum install -y kernel-devel-$KERNEL_VER kernel-headers-$KERNEL_VER\n\n# 验证安装\nls -l \u002Flib\u002Fmodules\u002F$KERNEL_VER\u002Fbuild\n```\n\n**验证成功标志：**\n```\n# x86_64:\n\u002Flib\u002Fmodules\u002F6.6.102-5.2.alnx4.x86_64\u002Fbuild -> ..\u002F..\u002Fusr\u002Fsrc\u002Fkernels\u002F...\n# aarch64:\n\u002Flib\u002Fmodules\u002F6.6.102-5.2.alnx4.aarch64\u002Fbuild -> ..\u002F..\u002Fusr\u002Fsrc\u002Fkernels\u002F...\n```\n\n### Step 4: 验证编译环境\n\n```bash\n# 检查 GCC 版本\ngcc --version\n\n# 检查 Make 版本\nmake --version\n\n# 检查 kmod 版本\nkmod --version\n\n# 检查内核头文件\nls \u002Fusr\u002Finclude\u002Flinux\u002F*.h | head -5\n\n# 测试编译简单模块\nmkdir -p \u002Ftmp\u002Fkernel_test && cd \u002Ftmp\u002Fkernel_test\n\ncat > test_module.c \u003C\u003C 'EOF'\n#include \u003Clinux\u002Finit.h>\n#include \u003Clinux\u002Fmodule.h>\nMODULE_LICENSE(\"GPL\");\nstatic int __init test_init(void) { return 0; }\nstatic void __exit test_exit(void) {}\nmodule_init(test_init);\nmodule_exit(test_exit);\nEOF\n\ncat > Makefile \u003C\u003C 'EOF'\nobj-m += test_module.o\nKERNEL_DIR := \u002Flib\u002Fmodules\u002F$(shell uname -r)\u002Fbuild\nPWD := $(shell pwd)\nall:\n\tmake -C $(KERNEL_DIR) M=$(PWD) modules\nclean:\n\tmake -C $(KERNEL_DIR) M=$(PWD) clean\nEOF\n\nmake && ls -lh test_module.ko\n```\n\n---\n\n## 内核 Module 开发\n\n### 创建自定义 Module\n\n以下脚本可创建一个完整的内核模块项目，包含源码和 Makefile：\n\n```bash\n#!\u002Fbin\u002Fbash\n# 用法: bash create_module.sh \u003Cmodule_name>\nMODULE_NAME=\"${1:?请提供模块名称}\"\n\nif [ -d \"$MODULE_NAME\" ]; then\n    echo \"[✗] 目录已存在：$MODULE_NAME\"\n    exit 1\nfi\n\nmkdir -p \"$MODULE_NAME\" && cd \"$MODULE_NAME\"\n\n# 创建模块代码\ncat > ${MODULE_NAME}.c \u003C\u003C CEOF\n\u002F* ${MODULE_NAME} - Kernel Module for Alinux4 *\u002F\n#include \u003Clinux\u002Finit.h>\n#include \u003Clinux\u002Fmodule.h>\n#include \u003Clinux\u002Fkernel.h>\n\nMODULE_LICENSE(\"GPL\");\nMODULE_AUTHOR(\"Alinux4 Kernel Dev\");\nMODULE_DESCRIPTION(\"${MODULE_NAME}: A simple kernel module for alnx4\");\nMODULE_VERSION(\"0.1\");\n\nstatic int __init ${MODULE_NAME}_init(void)\n{\n    printk(KERN_INFO \"${MODULE_NAME}: Module loaded (alnx4)\\n\");\n    printk(KERN_INFO \"${MODULE_NAME}: Hello, Alinux4 Kernel!\\n\");\n    return 0;\n}\n\nstatic void __exit ${MODULE_NAME}_exit(void)\n{\n    printk(KERN_INFO \"${MODULE_NAME}: Module unloaded\\n\");\n}\n\nmodule_init(${MODULE_NAME}_init);\nmodule_exit(${MODULE_NAME}_exit);\nCEOF\n\n# 创建 Makefile\ncat > Makefile \u003C\u003C MEOF\nobj-m += ${MODULE_NAME}.o\n\nKERNEL_DIR := \u002Flib\u002Fmodules\u002F\\$(shell uname -r)\u002Fbuild\nPWD := \\$(shell pwd)\n\nall:\n\tmake -C \\$(KERNEL_DIR) M=\\$(PWD) modules\n\nclean:\n\tmake -C \\$(KERNEL_DIR) M=\\$(PWD) clean\n\ninstall:\n\tsudo insmod ${MODULE_NAME}.ko\n\nunload:\n\tsudo rmmod ${MODULE_NAME}\n\nstatus:\n\tdmesg | tail -20 | grep ${MODULE_NAME}\n\n.PHONY: all clean install unload status\nMEOF\n\necho \"[✓] Module 文件已创建:\"\necho \"  - ${MODULE_NAME}\u002F${MODULE_NAME}.c\"\necho \"  - ${MODULE_NAME}\u002FMakefile\"\necho \"\"\necho \"快速开始:\"\necho \"  cd ${MODULE_NAME} && make && sudo make install\"\n```\n\n### 编译和测试 Module\n\n```bash\ncd my_module\n\n# 编译\nmake\n\n# 查看生成的文件\nls -lh *.ko\n\n# 显示模块信息\nmodinfo my_module.ko\n\n# 加载模块（需要 root）\nsudo insmod my_module.ko\n\n# 检查是否加载成功\nlsmod | grep my_module\n\n# 查看内核日志\ndmesg | tail -10\n\n# 卸载模块\nsudo rmmod my_module\n\n# 再次查看日志\ndmesg | tail -10\n```\n\n---\n\n## 故障排查\n\n### 自动化诊断工具\n\n**使用环境检查脚本：**\n\n```bash\n# 检查所有依赖\n.\u002Fscripts\u002Fcheck-env.sh\n\n# 自动安装缺失的依赖\nsudo .\u002Fscripts\u002Finstall-deps.sh\n\n# 一键搭建环境\nsudo .\u002Fscripts\u002Fsetup.sh\n```\n\n### 常见问题\n\n**Q1: 缺少内核头文件**\n\n```bash\n# 检查 devel 包\nrpm -qa | grep kernel-devel\n\n# 安装匹配的 devel 包\nsudo yum install kernel-devel-$(uname -r) kernel-headers-$(uname -r)\n\n# 验证链接\nls -l \u002Flib\u002Fmodules\u002F$(uname -r)\u002Fbuild\n```\n\n**Q2: GCC 版本不匹配**\n\n```bash\n# 查看 GCC 版本\ngcc --version\n\n# 重新安装 GCC\nsudo yum reinstall gcc gcc-c++\n```\n\n**Q3: 编译时内存不足**\n\n```bash\n# 减少编译线程数\nmake -j2\n\n# 或增加 swap\nsudo fallocate -l 4G \u002Fswapfile\nsudo chmod 600 \u002Fswapfile\nsudo mkswap \u002Fswapfile\nsudo swapon \u002Fswapfile\n```\n\n**Q4: insmod 失败 - 无效格式**\n\n```bash\n# 检查内核版本匹配\nuname -r\nmodinfo my_module.ko | grep vermagic\n\n# 如果不匹配，重新编译\nmake clean && make\n```\n\n**Q5: Secure Boot 阻止模块加载**\n\n```bash\n# 临时禁用 Secure Boot（重启时按 F2\u002FDel 进入 BIOS）\n# 或为模块签名\nsudo mokutil --disable-validation\n```\n\n**Q6: 缺少 kmod 工具**\n\n```bash\n# 安装 kmod\nsudo yum install kmod\n\n# 验证\nkmod --version\n```\n\n**Q7: 编译警告 \"compiler differs from the one used to build the kernel\"**\n\n这是正常警告，表示当前 GCC 版本与编译内核时的 GCC 版本略有不同。\n只要主版本相同（如都是 GCC 12.3），通常可以安全忽略。\n\n```bash\n# 查看内核编译版本\ncat \u002Fproc\u002Fversion\n\n# 查看当前 GCC 版本\ngcc --version\n```\n\n**Q8: BTF generation skipped**\n\n```bash\n# 警告信息：Skipping BTF generation due to unavailability of vmlinux\n# 这是正常现象，BTF 是可选功能，不影响模块基本功能\n# 如需 BTF 支持，需要编译完整的内核\n```\n\n### 诊断命令\n\n```bash\n# 检查已安装的依赖\nrpm -qa | grep -E 'gcc|make|flex|bison|kmod'\n\n# 检查内核头文件\nls \u002Fusr\u002Finclude\u002Flinux\u002F*.h | wc -l\n\n# 检查 Kbuild 系统\nls -l \u002Flib\u002Fmodules\u002F$(uname -r)\u002Fbuild\u002FMakefile\n\n# 查看模块依赖\nmodinfo my_module.ko\n\n# 查看内核日志\ndmesg | tail -50\n\n# 检查内核版本\ncat \u002Fetc\u002Fsystem-release\nuname -r\n```\n\n---\n\n## 验收标准\n\n### 环境搭建验收\n\n| 步骤 | 检查命令 | 成功标志 |\n|------|---------|---------|\n| 1️⃣ 依赖安装 | `gcc --version` | GCC >= 10.0 |\n| 2️⃣ 工具链 | `make --version` | Make >= 4.0 |\n| 3️⃣ kmod 工具 | `kmod --version` | kmod 已安装 |\n| 4️⃣ 内核头文件 | `ls \u002Fusr\u002Finclude\u002Flinux` | 头文件存在 |\n| 5️⃣ Kbuild | `ls \u002Flib\u002Fmodules\u002F$(uname -r)\u002Fbuild` | build 链接存在 |\n| 6️⃣ 编译测试 | `make` (测试模块) | .ko 文件生成 |\n| 7️⃣ 加载测试 | `sudo insmod test.ko` | 无报错，dmesg 有输出 |\n\n### Module 开发验收\n\n```bash\n# 1. 创建 module（使用上面的 create_module.sh 脚本）\nbash create_module.sh test_mod\n\n# 2. 编译 module\ncd test_mod && make\n\n# 3. 生成 .ko 文件\nls -lh test_mod.ko  # 应该有文件\n\n# 4. 加载 module\nsudo insmod test_mod.ko  # 无报错\n\n# 5. 查看日志\ndmesg | tail  # 应有 \"test_mod: Module loaded\"\n\n# 6. 卸载 module\nsudo rmmod test_mod  # 无报错\n```\n\n---\n\n## 最佳实践\n\n### 1. 使用 ccache 加速编译\n\n```bash\n# 安装\nsudo yum install ccache\n\n# 配置 ~\u002F.bashrc\nexport CCACHE_DIR=$HOME\u002F.ccache\nexport CC=\"ccache gcc\"\nexport CXX=\"ccache g++\"\n\n# 查看统计\nccache --stats\n```\n\n**编译速度提升：**\n- 首次编译：~45 分钟\n- 二次编译：~8 分钟（提升 5.6 倍）\n\n### 2. 保存内核配置\n\n```bash\n# 备份当前配置\ncp \u002Fboot\u002Fconfig-$(uname -r) ~\u002Fkernel-configs\u002Fmy-config\n\n# 恢复配置\ncp ~\u002Fkernel-configs\u002Fmy-config \u002Fusr\u002Fsrc\u002Fkernels\u002Flinux-*\u002F.config\nmake olddefconfig\n```\n\n### 3. 增量编译\n\n```bash\n# 只编译修改的部分\nmake -j8 && make modules -j8\n\n# 清理特定模块\nmake M=drivers\u002Fnet clean && make M=drivers\u002Fnet\n```\n\n### 4. 版本控制\n\n```bash\ncd my_module\ngit init\ngit add .\ngit commit -m \"Initial kernel module\"\n```\n\n---\n\n## Examples\n\n- [编译新内核](examples\u002Fbuild-kernel.md) — **双方法编译指南**（SRPM\u002FUpstream），包含配置优化、编译加速、安装流程\n- [编译示例内核 Module](examples\u002Fbuild-module.md) — Hello World 内核模块的创建、编译、加载、卸载\n- [示例模块集合](examples\u002FREADME.md) — 包含 hello_module、param_module、proc_module、char_device\n\n---\n\n## Scripts\n\n| 脚本 | 描述 |\n|------|------|\n| `scripts\u002Fbuild-kernel.sh` | **内核编译自动化**（支持 SRPM\u002FUpstream 双方法） |\n| `scripts\u002Fcheck-env.sh` | 检查环境依赖 |\n| `scripts\u002Finstall-deps.sh` | 自动安装依赖 |\n| `scripts\u002Fsetup.sh` | 一键搭建开发环境 |\n| `scripts\u002Fverify-env.sh` | 全面验证环境（含测试编译） |\n| `scripts\u002Ftest-module.sh` | 自动化测试内核模块 |\n\n**build-kernel.sh 用法：**\n```bash\n# Upstream 方法（推荐，快速）\n.\u002Fscripts\u002Fbuild-kernel.sh upstream latest 8 defconfig\n\n# SRPM 方法（Alinux4 官方）\n.\u002Fscripts\u002Fbuild-kernel.sh srpm $(uname -r)\n\n# 查看编译状态\n.\u002Fscripts\u002Fbuild-kernel.sh status\n\n# 安装编译好的内核\n.\u002Fscripts\u002Fbuild-kernel.sh install upstream\n```\n\n---\n\n## Documentation\n\n| 文档 | 描述 |\n|------|------|\n| [docs\u002Ftroubleshooting.md](docs\u002Ftroubleshooting.md) | **内核编译故障排查指南**（10+ 常见问题及解决方案） |\n| [docs\u002Fmodule-signing.md](docs\u002Fmodule-signing.md) | 内核模块签名指南（Secure Boot） |\n| [docs\u002Fbuild-performance.md](docs\u002Fbuild-performance.md) | 编译性能优化指南（ccache、并行编译） |\n\n---\n\n## References\n\n- [Alinux4 软件仓库](references\u002Falinux4-repo.md) — 仓库地址、YUM 配置、常用内核包\n- [内核开发资源](references\u002Fkernel-resources.md) — 内核源码、官方文档、驱动开发指南等\n\n---\n\n**适用版本**: Alinux4 (alnx4)\n**支持架构**: x86_64, aarch64\n**支持内核**:\n  - Alinux4 官方内核（通过 SRPM 编译，如 6.6.102-5.2.alnx4）\n  - 上游最新内核（通过 kernel.org，如 6.12.x、6.13.x）\n**dist 字段**: alnx4\n**软件仓库 (x86_64)**: https:\u002F\u002Fmirrors.aliyun.com\u002Falinux\u002F4\u002Fupdates\u002Fx86_64\u002Fos\u002FPackages\u002F\n**软件仓库 (aarch64)**: https:\u002F\u002Fmirrors.aliyun.com\u002Falinux\u002F4\u002Fupdates\u002Faarch64\u002Fos\u002FPackages\u002F\n**最后更新**: 2026-03-17\n","# Kernel Development - Linux 内核研发自动化\n\n## 核心定位\n\n**五大功能：**\n1. **依赖检测与安装** - 自动检测并安装内核开发所需的软件包\n2. **工具链安装** - 安装编译器（gcc）、make、git 等开发工具\n3. **内核 devel 包安装** - 下载并安装当前系统内核的 devel 包\n4. **内核编译** - 支持两种编译方法：\n   - **SRPM 方法**：Alinux4 官方内核，输出 RPM 包，适合生产环境\n   - **Upstream 方法**：kernel.org 最新内核，编译快速，适合新特性测试\n5. **Module 编译测试** - 测试编译示例内核 module\n\n**支持架构：**\n- `x86_64` — Intel\u002FAMD 64 位服务器\n- `aarch64` — ARM 64 位服务器（如倚天 710）\n\n**重要约束：**\n- ? 需要 root 权限执行内核相关操作\n- ? 仅Linux操作系统\n- ⚠️ 内核编译会消耗大量系统资源（建议至少 4GB 内存）\n- ⏱️ 编译时间：SRPM 方法 1-3 小时，Upstream 方法 30-60 分钟\n\n---\n\n## 快速开始\n\n### 一键搭建开发环境\n\n```bash\n# 1. 检测系统架构\nARCH=$(uname -m)\nKERNEL_VER=$(uname -r)\necho \"架构: $ARCH | 内核: $KERNEL_VER\"\n# x86_64 示例输出：架构: x86_64 | 内核: 6.6.102-5.2.alnx4.x86_64\n# aarch64 示例输出：架构: aarch64 | 内核: 6.6.102-5.2.alnx4.aarch64\n\n# 2. 检查 Alinux4 系统\ngrep -i 'alinux\\|alnx' \u002Fetc\u002Fos-release || echo \"[警告] 非 Alinux4 系统\"\n\n# 3. 安装所有依赖（两种架构通用）\nsudo yum install -y \\\n  gcc gcc-c++ make binutils \\\n  flex bison \\\n  libelf-devel openssl-devel ncurses-devel \\\n  pahole perl python3 python3-devel \\\n  git ccache dwarves wget curl kmod \\\n  rpm-build rpmdevtools\n\n# 4. 安装内核 devel 包（yum 自动匹配当前架构）\nsudo yum install -y kernel-devel-$KERNEL_VER kernel-headers-$KERNEL_VER\n\n# 5. 验证环境\nls -l \u002Flib\u002Fmodules\u002F$KERNEL_VER\u002Fbuild\ngcc --version\n\n# 6. 编译内核（可选，两种方法）\n# 方法 A: Upstream 方法（推荐，快速）\nsudo .\u002Fscripts\u002Fbuild-kernel.sh upstream latest 8 defconfig\n\n# 方法 B: SRPM 方法（Alinux4 官方）\nsudo .\u002Fscripts\u002Fbuild-kernel.sh srpm 6.6.102-5.2.alnx4.x86_64\n```\n\n### 创建第一个内核模块\n\n```bash\nMODULE_NAME=\"hello_module\"\nmkdir -p $MODULE_NAME && cd $MODULE_NAME\n\n# 创建模块代码\ncat > ${MODULE_NAME}.c \u003C\u003C 'EOF'\n#include \u003Clinux\u002Finit.h>\n#include \u003Clinux\u002Fmodule.h>\n#include \u003Clinux\u002Fkernel.h>\n\nMODULE_LICENSE(\"GPL\");\nMODULE_AUTHOR(\"Alinux4 Kernel Dev\");\nMODULE_DESCRIPTION(\"Hello World kernel module for alnx4\");\nMODULE_VERSION(\"0.1\");\n\nstatic int __init hello_init(void)\n{\n    printk(KERN_INFO \"hello_module: Module loaded (alnx4)\\n\");\n    return 0;\n}\n\nstatic void __exit hello_exit(void)\n{\n    printk(KERN_INFO \"hello_module: Module unloaded\\n\");\n}\n\nmodule_init(hello_init);\nmodule_exit(hello_exit);\nEOF\n\n# 创建 Makefile\ncat > Makefile \u003C\u003C 'EOF'\nobj-m += hello_module.o\n\nKERNEL_DIR := \u002Flib\u002Fmodules\u002F$(shell uname -r)\u002Fbuild\nPWD := $(shell pwd)\n\nall:\n\tmake -C $(KERNEL_DIR) M=$(PWD) modules\n\nclean:\n\tmake -C $(KERNEL_DIR) M=$(PWD) clean\n\ninstall:\n\tsudo insmod hello_module.ko\n\nunload:\n\tsudo rmmod hello_module\n\n.PHONY: all clean install unload\nEOF\n\n# 编译和加载\nmake\nsudo make install\n\n# 查看日志\ndmesg | tail\n\n# 卸载\nsudo make unload\n```\n\n---\n\n## Step-by-Step 环境搭建\n\n### Step 1: 检测系统架构与信息\n\n```bash\n# 检测架构并设置架构相关变量\nARCH=$(uname -m)\nKERNEL_VER=$(uname -r)\n\necho \"系统架构: $ARCH\"\necho \"内核版本: $KERNEL_VER\"\n# x86_64 典型输出：6.6.102-5.2.alnx4.x86_64\n# aarch64 典型输出：6.6.102-5.2.alnx4.aarch64\n\n# 查看操作系统版本\ncat \u002Fetc\u002Fos-release\n\n# 检查是否为 Alinux4 系统\ngrep -i 'alinux\\|alnx' \u002Fetc\u002Fos-release\n\n# 确认架构支持\ncase \"$ARCH\" in\n    x86_64)  echo \"[✓] x86_64 架构，支持\" ;;\n    aarch64) echo \"[✓] aarch64 架构，支持\" ;;\n    *)       echo \"[✗] 不支持的架构: $ARCH\" ; exit 1 ;;\nesac\n```\n\n### Step 2: 安装内核开发依赖\n\n以下依赖包为 x86_64 和 aarch64 通用，yum 会自动匹配当前架构下载对应包：\n\n```bash\n# 通用依赖（两种架构均适用）\nsudo yum install -y \\\n  gcc gcc-c++ make binutils \\\n  flex bison \\\n  libelf-devel openssl-devel ncurses-devel \\\n  pahole perl python3 python3-devel \\\n  git ccache dwarves wget curl kmod\n```\n\n**依赖包说明：**\n\n| 软件包 | 用途 | 必需 | 架构 |\n|--------|------|------|------|\n| gcc, gcc-c++ | GNU 编译器 | ✓ | 通用 |\n| make | 构建工具 | ✓ | 通用 |\n| binutils | 二进制工具 | ✓ | 通用 |\n| flex, bison | 词法\u002F语法分析器 | ✓ | 通用 |\n| libelf-devel | ELF 文件处理 | ✓ | 通用 |\n| openssl-devel | SSL\u002FTLS 库 | ✓ | 通用 |\n| ncurses-devel | 终端 UI 库 | ✓ | 通用 |\n| pahole | DWARF 调试工具 | ✓ | 通用 |\n| kmod | 内核模块工具 | ✓ | 通用 |\n| git | 版本控制 | ○ | 通用 |\n| ccache | 编译加速 | ○ | 通用 |\n\n> **注意**：yum 仓库的 baseurl 中架构路径不同：\n> - x86_64: `https:\u002F\u002Fmirrors.aliyun.com\u002Falinux\u002F4\u002Fupdates\u002Fx86_64\u002Fos\u002F`\n> - aarch64: `https:\u002F\u002Fmirrors.aliyun.com\u002Falinux\u002F4\u002Fupdates\u002Faarch64\u002Fos\u002F`\n\n**检查依赖是否已安装：**\n\n```bash\necho \"当前架构: $(uname -m)\"\nfor pkg in gcc make flex bison libelf-devel openssl-devel ncurses-devel pahole perl python3 kmod; do\n    if rpm -q $pkg &>\u002Fdev\u002Fnull; then\n        echo \"[✓] $pkg 已安装\"\n    else\n        echo \"[✗] $pkg 未安装\"\n    fi\ndone\n```\n\n### Step 3: 安装内核 devel 包\n\n```bash\n# 获取当前内核版本和架构\nKERNEL_VER=$(uname -r)\nARCH=$(uname -m)\necho \"当前内核：$KERNEL_VER （架构：$ARCH）\"\n# x86_64 示例：6.6.102-5.2.alnx4.x86_64\n# aarch64 示例：6.6.102-5.2.alnx4.aarch64\n\n# 安装匹配的 devel 包和 headers 包（yum 自动匹配架构）\nsudo yum install -y kernel-devel-$KERNEL_VER kernel-headers-$KERNEL_VER\n\n# 验证安装\nls -l \u002Flib\u002Fmodules\u002F$KERNEL_VER\u002Fbuild\n```\n\n**验证成功标志：**\n```\n# x86_64:\n\u002Flib\u002Fmodules\u002F6.6.102-5.2.alnx4.x86_64\u002Fbuild -> ..\u002F..\u002Fusr\u002Fsrc\u002Fkernels\u002F...\n# aarch64:\n\u002Flib\u002Fmodules\u002F6.6.102-5.2.alnx4.aarch64\u002Fbuild -> ..\u002F..\u002Fusr\u002Fsrc\u002Fkernels\u002F...\n```\n\n### Step 4: 验证编译环境\n\n```bash\n# 检查 GCC 版本\ngcc --version\n\n# 检查 Make 版本\nmake --version\n\n# 检查 kmod 版本\nkmod --version\n\n# 检查内核头文件\nls \u002Fusr\u002Finclude\u002Flinux\u002F*.h | head -5\n\n# 测试编译简单模块\nmkdir -p \u002Ftmp\u002Fkernel_test && cd \u002Ftmp\u002Fkernel_test\n\ncat > test_module.c \u003C\u003C 'EOF'\n#include \u003Clinux\u002Finit.h>\n#include \u003Clinux\u002Fmodule.h>\nMODULE_LICENSE(\"GPL\");\nstatic int __init test_init(void) { return 0; }\nstatic void __exit test_exit(void) {}\nmodule_init(test_init);\nmodule_exit(test_exit);\nEOF\n\ncat > Makefile \u003C\u003C 'EOF'\nobj-m += test_module.o\nKERNEL_DIR := \u002Flib\u002Fmodules\u002F$(shell uname -r)\u002Fbuild\nPWD := $(shell pwd)\nall:\n\tmake -C $(KERNEL_DIR) M=$(PWD) modules\nclean:\n\tmake -C $(KERNEL_DIR) M=$(PWD) clean\nEOF\n\nmake && ls -lh test_module.ko\n```\n\n---\n\n## 内核 Module 开发\n\n### 创建自定义 Module\n\n以下脚本可创建一个完整的内核模块项目，包含源码和 Makefile：\n\n```bash\n#!\u002Fbin\u002Fbash\n# 用法: bash create_module.sh \u003Cmodule_name>\nMODULE_NAME=\"${1:?请提供模块名称}\"\n\nif [ -d \"$MODULE_NAME\" ]; then\n    echo \"[✗] 目录已存在：$MODULE_NAME\"\n    exit 1\nfi\n\nmkdir -p \"$MODULE_NAME\" && cd \"$MODULE_NAME\"\n\n# 创建模块代码\ncat > ${MODULE_NAME}.c \u003C\u003C CEOF\n\u002F* ${MODULE_NAME} - Kernel Module for Alinux4 *\u002F\n#include \u003Clinux\u002Finit.h>\n#include \u003Clinux\u002Fmodule.h>\n#include \u003Clinux\u002Fkernel.h>\n\nMODULE_LICENSE(\"GPL\");\nMODULE_AUTHOR(\"Alinux4 Kernel Dev\");\nMODULE_DESCRIPTION(\"${MODULE_NAME}: A simple kernel module for alnx4\");\nMODULE_VERSION(\"0.1\");\n\nstatic int __init ${MODULE_NAME}_init(void)\n{\n    printk(KERN_INFO \"${MODULE_NAME}: Module loaded (alnx4)\\n\");\n    printk(KERN_INFO \"${MODULE_NAME}: Hello, Alinux4 Kernel!\\n\");\n    return 0;\n}\n\nstatic void __exit ${MODULE_NAME}_exit(void)\n{\n    printk(KERN_INFO \"${MODULE_NAME}: Module unloaded\\n\");\n}\n\nmodule_init(${MODULE_NAME}_init);\nmodule_exit(${MODULE_NAME}_exit);\nCEOF\n\n# 创建 Makefile\ncat > Makefile \u003C\u003C MEOF\nobj-m += ${MODULE_NAME}.o\n\nKERNEL_DIR := \u002Flib\u002Fmodules\u002F\\$(shell uname -r)\u002Fbuild\nPWD := \\$(shell pwd)\n\nall:\n\tmake -C \\$(KERNEL_DIR) M=\\$(PWD) modules\n\nclean:\n\tmake -C \\$(KERNEL_DIR) M=\\$(PWD) clean\n\ninstall:\n\tsudo insmod ${MODULE_NAME}.ko\n\nunload:\n\tsudo rmmod ${MODULE_NAME}\n\nstatus:\n\tdmesg | tail -20 | grep ${MODULE_NAME}\n\n.PHONY: all clean install unload status\nMEOF\n\necho \"[✓] Module 文件已创建:\"\necho \"  - ${MODULE_NAME}\u002F${MODULE_NAME}.c\"\necho \"  - ${MODULE_NAME}\u002FMakefile\"\necho \"\"\necho \"快速开始:\"\necho \"  cd ${MODULE_NAME} && make && sudo make install\"\n```\n\n### 编译和测试 Module\n\n```bash\ncd my_module\n\n# 编译\nmake\n\n# 查看生成的文件\nls -lh *.ko\n\n# 显示模块信息\nmodinfo my_module.ko\n\n# 加载模块（需要 root）\nsudo insmod my_module.ko\n\n# 检查是否加载成功\nlsmod | grep my_module\n\n# 查看内核日志\ndmesg | tail -10\n\n# 卸载模块\nsudo rmmod my_module\n\n# 再次查看日志\ndmesg | tail -10\n```\n\n---\n\n## 故障排查\n\n### 自动化诊断工具\n\n**使用环境检查脚本：**\n\n```bash\n# 检查所有依赖\n.\u002Fscripts\u002Fcheck-env.sh\n\n# 自动安装缺失的依赖\nsudo .\u002Fscripts\u002Finstall-deps.sh\n\n# 一键搭建环境\nsudo .\u002Fscripts\u002Fsetup.sh\n```\n\n### 常见问题\n\n**Q1: 缺少内核头文件**\n\n```bash\n# 检查 devel 包\nrpm -qa | grep kernel-devel\n\n# 安装匹配的 devel 包\nsudo yum install kernel-devel-$(uname -r) kernel-headers-$(uname -r)\n\n# 验证链接\nls -l \u002Flib\u002Fmodules\u002F$(uname -r)\u002Fbuild\n```\n\n**Q2: GCC 版本不匹配**\n\n```bash\n# 查看 GCC 版本\ngcc --version\n\n# 重新安装 GCC\nsudo yum reinstall gcc gcc-c++\n```\n\n**Q3: 编译时内存不足**\n\n```bash\n# 减少编译线程数\nmake -j2\n\n# 或增加 swap\nsudo fallocate -l 4G \u002Fswapfile\nsudo chmod 600 \u002Fswapfile\nsudo mkswap \u002Fswapfile\nsudo swapon \u002Fswapfile\n```\n\n**Q4: insmod 失败 - 无效格式**\n\n```bash\n# 检查内核版本匹配\nuname -r\nmodinfo my_module.ko | grep vermagic\n\n# 如果不匹配，重新编译\nmake clean && make\n```\n\n**Q5: Secure Boot 阻止模块加载**\n\n```bash\n# 临时禁用 Secure Boot（重启时按 F2\u002FDel 进入 BIOS）\n# 或为模块签名\nsudo mokutil --disable-validation\n```\n\n**Q6: 缺少 kmod 工具**\n\n```bash\n# 安装 kmod\nsudo yum install kmod\n\n# 验证\nkmod --version\n```\n\n**Q7: 编译警告 \"compiler differs from the one used to build the kernel\"**\n\n这是正常警告，表示当前 GCC 版本与编译内核时的 GCC 版本略有不同。\n只要主版本相同（如都是 GCC 12.3），通常可以安全忽略。\n\n```bash\n# 查看内核编译版本\ncat \u002Fproc\u002Fversion\n\n# 查看当前 GCC 版本\ngcc --version\n```\n\n**Q8: BTF generation skipped**\n\n```bash\n# 警告信息：Skipping BTF generation due to unavailability of vmlinux\n# 这是正常现象，BTF 是可选功能，不影响模块基本功能\n# 如需 BTF 支持，需要编译完整的内核\n```\n\n### 诊断命令\n\n```bash\n# 检查已安装的依赖\nrpm -qa | grep -E 'gcc|make|flex|bison|kmod'\n\n# 检查内核头文件\nls \u002Fusr\u002Finclude\u002Flinux\u002F*.h | wc -l\n\n# 检查 Kbuild 系统\nls -l \u002Flib\u002Fmodules\u002F$(uname -r)\u002Fbuild\u002FMakefile\n\n# 查看模块依赖\nmodinfo my_module.ko\n\n# 查看内核日志\ndmesg | tail -50\n\n# 检查内核版本\ncat \u002Fetc\u002Fsystem-release\nuname -r\n```\n\n---\n\n## 验收标准\n\n### 环境搭建验收\n\n| 步骤 | 检查命令 | 成功标志 |\n|------|---------|---------|\n| 1️⃣ 依赖安装 | `gcc --version` | GCC >= 10.0 |\n| 2️⃣ 工具链 | `make --version` | Make >= 4.0 |\n| 3️⃣ kmod 工具 | `kmod --version` | kmod 已安装 |\n| 4️⃣ 内核头文件 | `ls \u002Fusr\u002Finclude\u002Flinux` | 头文件存在 |\n| 5️⃣ Kbuild | `ls \u002Flib\u002Fmodules\u002F$(uname -r)\u002Fbuild` | build 链接存在 |\n| 6️⃣ 编译测试 | `make` (测试模块) | .ko 文件生成 |\n| 7️⃣ 加载测试 | `sudo insmod test.ko` | 无报错，dmesg 有输出 |\n\n### Module 开发验收\n\n```bash\n# 1. 创建 module（使用上面的 create_module.sh 脚本）\nbash create_module.sh test_mod\n\n# 2. 编译 module\ncd test_mod && make\n\n# 3. 生成 .ko 文件\nls -lh test_mod.ko  # 应该有文件\n\n# 4. 加载 module\nsudo insmod test_mod.ko  # 无报错\n\n# 5. 查看日志\ndmesg | tail  # 应有 \"test_mod: Module loaded\"\n\n# 6. 卸载 module\nsudo rmmod test_mod  # 无报错\n```\n\n---\n\n## 最佳实践\n\n### 1. 使用 ccache 加速编译\n\n```bash\n# 安装\nsudo yum install ccache\n\n# 配置 ~\u002F.bashrc\nexport CCACHE_DIR=$HOME\u002F.ccache\nexport CC=\"ccache gcc\"\nexport CXX=\"ccache g++\"\n\n# 查看统计\nccache --stats\n```\n\n**编译速度提升：**\n- 首次编译：~45 分钟\n- 二次编译：~8 分钟（提升 5.6 倍）\n\n### 2. 保存内核配置\n\n```bash\n# 备份当前配置\ncp \u002Fboot\u002Fconfig-$(uname -r) ~\u002Fkernel-configs\u002Fmy-config\n\n# 恢复配置\ncp ~\u002Fkernel-configs\u002Fmy-config \u002Fusr\u002Fsrc\u002Fkernels\u002Flinux-*\u002F.config\nmake olddefconfig\n```\n\n### 3. 增量编译\n\n```bash\n# 只编译修改的部分\nmake -j8 && make modules -j8\n\n# 清理特定模块\nmake M=drivers\u002Fnet clean && make M=drivers\u002Fnet\n```\n\n### 4. 版本控制\n\n```bash\ncd my_module\ngit init\ngit add .\ngit commit -m \"Initial kernel module\"\n```\n\n---\n\n## Examples\n\n- [编译新内核](examples\u002Fbuild-kernel.md) — **双方法编译指南**（SRPM\u002FUpstream），包含配置优化、编译加速、安装流程\n- [编译示例内核 Module](examples\u002Fbuild-module.md) — Hello World 内核模块的创建、编译、加载、卸载\n- [示例模块集合](examples\u002FREADME.md) — 包含 hello_module、param_module、proc_module、char_device\n\n---\n\n## Scripts\n\n| 脚本 | 描述 |\n|------|------|\n| `scripts\u002Fbuild-kernel.sh` | **内核编译自动化**（支持 SRPM\u002FUpstream 双方法） |\n| `scripts\u002Fcheck-env.sh` | 检查环境依赖 |\n| `scripts\u002Finstall-deps.sh` | 自动安装依赖 |\n| `scripts\u002Fsetup.sh` | 一键搭建开发环境 |\n| `scripts\u002Fverify-env.sh` | 全面验证环境（含测试编译） |\n| `scripts\u002Ftest-module.sh` | 自动化测试内核模块 |\n\n**build-kernel.sh 用法：**\n```bash\n# Upstream 方法（推荐，快速）\n.\u002Fscripts\u002Fbuild-kernel.sh upstream latest 8 defconfig\n\n# SRPM 方法（Alinux4 官方）\n.\u002Fscripts\u002Fbuild-kernel.sh srpm $(uname -r)\n\n# 查看编译状态\n.\u002Fscripts\u002Fbuild-kernel.sh status\n\n# 安装编译好的内核\n.\u002Fscripts\u002Fbuild-kernel.sh install upstream\n```\n\n---\n\n## Documentation\n\n| 文档 | 描述 |\n|------|------|\n| [docs\u002Ftroubleshooting.md](docs\u002Ftroubleshooting.md) | **内核编译故障排查指南**（10+ 常见问题及解决方案） |\n| [docs\u002Fmodule-signing.md](docs\u002Fmodule-signing.md) | 内核模块签名指南（Secure Boot） |\n| [docs\u002Fbuild-performance.md](docs\u002Fbuild-performance.md) | 编译性能优化指南（ccache、并行编译） |\n\n---\n\n## References\n\n- [Alinux4 软件仓库](references\u002Falinux4-repo.md) — 仓库地址、YUM 配置、常用内核包\n- [内核开发资源](references\u002Fkernel-resources.md) — 内核源码、官方文档、驱动开发指南等\n\n---\n\n**适用版本**: Alinux4 (alnx4)\n**支持架构**: x86_64, aarch64\n**支持内核**:\n  - Alinux4 官方内核（通过 SRPM 编译，如 6.6.102-5.2.alnx4）\n  - 上游最新内核（通过 kernel.org，如 6.12.x、6.13.x）\n**dist 字段**: alnx4\n**软件仓库 (x86_64)**: https:\u002F\u002Fmirrors.aliyun.com\u002Falinux\u002F4\u002Fupdates\u002Fx86_64\u002Fos\u002FPackages\u002F\n**软件仓库 (aarch64)**: https:\u002F\u002Fmirrors.aliyun.com\u002Falinux\u002F4\u002Fupdates\u002Faarch64\u002Fos\u002FPackages\u002F\n**最后更新**: 2026-03-17\n",{"name":5,"layer":28,"version":42,"lifecycle":43,"description":7},"1.0.0","production","main","d2c8a75e03a304c97d2b049d59f85c2ef0b08519","src\u002Fos-skills\u002Fdevops\u002Fkernel-dev",195,"https:\u002F\u002Fgithub.com\u002Fagentic-os-org\u002FANOLISA","https:\u002F\u002Fagentic-os.sh\u002F","https:\u002F\u002Fgithub.com\u002Fagentic-os-org","2026-11-14 03:26:41",{"source":8,"skillName":5,"commands":53,"prompt":63,"zipAvailable":64},[54,57,60],{"tool":55,"command":56},"npx","npx skills add agentic-os-org\u002FANOLISA --skill kernel-dev",{"tool":58,"command":59},"bunx","bunx skills add agentic-os-org\u002FANOLISA --skill kernel-dev",{"tool":61,"command":62},"pnpm","pnpm dlx skills add agentic-os-org\u002FANOLISA --skill kernel-dev","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fagentic-os-org\u002FANOLISA\u002Fblob\u002Fmain\u002Fsrc\u002Fos-skills\u002Fdevops\u002Fkernel-dev\u002FSKILL.md",true,[66,72,76,80,84,88,94,98,102,106,110,114,118,122,126,130,134,138,144,148,152,156,160],{"path":67,"resourceType":68,"resourceTypeDesc":69,"sizeBytes":70,"sourceHtmlUrl":71},"docs\u002Fbuild-performance.md","REFERENCE","参考文档",5574,"https:\u002F\u002Fgithub.com\u002Fagentic-os-org\u002FANOLISA\u002Fblob\u002Fmain\u002Fsrc\u002Fos-skills\u002Fdevops\u002Fkernel-dev\u002Fdocs\u002Fbuild-performance.md",{"path":73,"resourceType":68,"resourceTypeDesc":69,"sizeBytes":74,"sourceHtmlUrl":75},"docs\u002Fmodule-signing.md",4162,"https:\u002F\u002Fgithub.com\u002Fagentic-os-org\u002FANOLISA\u002Fblob\u002Fmain\u002Fsrc\u002Fos-skills\u002Fdevops\u002Fkernel-dev\u002Fdocs\u002Fmodule-signing.md",{"path":77,"resourceType":68,"resourceTypeDesc":69,"sizeBytes":78,"sourceHtmlUrl":79},"docs\u002Ftroubleshooting.md",5509,"https:\u002F\u002Fgithub.com\u002Fagentic-os-org\u002FANOLISA\u002Fblob\u002Fmain\u002Fsrc\u002Fos-skills\u002Fdevops\u002Fkernel-dev\u002Fdocs\u002Ftroubleshooting.md",{"path":81,"resourceType":68,"resourceTypeDesc":69,"sizeBytes":82,"sourceHtmlUrl":83},"examples\u002Fbuild-kernel.md",8194,"https:\u002F\u002Fgithub.com\u002Fagentic-os-org\u002FANOLISA\u002Fblob\u002Fmain\u002Fsrc\u002Fos-skills\u002Fdevops\u002Fkernel-dev\u002Fexamples\u002Fbuild-kernel.md",{"path":85,"resourceType":68,"resourceTypeDesc":69,"sizeBytes":86,"sourceHtmlUrl":87},"examples\u002Fbuild-module.md",1492,"https:\u002F\u002Fgithub.com\u002Fagentic-os-org\u002FANOLISA\u002Fblob\u002Fmain\u002Fsrc\u002Fos-skills\u002Fdevops\u002Fkernel-dev\u002Fexamples\u002Fbuild-module.md",{"path":89,"resourceType":90,"resourceTypeDesc":91,"sizeBytes":92,"sourceHtmlUrl":93},"examples\u002Fchar_device\u002Fchar_device.c","OTHER","其他",4678,"https:\u002F\u002Fgithub.com\u002Fagentic-os-org\u002FANOLISA\u002Fblob\u002Fmain\u002Fsrc\u002Fos-skills\u002Fdevops\u002Fkernel-dev\u002Fexamples\u002Fchar_device\u002Fchar_device.c",{"path":95,"resourceType":90,"resourceTypeDesc":91,"sizeBytes":96,"sourceHtmlUrl":97},"examples\u002Fchar_device\u002FMakefile",2141,"https:\u002F\u002Fgithub.com\u002Fagentic-os-org\u002FANOLISA\u002Fblob\u002Fmain\u002Fsrc\u002Fos-skills\u002Fdevops\u002Fkernel-dev\u002Fexamples\u002Fchar_device\u002FMakefile",{"path":99,"resourceType":90,"resourceTypeDesc":91,"sizeBytes":100,"sourceHtmlUrl":101},"examples\u002Fhello_module\u002Fhello_module.c",635,"https:\u002F\u002Fgithub.com\u002Fagentic-os-org\u002FANOLISA\u002Fblob\u002Fmain\u002Fsrc\u002Fos-skills\u002Fdevops\u002Fkernel-dev\u002Fexamples\u002Fhello_module\u002Fhello_module.c",{"path":103,"resourceType":90,"resourceTypeDesc":91,"sizeBytes":104,"sourceHtmlUrl":105},"examples\u002Fhello_module\u002FMakefile",1490,"https:\u002F\u002Fgithub.com\u002Fagentic-os-org\u002FANOLISA\u002Fblob\u002Fmain\u002Fsrc\u002Fos-skills\u002Fdevops\u002Fkernel-dev\u002Fexamples\u002Fhello_module\u002FMakefile",{"path":107,"resourceType":90,"resourceTypeDesc":91,"sizeBytes":108,"sourceHtmlUrl":109},"examples\u002Fparam_module\u002FMakefile",1682,"https:\u002F\u002Fgithub.com\u002Fagentic-os-org\u002FANOLISA\u002Fblob\u002Fmain\u002Fsrc\u002Fos-skills\u002Fdevops\u002Fkernel-dev\u002Fexamples\u002Fparam_module\u002FMakefile",{"path":111,"resourceType":90,"resourceTypeDesc":91,"sizeBytes":112,"sourceHtmlUrl":113},"examples\u002Fparam_module\u002Fparam_module.c",1354,"https:\u002F\u002Fgithub.com\u002Fagentic-os-org\u002FANOLISA\u002Fblob\u002Fmain\u002Fsrc\u002Fos-skills\u002Fdevops\u002Fkernel-dev\u002Fexamples\u002Fparam_module\u002Fparam_module.c",{"path":115,"resourceType":90,"resourceTypeDesc":91,"sizeBytes":116,"sourceHtmlUrl":117},"examples\u002Fproc_module\u002FMakefile",1964,"https:\u002F\u002Fgithub.com\u002Fagentic-os-org\u002FANOLISA\u002Fblob\u002Fmain\u002Fsrc\u002Fos-skills\u002Fdevops\u002Fkernel-dev\u002Fexamples\u002Fproc_module\u002FMakefile",{"path":119,"resourceType":90,"resourceTypeDesc":91,"sizeBytes":120,"sourceHtmlUrl":121},"examples\u002Fproc_module\u002Fproc_module.c",1977,"https:\u002F\u002Fgithub.com\u002Fagentic-os-org\u002FANOLISA\u002Fblob\u002Fmain\u002Fsrc\u002Fos-skills\u002Fdevops\u002Fkernel-dev\u002Fexamples\u002Fproc_module\u002Fproc_module.c",{"path":123,"resourceType":68,"resourceTypeDesc":69,"sizeBytes":124,"sourceHtmlUrl":125},"examples\u002FREADME.md",5686,"https:\u002F\u002Fgithub.com\u002Fagentic-os-org\u002FANOLISA\u002Fblob\u002Fmain\u002Fsrc\u002Fos-skills\u002Fdevops\u002Fkernel-dev\u002Fexamples\u002FREADME.md",{"path":127,"resourceType":68,"resourceTypeDesc":69,"sizeBytes":128,"sourceHtmlUrl":129},"README.md",4056,"https:\u002F\u002Fgithub.com\u002Fagentic-os-org\u002FANOLISA\u002Fblob\u002Fmain\u002Fsrc\u002Fos-skills\u002Fdevops\u002Fkernel-dev\u002FREADME.md",{"path":131,"resourceType":68,"resourceTypeDesc":69,"sizeBytes":132,"sourceHtmlUrl":133},"references\u002Falinux4-repo.md",985,"https:\u002F\u002Fgithub.com\u002Fagentic-os-org\u002FANOLISA\u002Fblob\u002Fmain\u002Fsrc\u002Fos-skills\u002Fdevops\u002Fkernel-dev\u002Freferences\u002Falinux4-repo.md",{"path":135,"resourceType":68,"resourceTypeDesc":69,"sizeBytes":136,"sourceHtmlUrl":137},"references\u002Fkernel-resources.md",795,"https:\u002F\u002Fgithub.com\u002Fagentic-os-org\u002FANOLISA\u002Fblob\u002Fmain\u002Fsrc\u002Fos-skills\u002Fdevops\u002Fkernel-dev\u002Freferences\u002Fkernel-resources.md",{"path":139,"resourceType":140,"resourceTypeDesc":141,"sizeBytes":142,"sourceHtmlUrl":143},"scripts\u002Fbuild-kernel.sh","SCRIPT","脚本",11112,"https:\u002F\u002Fgithub.com\u002Fagentic-os-org\u002FANOLISA\u002Fblob\u002Fmain\u002Fsrc\u002Fos-skills\u002Fdevops\u002Fkernel-dev\u002Fscripts\u002Fbuild-kernel.sh",{"path":145,"resourceType":140,"resourceTypeDesc":141,"sizeBytes":146,"sourceHtmlUrl":147},"scripts\u002Fcheck-env.sh",3187,"https:\u002F\u002Fgithub.com\u002Fagentic-os-org\u002FANOLISA\u002Fblob\u002Fmain\u002Fsrc\u002Fos-skills\u002Fdevops\u002Fkernel-dev\u002Fscripts\u002Fcheck-env.sh",{"path":149,"resourceType":140,"resourceTypeDesc":141,"sizeBytes":150,"sourceHtmlUrl":151},"scripts\u002Finstall-deps.sh",1915,"https:\u002F\u002Fgithub.com\u002Fagentic-os-org\u002FANOLISA\u002Fblob\u002Fmain\u002Fsrc\u002Fos-skills\u002Fdevops\u002Fkernel-dev\u002Fscripts\u002Finstall-deps.sh",{"path":153,"resourceType":140,"resourceTypeDesc":141,"sizeBytes":154,"sourceHtmlUrl":155},"scripts\u002Fsetup.sh",3563,"https:\u002F\u002Fgithub.com\u002Fagentic-os-org\u002FANOLISA\u002Fblob\u002Fmain\u002Fsrc\u002Fos-skills\u002Fdevops\u002Fkernel-dev\u002Fscripts\u002Fsetup.sh",{"path":157,"resourceType":140,"resourceTypeDesc":141,"sizeBytes":158,"sourceHtmlUrl":159},"scripts\u002Ftest-module.sh",4214,"https:\u002F\u002Fgithub.com\u002Fagentic-os-org\u002FANOLISA\u002Fblob\u002Fmain\u002Fsrc\u002Fos-skills\u002Fdevops\u002Fkernel-dev\u002Fscripts\u002Ftest-module.sh",{"path":161,"resourceType":140,"resourceTypeDesc":141,"sizeBytes":162,"sourceHtmlUrl":163},"scripts\u002Fverify-env.sh",6076,"https:\u002F\u002Fgithub.com\u002Fagentic-os-org\u002FANOLISA\u002Fblob\u002Fmain\u002Fsrc\u002Fos-skills\u002Fdevops\u002Fkernel-dev\u002Fscripts\u002Fverify-env.sh",[165,179,213,230,245,256],{"skillNo":166,"name":167,"nameZh":6,"description":168,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":169,"categories":170,"keywords":171,"publishedAt":37},"01M6K30MJVPNFF4VA778AZC512","ws-ckpt","Linux 工作区快照(ws-ckpt)。用户想保存或备份工作区当前状态(\"保存一下\"、\"留个底\"、\"先备份\"), 想撤销或恢复文件改动(\"回滚\"、\"撤销\"、\"改回去\"、\"恢复到之前\"、\"刚才那版\"), 想查看、对比或删除历史版本,或要开启\u002F关闭每回合自动快照、定时快照、快照保留策略时使用。 用户没提\"快照\"、只表达保存或恢复工作区文件的意图时同样适用;用户点名 git 操作(commit、branch、reset 到某提交)时不适用。","https:\u002F\u002Fgithub.com\u002Fagentic-os-org\u002FANOLISA\u002Fblob\u002Fmain\u002Fsrc\u002Fws-ckpt\u002Fsrc\u002Fskills\u002Fws-ckpt\u002FSKILL.md",[],[172,27,173,174,175,176,177,178],"ws ckpt","commit","git","branch","reset","定时","文件",{"skillNo":180,"name":181,"nameZh":6,"description":182,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":183,"categories":184,"keywords":190,"publishedAt":37},"01M6K30G7BBZB1VCPE3NE08KZP","skillfs-mount","Help users configure, mount, and unmount a skillfs FUSE virtual filesystem on their local machine (e.g. for openclaw). Covers analyzing existing skill usage to suggest view configuration, generating skillfs-views.toml, mounting, and graceful unmount. Use this skill when the user asks to: set up skillfs, configure skill views, mount or unmount skillfs, check if skillfs is running, or get help organizing their skills directory (especially for openclaw users).","https:\u002F\u002Fgithub.com\u002Fagentic-os-org\u002FANOLISA\u002Fblob\u002Fmain\u002Fsrc\u002Fskillfs\u002Fdocs\u002Fskills\u002Fskillfs-mount\u002FSKILL.md",[185],{"categoryNo":186,"categoryName":187,"taxonomyType":188,"taxonomyTypeDesc":189},"01JBSEEDCAT000000000000023","Skill与智能体开发","SCENARIO","使用场景",[191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212],"skillfs mount","mount","virtual","get","local","existing skill","up","use","view","filesystem","toml","configure","skill usage","SET","analyzing","openclaw","machine","usage","for","when","running","directory",{"skillNo":214,"name":215,"nameZh":6,"description":216,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":217,"categories":218,"keywords":223,"publishedAt":37},"01M6K30CJW0X3V5PG4GP26TB63","test-skill","A test skill used in integration tests.","https:\u002F\u002Fgithub.com\u002Fagentic-os-org\u002FANOLISA\u002Fblob\u002Fmain\u002Fsrc\u002Fskillfs\u002Fcrates\u002Fskillfs-fuse\u002Ftests\u002Ffixtures\u002Ftest-skill\u002FSKILL.md",[219,222],{"categoryNo":220,"categoryName":221,"taxonomyType":188,"taxonomyTypeDesc":189},"01JBSEEDCAT000000000000008","测试与质量",{"categoryNo":186,"categoryName":187,"taxonomyType":188,"taxonomyTypeDesc":189},[224,225,226,227,228,229],"test","Test Skill","true","integration tests","integration","tests",{"skillNo":231,"name":232,"nameZh":6,"description":233,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":234,"categories":235,"keywords":236,"publishedAt":37},"01M6K304VCM7N6AR4PMYNDP3A7","storage-resize","Linux 磁盘扩容技能（RPM 包管理系统），实现云盘扩容后自动完成分区调整和文件系统扩容。支持系统盘\u002F数据盘在线扩容，适配 XFS\u002FEXT4\u002FBtrfs 文件系统。适用于 RPM 包管理的 Linux 系统（如 Alibaba Cloud Linux）。","https:\u002F\u002Fgithub.com\u002Fagentic-os-org\u002FANOLISA\u002Fblob\u002Fmain\u002Fsrc\u002Fos-skills\u002Fsystem-admin\u002Fstorage-resize\u002FSKILL.md",[],[237,238,239,27,29,240,241,242,243,178,35,36,244],"storage resize","storage","system","operations","btrfs","ecs","aliyun","数据",{"skillNo":246,"name":247,"nameZh":6,"description":248,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":249,"categories":250,"keywords":251,"publishedAt":37},"01M6K2ZJEGANYH9TGGG25H7WVF","ktuner","内核参数自动调优。分析系统配置，输出调优建议并可一键应用，支持自动回滚。使用场景：系统性能优化、安全加固、内核参数诊断。","https:\u002F\u002Fgithub.com\u002Fagentic-os-org\u002FANOLISA\u002Fblob\u002Fmain\u002Fsrc\u002Fos-skills\u002Fsystem-admin\u002Fktuner\u002FSKILL.md",[],[247,28,252,30,253,254,255],"run","shell","安全","command",{"skillNo":257,"name":258,"nameZh":6,"description":259,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":260,"categories":261,"keywords":262,"publishedAt":37},"01M6K2ZD5K40XCX8R1EA85MS7P","backup-restore","处理所有备份与恢复任务，覆盖四个层面：工作区（项目\u002F数据库\u002F代码）、用户数据（家目录\u002Fdotfiles\u002F密钥）、操作系统（全量系统\u002F磁盘镜像\u002FLVM 快照）、阿里云快照（云盘快照\u002F自动策略\u002F跨地域复制\u002F整机镜像）。适用于 RPM 包管理的 Linux 系统（如 Alibaba Cloud Linux）纯命令行环境，使用 yum 包管理器。当用户提到备份、恢复、快照、归档、回滚、克隆、迁移、容灾等任何涉及数据保存或恢复的请求时触发此技能，即使请求看起来很简单也应使用。","https:\u002F\u002Fgithub.com\u002Fagentic-os-org\u002FANOLISA\u002Fblob\u002Fmain\u002Fsrc\u002Fos-skills\u002Fsystem-admin\u002Fbackup-restore\u002FSKILL.md",[],[263,264,265,29,266,267,268,35,36,269,244,270,271,27,243],"backup restore","backup","restore","beta","release","lvm","runtime","maintenance","dotfiles"]