终极指南:在Armbian系统上编译自定义Linux内核的完整教程

张开发
2026/4/22 16:06:18 15 分钟阅读
终极指南:在Armbian系统上编译自定义Linux内核的完整教程
终极指南在Armbian系统上编译自定义Linux内核的完整教程【免费下载链接】amlogic-s9xxx-armbianSupports running Armbian on Amlogic, Allwinner, and Rockchip devices. Support a311d, s922x, s905x3, s905x2, s912, s905d, s905x, s905w, s905, s905l, rk3588, rk3568, rk3399, rk3328, h6, etc.项目地址: https://gitcode.com/GitHub_Trending/am/amlogic-s9xxx-armbian在嵌入式开发和单板计算机领域Armbian系统因其轻量级、高性能和对ARM架构的完美支持而广受欢迎。然而默认的内核配置可能无法满足所有用户的特定需求比如对最新硬件驱动、性能优化或安全特性的支持。本文将详细介绍如何在Armbian系统上编译自定义Linux内核从环境准备到最终部署的全过程。为什么需要自定义内核编译核心关键词Armbian内核编译Linux内核定制嵌入式系统优化长尾关键词如何编译Armbian内核Linux内核性能优化技巧嵌入式设备内核定制指南内核编译错误解决方案多版本内核管理最佳实践自定义内核编译让您能够启用特定硬件驱动支持优化系统性能参数集成安全补丁和最新特性减少内核体积提高启动速度解决特定硬件兼容性问题环境准备与依赖安装系统要求在开始编译之前确保您的系统满足以下要求操作系统: Armbian 22.04 或 Ubuntu/Debian 系统存储空间: 至少10GB可用空间内存: 推荐4GB以上网络连接: 稳定的互联网连接用于下载源码安装编译依赖首先更新系统并安装必要的编译工具sudo apt-get update -y sudo apt-get full-upgrade -y sudo apt-get install -y build-essential libncurses-dev flex bison openssl \ libssl-dev dkms libelf-dev libudev-dev libpci-dev libiberty-dev autoconf \ ccache git wget curl获取项目源码克隆amlogic-s9xxx-armbian项目到本地git clone --depth 1 https://gitcode.com/GitHub_Trending/am/amlogic-s9xxx-armbian.git cd amlogic-s9xxx-armbian内核编译工具链解析编译脚本架构项目提供了完整的编译工具链主要脚本位于compile-kernel/tools/script/目录compile-kernel/ ├── tools/ │ ├── config/ # 内核配置文件 │ │ ├── config-5.10 │ │ ├── config-5.15 │ │ ├── config-6.1 │ │ ├── config-6.6 │ │ └── config-6.12 │ ├── patch/ # 内核补丁 │ └── script/ │ ├── armbian_compile_kernel.sh # 主编译脚本 │ └── docker/ # Docker构建脚本编译流程概览内核编译过程遵循以下步骤环境初始化: 检查系统依赖和工具链源码获取: 从GitHub下载指定版本的内核源码配置应用: 应用预定义的内核配置编译构建: 编译内核镜像、模块和设备树打包输出: 生成可安装的内核包内核配置与定制化配置文件对比分析不同内核版本的主要配置差异配置项5.15版本6.6版本优化说明CONFIG_HZ300250降低系统时钟中断频率减少CPU开销CONFIG_PREEMPTyCONFIG_PREEMPT_VOLUNTARYy改进的抢占式调度提升响应性BPF支持基础支持增强JIT编译器提升网络性能和安全性硬件驱动有限支持扩展支持增加对最新Amlogic芯片的支持安全特性基础防护控制流完整性提高系统安全性自定义内核配置创建个性化内核配置的三种方法方法一使用现有配置模板# 复制配置模板 cp compile-kernel/tools/config/config-6.6 .config # 启动交互式配置界面 make menuconfig方法二从当前系统提取配置# 提取当前运行内核的配置 zcat /proc/config.gz .config # 或从/boot目录获取 cp /boot/config-$(uname -r) .config方法三生成最小化配置# 为特定架构生成最小配置 make ARCHarm64 defconfig实战编译6.6内核的完整流程步骤1基本编译命令最简单的编译命令使用默认参数sudo ./recompile -k 6.6.12步骤2高级参数配置使用完整参数控制编译过程sudo ./recompile \ -k 6.6.12 \ -a true \ -n -custom \ -m all \ -p true \ -t gcc \ -c xz \ -d false \ -s false参数详解-k 6.6.12: 指定编译6.6.12版本内核-a true: 自动检查并升级到同系列最新版本-n -custom: 设置内核签名后缀-m all: 编译完整的内核包包含Image、modules、dtbs-p true: 应用自定义内核补丁-t gcc: 使用GCC工具链-c xz: 使用xz压缩initrd-d false: 编译后保留源码-s false: 显示详细编译日志步骤3多版本批量编译同时编译多个内核版本sudo ./recompile -k 5.15.100_6.1.10_6.6.12 -a true -n -stable步骤4仅编译设备树如果只需要更新设备树文件sudo ./recompile -k 6.6.12 -m dtbs编译过程监控与问题排查实时监控编译进度# 查看编译日志 tail -f /var/log/kernel_compile_*.log # 监控CPU和内存使用 htop # 查看磁盘空间 df -h /tmp常见编译错误及解决方案错误1工具链版本不兼容错误信息aarch64-none-linux-gnu-gcc: error: unrecognized command line option -marcharmv8.5-a解决方案# 安装最新GCC工具链 sudo apt-get install -y gcc-14-aarch64-linux-gnu export CROSS_COMPILEaarch64-none-linux-gnu-错误2依赖包缺失错误信息fatal error: openssl/opensslv.h: No such file or directory解决方案# 安装缺失的开发包 sudo apt-get install -y libssl-dev错误3内存不足错误信息virtual memory exhausted: Cannot allocate memory解决方案# 创建swap分区 sudo fallocate -l 4G /swapfile sudo chmod 600 /swapfile sudo mkswap /swapfile sudo swapon /swapfile # 永久生效 echo /swapfile none swap sw 0 0 | sudo tee -a /etc/fstab内核安装与系统集成手动安装内核文件编译完成后内核文件位于compile-kernel/output/6.6.12/目录# 备份当前内核 sudo cp /boot/Image /boot/Image.bak sudo cp /boot/initrd.img /boot/initrd.img.bak # 安装新内核 sudo cp compile-kernel/output/6.6.12/boot/* /boot/ sudo cp -r compile-kernel/output/6.6.12/modules/lib/modules/* /lib/modules/ # 更新initramfs sudo update-initramfs -c -k 6.6.12-custom # 更新GRUB配置 sudo update-grub使用armbian-update自动化安装项目提供了更简便的内核更新命令# 更新到最新稳定版内核 armbian-update # 更新到指定版本 armbian-update -k 6.6.12 # 从特定仓库更新 armbian-update -r unifreq -k 6.6.12验证内核安装重启系统后验证新内核# 检查当前运行内核版本 uname -r # 查看已安装的内核包 dpkg -l | grep linux-image # 检查内核模块加载 lsmod | head -20性能测试与优化建议内核性能基准测试使用sysbench进行性能对比# CPU性能测试 sysbench cpu --cpu-max-prime20000 run # 内存带宽测试 sysbench memory --memory-block-size1M --memory-total-size10G run # 文件I/O测试 sysbench fileio --file-test-modeseqwr prepare sysbench fileio --file-test-modeseqwr run sysbench fileio cleanup内核参数优化在/etc/sysctl.conf中添加以下优化参数# TCP优化 net.ipv4.tcp_congestion_control bbr net.core.default_qdisc fq net.ipv4.tcp_notsent_lowat 16384 # 内存管理优化 vm.swappiness 10 vm.vfs_cache_pressure 50 # 文件系统优化 vm.dirty_background_ratio 5 vm.dirty_ratio 10应用配置sudo sysctl -p启动参数优化编辑/boot/armbianEnv.txt添加启动参数# 启用earlycon和console consolettyAML0,115200n8 earlyconaml_uart,0xff803000 # 内存参数 cma128M zswap.enabled1 # 性能调优 mitigationsoff intel_idle.max_cstate1高级技巧与最佳实践内核补丁管理项目支持自定义内核补丁补丁文件应放置在compile-kernel/tools/patch/目录compile-kernel/tools/patch/ ├── common-kernel-patches/ # 通用补丁 │ ├── 0001-driver-fix.patch │ └── 0002-performance-optimization.patch └── 6.6.y/ # 版本特定补丁 └── 0001-amlogic-specific.patch启用补丁功能sudo ./recompile -k 6.6.12 -p trueDocker容器编译环境对于干净的编译环境可以使用Docker# 构建编译镜像 cd compile-kernel/tools/script/docker sudo ./build_armbian_docker_image.sh # 在容器中编译内核 sudo docker run --rm -it \ -v $(pwd):/opt/kernel \ ophub/armbian-kernel-compiler:latest \ /bin/bash -c cd /opt/kernel ./recompile -k 6.6.12GitHub Actions自动化编译项目支持GitHub Actions自动化编译配置文件位于.github/workflows/compile-kernel-on-a-server.ymlname: Compile Kernel on: workflow_dispatch: inputs: kernel_version: description: Kernel version required: true default: 6.6.12 jobs: compile-kernel: runs-on: ubuntu-latest steps: - name: Compile the kernel uses: ophub/amlogic-s9xxx-armbianmain with: build_target: kernel kernel_version: ${{ github.event.inputs.kernel_version }} kernel_auto: true kernel_sign: -custom故障排除与恢复内核启动失败处理如果新内核无法启动可以通过以下方式恢复GRUB启动菜单恢复在GRUB启动菜单选择旧版本内核启动进入系统后删除问题内核使用armbian-update恢复# 恢复最近备份的内核 armbian-update -s手动恢复备份# 从备份目录恢复 sudo cp /ddbr/backup/boot/* /boot/ sudo cp -r /ddbr/backup/modules/* /lib/modules/ sudo update-initramfs -u sudo update-grub常见问题QAQ: 编译过程中磁盘空间不足怎么办A: 清理临时文件和缓存# 清理内核源码 sudo rm -rf compile-kernel/kernel/* # 清理编译输出 sudo rm -rf compile-kernel/output/* # 清理包管理器缓存 sudo apt-get clean sudo apt-get autocleanQ: 如何为特定设备优化内核配置A: 参考设备特定的配置建议Amlogic设备启用CONFIG_ARCH_MESON相关选项Rockchip设备启用CONFIG_ARCH_ROCKCHIP驱动Allwinner设备启用CONFIG_ARCH_SUNXI支持Q: 内核编译时间太长怎么办A: 优化编译配置# 使用ccache加速后续编译 export CCACHE_DIR/root/.ccache ccache -M 10G # 使用多核编译nproc返回CPU核心数 make -j$(nproc)总结与后续建议关键要点回顾环境准备是基础确保系统依赖完整存储空间充足配置选择很重要根据硬件平台选择正确的配置模板参数调优提升体验合理使用编译参数可以显著提升效率备份机制不可少始终保留可工作的内核版本作为备份测试验证要全面新内核安装后需进行功能性和稳定性测试性能优化建议定期更新到最新稳定版内核以获取安全补丁根据实际使用场景裁剪不需要的内核模块启用CONFIG_CC_OPTIMIZE_FOR_SIZE减小内核体积使用CONFIG_PREEMPT_VOLUNTARY平衡响应性和吞吐量社区资源与支持官方文档: compile-kernel/README.md问题反馈: 在GitHub Issues中提交具体问题配置分享: 欢迎贡献优化后的内核配置文件补丁提交: 通过Pull Request分享设备特定补丁下一步学习方向深入学习内核配置: 研究Kconfig系统掌握配置选项含义设备树定制: 学习设备树编译和调试技巧驱动开发: 为特定硬件编写内核驱动模块性能分析: 使用perf和ftrace进行内核性能分析安全加固: 学习内核安全配置和漏洞防护通过本教程您已经掌握了在Armbian系统上编译自定义Linux内核的完整流程。无论是为了硬件兼容性、性能优化还是功能扩展自定义内核编译都能让您充分发挥硬件潜力。记住实践是最好的学习方式大胆尝试小心验证您将逐渐成为内核编译的专家。温馨提示: 内核编译涉及系统核心组件操作前请务必备份重要数据。建议在测试环境中充分验证后再应用到生产环境。祝您编译顺利【免费下载链接】amlogic-s9xxx-armbianSupports running Armbian on Amlogic, Allwinner, and Rockchip devices. Support a311d, s922x, s905x3, s905x2, s912, s905d, s905x, s905w, s905, s905l, rk3588, rk3568, rk3399, rk3328, h6, etc.项目地址: https://gitcode.com/GitHub_Trending/am/amlogic-s9xxx-armbian创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

更多文章