无忧启动论坛

标题: 启动ChromeOS:gptpriority命令 [打印本页]

作者: Cherub    时间: 2022-4-21 08:27
标题: 启动ChromeOS:gptpriority命令
本帖最后由 Cherub 于 2022-5-2 14:03 编辑

最近在研究fydeos(ChromeOS衍生系统)的启动配置文件,因为想自己自己生成一个bootx64.efi同时引导别的系统,想看看fydeos这个grub2使用了哪些模块。别的命令和对应的模块都找到了,就是这个“gptpriority”不知道是什么意思,也找不到对应的模块,自己生成的引导程序是没法执行这个命令的,还请大佬解答。



##2022年5月2日该问题已解决,感谢wintoflash大佬提示:
     gptpriority命令是一个在grub2下用于获取GPT分区相关参数的命令,最早是谷歌程序员在开发ChromeOS时所写,用于在引导ChromeOS时自动切换A/B分区。这个命令以模块的形式添加到grub2,并不包含在官方项目内,如果你想把此命令加入自己的grub2中,你需要重新编译项目,以Ubuntu20.04环境为例:

1.搭建环境
  1. sudo -E apt-get -y install build-essential python iasl lzop unifont autopoint autoconf bison flex gettext gcc-mingw-w64
复制代码



2.同步代码
  1. git clone https://git.savannah.gnu.org/git/grub.git
复制代码


3.下载补丁文件Forward-port-gptpriority-command-to-GRUB-2.00.patch置于grub同级目录
Forward-port-gptpriority-command-to-GRUB-2.00.zip (2.8 KB, 下载次数: 9)

4.将gptpriority补丁合并到项目中
  1. cd grub
  2. for p in ../*.patch; do patch -p1 < $p; done
复制代码


5.配置和编译项目(以x86_64架构为例)
  1. ./bootstrap
  2. ./configure --prefix=/opt/grub --with-platform=efi --target=x86_64 --disable-werror
  3. sudo make install
复制代码


6.定制efi启动文件(以启动fydeos为例)
  1. /opt/grub/bin/grub-mkimage -O x86_64-efi -p /EFI/fydeos -o bootx64.efi part_gpt part_msdos normal search loopback fat ext2 linux test gptpriority boot all_video gfxterm
复制代码


作者: 窄口牛    时间: 2022-4-21 14:17
本帖最后由 窄口牛 于 2022-4-21 14:19 编辑

确实搞不明白它这个a和b干啥的,每次安装有时候是a,有时候是b。但是直接用它的菜单你的efi可以正常启动的呀。
作者: Cherub    时间: 2022-4-21 16:34
窄口牛 发表于 2022-4-21 14:17
确实搞不明白它这个a和b干啥的,每次安装有时候是a,有时候是b。但是直接用它的菜单你的efi可以正常启动的 ...

可以正常启动,但是每次启动都会提示找不到gptpriority这个命令,所以还是想解决,另外那个A和B应该是类似于现在普及在安卓设备上的AB双分区,在每次系统升级时会切换,以备份升级前的内核,当启动有问题时你可以切换另一个选项,平时保持默认就行
作者: 窄口牛    时间: 2022-4-21 17:03
哦,酱紫,涨姿势。
作者: 2013lirunext    时间: 2022-4-21 21:51
要不,发封邮件问问官方人员,图里有邮件地址
作者: wintoflash    时间: 2022-4-22 18:32
这玩意的功能就是获取GPT分区表里面某个分区的属性,以便在升级系统的时候区分 A B 分区。
https://chromium.googlesource.co ... 2ac1ffe8a0e7%5E%21/
作者: Cherub    时间: 2022-4-26 22:05
wintoflash 发表于 2022-4-22 18:32
这玩意的功能就是获取GPT分区表里面某个分区的属性,以便在升级系统的时候区分 A B 分区。
https://chromi ...

感谢大佬提示,看来得重新编译一下了
作者: Cherub    时间: 2022-5-1 10:10
wintoflash 发表于 2022-4-22 18:32
这玩意的功能就是获取GPT分区表里面某个分区的属性,以便在升级系统的时候区分 A B 分区。
https://chromi ...

此前没有Linux编译项目的经验,通过已有教程搭建了环境,成功编译了官方grub2,但是我不知道怎么把gptpriority这个第三方命令加入官方grub2,我尝试把gptpriority.c放入目录"grub/grub-core/commands",但并不会参与编译并生成对应模块。

还有我看到似乎有人能从已生成的efi中提取内置的模块,但找不到相关教程,若是能做到这一点,也能解决我的问题

这两个问题还请大佬解答
作者: wintoflash    时间: 2022-5-1 11:11
Cherub 发表于 2022-5-1 10:10
此前没有Linux编译项目的经验,通过已有教程搭建了环境,成功编译了官方grub2,但是我不知道怎么把gptpri ...

编辑 grub-core/Makefile.core.def,加上
  1. module = {
  2.   name = gptpriority;
  3.   common = commands/gptpriority.c;
  4. };
复制代码

作者: Cherub    时间: 2022-5-2 13:22
wintoflash 发表于 2022-5-1 11:11
编辑 grub-core/Makefile.core.def,加上

已经编译成功,谢谢提示,下载补丁文件放到项目目录所在路径,通过命令:
  1. for p in ../*.patch; do patch -p1 < $p; done
复制代码

即可自动将gptpriority添加到项目,实际会修改包括Makefile.core.def在内的好几个文件,最后正常编译
作者: nowayer    时间: 2023-10-29 09:39
提示: 作者被禁止或删除 内容自动屏蔽




欢迎光临 无忧启动论坛 (http://wuyou.net/) Powered by Discuz! X3.3