【问题标题】:Buildroot - building ISO imageBuildroot - 构建 ISO 镜像
【发布时间】:2017-04-13 00:18:45
【问题描述】:

首先,请原谅 - 这是我构建操作系统和使用 Buildroot 的第一步。

我已经成功创建了我的第一个自定义操作系统(没什么特别的,只是第一次使用 grsec 修补的 4.6.3 内核进行测试)。

我在 /output/images 目录中有这些文件:

$ ls -lh
total 304M
-rw-r--r-- 1 fugitive fugitive  512 Apr 13 01:01 boot.img
-rw-r--r-- 1 fugitive fugitive 4.1M Apr 13 00:57 bzImage
-rw-r--r-- 1 fugitive fugitive  79M Apr 13 01:01 disk.img
-rw-r--r-- 1 fugitive fugitive 137K Apr 13 00:57 grub-eltorito.img
-rw-r--r-- 1 fugitive fugitive 137K Apr 13 00:57 grub.img
-rw-r--r-- 1 fugitive fugitive  69M Apr 13 01:01 rootfs.cpio
-rw-r--r-- 1 fugitive fugitive  79M Apr 13 02:10 rootfs.ext2
lrwxrwxrwx 1 fugitive fugitive   11 Apr 13 01:01 rootfs.ext4 -> rootfs.ext2
-rw-r--r-- 1 fugitive fugitive  74M Apr 13 01:01 rootfs.iso9660

我的目标是 - 创建一个可启动的 iso 映像,但我不知道如何。

我可以用 qemu 模拟它,就像你在屏幕截图中看到的那样:

我尝试将rootfs.iso9660 刻录到 USB 驱动器,但无法启动。

尝试将 rootfs.iso9660 重命名为 rootfs.iso9660.iso 并尝试使用 VirtualBox,但后来我得到了一个 grub 终端。

感谢帮助和说明!

编辑:

.config 文件:

-bash-4.2$ grep  BR2_TARGET_ROOTFS_ .config | grep -v ^#
BR2_TARGET_ROOTFS_CPIO=y
BR2_TARGET_ROOTFS_CPIO_NONE=y
BR2_TARGET_ROOTFS_EXT2=y
BR2_TARGET_ROOTFS_EXT2_4=y
BR2_TARGET_ROOTFS_EXT2_GEN=4
BR2_TARGET_ROOTFS_EXT2_REV=1
BR2_TARGET_ROOTFS_EXT2_LABEL=""
BR2_TARGET_ROOTFS_EXT2_BLOCKS=0
BR2_TARGET_ROOTFS_EXT2_INODES=0
BR2_TARGET_ROOTFS_EXT2_EXTRA_BLOCKS=0
BR2_TARGET_ROOTFS_EXT2_EXTRA_INODES=0
BR2_TARGET_ROOTFS_EXT2_RESBLKS=0
BR2_TARGET_ROOTFS_EXT2_NONE=y
BR2_TARGET_ROOTFS_ISO9660=y
BR2_TARGET_ROOTFS_ISO9660_GRUB2=y
BR2_TARGET_ROOTFS_ISO9660_BOOT_MENU="fs/iso9660/grub.cfg"
BR2_TARGET_ROOTFS_ISO9660_INITRD=y

-bash-4.2$ grep -r BR2_TARGET_ROOTFS_ISO9660_HYBRID *
fs/iso9660/Config.in:config BR2_TARGET_ROOTFS_ISO9660_HYBRID
fs/iso9660/iso9660.mk:ifeq ($(BR2_TARGET_ROOTFS_ISO9660_HYBRID),y)

【问题讨论】:

    标签: linux-kernel x86 cross-compiling buildroot


    【解决方案1】:

    您启用了BR2_TARGET_ROOTFS_ISO9660_HYBRID 吗?如果您希望 ISO 映像也可以在 USB 设备上工作,则需要这样做。

    【讨论】:

    • 请查看更新后的问题,我也已在make menuconfig step ISO 目标中启用。如果您还需要其他东西,请告诉我!
    • Thomas : 似乎没有.. 我不确定如何启用它,因为我在 menuconfig 中没有看到类似的东西,并且不确定它的依赖关系..
    • @fugitive:你必须选择isolinux而不是grub2,然后出现isohybrid选项。我知道这不是很透明,但由于 Kconfig 的限制,很难更改。
    • @Arnout 找到了。我会尝试让你们知道。谢谢你的提示!
    • @fugitive 您可以在这里发布您的解决方案(作为您自己问题的答案)吗?
    【解决方案2】:

    带有 Grub2 的可引导 ISO 映像(仅用于 CDROM 的老式 ISO) - 我让它工作了。

    主要提示:

    • Grub:添加内置模块biosdisk iso9660
    • Grub:引导分区设置为cd
    • 更改 Grub 选项后需要重新编译(阅读官方手册中的how to rebuild package
    • 如果您在内核配置中进行更改,请确保支持 CDROM 设备和 ISO9660 文件系统
    • 如果您在 grub 救援控制台中(这不是一个好兆头),请尝试逐步执行命令 (like in this answer) 以找出问题所在。

    从 .config 中提取

    我将我的更改保存为 defconfig(make savedefconfig,阅读here),这是您应该拥有的:

    BR2_ROOTFS_POST_BUILD_SCRIPT="board/pc/post-build.sh"
    BR2_ROOTFS_POST_IMAGE_SCRIPT="support/scripts/genimage.sh"
    BR2_ROOTFS_POST_SCRIPT_ARGS="-c board/pc/genimage-bios.cfg"
    BR2_TARGET_ROOTFS_EXT2=y
    BR2_TARGET_ROOTFS_EXT2_4=y
    BR2_TARGET_ROOTFS_EXT2_SIZE="120M"
    BR2_TARGET_ROOTFS_ISO9660=y
    BR2_TARGET_ROOTFS_ISO9660_BOOT_MENU="fs/iso9660/grub.cfg"
    BR2_TARGET_GRUB2=y
    BR2_TARGET_GRUB2_BOOT_PARTITION="cd"
    BR2_TARGET_GRUB2_BUILTIN_MODULES="boot linux ext2 fat squash4 part_msdos part_gpt normal biosdisk iso9660"
    BR2_PACKAGE_HOST_GENIMAGE=y
    

    旁注:我开始尝试为 PC make pc_x86_64_defconfig && make 构建默认配置

    测试

    在 QEMU 中测试您的 ISO:

    qemu-system-x86_64 -m 512 -cdrom output/images/rootfs.iso9660
    

    它也适用于虚拟盒子。

    【讨论】:

      【解决方案3】:

      试试:

      sudo dd if=/path/to/output/images/disk.img of=/path/to/usb/drive bs=1M
      

      要知道你的 USB 驱动器的路径:

      lsblk 
      

      并找到您的 USB 驱动器。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-02-15
        • 2020-10-06
        • 2019-06-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-09-15
        相关资源
        最近更新 更多