无忧启动论坛

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

[原创] GRUB4DOS for UEFI

    [复制链接]
721#
 楼主| 发表于 2023-11-25 10:58:20 | 显示全部楼层
2,换了G41+酷睿E3110 问题一样,原机启动非虚拟机

两次测试错误,提示与#3070的截图一样吗?
从截图看,是卡在 int13/ax=4b01 ,没有从 int13 返回。

点评

在我主持开发期间,udm 并非我所支持的运行环境。换句话说,我并不接受由 udm 所产生的问题报告。报告者必须脱离 udm 环境,然后再复现出问题,这才承认是一个 “可以接受” 的报告。如果脱离 udm 之后,一切正常,  详情 回复 发表于 2023-11-25 12:37
回复

使用道具 举报

722#
 楼主| 发表于 2023-11-25 12:42:25 来自手机 | 显示全部楼层
谢谢不点大师评论。

点评

yjd
刚才U盘单独格式化成FAT32做了测试,新版也正常。确定问题出在udm分区引起了。 yaya可以忽略我这次报告。谢谢! 本来计划要淘汰udm。看来要提前了。  详情 回复 发表于 2023-11-25 14:32
回复

使用道具 举报

723#
 楼主| 发表于 2023-11-26 12:54:13 来自手机 | 显示全部楼层
启动后就破坏,一定是向U盘写入了什么。U盘有个读写开关就好。

点评

yjd
我U盘有保护开关,但是不想用不方便,一次也没用过。所以选了隐藏分区+可见分区畸形目录。  详情 回复 发表于 2023-11-27 08:59
回复

使用道具 举报

724#
 楼主| 发表于 2023-11-27 11:43:59 来自手机 | 显示全部楼层
可能是病毒,也可能不是。可能有程序向磁盘写了些什么,这与分区隐藏不隐藏无关。

点评

yjd
也可能是udm在uefi和bios机器启动会回写什么标志到U盘。导致我经常遇到efi失效要重新修复。内部细节没法知道  发表于 2023-12-5 17:27
回复

使用道具 举报

725#
 楼主| 发表于 2023-11-27 12:39:07 来自手机 | 显示全部楼层
不点大师说的到位。

点评

您才是大师,我只是岁数大而已。岁数大,碰壁多,吃亏多,经验教训多,仅此而已。身体是第一位的,一定在保护好身体的前提下,再来做自己喜欢的事情。  详情 回复 发表于 2023-11-27 13:04
回复

使用道具 举报

726#
 楼主| 发表于 2023-12-3 10:29:40 来自手机 | 显示全部楼层
不点分析的对,两种可能皆有。问题是常规启动正常,而udf启动失败,我怀疑他在不同启动模式切换,很可能使用了grub.exe。

点评

yjd 使用了 udm,而 udm 是如何调用 grub4dos 的,这一点,除非开发者本人,否则,谁也说不清。当然了,如果是开源的,那就能够说清楚了。如果不是开源的,那是说不清的。第三方软件是在什么样的环境下调用的 grub4d  详情 回复 发表于 2023-12-3 11:24
回复

使用道具 举报

727#
 楼主| 发表于 2023-12-3 10:36:34 来自手机 | 显示全部楼层
我分析了一下老旧模式(bios)的代码,它在map映射了一个光驱后,使int13/4B01探测光驱信息,在这里出现了错误。似乎没有必要探测光驱信息。

点评

grub4dos 在启动时,有探测光盘是否存在的代码。这个探测代码,就依赖 4B01 调用。探测的顺序是,从 DL=FF 向 DL=80 的方向(即,从高到低)进行探测。 如果由于某种原因而被迫禁用 4B01 调用,那么,grub4dos 在  详情 回复 发表于 2023-12-3 11:13
如果 grub4dos 用 map 建立了虚拟光驱,那么,grub4dos 的 int13 handler 会把 4B01 接口弄好,保证此调用能够正常进行,而不是死机。  详情 回复 发表于 2023-12-3 10:53
当光驱不存在时,你就不敢使用 int13 来访问光盘扇区。因为这有可能直接死机。所以,在访问光驱之前,先保证光盘 bios 接口是可用的,这是有必要的。 另一方面,如果有证据表明 4B01 调用在某主板环境必然产生死  详情 回复 发表于 2023-12-3 10:48
回复

使用道具 举报

728#
 楼主| 发表于 2023-12-3 11:32:14 来自手机 | 显示全部楼层
3070#有个截图,看看便知。

点评

图片中显示,测试的是从磁盘启动,而不是从光盘启动。map 命令产生了虚拟光驱,此时,int13 handler 会自动把 DL=FF 的 int13/4B01 接口弄好,根本就不应该死机。 难道 grub4dos 新版的 4B01 没有挂上?这可是 bu  详情 回复 发表于 2023-12-3 11:49
回复

使用道具 举报

729#
 楼主| 发表于 2023-12-3 11:35:04 来自手机 | 显示全部楼层
yjd是不是每次启动失败都卡在此处,不得而知。

点评

yjd
每次都一样,你们自己按我说的,用模板格式化U盘也能复现问题。  发表于 2023-12-4 00:25
回复

使用道具 举报

730#
 楼主| 发表于 2023-12-3 12:23:18 | 显示全部楼层
不知道yjd在菜单使用
map --hook
没有。

点评

yjd
有的,  发表于 2023-12-4 00:26
如果不存在 map --hook,在执行 boot 命令时,会自动添加一条 map --hook 命令。所以,这不是个问题。 在执行 boot 命令时,会检查 drive map table,如果发现 drive map table 是 “非空” 的,也即,存在映射项  详情 回复 发表于 2023-12-3 13:25
回复

使用道具 举报

731#
 楼主| 发表于 2023-12-3 12:26:50 | 显示全部楼层
不明白loongson反馈的什么意思。既无菜单,也无截图。

grldr 还能
ls /dev  ?

点评

我这么理解:loongson 大概是说,采用新版 grub4dos 来加载某个 img 或者 iso 之后(或者仅仅是启动 Linux 内核之后),在 Linux 下无法找到一些本来应该有的文件。有可能是正常加载了 kernel,但 initrd 未能正  详情 回复 发表于 2023-12-3 13:36
回复

使用道具 举报

732#
 楼主| 发表于 2023-12-3 14:20:21 | 显示全部楼层
我这么理解:loongson 大概是

明白了,他是加载了linux内核,但是没有加载成功。
linux本来就难加载,一堆参数,差一个不行,错一个也不行。
现在的情况不是都加载失败。因此不提供详细信息,不能复现问题的,无法解决。懒得回答。

点评

报告不详,沟通不畅。——这 8 个字,反映了开源软件开发的一个现状。 报告者自己心里明白问题在哪里,但是,却不能让别人明白,尤其是不能让开发者明白。别人必须靠 “猜” 才能知道大概是怎样的。而且,猜是猜  详情 回复 发表于 2023-12-4 07:21
回复

使用道具 举报

733#
 楼主| 发表于 2023-12-4 11:52:55 来自手机 | 显示全部楼层
我下载了udm,查看文件没有grldr,但是设置里面有,不知怎么使用。

点评

yjd
我看ldr目录还grldr文件,做了新版替换, 菜单里有个更新grldr功能{测试功能好像失效},但是这些我也从来没用过。今天尝试更新替换,测试也没启作用。  详情 回复 发表于 2023-12-5 17:24
照您这么说,我猜,udm 仅仅使用了 grldr 里面的 stage2。猜测可能是把 stage2 复制到某个扇区序列上。如果是这样使用的,那我是反对的。grldr 应该完整使用,而不是复制一部分扇区(stage2)来使用。我觉得,只要开  详情 回复 发表于 2023-12-4 14:08
回复

使用道具 举报

734#
 楼主| 发表于 2023-12-4 16:51:52 来自手机 | 显示全部楼层
好像前半年还升级了一次grubfm,就是替换了其中的grub.exe。

点评

是的,升级过2次,一次是 g4d 升级到 2023.03.29 版,grubfm 升级一次,另一次是 2023.06.23 版。 相应的还有 5大的 SISO 组件,g4d 自己改过一次,5大为适应 g4d 升级,5大本人也升级过一次。现在在最新版 grub4  详情 回复 发表于 2023-12-4 18:02
回复

使用道具 举报

735#
 楼主| 发表于 2023-12-6 10:03:35 | 显示全部楼层
本帖最后由 2011yaya2007777 于 2023-12-6 12:27 编辑
我看ldr目录还grldr文件,做了新版替换,

1. 直接替换“\MBROSTool6.26.12A-12x8664-20220630B26\ldr\grldr"文件为最新版本。
2. 运行MBROSTool.exe,选"高级->启动设置",在选项卡"BIOS启动器->启动文件"选择”ldr\grldr",
    点击“导入并设定”。
3. 使用 QEMU 虚拟机启动U盘,进入命令行。(可能菜单设置有问题,没有搜索到 grldr)
    执行 find,判断文件在什么地方,配合 ls (hdx,y)。比如找到为 (hd0,0)/
4. 启动镜像
    root (hd0,0)
    map /NTBOOT-2017-04-02.iso (0xff)
    map --hook
    chainloader (0xff)
    boot
正常启动!

说明:
我的启动文件 NTBOOT-2017-04-02.iso 在可见区。
不知道有没有隐藏分区,怎么放在隐藏分区。




点评

yjd
我没测试成功,到了chainloader就卡住,我看你操作好像都没把U盘格式化成udm分区格式。如图: (hd0,0)是udm隐藏分区 (hd0,2)是可见数据分区 [attachimg]535272[/attachimg]  详情 回复 发表于 2023-12-6 14:48
我的启动U盘是 ud 三分区形式,ud 启动最新版 grub4dos-0.4.6a-2023-11-27,因没有 yid 的 NTBOOT-2017-04-02.iso,测试的是 5大的 NTBOOT-2022-11-11.iso ,iso 放在隐藏区,测试正常。  详情 回复 发表于 2023-12-6 11:30
回复

使用道具 举报

736#
 楼主| 发表于 2023-12-6 15:22:24 来自手机 | 显示全部楼层
本帖最后由 2011yaya2007777 于 2023-12-6 15:26 编辑

我格式化成udm了。你的iso在看见分区还是隐藏分区?好像是可见分区。我是mbr分区模式,在g4d环境只有分区0。
使用mbrostool.exe的分区管理看,还有3个隐藏分区。

我把 efi 分区删除了。
咱俩的grldr版本不一样。
回复

使用道具 举报

737#
 楼主| 发表于 2023-12-6 16:41:19 来自手机 | 显示全部楼层
我的grldf在隐藏分区。但是目前我看不见。如何可见?
回复

使用道具 举报

738#
 楼主| 发表于 2023-12-6 16:42:40 来自手机 | 显示全部楼层
我的iso在可见分区,你的在哪里?
回复

使用道具 举报

739#
 楼主| 发表于 2023-12-6 16:44:17 来自手机 | 显示全部楼层
其他无论怎样都不会影响结果吧。
回复

使用道具 举报

740#
 楼主| 发表于 2023-12-6 17:50:23 | 显示全部楼层
我看见隐藏分区了。
其中有:grldr    menu.lst
但是这个  grldr  不是我安放进去的,是以前的。我启动到命令行不是这个版本,说明不是由这个 grldr 启动的。
我安放的那个--真正用作启动的 grldr 在哪里?

不再烧脑了,放弃。
这个问题就此打住!不再议论。

点评

yjd
辛苦了,不用继续讨论。是udm问题。我也要改成ud。 最后回复下 隐藏的udm分区的grldr和menu.lst是我模板里的自定义文件。而你从udm工具导入的grldr实际是看不见的,udm工具也没地方可以显示出来。这个  详情 回复 发表于 2023-12-6 18:12
回复

使用道具 举报

741#
 楼主| 发表于 2023-12-8 06:29:35 来自手机 | 显示全部楼层
赞同
回复

使用道具 举报

742#
 楼主| 发表于 2024-1-29 09:44:29 | 显示全部楼层
新版,CD的标志改了?0x9f也是光盘

一般概念,0xA0:0xFF是光盘,这是map一个光盘时,grub内部分配的驱动器号。
但是VM虚拟机原生启动光盘,虚拟机的BIOS固件自己会分配驱动器号0x9f(QEMU会分配0xe0)。因此grub_0.4.6a初期就修改为0x9F:0xFF是光盘,不是最近的事情。

不支持诸如:
if %?_BOOT%==(cd)
if %?_BOOT%==(pd)
if %?_BOOT%==(ud)
这类用法了吗?

最初(cd)是特指原生启动光盘,不包含映射光盘。为了与G4E的菜单兼容,现在(cd)与(hd)概念相同,即包含原生启动光盘,也包含映射光盘。
使用上,可以这样:
map /xx.iso (cd)
chainloader (cd-1)

因此现在:if %?_BOOT%==(cd) 无效。
可以这样:if %?_BOOT% >= 0x9f

由于pd=0x21,  ud=0x23是固定的,因此:
if %?_BOOT%==(pd)
if %?_BOOT%==(ud)
可以继续使用。

点评

if %?_BOOT% >= 0x9f 这用法不行啊  详情 回复 发表于 2024-2-6 21:09
谢谢解答,终于搞清了  详情 回复 发表于 2024-1-29 12:53
回复

使用道具 举报

743#
 楼主| 发表于 2024-2-7 19:58:33 | 显示全部楼层
本帖最后由 2011yaya2007777 于 2024-2-8 06:34 编辑
if比较必须要双目运算符?<、>、=不行,必须要<=、>=、==

是的。

另外想问一下,只写“<”或“>”要怎么写?

不能。

if %?_BOOT% >= 0x9f
这用法不行啊,%?_BOOT%是带括号的

没有注意,谢谢提醒。

判断是不是从光盘启动,是不是只要if %?_BOOT%<=(0xff) echo boot from cd

应该是这样吧
if %?_BOOT%>=(0x9f) echo boot from cd
if %?_BOOT%==(0x80) echo boot from hd

if %?_BOOT%==(0) echo boot from rd

点评

明确几个点: 1、if的比较是字符串比较,即是按字母编码从左到右比较; 2、%?_BOOT%、%@boot%都是带括号的标志,得到的结果可能有UD启动为(ud)、网络启动为(pd)、硬盘启动为(hdx,x)如果(hd0,1) (hd1,1)等、RAM内存  详情 回复 发表于 2024-2-8 09:28
回复

使用道具 举报

744#
 楼主| 发表于 2024-2-8 11:54:56 来自手机 | 显示全部楼层
boot是启动设备,root是根目录,或者说是跟设备。两者可能相同,也可能不同。比如从光盘启动,但是在光盘没有找到menu.lst,而是在硬盘找到了,那么这时boot=cd,root=(hd0,1)
回复

使用道具 举报

745#
 楼主| 发表于 2024-2-28 10:06:48 来自手机 | 显示全部楼层
这几天网络抽风了
回复

使用道具 举报

746#
 楼主| 发表于 2024-3-20 20:31:16 来自手机 | 显示全部楼层
目前只能从根目录查找。你可以在grldrstart.S里面更改,然后编译grub4dos。grldr在根目录很烦吗?

点评

哈哈,grldr不烦。主要是用这个文件来装载bootmgr的,每一个PE对应一个mgr。而这个mgr是放在\BOOT下的。 譬如,我的PE安装到硬盘,其中一种方式就是改boot.ini的: 对应关系是这样的: 这样我就必须把H3_AVLx  详情 回复 发表于 2024-3-22 09:10
回复

使用道具 举报

747#
 楼主| 发表于 2024-4-19 11:50:38 来自手机 | 显示全部楼层
本身不能。可在无忧搜一搜,有方法。
回复

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2024-4-29 18:11

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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