避坑指南:手把手教你用openEuler 20.03 LTS SP3自带配置编译4.19.90内核(FT2000+平台实测)
避坑指南手把手教你用openEuler 20.03 LTS SP3自带配置编译4.19.90内核FT2000平台实测在国产化服务器FT2000上部署openEuler系统后许多开发者会遇到需要重新编译内核的场景——可能是为了启用特定硬件驱动、优化性能参数或是增强安全特性。但网上通用的内核编译教程往往会导致系统无法启动卡在exiting boot services的尴尬局面。本文将彻底解决这个问题带你用系统原生配置完成一次可靠的内核编译。1. 为什么defconfig在FT2000上会失败绝大多数Linux内核编译教程都会建议从make defconfig开始——这个命令会生成一个默认配置。但在国产化平台上这种通用配置存在三个致命问题架构差异FT2000采用的Phytium ARM64处理器需要特殊的内存页大小配置64K而非常见的4K硬件适配默认配置缺失国产硬件所需的特定驱动选项如CONFIG_ARCH_PHYTIUM启动参数缺少必要的EFI启动参数和console设置重要提示直接修改defconfig生成的.config文件极难成功因为不同架构间的配置存在复杂的依赖关系。2. 准备工作获取正确的源码与配置2.1 安装编译依赖dnf install -y bc bison flex openssl-devel elfutils-libelf-devel \ ncurses-devel make gcc git dwarves rpm-build2.2 获取内核源码两种可靠来源官方仓库推荐git clone https://gitee.com/openeuler/kernel.git -b kernel-4.19.90-2112.8.0标准内核需配合系统配置wget https://cdn.kernel.org/pub/linux/kernel/v4.x/linux-4.19.90.tar.gz tar -xf linux-4.19.90.tar.gz2.3 关键一步复制系统配置cp /boot/config-$(uname -r) linux-4.19.90/.config这个配置文件中已经包含了FT2000所需的所有硬件特性和启动参数。3. 编译流程与避坑要点3.1 配置预处理cd linux-4.19.90 make olddefconfig # 保持现有配置仅处理新选项常见问题处理问题现象解决方案缺少证书错误执行scripts/config --set-str SYSTEM_TRUSTED_KEYS 模块签名警告添加CONFIG_MODULE_SIG_ALLn到.config文件3.2 高效编译命令make -j$(nproc) 21 | tee build.log编译监控技巧watch -n 5 cat build.log | grep error\|warning | tail -n 203.3 安装新内核make modules_install make install关键文件生成位置内核镜像/boot/vmlinuz-4.19.90-custom初始化内存盘/boot/initramfs-4.19.90-custom.img符号表/boot/System.map-4.19.90-custom4. 启动配置与验证4.1 更新GRUB配置grub2-mkconfig -o /boot/efi/EFI/openEuler/grub.cfg检查新条目是否生成grep -A10 4.19.90-custom /boot/efi/EFI/openEuler/grub.cfg4.2 启动参数检查确保grub条目包含FT2000必需的参数consolettyAMA0 earlyconpl011,mmio32,0x280000004.3 故障排查指南如果仍遇到启动问题检查EFI分区空间df -h /boot/efi验证initramfs生成lsinitrd /boot/initramfs-4.19.90-custom.img | grep phytium查看启动日志journalctl -b -1 | grep -i error\|fail5. 进阶优化技巧5.1 内核裁剪指南安全裁剪建议表配置项推荐值说明CONFIG_DEBUG_INFOn减少30%编译体积CONFIG_KERNEL_GZIPy替代XZ获得更快启动CONFIG_MODULESy必须启用以支持动态加载5.2 性能调优参数# 添加至.config文件 CONFIG_PREEMPTy CONFIG_HZ_1000y CONFIG_ARM64_64K_PAGESy5.3 制作RPM包make rpm-pkg生成的RPM位于~/rpmbuild/RPMS/aarch64/便于批量部署。6. 国产化环境特别注意事项在FT2000平台上需要特别关注的配置内存管理CONFIG_ARM64_PAGE_SHIFT16 CONFIG_FORCE_MAX_ZONEORDER14处理器特性CONFIG_ARCH_PHYTIUMy CONFIG_NR_CPUS64 # 根据实际核心数调整固件接口CONFIG_EFIy CONFIG_EFI_STUBy通过这套方法我们在多个FT2000节点上实现了100%的成功率编译时间从最初的3小时优化到40分钟左右。记住关键原则永远从系统提供的config文件开始而不是defconfig。