无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站广告联系 微信:wuyouceo QQ:184822951
查看: 5064|回复: 33
打印 上一主题 下一主题

[已解决] G4E引导Archlinux内核6.2.1失败

[复制链接]
1#
发表于 2023-3-7 09:26:24 | 显示全部楼层
本帖最后由 wintoflash 于 2023-3-7 09:29 编辑

http://bbs.wuyou.net/forum.php?m ... 3224&fromuid=487838

目前可以用 chainloader 来启动内核,不过 initrd 要在同一 ESP 分区。
linux /xxx/vmlinuz XXX
initrd /xxx/initrd.img
转换为
chainloader /xxx/vmlinuz XXX initrd=/xxx/initrd.img

放弃 EFI Handover Protocol 的缺点就是 64 位 EFI 下不能启动 32 位内核了 (或者反过来)。
传统 32 位启动协议比较难支持,而且很多 EFI 相关的功能就报废了。

点评

好的感谢,不知道G4E是否有计划把kernel命令的实现机制改了……chainloader总感觉怪怪的……  详情 回复 发表于 2023-3-7 10:21
回复

使用道具 举报

2#
发表于 2023-3-7 11:23:02 | 显示全部楼层
不知道G4E是否有计划把kernel命令的实现机制改了

在考虑。主要是造成很多不兼容。
以及有多个initrd该怎么写呢?(需要上微码更新)

那就没办法了。还有initrd=后面路径用 / 还是 \ 我忘了。

点评

生产环境应该32bit内核不是主流了吧。  详情 回复 发表于 2023-3-7 11:44
回复

使用道具 举报

3#
发表于 2023-3-7 22:17:13 | 显示全部楼层
本帖最后由 wintoflash 于 2023-3-7 22:19 编辑

grub4dos-for_UEFI-2023-03-07.7z (1.05 MB, 下载次数: 19)
试试,暂时删了 EFI Handover Protocol 相关的东西,使用 LoadFile2 Protocol 提供 initrd。
我用 Manjaro 测试加载多个 initrd 是可以的。
  1. title Manjaro (kernel)
  2. kernel /manjaro/vmlinuz-x86_64 misobasedir=manjaro misolabel=TEST driver=nonfree nouveau.modeset=0 i915.modeset=1 radeon.modeset=1
  3. initrd /manjaro/amd_ucode.img /manjaro/intel_ucode.img /manjaro/initramfs-x86_64.img

  4. title Manjaro (chainloader)
  5. chainloader /manjaro/vmlinuz-x86_64 misobasedir=manjaro misolabel=TEST driver=nonfree nouveau.modeset=0 i915.modeset=1 radeon.modeset=1 initrd=/manjaro/initramfs-x86_64.img
复制代码

==============
我没搞定 gcc 4.8 的安装,所以瞎改了一通之后用 GCC 10.4 编译的,可能有其他毛病。

点评

测试结果是直接死在configfile上。屏幕提示只有Will load external menu...没有Has entered the external menu... 内置菜单: 外置菜单:  详情 回复 发表于 2023-3-8 17:49
回复

使用道具 举报

4#
发表于 2023-3-8 17:53:55 | 显示全部楼层
本帖最后由 wintoflash 于 2023-3-8 17:56 编辑
sunsea 发表于 2023-3-8 17:49
真机测试结果是直接死在configfile上。屏幕提示只有Will load external menu...没有Has entered the exte ...

你有gcc4.8环境吗?有的话可以打上压缩包里面的补丁自己编译试试(删掉configure里面那行我乱改的东西)
或者别用批处理,就用最简单的几个命令试试能不能启Linux。没问题的话我推github上去。

点评

手动命令行进去成功了。干掉外置菜单的!BAT那一行也能顺利进入菜单。不过你的ntloader不打算更新一下吗?  详情 回复 发表于 2023-3-8 18:08
显然是没有的(悲)  详情 回复 发表于 2023-3-8 17:56
回复

使用道具 举报

5#
发表于 2023-3-8 20:40:58 | 显示全部楼层
sunsea 发表于 2023-3-8 18:08
手动命令行进linux成功了。干掉外置菜单的!BAT那一行也能顺利进入菜单。不过你的ntloader不打算更新一下 ...

那就好。
  1. 干掉外置菜单的!BAT那一行也能顺利进入菜单。
复制代码

这就有点奇葩了。得找熟悉GCC的埃及老哥研究一下。
  1. 不过你的ntloader不打算更新一下吗?
复制代码

原来搞的都忘光了,那得重新从wimboot改了。

点评

还有挺好奇chainloader途径加载linux内核走的是什么传参方式,我这试论坛里有人发的StartOS死机了(不过影响不大,主力不用这个,而且有点老了),但是chainloader就一直可以……  详情 回复 发表于 2023-3-13 15:33
回复

使用道具 举报

6#
发表于 2023-3-11 11:59:29 | 显示全部楼层
sunsea 发表于 2023-3-8 18:08
手动命令行进linux成功了。干掉外置菜单的!BAT那一行也能顺利进入菜单。不过你的ntloader不打算更新一下 ...


ntloader 也更新了一下
https://github.com/grub4dos/ntloader/releases/tag/latest
没啥问题我就推送了
  1. title Windows PE
  2. find --set-root /winpe.wim
  3. uuid ()
  4. find --set-root /EFI/grub/ntloader
  5. kernel /EFI/grub/ntloader uuid=%?% file=/winpe.wim
  6. initrd /EFI/grub/initrd.lz1

  7. title Windows VHD
  8. find --set-root /ramos.vhd
  9. uuid ()
  10. find --set-root /EFI/grub/ntloader
  11. kernel /EFI/grub/ntloader uuid=%?% file=/ramos.vhd
  12. initrd /EFI/grub/initrd.lz1
复制代码

点评

VHD没环境,带PE没有问题,应该没啥大问题。所以现在让人头疼的就一个事,尼玛怎么一句!BAT搞死机了……  详情 回复 发表于 2023-3-11 20:19
回复

使用道具 举报

7#
发表于 2023-3-11 20:21:04 | 显示全部楼层
sunsea 发表于 2023-3-11 20:19
VHD没环境,带PE没有问题,应该没啥大问题。所以现在让人头疼的就一个事,尼玛怎么一句!BAT搞死机了……

发布了 https://github.com/chenall/grub4dos/releases/tag/for_UEFI
GitHub 上的是用 GCC4.8 编译的,应该没这些奇怪问题。

点评

!BAT行为正常了,感谢!所以尼玛怎么换了个GCC版本死在!BAT上了真的奇怪……  详情 回复 发表于 2023-3-13 08:17
回复

使用道具 举报

8#
发表于 2023-3-13 09:39:37 | 显示全部楼层
sunsea 发表于 2023-3-13 08:17
!BAT行为正常了,感谢!所以尼玛怎么换了个GCC版本死在!BAT上了真的奇怪……以及我一直好奇,启动pe难道 ...
启动pe难道不传minint参数么

当然是要传递的。但是在不指定的情况下可以根据扩展名自动判断:
  1.   /* winpe mode
  2.    * default:
  3.    *      OS  - no
  4.    *      VHD - no
  5.    *      WIM - yes */
  6.   if (nt_cmdline->minint[0])
  7.     bcd_parse_bool (hive, BCDOPT_WINPE, nt_cmdline->minint);
  8.   else
  9.   {
  10.     if (nt_cmdline->type == BOOT_WIM)
  11.       bcd_parse_bool (hive, BCDOPT_WINPE, "yes");
  12.     else
  13.       bcd_parse_bool (hive, BCDOPT_WINPE, "no");
  14.   }
复制代码
回复

使用道具 举报

9#
发表于 2023-3-13 18:58:00 | 显示全部楼层
sunsea 发表于 2023-3-13 15:33
还有挺好奇chainloader途径加载linux内核走的是什么传参方式,我这试论坛里有人发的StartOS死机了(不过 ...

目前 Linux 镜像就是标准的 PE 格式 EFI Application,使用 kernel 和 chainloader 启动方法是一样的。
  1. static int
  2. kernel_func (char *arg, int flags)
  3. {
  4.   int ret = chainloader_func (arg, flags);
  5.   if (ret)
  6.     kernel_type = KERNEL_TYPE_LINUX;
  7.   return ret;
  8. }
复制代码

只是加载 initrd 的方式不一样。
chainloader 是让 kernel 自己通过 UEFI Simple FileSystem Protocol 找到 initrd。所以只能找到 FAT 分区里面的 initrd。
initrd 命令是安装 LoadFile2 Protocol,通过这个协议把 initrd 提供给 kernel。好处就是只要 GRUB 能读到 initrd 就行。

那个 StartOS 可能是内核比较老,不支持通过 LoadFile2 读 initrd,结果找不到 initrd 爆 kernel panic 了。

点评

感谢解释!不过我自己有ntfs和ext的读写驱动所以也没问题了hhhh  详情 回复 发表于 2023-3-13 19:02
回复

使用道具 举报

10#
发表于 2023-3-14 20:44:34 | 显示全部楼层
本帖最后由 wintoflash 于 2023-3-14 20:52 编辑
2011whp 发表于 2023-3-14 20:09
意思是 内核版本6.2.1的 Archlinux, 不支持legacy启动了
(或者说 支持的话 提供了 两个vmlinuz ,不是二 ...

支持的,别瞎猜了。
从来就没有所谓"二合一"混合的vmlinuz。你下载的是32位的系统,它就是纯32位的,你下载的是64位的系统,它就是64位的。
只是头部有少量切换CPU工作模式的代码。
=====
wimboot/ntloader 这些它不是个完整的操作系统。
它当然也能切换CPU工作模式,但是切了之后 UEFI 启动服务之类的就炸了,就不能启 Windows 了,屁用没有,所以只能"二合一"。
回复

使用道具 举报

11#
发表于 2023-5-12 10:44:20 | 显示全部楼层
tsitian 发表于 2023-5-12 03:35
g4e能不能考虑加入对btrfs的支持,我的Linux系统都是安装在btrfs的subvolume上面的,应该如何使用g4e来启 ...

你 UEFI 启动 Linux,那 vmlinuz 和 initrd 都在 ESP 分区 FAT 文件系统里面。跟 btrfs 没关系。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|捐助支持|无忧启动 ( 闽ICP备05002490号-1 )

闽公网安备 35020302032614号

GMT+8, 2024-5-9 13:09

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表