无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站广告联系 微信:wuyouceo QQ:184822951
12
返回列表 发新帖
楼主: 2011yaya2007777
打印 上一主题 下一主题

[原创] GRUB4DOS for UEFI

    [复制链接]
31#
发表于 2022-3-25 11:50:03 来自手机 | 显示全部楼层
2011yaya2007777 发表于 2022-3-25 08:32
reboot命令,以前使用 UEFI 固件提供的 GRUB_EFI_RESET_WARM(热复位)。
现在使用 UEFI 固件提供的 GRUB_ ...

那就是我的主板冷复位功能有问题了,不管是grub2efi  还是efishell 或是bios界面 我按键盘三个按键重启也是这个毛病!
至于ext4的事情,我已经拿优盘测试过了。
把硬盘都禁用,然后优盘弄成gpt分区表,分区就两个,一个ext4 一个esp 启动后也是会挂掉。
我的主板grub2efi 并无此问题,ext4分区正常访问

点评

弄一个小一点的可以重现问题的ext2分区,压缩下传给yaya看看  详情 回复 发表于 2022-3-25 16:45
回复

使用道具 举报

32#
发表于 2022-3-25 16:55:30 来自手机 | 显示全部楼层
2011yaya2007777 发表于 2022-3-25 08:32
reboot命令,以前使用 UEFI 固件提供的 GRUB_EFI_RESET_WARM(热复位)。
现在使用 UEFI 固件提供的 GRUB_ ...

大佬我找到了一种解决问题的新思路了,clover包含了一个从bios伪装成uefi的玩意。我把电脑的传统引导打开,然后利用grub4dos加载clover镜像进入冒牌uefi环境,然后去加载grub4efi,那个伪造的uefi坏境居然也会因为grub4efi的ext4问题崩溃掉,这说明了什么问题???   我自己编译的去掉ext4支持的版本,一切正常,我没有多余的电脑测试。
回复

使用道具 举报

33#
发表于 2022-3-25 17:00:56 来自手机 | 显示全部楼层
wintoflash 发表于 2022-3-25 16:45
弄一个小一点的可以重现问题的ext2分区,压缩下传给yaya看看

没用的,因为我自己的优盘,硬盘塞进虚拟机故障也不会重现,这很可能就是我主板bios的坑,
刚刚我把uefi关掉,开传统引导grub4dos 然后加载clover伪造uefi环境,再去加载grub4efi 问题依旧,这次是clover的uefi环境直接崩溃,自己编译的去除ext4功能的版本却完全正常。
要么是ext4源码有坑,要么是我主板bios有坑。
回复

使用道具 举报

34#
发表于 2022-3-25 19:25:59 来自手机 | 显示全部楼层
liuzhaoyzz 发表于 2022-3-25 17:10
前面我也反馈了,虚拟机可以启动G4E,实体机不行,我的电脑也有个ext4分区,其实我也是感觉g4d/g4e的ext4 ...

自己编译了一个不支持ext4的grub4efi最新版,顺便改成了reboot命令冷重启,用起来还算重舒服.
主要还是用来配合vbus使用,非常棒!
回复

使用道具 举报

35#
发表于 2022-3-25 22:16:51 来自手机 | 显示全部楼层
2011yaya2007777 发表于 2022-3-25 21:41
上面510819776测试了BOOTX64-cs7.rar啊。       没有明确告知测试结果。是否与热重启不同,既有关内存是否 ...

cs7卡booting find  
我改timeout 9后 用ls (hd0,2)直接挂掉
ls-func-0
ls-func-3
就显示两排    那个改重启的版本 直接卡死 无任何提示  我自己把热启动改成cold后,解决了重启问题
回复

使用道具 举报

36#
发表于 2022-3-26 01:14:20 | 显示全部楼层
2011yaya2007777 发表于 2022-3-25 21:44
好吧,我抽时间在ext模块添加一些调试信息,然后帮忙看看。

我的真机自己开了ext2fs调试了,用的是2022年0723版本,更高版本会因为ext4问题卡booting界面 卡find 命令
输入ls (hd0,2)/
inode 2
dirname=/
ipg=8192,dpb=64
group_id=0 group_desc=1 desc=0
fsblock 1 buffer 3227612640

同一块硬盘,我在虚拟机中测试的结果
inode 2
dirname=/
ipg=8192,dpb=64
group_id=0 group_desc=1 desc=0
fsblock 1 buffer 1005987296
inode table fsblock =1065
fsblock 1065 buffer 1005991392
ipb=16, sizeof(inode)=256
inode=3bf635e0,raw_inode=3bf636e0
offset into inode table block=256
00 00 00 00 00 0 00 f3 44 3e 60 f3 44 3e 60
.........后面都是16进制的

查看源码?????

ext2_rdfsb (unsigned long long fsblock, int buffer)
{
#ifdef E2DEBUG
  printf ("fsblock %d buffer %d\n", fsblock, buffer);
#endif /* E2DEBUG */
  return devread (fsblock * (EXT2_BLOCK_SIZE (SUPERBLOCK) / DEV_BSIZE), 0,
          EXT2_BLOCK_SIZE (SUPERBLOCK), (unsigned long long)(grub_size_t)(char *)(grub_size_t) buffer, 0xedde0d90);
}











  while (1)
    {
#ifdef E2DEBUG
      printf ("inode %d\n", current_ino);
      printf ("dirname=%s\n", dirname);
#endif /* E2DEBUG */

      /* look up an inode */
      group_id = tem = (current_ino - 1) / SUPERBLOCK->s_inodes_per_group;
            if ((EXT4_HAS_INCOMPAT_FEATURE(SUPERBLOCK,EXT4_FEATURE_INCOMPAT_META))
                && (group_id >= (int)SUPERBLOCK->s_first_meta_bg))
            {
                group_id = (group_id - SUPERBLOCK->s_first_meta_bg)
                    % EXT4_META_GROUP_SIZE(SUPERBLOCK);
                group_desc = (group_id >> log2_tmp (EXT2_DESC_PER_BLOCK (SUPERBLOCK)))
                    + (tem - group_id) * SUPERBLOCK->s_blocks_per_group
                    + (SUPERBLOCK->s_first_meta_bg == 0 ?
                    (WHICH_SUPER + SUPERBLOCK->s_first_data_block) : WHICH_SUPER);
            }
            else
            {
                group_desc = (group_id >> log2_tmp (EXT2_DESC_PER_BLOCK (SUPERBLOCK)))
                    + WHICH_SUPER + SUPERBLOCK->s_first_data_block;
            }
      desc = group_id & (EXT2_DESC_PER_BLOCK (SUPERBLOCK) - 1);
#ifdef E2DEBUG
      printf ("ipg=%d, dpb=%d\n", SUPERBLOCK->s_inodes_per_group,
          EXT2_DESC_PER_BLOCK (SUPERBLOCK));
      printf ("group_id=%d group_desc=%d desc=%d\n", group_id, group_desc, desc);
#endif /* E2DEBUG */
            if (!ext2_rdfsb (group_desc,(grub_size_t) GROUP_DESC))   
    {
      return 0;
    }
      ext4_gdp = (struct ext4_group_desc *)( (__u8*)GROUP_DESC +
                      desc * EXT2_DESC_SIZE(SUPERBLOCK));

        ino_blk = (EXT4_HAS_INCOMPAT_FEATURE(SUPERBLOCK,EXT4_FEATURE_INCOMPAT_64BIT) ?
            ((unsigned long long)ext4_gdp->bg_inode_table_hi<<32) : 0) + ext4_gdp->bg_inode_table_lo +
    (((current_ino - 1) % (SUPERBLOCK->s_inodes_per_group))
     >> log2_tmp (EXT2_INODES_PER_BLOCK (SUPERBLOCK)));
#ifdef E2DEBUG
      printf ("inode table fsblock=%d\n", ino_blk);
#endif /* E2DEBUG */
回复

使用道具 举报

37#
发表于 2022-3-26 10:23:41 来自手机 | 显示全部楼层
2011yaya2007777 发表于 2022-3-26 07:11
热重启改为冷重启后,内存容量为非零,去看me固件版本仍然存在?即解决了问题?

请你把测试ext4的分区 ...

大佬,ext4的分区表怎么获取呀?我只会抓gpt分区表
回复

使用道具 举报

38#
发表于 2022-3-26 10:26:58 来自手机 | 显示全部楼层
2011yaya2007777 发表于 2022-3-26 07:11
热重启改为冷重启后,内存容量为非零,去看me固件版本仍然存在?即解决了问题?

请你把测试ext4的分区 ...

这个应该是我的主板热复位功能有问题,键盘ctrl alt del 重启也会出现掉me固件,内存识别为零。
这个bug并不影响ext4的测试的结果。
回复

使用道具 举报

39#
发表于 2022-3-26 10:40:20 来自手机 | 显示全部楼层
2011yaya2007777 发表于 2022-3-26 10:02
请测试。

大佬厉害了,这个ext4版本彻底解决了卡死故障了。ls (hd0,2)/ 功能终于正常了。find 命令也不会卡死了,reboot命令也没问题了。
回复

使用道具 举报

40#
发表于 2022-3-26 10:42:00 来自手机 | 显示全部楼层
2011yaya2007777 发表于 2022-3-26 10:38
不管ext4的问题。我只是问,g4e由热重启改为冷重启,掉不掉me固件,内存是否仍然为零。

改成冷重启不会出现me固件掉的问题。
回复

使用道具 举报

41#
发表于 2022-3-26 11:08:48 来自手机 | 显示全部楼层
liuzhaoyzz 发表于 2022-3-25 21:09
上面510819776测试了BOOTX64-cs7.rar啊。

我的ext4分区是用diskgenius4.9.5格式化出来的。你看下你那 ...

大佬已经解决了ext4的问题了。
回复

使用道具 举报

42#
发表于 2022-3-30 19:33:03 | 显示全部楼层
大佬 grub4efi 支持的磁盘文件压缩格式是lz4  lzma gz对吗?? 有没有zstd支持???
经过测试 map --mem hd.gz (hd2)  可以正常
但是 map --mem hd.lz4 (hd2) 不正常  我用魔改的7zip-zstd版本  弄得lz4压缩不行?

我应该用什么软件压缩成lz4 lzma???
回复

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2024-5-11 05:29

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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