Buildroot - 构建ISO映像

时间:2017-04-13 00:18:46

标签: linux-kernel x86 cross-compiling buildroot

首先,请原谅 - 这是我构建操作系统和使用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

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

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

enter image description here

我尝试将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)

3 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:0)

尝试:

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

要了解USB驱动器的路径:

lsblk 

找到你的USB驱动器。

答案 2 :(得分:0)

使用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

它也可以在Virtual Box中使用。