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

Makefile可编译内核目标文件及二进制文件,但无法通过grub-mkrescue生成ISO镜像

Makefile可编译内核目标文件及二进制文件,但无法通过grub-mkrescue生成ISO镜像

嘿,我之前折腾自制内核的时候也碰到过grub-mkrescue掉链子的情况,太懂这种前面编译全顺,最后一步卡壳的烦躁了!结合你给出的项目结构和问题,我给你梳理几个最可能的排查方向:

  • 先确认目录结构和文件位置是否正确
    GRUB的rescue镜像需要严格的目录结构,你的alinux.bin得放在boot/目录下(或者你用来生成ISO的临时目录的boot/里),而且grub.cfg里的内核路径要对应。比如你的grub.cfg里应该写:

    menuentry "Alinux" {
        multiboot /boot/alinux.bin
    }
    

    要是你把alinux.bin放在了项目根目录没移到boot/,grub-mkrescue打包的时候找不到内核,自然不会生成ISO。

  • 检查Makefile里的ISO生成步骤
    很多人踩坑是因为没先把文件整理到临时ISO目录就直接跑grub-mkrescue。比如你得先创建一个临时目录(比如iso/),把boot/grub/grub.cfg和alinux.bin都复制到这个临时目录的对应位置,再让grub-mkrescue打包这个临时目录。举个靠谱的Makefile片段参考:

    ISO_DIR := iso
    ISO := alinux.iso
    
    $(ISO): alinux.bin
        mkdir -p $(ISO_DIR)/boot/grub
        cp boot/grub/grub.cfg $(ISO_DIR)/boot/grub/
        cp alinux.bin $(ISO_DIR)/boot/
        grub-mkrescue -o $(ISO) $(ISO_DIR)
        rm -rf $(ISO_DIR)
    

    要是你的Makefile里跳过了复制文件到临时目录这步,grub-mkrescue没找到它需要的GRUB配置和内核,肯定不会输出ISO。

  • 看看是不是缺依赖或者命令有问题
    先手动跑一遍grub-mkrescue -o test.iso boot(假设你的boot目录里有grub.cfg和alinux.bin),看看有没有报错:

    • 如果提示grub-mkrescue: command not found,那是你没装GRUB的工具包,Debian/Ubuntu系要装grub-common和xorriso,Fedora是grub2-tools-extra加xorriso;
    • 如果提示xorriso相关错误,就是缺xorriso这个工具,装了就行;
    • 要是没报错但还是没生成ISO,那大概率是目录结构不对,GRUB找不到能引导的文件。
  • 别忽略Make的错误输出
    有时候Makefile里的命令前面加了@,会把命令执行的输出藏起来,你可以去掉@,重新跑make iso,看看grub-mkrescue到底报了什么错,这是最快定位问题的方法!

备注:内容来源于stack exchange,提问作者Alelix

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.13 17:34:49