You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将vmlinux.elf重新打包为bzimage及生成VGA Normal模式镜像

针对IoT设备Linux内核bzImage修改与打包问题的解决方案

问题1:将修改后的vmlinux.elf重新打包为bzImage

核心思路是利用同版本内核源码的构建环境,匹配原始镜像的编译配置,步骤如下:

  • 下载与原始bzimage_origin版本完全一致的Linux内核源码(需包含对应patch级别)
  • 从原始镜像提取内核配置:
    ./scripts/extract-ikconfig bzimage_origin > .config
    
  • 初始化编译配置:
    make olddefconfig
    
  • 生成编译依赖与工具:
    make prepare
    make scripts
    
  • 将修改后的vmlinux.elf_patched替换内核源码根目录下的vmlinux文件
  • 执行打包命令生成目标bzImage:
    make bzImage
    
    生成的文件位于arch/[对应架构]/boot/bzImage(x86架构为arch/x86/boot/bzImage)

问题2:用recreate-zImage生成VGA Normal模式的bzImage

针对打包后视频模式变为"Prompt for Videomode"的问题,需强制锁定VGA配置,避免脚本自动覆盖:

方案1:修改脚本与内核配置

  • 找到recreate-zimage.sh中自动生成/覆盖.config的代码段(通常是调用make defconfig或make menuconfig的部分),注释该逻辑,改用从原始bzimage_origin提取的.config
  • 手动修改提取的.config,添加以下配置项:
    CONFIG_DEFAULT_VGA=y
    CONFIG_VGA_CONSOLE=y
    CONFIG_VIDEO_OUTPUT_CONTROL=y
    
    其中CONFIG_DEFAULT_VGA=y是强制启用Normal VGA模式的关键
  • 在脚本末尾添加配置锁定逻辑,防止被重置:
    echo "CONFIG_DEFAULT_VGA=y" >> .config
    

方案2:强制指定启动参数

如果脚本修改受限,可直接在打包后的镜像中添加启动参数:

  • 在内核镜像的启动参数段中加入vga=normal,强制内核使用Normal VGA模式
  • 或在rebuild_kernel.sh中修改传递给内核的启动参数,固定追加vga=normal

复现场景下的修正步骤

在Ubuntu 18.04环境复现问题后,额外执行:

  1. 用extract-ikconfig从原始bzimage_origin提取.config,替换脚本默认使用的配置文件
  2. 在.config中设置CONFIG_DEFAULT_VGA=y
  3. 修改rebuild_kernel.sh,在配置生成步骤后添加echo "CONFIG_DEFAULT_VGA=y" >> .config
  4. 重新执行rebuild_kernel.sh

内容的提问来源于stack exchange,提问作者kiritsugu2023

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 01:04:59