如何以编程方式创建可引导 CD?

Posted

技术标签:

【中文标题】如何以编程方式创建可引导 CD?【英文标题】:How do I programmatically create a bootable CD? 【发布时间】:2010-09-30 08:15:55 【问题描述】:

我正在使用准系统教程作为我正在开发的操作系统的基础,它似乎是一个较旧的教程:它将内核编译为软盘映像,然后使用 GRUB 加载它。

基本上,我仍然想使用 GRUB,但我想让我的操作系统从 CD 上运行。主要原因是我实际上没有可用的真正软盘驱动器(我目前正在 VirtualBox 中进行测试),因此我无法在真正的硬件上测试我的操作系统。

我一直在网上四处寻找,我可以找到很多从软盘映像创建可引导 CD 的实用程序,但这些似乎都需要一个真正的软盘驱动器,而且它并不是我真正想要的为了。理想情况下,我希望能够在我的制作步骤中获得一张可引导 CD,而无需先将映像放在软盘上,这似乎毫无意义。

我想回答这个问题的简单方法是:如何设置 GRUB 以从 CD 读取我的内核映像?我是否需要一个特殊的实用程序才能从 Windows 执行此操作? (内核还不能自己编译,这不是很长时间)

谢谢!

【问题讨论】:

【参考方案1】:

我自己为我的项目找到了解决方案,并听取了 OSdev 人员的一些建议。有一个名为 mkisofs 的实用程序(可以使用 cygwin dll 在 Windows 下运行)获取一个目录,并将该目录制作成可以刻录到 CD 的 ISO 映像。使用 -b 标志,您可以指定哪个文件应该驻留在磁盘的引导扇区中。

解决办法就是在bootsector里放GRUB,用GRUB加载内核镜像,我可以很容易的编译成非软盘形式。

【讨论】:

【参考方案2】:

AFAIK 可引导 CD 与可引导软盘几乎相同。您需要将引导加载程序 (GRUB) 放入引导扇区等,Bios 会处理低级内容,直到您切换到保护模式。

您可能必须制作映像,然后将其添加到实际的物理磁盘。

这是 El Torito 可启动 CD 规范: http://www.phoenix.com/NR/rdonlyres/98D3219C-9CC9-4DF5-B496-A286D893E36A/0/specscdrom.pdf

编辑:另一种测试内核的方法是使用可引导的 U 盘。同样,BIOS 将处理低级 USB 内容,直到您打开 A20 并跳转到保护模式。

【讨论】:

...哦,我从没想过 USB。我会四处寻找。 并非所有计算机都可以从 USB 设备启动,但大多数(所有?)现代计算机都应该。 senfo:没错,并非所有计算机都可以从 USB 设备启动,就像不是所有计算机都可以从 CD-ROM 驱动器启动一样。但如果它没有软盘驱动器,它可能是最近才能够这样做的。 我见过很多可以从 CD 而不是 USB 驱动器启动的计算机,即使是那些没有软盘驱动器的计算机。 CD更容易做是有道理的。不过这些规范很有用,也许我可以自己生成满足规范的信息。 在大多数 BIOS:es 中都有一个名为“USB Legacy Support”的选项,当从 U 盘启动时,它将模拟 INT13h。但请注意,由于 USB 传统支持是使用 SMM/SMI 实现的,因此这可能是一个真正的恐怖。特别是如果您的操作系统中有自己的 USB 实现。【参考方案3】:

如果您有兴趣查看代码,那么Moblin Image Creator 可能是一个值得一试的好应用程序。它是用 python 编写的,可以为 Moblin Linux 的 Live 和可安装配置创建不同类型的可启动映像(CD、USB 和 NAND)。

【讨论】:

以上是关于如何以编程方式创建可引导 CD?的主要内容,如果未能解决你的问题,请参考以下文章

如何以编程方式使 Mac OS 上的文件夹可全局写入?

magento 以编程方式为可配置产品创建订单

以编程方式更改图层列表可绘制项的底部属性

以编程方式更新图像宽度和边距

加速大量以编程方式创建的按钮显示

如何以编程方式在云工具包中标记可查询的记录类型