Skip to main content

kernel-dev

Linux 内核研发自动化技能(RPM 包管理系统),提供内核编译(SRPM/Upstream 双方法)、内核 module 开发环境搭建、依赖安装、示例代码生成等功能。Linux 官方内核及上游最新内核,兼容 x86_64 和 aarch64 双架构。使用场景:内核定制开发、驱动模块研发、内核漏洞修复验证。适用于 RPM 包管理的 Linux 系统(如 Alibaba Cloud Linux)。

Jump to install

Source facts

Repository
agentic-os-org/ANOLISA
Last source activity
April 13, 2026 at 06:41
Detected SKILL.md language
Chinese
Stars
613
Forks
104

Install options

The review-first prompt is selected by default. You can switch to a direct command or download a local copy.

Review the source files

Read SKILL.md and any companion files shown by SkillsMP before deciding whether to install.

File Explorer
24 files

Showing SKILL.md

SKILL.md
Source instructions · Read-only preview
name
kernel-dev
version
1.0.0
description
Linux 内核研发自动化技能(RPM 包管理系统),提供内核编译(SRPM/Upstream 双方法)、内核 module 开发环境搭建、依赖安装、示例代码生成等功能。Linux 官方内核及上游最新内核,兼容 x86_64 和 aarch64 双架构。使用场景:内核定制开发、驱动模块研发、内核漏洞修复验证。适用于 RPM 包管理的 Linux 系统(如 Alibaba Cloud Linux)。
layer
core
lifecycle
production
# Kernel Development - Linux 内核研发自动化 ## 核心定位 **五大功能:** 1. **依赖检测与安装** - 自动检测并安装内核开发所需的软件包 2. **工具链安装** - 安装编译器(gcc)、make、git 等开发工具 3. **内核 devel 包安装** - 下载并安装当前系统内核的 devel 包 4. **内核编译** - 支持两种编译方法: - **SRPM 方法**:Alinux4 官方内核,输出 RPM 包,适合生产环境 - **Upstream 方法**:kernel.org 最新内核,编译快速,适合新特性测试 5. **Module 编译测试** - 测试编译示例内核 module **支持架构:** - `x86_64` — Intel/AMD 64 位服务器 - `aarch64` — ARM 64 位服务器(如倚天 710) **重要约束:** - 🔒 需要 root 权限执行内核相关操作 - 📦 仅Linux操作系统 - ⚠️ 内核编译会消耗大量系统资源(建议至少 4GB 内存) - ⏱️ 编译时间:SRPM 方法 1-3 小时,Upstream 方法 30-60 分钟 --- ## 快速开始 ### 一键搭建开发环境 ```bash # 1. 检测系统架构 ARCH=$(uname -m) KERNEL_VER=$(uname -r) echo "架构: $ARCH | 内核: $KERNEL_VER" # x86_64 示例输出:架构: x86_64 | 内核: 6.6.102-5.2.alnx4.x86_64 # aarch64 示例输出:架构: aarch64 | 内核: 6.6.102-5.2.alnx4.aarch64 # 2. 检查 Alinux4 系统 grep -i 'alinux\|alnx' /etc/os-release || echo "[警告] 非 Alinux4 系统" # 3. 安装所有依赖(两种架构通用) sudo yum install -y \ gcc gcc-c++ make binutils \ flex bison \ libelf-devel openssl-devel ncurses-devel \ pahole perl python3 python3-devel \ git ccache dwarves wget curl kmod \ rpm-build rpmdevtools # 4. 安装内核 devel 包(yum 自动匹配当前架构) sudo yum install -y kernel-devel-$KERNEL_VER kernel-headers-$KERNEL_VER # 5. 验证环境 ls -l /lib/modules/$KERNEL_VER/build gcc --version # 6. 编译内核(可选,两种方法) # 方法 A: Upstream 方法(推荐,快速) sudo ./scripts/build-kernel.sh upstream latest 8 defconfig # 方法 B: SRPM 方法(Alinux4 官方) sudo ./scripts/build-kernel.sh srpm 6.6.102-5.2.alnx4.x86_64 ``` ### 创建第一个内核模块 ```bash MODULE_NAME="hello_module" mkdir -p $MODULE_NAME && cd $MODULE_NAME # 创建模块代码 cat > ${MODULE_NAME}.c << 'EOF' #include <linux/init.h> #include <linux/module.h> #include <linux/kernel.h> MODULE_LICENSE("GPL"); MODULE_AUTHOR("Alinux4 Kernel Dev"); MODULE_DESCRIPTION("Hello World kernel module for alnx4"); MODULE_VERSION("0.1"); static int __init hello_init(void) { printk(KERN_INFO "hello_module: Module loaded (alnx4)\n"); return 0; } static void __exit hello_exit(void) { printk(KERN_INFO "hello_module: Module unloaded\n"); } module_init(hello_init); module_exit(hello_exit); EOF # 创建 Makefile cat > Makefile << 'EOF' obj-m += hello_module.o KERNEL_DIR := /lib/modules/$(shell uname -r)/build PWD := $(shell pwd) all: make -C $(KERNEL_DIR) M=$(PWD) modules clean: make -C $(KERNEL_DIR) M=$(PWD) clean install: sudo insmod hello_module.ko unload: sudo rmmod hello_module .PHONY: all clean install unload EOF # 编译和加载 make sudo make install # 查看日志 dmesg | tail # 卸载 sudo make unload ``` --- ## Step-by-Step 环境搭建 ### Step 1: 检测系统架构与信息 ```bash # 检测架构并设置架构相关变量 ARCH=$(uname -m) KERNEL_VER=$(uname -r) echo "系统架构: $ARCH" echo "内核版本: $KERNEL_VER" # x86_64 典型输出:6.6.102-5.2.alnx4.x86_64 # aarch64 典型输出:6.6.102-5.2.alnx4.aarch64 # 查看操作系统版本 cat /etc/os-release # 检查是否为 Alinux4 系统 grep -i 'alinux\|alnx' /etc/os-release # 确认架构支持 case "$ARCH" in x86_64) echo "[✓] x86_64 架构,支持" ;; aarch64) echo "[✓] aarch64 架构,支持" ;; *) echo "[✗] 不支持的架构: $ARCH" ; exit 1 ;; esac ``` ### Step 2: 安装内核开发依赖 以下依赖包为 x86_64 和 aarch64 通用,yum 会自动匹配当前架构下载对应包: ```bash # 通用依赖(两种架构均适用) sudo yum install -y \ gcc gcc-c++ make binutils \ flex bison \ libelf-devel openssl-devel ncurses-devel \ pahole perl python3 python3-devel \ git ccache dwarves wget curl kmod ``` **依赖包说明:** | 软件包 | 用途 | 必需 | 架构 | |--------|------|------|------| | gcc, gcc-c++ | GNU 编译器 | ✓ | 通用 | | make | 构建工具 | ✓ | 通用 | | binutils | 二进制工具 | ✓ | 通用 | | flex, bison | 词法/语法分析器 | ✓ | 通用 | | libelf-devel | ELF 文件处理 | ✓ | 通用 | | openssl-devel | SSL/TLS 库 | ✓ | 通用 | | ncurses-devel | 终端 UI 库 | ✓ | 通用 | | pahole | DWARF 调试工具 | ✓ | 通用 | | kmod | 内核模块工具 | ✓ | 通用 | | git | 版本控制 | ○ | 通用 | | ccache | 编译加速 | ○ | 通用 | > **注意**:yum 仓库的 baseurl 中架构路径不同: > - x86_64: `https://mirrors.aliyun.com/alinux/4/updates/x86_64/os/` > - aarch64: `https://mirrors.aliyun.com/alinux/4/updates/aarch64/os/` **检查依赖是否已安装:** ```bash echo "当前架构: $(uname -m)" for pkg in gcc make flex bison libelf-devel openssl-devel ncurses-devel pahole perl python3 kmod; do if rpm -q $pkg &>/dev/null; then echo "[✓] $pkg 已安装" else echo "[✗] $pkg 未安装" fi done ``` ### Step 3: 安装内核 devel 包 ```bash # 获取当前内核版本和架构 KERNEL_VER=$(uname -r) ARCH=$(uname -m) echo "当前内核:$KERNEL_VER (架构:$ARCH)" # x86_64 示例:6.6.102-5.2.alnx4.x86_64 # aarch64 示例:6.6.102-5.2.alnx4.aarch64 # 安装匹配的 devel 包和 headers 包(yum 自动匹配架构) sudo yum install -y kernel-devel-$KERNEL_VER kernel-headers-$KERNEL_VER # 验证安装 ls -l /lib/modules/$KERNEL_VER/build ``` **验证成功标志:** ``` # x86_64: /lib/modules/6.6.102-5.2.alnx4.x86_64/build -> ../../usr/src/kernels/... # aarch64: /lib/modules/6.6.102-5.2.alnx4.aarch64/build -> ../../usr/src/kernels/... ``` ### Step 4: 验证编译环境 ```bash # 检查 GCC 版本 gcc --version # 检查 Make 版本 make --version # 检查 kmod 版本 kmod --version # 检查内核头文件 ls /usr/include/linux/*.h | head -5 # 测试编译简单模块 mkdir -p /tmp/kernel_test && cd /tmp/kernel_test cat > test_module.c << 'EOF' #include <linux/init.h> #include <linux/module.h> MODULE_LICENSE("GPL"); static int __init test_init(void) { return 0; } static void __exit test_exit(void) {} module_init(test_init); module_exit(test_exit); EOF cat > Makefile << 'EOF' obj-m += test_module.o KERNEL_DIR := /lib/modules/$(shell uname -r)/build PWD := $(shell pwd) all: make -C $(KERNEL_DIR) M=$(PWD) modules clean: make -C $(KERNEL_DIR) M=$(PWD) clean EOF make && ls -lh test_module.ko ``` --- ## 内核 Module 开发 ### 创建自定义 Module 以下脚本可创建一个完整的内核模块项目,包含源码和 Makefile: ```bash #!/bin/bash # 用法: bash create_module.sh <module_name> MODULE_NAME="${1:?请提供模块名称}" if [ -d "$MODULE_NAME" ]; then echo "[✗] 目录已存在:$MODULE_NAME" exit 1 fi mkdir -p "$MODULE_NAME" && cd "$MODULE_NAME" # 创建模块代码 cat > ${MODULE_NAME}.c << CEOF /* ${MODULE_NAME} - Kernel Module for Alinux4 */ #include <linux/init.h> #include <linux/module.h> #include <linux/kernel.h> MODULE_LICENSE("GPL"); MODULE_AUTHOR("Alinux4 Kernel Dev"); MODULE_DESCRIPTION("${MODULE_NAME}: A simple kernel module for alnx4"); MODULE_VERSION("0.1"); static int __init ${MODULE_NAME}_init(void) { printk(KERN_INFO "${MODULE_NAME}: Module loaded (alnx4)\n"); printk(KERN_INFO "${MODULE_NAME}: Hello, Alinux4 Kernel!\n"); return 0; } static void __exit ${MODULE_NAME}_exit(void) { printk(KERN_INFO "${MODULE_NAME}: Module unloaded\n"); } module_init(${MODULE_NAME}_init); module_exit(${MODULE_NAME}_exit); CEOF # 创建 Makefile cat > Makefile << MEOF obj-m += ${MODULE_NAME}.o KERNEL_DIR := /lib/modules/\$(shell uname -r)/build PWD := \$(shell pwd) all: make -C \$(KERNEL_DIR) M=\$(PWD) modules clean: make -C \$(KERNEL_DIR) M=\$(PWD) clean install: sudo insmod ${MODULE_NAME}.ko unload: sudo rmmod ${MODULE_NAME} status: dmesg | tail -20 | grep ${MODULE_NAME} .PHONY: all clean install unload status MEOF echo "[✓] Module 文件已创建:" echo " - ${MODULE_NAME}/${MODULE_NAME}.c" echo " - ${MODULE_NAME}/Makefile" echo "" echo "快速开始:" echo " cd ${MODULE_NAME} && make && sudo make install" ``` ### 编译和测试 Module ```bash cd my_module # 编译 make # 查看生成的文件 ls -lh *.ko # 显示模块信息 modinfo my_module.ko # 加载模块(需要 root) sudo insmod my_module.ko # 检查是否加载成功 lsmod | grep my_module # 查看内核日志 dmesg | tail -10 # 卸载模块 sudo rmmod my_module # 再次查看日志 dmesg | tail -10 ``` --- ## 故障排查 ### 自动化诊断工具 **使用环境检查脚本:** ```bash # 检查所有依赖 ./scripts/check-env.sh # 自动安装缺失的依赖 sudo ./scripts/install-deps.sh # 一键搭建环境 sudo ./scripts/setup.sh ``` ### 常见问题 **Q1: 缺少内核头文件** ```bash # 检查 devel 包 rpm -qa | grep kernel-devel # 安装匹配的 devel 包 sudo yum install kernel-devel-$(uname -r) kernel-headers-$(uname -r) # 验证链接 ls -l /lib/modules/$(uname -r)/build ``` **Q2: GCC 版本不匹配** ```bash # 查看 GCC 版本 gcc --version # 重新安装 GCC sudo yum reinstall gcc gcc-c++ ``` **Q3: 编译时内存不足** ```bash # 减少编译线程数 make -j2 # 或增加 swap sudo fallocate -l 4G /swapfile sudo chmod 600 /swapfile sudo mkswap /swapfile sudo swapon /swapfile ``` **Q4: insmod 失败 - 无效格式** ```bash # 检查内核版本匹配 uname -r modinfo my_module.ko | grep vermagic # 如果不匹配,重新编译 make clean && make ``` **Q5: Secure Boot 阻止模块加载** ```bash # 临时禁用 Secure Boot(重启时按 F2/Del 进入 BIOS) # 或为模块签名 sudo mokutil --disable-validation ``` **Q6: 缺少 kmod 工具** ```bash # 安装 kmod sudo yum install kmod # 验证 kmod --version ``` **Q7: 编译警告 "compiler differs from the one used to build the kernel"** 这是正常警告,表示当前 GCC 版本与编译内核时的 GCC 版本略有不同。 只要主版本相同(如都是 GCC 12.3),通常可以安全忽略。 ```bash # 查看内核编译版本 cat /proc/version # 查看当前 GCC 版本 gcc --version ``` **Q8: BTF generation skipped** ```bash # 警告信息:Skipping BTF generation due to unavailability of vmlinux # 这是正常现象,BTF 是可选功能,不影响模块基本功能 # 如需 BTF 支持,需要编译完整的内核 ``` ### 诊断命令 ```bash # 检查已安装的依赖
View on GitHub
This SKILL.md is very large, so SkillsMP previews the first section here. View on GitHub