编辑我:

编辑我:

我已经在 Chromebook 上安装了 Ubuntu,但它只能启动到 Chrome OS。我的目标是让我的 Chromebook 启动到 Ubuntu。

答案1

安装 Ubuntu 后,如果您重新启动 Chromebook,默认情况下它将继续启动到 Chrome OS,该操作系统位于其自己的专用分区中。

如果您希望将 ChrUbuntu 设为默认,请打开 ChrUbuntu 中的终端(或 Chrome OS 中的开发者控制台命令提示符),然后输入 sudo cgpt add -i 6 -P 5 -S 1 /dev/sda 以更改默认启动分区。将其改回 Chrome OS 非常简单,只需在启动 Chromebook 时禁用开发者模式,或者在终端输入 sudo cgpt add -i 6 -P 0 -S 1 /dev/sda 即可。

编辑我:

设置启动优先级

此时我们应该有以下情况:

  • Image-A 是官方的 Google Chrome 操作系统,可以在正常模式或开发模式下启动。
  • Image-B 是(或将在第一次自动更新后)另一个官方的 Google Chrome 操作系统,它可以在正常模式或开发模式下启动。
  • Image-C 是带有修改后的命令行和 Ubuntu rootfs 的 Chrome OS 内核,只能在开发模式下启动。

接下来,我们调整镜像之间的优先级,以便可以试用我们的 Ubuntu 镜像。镜像优先级是其内核分区的一个属性。运行cgpt show /dev/sda,查看内核优先级:

本地主机〜#cgpt显示/ dev / sda

...

 4096     32768       2  Label: "KERN-A"
                         Type: ChromeOS kernel
                         UUID: D176DC60-81F1-654E-8953-E3D28019738C
                         Attr: priority=3 tries=0 successful=1

...

36864     32768       4  Label: "KERN-B"
                         Type: ChromeOS kernel
                         UUID: F1A2C65C-CC22-FF4A-A8BC-67BA233F3D40
                         Attr: priority=0 tries=15 successful=0

...

12369920     32768       6  Label: "KERN-C"
                         Type: ChromeOS kernel
                         UUID: B6954485-4295-9749-956A-C315B01FB684
                         Attr: priority=0 tries=15 successful=0

优先级决定了 BIOS 尝试查找有效内核的顺序(优先级越高,零表示根本不尝试)。每次 BIOS 尝试启动内核时,尝试字段都会递减,如果为零,则内核被视为无效(这让我们可以启动新的映像,而不必在它们不起作用时无限循环)。成功字段会覆盖尝试字段,但只有在操作系统启动并运行时才会设置。

我们将 KERN-C 的优先级改为 5:

cgpt add -i 6 -P 5 -T 1 -S 0 /dev/sda

这使得 KERN-C 具有最高优先级,但只给我们一次启动它的机会。这样,如果它不工作,我们就不会完全陷入困境。

如果你现在重启,你应该进入 Ubuntu!请注意,计算机科学标准答案 #1 适用:它对我有用™

如果出现问题并且 Ubuntu 崩溃或者您关闭电源,KERN-C 的 tries 字段将减少到 0,并且您将恢复启动 Chrome OS。

假设 Ubuntu 已启动并且你可以登录,请转到应用程序->附件->终端以获取 shell,然后运行

sudo cgpt add -i 6 -P 5 -S 1 /dev/sda

这会将 Ubuntu 内核标记为有效,因此它将在下次继续启动。

现在,您只需拨动开发模式开关即可在官方 Chrome OS 版本和 Ubuntu 之间来回切换。从开发模式切换到正常模式会擦除 STATE (/dev/sda1),但速度要快得多。再次从正常模式切换到开发模式通常会缓慢擦除 /dev/sda1,但由于我们正在启动 Ubuntu,因此不会发生这种情况。

这种方法之所以有效,是因为尽管 KERN-C 具有最高优先级,但它并未获得 Google 的签名。在开发模式下,这没问题,但在正常模式下,BIOS 会拒绝它。由于我们将成功标志设置为 1,BIOS 不会将其标记为无效,而只是每次都会跳过它。这会使正常模式下的启动时间略长,但只会延长一两秒。

当然,您也可以在重新启动之前使用 cgpt 手动设置优先级,在开发模式下切换图像。

请注意,如果正常图像自动更新,它可能会更改内核优先级,以便 Image-C 不再是最高优先级,并且下次切换到开发模式时,您将 a) 需要长时间等待,b) 仍在运行 Chrome OS,并且 c) 必须使用 cgpt 再次提高 KERN-C 优先级。

但是,由于自动更新仅在 Image-A 和 Image-B 之间切换,因此 Ubuntu 内核和 rootfs 不会受到影响。

答案2

不幸的是,我没有足够的声誉来对上述帖子发表评论,并且我的帖子太长而无法发表评论,所以我将澄清你的控制台的问题,布莱恩。

您的问题是您甚至不在控制台中。这就是为什么您会收到“未知命令:sudo”和“未知命令:cgpt”的原因。您没有处于完整的 Linux shell 中。

解决方法:使用 ctrl+alt+T 进入控制台后,输入“shell”(不带引号)。然后,您就可以执行 Hans 提供的有用命令了。

谢谢,
Num

PS:Hans,我试过你的方法,但出现了一个小问题。我没有内核 C。但是,控制台接受了命令,cgpt add -i 6 -P 5 -T 1 -S 0 /dev/sda没有出现错误。当我重新启动时,屏幕亮了,但一直黑着,然后熄灭,然后再次闪烁黑屏,然后显示“操作系统验证已关闭”消息。我按下 ctrl+D,在显示器快速关闭之间闪烁了几次黑屏后,它成功启动了……进入 ChromeOS。我需要 apt-get 标头或其他东西吗?我知道 KERN-C 应该在列表中cgpt show /dev/sda。我的笔记本电脑是 Acer C710,如果有帮助的话。我意识到这个问题主要发生在 Acers 上。

相关内容