我正在寻找一种比使用 grub 提供的菜单更优雅的方式来选择要启动的操作系统,我认为在机箱上安装一个具有两种状态(例如 Ubuntu 和 Windows)的开关来决定要加载哪个操作系统会很不错。我一直在思考,我觉得你应该能够通过将开关连接到 PWM 发生器并将发生器连接到风扇速度输入引脚来解决这个问题。然后从 grub 读取风扇速度,并进行条件测试以确定要加载哪个操作系统。
伪代码如下:
if (fan.speed > threshold) then
load Windows;
else
load Ubuntu;
end
因此,我的两个问题是:
- 如何使用 grub 测试来确定启动哪个操作系统?
- 如何在启动期间从 grub 读取风扇速度?
当然也欢迎其他解决方案和想法:)
答案1
您需要编写自己的 grub2 模块,与 BIOS 交互以获取原始风扇速度信息,然后使用该信息解释和处理结果。显然,GRUB 不知道或不关心您的风扇速度,如果不编写一些代码,您将无法在本机执行此操作。
更好的解决方案是将引导加载程序(仅引导加载程序,仅此而已)安装到 USB 记忆棒上。您可以使用 GRUB2 或 BOOTMGR - 没关系。
然后将 PC 配置为首先从 USB 加载,当将此 USB 插入 PC 时,它将启动到 Ubuntu;而将本地磁盘配置为启动到 Windows。即,USB 的存在或不存在将决定您的 PC 启动到哪个操作系统。
此时,只需使用经过修改的 USB 电缆并在其中一条 VCC 线上安装一个开关即可。如果该开关处于活动状态,则 USB 棒将出现在 BIOS 中,并且它将从 USB 的 GRUB 副本启动并进入 Ubuntu。如果开关处于关闭状态,则 PC 将从本地磁盘“正常”加载,并启动到 Windows。
当然,你可以随意将 USB 棒、经过修改的 USB 电缆和 VCC 开关伪装成一个独立的单元。这比你的 PWM 想法酷多了,因为你只需将它插入 USB 端口就可以了。
答案2
如何使用 grub 测试来确定启动哪个操作系统?
使用标准 GRUB:您不需要。从技术上讲,您可以修改 GRUB 来执行此操作,但这可能仅适用于一种主板,而且还有更简单的方法。
更简单的方法是实际加载第三个操作系统。例如,安装一个包含所有相关驱动程序的小型 Linux。然后从那里开始尝试以下技巧:
- 设置为默认启动您的微型操作系统(我们称之为“选择器操作系统”)。
- 一旦在选择器中启动,读出风扇状态(这是可行的,因为此时您已经加载了完整的操作系统,包括风扇速度、串行端口等相关驱动程序)。
- 选择下一个要启动的操作系统并调整引导加载程序。
- 重启。
然后,在其他两个操作系统中添加一个启动脚本,将加载器重置为选择器操作系统。
答案3
您的硬盘开关可以切换 HDD,将适当的 HDD 放置在 BIOS/EFI 要启动的位置。