查看“Testing”的源代码
←
Testing
跳到导航
跳到搜索
因为以下原因,您没有权限编辑本页:
您请求的操作仅限属于该用户组的用户执行:
用户
您可以查看和复制此页面的源代码。
除非有一种方法可以测试新版本的操作系统或内核,否则开发操作系统几乎只是完全无用的练习。 设置测试环境有许多不同的方法。 广义上,它们可以分为两种方法: * 物理机 * [[:Category:Emulators|虚拟机]] == 作为成功测试环境要达到的要求 == * ''' 速度。''' 你希望能够重新启动你的 (可能是虚拟的) 测试机,并在输入完命令之前将其准备好与新内核一起使用。 你还希望代码尽可能快地执行,这样你就可以回到编码,而不是等待 [[GRUB]] 加载。 物理机可以在这个指标上获胜,但这取决于硬件速度,当然 (软盘驱动器特别慢)。模拟486的Core 2 Duo可能会比486本身更快。 * ''' 易用性。''' 仅为了修改20条不同命令,就构建和运行新内核,肯定不太好玩,因此你可能希望编译构建的更少。 减少测试构建步骤是减少Bug的好方法。 模拟器通常会在这个指标获胜,因为你可以设置makefile来构建磁盘映像,同时准备在模拟器中运行。 [[Diskless Booting|无盘引导]] 也是真实机器上的一种选择。 * ''' 与真实情况足够接近。''' 如果你的测试机器尽可能接近真实,这被认为是一件好事。 当然,物理机器最适合此,其次是 [[Bochs]]一类的虚拟机。 == 使用物理机进行测试 == 使用真实机器进行测试的主要优点是,如果你的操作系统在测试平台上运行,则很有可能也能在任何其他计算机上运行。 然而,如果你使用模拟器进行测试,它可能无法在真实的东西上工作。 缺点主要是你需要空间和金钱来维护第二台计算机,以及花费重新启动开发机器所花费的时间。 有了今天便宜的硬件,建议你有第二台物理计算机。 你可以花3000美元购买一台全新的测试计算机,也可以花20美元购买一台回收的 [[IA32_Architecture_Family#Intel_486|486]]。 一台计算机有几个组成部分,但是,以下是一个建议最低限度的清单: * 软盘驱动器 (用于启动和测试FAT12驱动程序)。 * 一个 [[VGA Hardware|VGA]]-兼容视频卡。 * [[Serial ports|串口]]。 * 硬盘 (500MB绰绰有余)。 * [[PCI]]/[[ISA]] 总线。 * 网卡,例如 [[Ne2000|NE2000]] 或 [[3c90x]]。 这类机器是一个很好的基础。 由此,你添加的任何其他设备都只是用来编写更多驱动程序的。 要执行测试,你可以从便携式介质 ([[Floppy|软盘]] 或 [[USB]]) 引导内核,或者使用 [[Diskless Booting|无盘引导]] 从开发PC下载内核。 从 [[Bootable CD|CD-ROM]] 引导是另一种选择,尽管它可能需要大量空白光盘 (或CD-RW)。 另一个很棒的技术是使用U盘: 只需在其上复制好软盘映像,然后使用BIOS例程来读取,BIOS就会为你模拟出一个软盘。 Brendan在 [[topic:17948|这个]] 论坛主题中写了一篇关于购买和管理测试机的很好的指南。 == 使用虚拟机进行测试 == 使用虚拟机进行测试的优点是,它可以用一个非常简单的过程来编译然后运行你的新内核 (shell脚本可以使它成为一个命令过程),如果你明智地选择你的模拟器,在调试消息方面,你可以获得很多免费帮助。 [[:Category:Emulators|这里]]有一份模拟器列表。 也许最推荐给OSDev开发者的两个是 [[Bochs]] 和 [[QEMU]]。 有关虚拟机测试的更多信息,请从相应的模拟器页面中获得。 使用虚拟机的一个缺点是硬件的选择受到限制。 例如,Bochs和QEMU的 [[VGA Hardware| VGA]] 和 [[:Category:Network devices|网络]] 设备的选择有限。 他们模拟的那些设备可能 (尽管不太可能) 有错误,并且不像真正的设备那样运行 (模拟器有时会为内存清零,而真正的机器通常没有)。 == 高级事项 == === 硬盘访问测试 === 硬盘访问测试会带来比通常测试更麻烦的问题,因为这意味着不太可能使用你的主要开发平台作为测试平台 (你可以坚持,但这通常是一个坏主意。译者注:主要怕开发中的操作系统把在用硬盘弄坏了)。 但是,如果你确实需要 (由于缺少模拟器或第二台机器),请参考以下指南: * 你的内核应该非常稳定,以确保它不会写入内存中的随机位置,不是跟随空指针和其他类似的东西。 处于保护模式在这里是一个优势,因为你不会意外调用可能写入磁盘的BIOS代码。 * 首先在ramdisk上尝试文件系统代码。 ramdisk内容可以从头开始构建,也可以由引导加载程序加载的数据生成 ([[GRUB]] 的模块加载工具将是很好的工具) 确保你有能力检查ramdisk中写入的内容,而不必将ramdisk写入真实磁盘 (你也可以在真正的磁盘上先试过)。 * 在开发 “将” 执行磁盘访问的组件时,请确保首先在 [[:Category:Emulators|模拟器]] 上对其进行测试,并确保其行为符合预期。 在磁盘功能中强制执行边界检查,这样你就不会弄错分区或类似的东西。 你甚至可以在低级驱动程序中对边界进行硬编码,如果上层组件要求它脱离磁盘上的 “安全” 阵列,则报告致命情况。 * 在一个与你的主磁盘单独的控制器 (例如不同的IDE电缆)尝试测试驱动器,这样你的代码将访问不会损害你的主磁盘的I/O端口。 如果所有其他方法都失败,请在专用的第二台计算机上进行测试。 === 寻找特定的硬件 === 如果你需要为特定的硬件编写驱动程序,则有几种选择。 如果你尚未拥有旧的硬件设备,则可以在 [http://www.ebay.com eBay] (和其他类似的地方) 上购买。 你还可以试试查看 [[topic:2970|此]] 论坛主题,其中许多用户列出了一些用于测试其他用户操作系统的计算机。 [[:Category:Hardware|硬件分类]] 中列出的绝大多数硬件都相当普遍,并且是不错的开发选择。 === 单元测试 === {{Main|Unit Testing}} 以上正文链接讨论了一种单独测试操作系统组件的方法,以及安装测试驱动(driver,译者注:单元测试需要driver和stub,分别模拟测试目标的上层和下层),以确保组件始终按预期工作 (比如,修复一个错误不会引入另一个错误)。 == 另见 == === 论坛主题 === *[[Topic:17948|Brendan's Guide to OS Testing]] [[Category:Troubleshooting]]
本页使用的模板:
模板:Main
(
查看源代码
)
返回至“
Testing
”。
导航菜单
个人工具
登录
命名空间
页面
讨论
变体
已展开
已折叠
查看
阅读
查看源代码
查看历史
更多
已展开
已折叠
搜索
导航
首页
最近更改
随机页面
MediaWiki帮助
工具
链入页面
相关更改
特殊页面
页面信息