无忧启动论坛

标题: 请yaya看看,g4d usb驱动未能将U盘盘号0x00映射到0x81 [打印本页]

作者: wuwuzz    时间: 2024-11-25 21:13
标题: 请yaya看看,g4d usb驱动未能将U盘盘号0x00映射到0x81
本帖最后由 wuwuzz 于 2024-11-27 08:24 编辑

2024.11.27更新解决:
usb --init之后,如果U盘盘号仍然是0x00,那么,可接续使用map (0) (0x80),即可达到想要效果。

=====================================原来的问题:

1、很久以前yaya说过"加载g4d的usb驱动,驱动会将盘符A映射到C",这个功能很有用,正好能解决神舟
A470/K470笔记本BIOS的bug[即:BIOS始终把U盘当移动盘(软盘)处理,跳过MBR,导致UD、Ventoy失败],
之前测试SMI U盘时0x00能成功映射到0x81。直到今天,无意中换其他SMI U盘、Alcor6989 U盘测试,
usb --init之后,U盘盘号均未能像以前一样,被映射为0x8?,而是保持为0x00,见下图。测试机:
神舟A470/K470笔记本,G4D为最新0.4.6a 2024-02-26。



2、目前的临时措施,是对U盘做手术,量产分割为2个Lun,usb --init之后,会出现0x00、0x81两个磁盘
设备,然后再调整root为0x81所在设备(hd1,0),有些笨拙。


======================================================================

问:不知yaya能否对此做改进,消除0x00,强制设定盘号为0x8?


作者: 不点    时间: 2024-11-25 21:35
我插言几句,不知是否有用。

usb --init 是执行 yaya 自己的代码。无论生成的是软盘 00h,还是硬盘 80h、81h,都不必害怕、担忧。

因为此时虚拟盘的 BIOS int13 代码是 yaya 自己写的,肯定会遵守 CHS、LBA 调用规范。无论 usb --init 生成的虚拟盘是软盘还是硬盘,都没问题。
作者: wuwuzz    时间: 2024-11-26 02:57
本帖最后由 wuwuzz 于 2024-11-26 02:59 编辑
不点 发表于 2024-11-25 21:35
我插言几句,不知是否有用。

usb --init 是执行 yaya 自己的代码。无论生成的是软盘 00h,还是硬盘 80h ...

不行额,您没看清题目啊。

神舟buggy BIOS下,0x00会导致MBR被跳过,UD、Ventoy等格式盘特色会被废掉,引导失败。
(http://bbs.wuyou.net/forum.php?mod=viewthread&tid=437567)。

只有以usb --init为中转,人为调整映射为0x8?,恢复固定盘属性,才能对付BIOS bug,
正常读MBR,挽救UD、Ventoy格式盘。

作者: 不点    时间: 2024-11-26 07:28
wuwuzz 发表于 2024-11-26 02:57
不行额,您没看清题目啊。

神舟buggy BIOS下,0x00会导致MBR被跳过,UD、Ventoy等格式盘特色会被废掉 ...

我再试试,看看能否有帮助。

usb --init 的工作任务,(在用 int13 读 USB 盘数据时)不就是取代(接管)主板 BIOS 吗?否则,运行 usb --init 有啥用?

usb --init 运行后,无论创建的是什么盘(软盘 00h,硬盘 8?h),都能够正常使用了。不存在 MBR 被跳过的问题。因为 yaya 的 usb 驱动代码会从 USB 的首扇区开始建立虚拟盘( 00 或 8?h)。

假如 usb --init 之后,新创建的 00 或 8?h 盘不是从 USB 设备的首扇区开始访问 USB 设备,那么,这属于 yaya 代码的 bug。这样的话,您想通过 usb --init 来解决问题,就是不可能的了。这需要 yaya 先解决 bug,然后才能实现。

在 grub4dos 下,软盘和硬盘的处理方式是一样的。软盘可以带有 MBR 和分区表,这种情况,可以使用 (fd0,0)、(fd0,1)、(fd0,2)、(fd0,3)、(fd0,4) 等等来访问软盘上的那些分区(里面的文件)。同理,如果硬盘没有 MBR 和分区表,那么,硬盘上的“卷”直接就是 (hd0)【就像软盘那样】,而不是 (hd0,0)、(hd0,1)、(hd0,2) 之类的。

我猜,有可能是这个 00 软盘,把您给吓到了。其实您只要不害怕它就行了。

有鉴于您已经进入 grub4dos 环境,因此,您这里的问题,都是小 case,不是真正的大问题,不是“过不去的坎儿”。


作者: 不点    时间: 2024-11-26 08:24
主板 BIOS 创建的盘(或者说是主板 BIOS 自带的盘),是“真实”盘。其他“第三方软件”(例如 grub4dos、memdisk 等)创建的盘,那都是虚拟盘。

如果不曾使用 map 命令创建虚拟盘,那么,grub4dos 只能使用 BIOS “原装的”、“自带的”盘。

如果使用 map 创建了某个盘号,或者使用 usb --init 创建了某个盘号,这都属于虚拟盘。在 grub4dos 下访问这些虚拟盘时,都需要调用 grub4dos 的“虚拟盘扇区读写”代码。这是 grub4dos 开发者自己写的代码,肯定是经过锤炼的,(主观上)不会让它像“恶意”主板那样因“破坏规范”而“毛病百出”【存在 bug 的话,是另外一个问题】。

举例来说,假定在 grub4dos 下有个 00 虚拟盘(软盘),就可以尝试这样来启动它:

chainloader     (0)+1
rootnoverify     (0)
boot

也可以先尝试把软盘 0 仿真为硬盘 80h,然后启动虚拟硬盘:

map       (0)        (0x80)
map       --hook
chainloader        (0x80)+1
rootnoverify          (0x80)
boot

硬盘盘号 0x81 通常不适合用作启动盘,因此,它也需要仿真为 0x80 才能启动:

map       (0x81)        (0x80)
map       --hook
chainloader        (0x80)+1
rootnoverify          (0x80)
boot


作者: guong    时间: 2024-11-26 09:07
来看看了
作者: 不点    时间: 2024-11-26 09:45
只有以usb --init为中转,人为调整映射为0x8?,恢复固定盘属性,才能对付BIOS bug,
正常读MBR,挽救UD、Ventoy格式盘。


任何启动方案,都有其局限性。超越了限度,那就无解。“挽救”,属于 “变通”,属于“走旁道”。

有许多真正难以对付的情况,那就是,根本无法启动到 grub4dos 的环境下。

您遇到的这个情况,属于 “上好” 的情况,而不是 “很差” 的情况。无论如何,您能够(动用一些方法而)进入 grub4dos,这样就可以在 grub4dos 下开展工作,自由度是 “满满” 的。

那么,在 grub4dos 下,也可以进入 PE, 不是吗?也可以进入 Windows,不是吗?既然这样,【粗略地说】那就算是 “没问题” 了。当然,如果非要追求某种 “极致” 的体验,非要启动或运行 某某某 软件,那可能还需要继续努力 “解决问题”。
作者: wuwuzz    时间: 2024-11-26 09:54
本帖最后由 wuwuzz 于 2024-11-26 10:26 编辑
不点 发表于 2024-11-26 07:28
我再试试,看看能否有帮助。

usb --init 的工作任务,(在用 int13 读 USB 盘数据时)不就是取代(接 ...

您还是没有理解,我的主题、目标不是这个。

1、首先复述一下神舟K470/A470 BIOS BUG影响。
这种BIOS所配USB-HDD模块不完整,它可以正常工作到设备类型判定(U盘被设定为HDD),但紧接着的流程
就不对了:不作为固定盘处理,而实际是按移动盘处理。也就是说,BIOS菜单项虽然显示是USB-HDD,
但实际是空壳,没有固定盘属性。
选中后,BIOS将按移动盘处理,没有把控制权移交给MBR代码,U盘将
从PBR上引导(其中:LBA0会映射
到第1分区第1扇)。即使MBR会被读,但其引导流程不会像预先设计的那样
被正确执行。

具体过程,yaya做过分析,如下:
经过BIOS自己的判断,认为U盘是可移动设备,因此分配盘符A,隐藏第一个分区之前的扇区,修改(确切地说是减少)总扇区数,
修改第一个分区(PBR)的参数表(BPB),具体是修改偏移0x1c处的4字节隐藏分区值。以求道者的UD为例,是将0x4000修改为0。
然后把控制权移交给PBR代码。此时,使用int13/ah=42读LBA(0),由于隐藏了第一个分区之前的扇区,现在LBA(0)指向第一个分
(PBR),因而不是返回MBR代码,而是返回PBR代码。BIOS根本就没有把控制权移交给MBR的代码,因此UD的引导代码没有起
作用,隐藏分区的启动菜单及文件也没有使用,UD启动失败。wuwuzz注:Ventoy磁盘布局也类似推导,Ventoy引导代码也将无法
获得控制权,因为流程被BIOS指向到第1(数据)分区PBR上了。

2、应对方法:利用usb --init恢复固定盘属性
G4D将被安装到PBR上(也就是位于UD、Ventoy盘的普通数据区)。这个G4D在U盘被设定为0x00时,可以
正常单独引导为A:>,但不是我们所需要的。我们装它的目的,是为了中转,将计就计把buggy BIOS
引到PBR上的G4D。G4D在这里设了陷阱(执行usb --init)。

usb --init的作用,是为了将盘号由0x00改为0x8?,这样就能把USB-HDD失去的固定盘属性给找补回来,
USB-HDD满血复活此时,USB-HDD上原有的Ventoy、UD的磁盘布局内容无需做任何改动,就可以利用
g4d的find重新定位、跳转到其MBR上,正常执行了,从而达到挽救Ventoy、UD资源的最终目的。



作者: wuwuzz    时间: 2024-11-26 10:07
本帖最后由 wuwuzz 于 2024-11-26 10:41 编辑
不点 发表于 2024-11-26 09:45
任何启动方案,都有其局限性。超越了限度,那就无解。“挽救”,属于 “变通”,属于“走旁道”。

...

本帖描述的场景,PBR上的G4D可以单独引导成功到A:>,但不是我们需要的。
(我们的目的,不是G4D单独引导成功,也不是为了PE)。

我们的目的,是如何以最简单的操作,保护利用已有的大量UD、Ventoy资源,
让其在这种Buggy BIOS下引导成功,实现最初设计的引导流程。

这里的最简单操作,是指保留UD、Ventoy原有磁盘布局不动,不再费事重新
制作。
=================================================================
本方案也没有超越限度,而只是现有功能叠加、组合,从而实现对付
BIOS BUG的中间目标。



作者: 不点    时间: 2024-11-26 10:38
wuwuzz 发表于 2024-11-26 09:54
您还是没有理解,我的主题、目标不是这个。

1、首先复述一下神舟K470/A470 BIOS BUG影响。

明白了。

关注的焦点不同。

我关注的是 “基本层面”,即,“能否成功启动” 的问题。属于 “温饱” 问题。

您关注的是 “提高层面”,即,属于 “高质量发展” 方面的问题。

真是抱歉,我并不关注 “高质量发展” 方面的问题。

好吧,不打扰了,我就不再参与讨论了。

作者: wuwuzz    时间: 2024-11-26 11:07
不点 发表于 2024-11-26 10:38
明白了。

关注的焦点不同。

您太谦虚客气了,我觉得您在5#的讨论发言,很有启发指导意义啊。

map(0) (0x80)方法,我还没来得及实际测试,如果能成功,就要比
usb --init方法,更加简单、可靠。这是很好的事啊!

所以,我还是希望您能留下来继续指导,虽然各人关注侧重点、实现方法
不太一样,但殊途同归,最终的本质是一致的:对付BIOS BUG。



作者: 2011yaya2007777    时间: 2024-11-26 15:37
问:不知yaya能否对此做改进,消除0x00,强制设定盘号为0x8?

讨论得挺热闹。
好长时间不接触usb驱动了,带有注释的原始代码也不知道在哪个旧电脑硬盘上。

最初阶段,usb驱动是最先加载的,它可以将启动盘号设定为0x80。后来就是先加载g4d代码,如果有“usb --init”参数,再加载usb驱动,此时已经不可能改变启动盘号了。

我个人觉得,即便设定盘号为0x80,也解决不了你提出的问题。
你是不是想通过usb驱动,去读取逻辑0扇区?这视乎可以办到,但是目前没有这个功能,需要你编写汇编代码。
你是不是想通过usb驱动,跳转到逻辑0扇区,去执行UD、Ventoy盘的代码?如果增加了汇编代码,视乎可以跳转到逻辑0扇区。但是UD、Ventoy盘通过int13读磁盘,会出现错误的,前面你已经提到了。

我觉得你已经启动成功,获取了控制权,就算很好了,可以想干自己的任何事情了!
如果是纯粹技术探讨,非要启动UD、Ventoy,我觉得应当研究UD、Ventoy启动代码,怎么去跳转到UD、Ventoy。就如grub与grub2相互跳转一样。好像UD前面的代码是做了一些测试,然后就跳转到一个固定的扇区。可以使用批处理或者外部命令替代测试工作,然后跳转到这个固定的扇区。
作者: 不点    时间: 2024-11-26 17:30
首先,legacy BIOS 已经被冷落了、靠边站了。逐渐地,要被 UEFI 取代。因此,在 BIOS 上投入精力,效益不高,不划算。这些 buggy 电脑,只能 “自救”,不能指望有太多的开发者去为它们 “服务”。就让它们自生自灭吧,反正也没有前途了,迟早要毁灭。

其次,以往的那些启动方案,凑合着可以应付这些 buggy 电脑。这些电脑也不需要 “高质量发展”,因为它们自己给自己的定位就是 “低质量” 的。这些电脑的生产者都不考虑这些问题,我们作为普通的 “爱好者”(局外人),如果还要为它们 “擦屁股” 的话,我觉得那是 “过网击球”(手臂伸得太长了)。
作者: 不点    时间: 2024-11-26 17:47
wuwuzz 写的帖子很认真、很仔细,也很长。世风日下,现在很少有这样 “严肃认真” 的人了。就连那些大公司,都在想着如何通过 “诈骗” 来盈利,而不是通过提高产品的技术含量来盈利。从某种程度上来说,我和 wuwuzz 属于同一类型的人。但我已经在走下坡路了,自然规律是无法抗拒的。
作者: wuwuzz    时间: 2024-11-26 23:52
本帖最后由 wuwuzz 于 2024-11-27 00:00 编辑
2011yaya2007777 发表于 2024-11-26 15:37
讨论得挺热闹。
好长时间不接触usb驱动了,带有注释的原始代码也不知道在哪个旧电脑硬盘上。

欢迎ya大前来指导!实验结果与您的说明有所不同。

这个buggy BIOS,因为裁剪,USB-HDD功能缺失,会把HDD当成FDD处理,只从PBR上引导
(PBR上装啥就引导啥,可以获得控制权)。而Ventoy、UD因为磁盘布局的特殊性,需要
从MBR上引导。所以,在此buggy BIOS下,要借助usb --init重置USB,只要盘号为0x8?,
USB-HDD就“自动”恢复正常,无需增加汇编代码,就可以跳转到MBR[用chainloader (hd1)+1],
正常启动Ventoy、UD了。

另外,补充2个刚做的测试结果(用bootice做引导盘,在此buggy BIOS下)
1、个别U盘,如果MBR、PBR均为g4d,则usb --init之后,盘号为0x00; 同一U盘,如果MBR为
Ventoy、PBR为g4d,则usb --init之后,盘号为0x81。原因不明。

2、usb --init后,若盘号仍为0x00,执行不点大在5#讲的map (0) (0x80);chainloader操作,
会达到想要效果。但如果不执行usb --init,直接map (fd0) (hd0);chainloader则会出错,
达不到想要效果。


作者: wuwuzz    时间: 2024-11-26 23:59
本帖最后由 wuwuzz 于 2024-11-27 07:13 编辑
不点 发表于 2024-11-26 17:30
首先,legacy BIOS 已经被冷落了、靠边站了。逐渐地,要被 UEFI 取代。因此,在 BIOS 上投入精力,效益不高 ...

1、其实自始至终,我有兴趣、想掌握的是USB。之所以"看上去"谈论BIOS/UEFI启动方面的内容多,
是因为它们正好是USB具体应用,其算法对掌握USB帮助很大,我并不关心BIOS/UEFI的未来,
对我而言,它们的价值只在于USB。

2、本贴主题,本来不该出现,是半路加塞杀出来的。那么最初想谈的内容是什么呢?和您有关
--就是前几天那个LBA/CHS话题。

当时我有点意犹未尽,回去就想用Pheonix BIOS机(知道源码算法)做实例,结果实际上机验证出了意外。
第1台Pheonix BIOS机(二手联想F31A)出来的CHS结果大乱,与我以前测试结果不同、也与已知算法不同。
怀疑它硬件老化,出了溢出错误。那只好拿手头第2台Pheonix BIOS机(也就是本贴神舟A470/K470)
来验证,CHS结果符合预期。但它也有意外,就是突然发现有些U盘usb --init之后不能确定盘号为0x8?,
导致我不能顺利使用wdtb.exe(一个西数出的DOS查HDD软件,用在此场景,就可以直观显示USB-HDD
INT13、扩展INT13结果)。所以,只好翻旧账,先解决这个改盘号、复活HDD的问题。


作者: wuwuzz    时间: 2024-11-27 00:03
不点 发表于 2024-11-26 17:47
wuwuzz 写的帖子很认真、很仔细,也很长。世风日下,现在很少有这样 “严肃认真” 的人了。就连那些大公司 ...

前面您过奖了。后面确实如此,本质上是同一类较真的人,我也在走下坡路,年龄增长、身体素质下降,
我刚参加工作时接触的那些同事,近2年都已逐渐退休了,莫名地怀旧伤感。


作者: 2011yaya2007777    时间: 2024-11-27 05:37
这么说使用不点大推荐的交换磁盘方法解决了问题,可喜可贺啊!
作者: 2011yaya2007777    时间: 2024-11-27 05:43
使用  usb --init 后,交换磁盘才起作用,是因为此时读u盘不使用int13,而是使用内部命令。这样就绕过了有bug的BIOS。
作者: wuwuzz    时间: 2024-11-27 07:17
2011yaya2007777 发表于 2024-11-27 05:37
这么说使用不点大推荐的交换磁盘方法解决了问题,可喜可贺啊!

单独使用交换磁盘不行,需要叠加usb --init才可以。所以,是2位大佬的成果双剑璧合、
共同发挥作用才解决的。再次谢谢两位的关注!


作者: 不点    时间: 2024-11-27 07:43
交换磁盘盘号,是 grub4dos 在 BIOS 下的一个 “奇技淫巧”。其实,这是最基本的操作了,就连原始的 gnu grub legacy 都具有 “交换盘号”的功能。因此,这属于“必须掌握”的知识,而且要熟练。

真正的“奇技淫巧”,是 (fd0,0)、(fd0,1) 等“软盘分区”的概念,以及 (hd0)/path/to/file 的用法。

前者是软盘 00 带有分区表的情况,此时 grub4dos 就可以访问软盘各个分区下的文件。比如 (fd0,0)/path/to/file。

后者是硬盘不含分区表的情况,就像软盘那样。正是由于 hd0 不含 MBR 扇区(分区表),因此就不能使用 (hd0,0)、(hd0,1) 之类的设备表达法。

wuwuzz 描述的情况,可能是这样的:BIOS 把软盘的第一扇区(扇区号 0)定位在 U 盘第一分区的第一扇区,MBR 磁道不可见。因此,ud 和 Ventoy 就“不存在”了。直接把 00 仿真为硬盘 80h 没有用,因为 MBR 磁道是“不存在”的(总不可能是负的扇区号吧?比如扇区号为 (-63)?)。

运行 usb --init 之后,新的虚拟软盘 00 的首扇区(扇区号 0)是从 U 盘的 MBR 开始的,也就是说,此时 MBR 磁道是可见的、存在的,而不是被屏蔽掉的;那么此时软盘 00 就含有分区表了。既然这样,就可以用 (fd0,0)、(fd0,1) 等来访问软盘上的分区“卷”了。 当然,如果用 map 把 fd0 映射为 hd0,在 map --hook 以后,就可以用 (hd0,0)、(hd0,1) 等等来访问虚拟硬盘上的分区“卷”了。

作者: 2011yaya2007777    时间: 2024-11-27 07:48
你重启UD、Ventoy的方法领教了。我原来以为多复杂。高手啊。
作者: wuwuzz    时间: 2024-11-27 08:16
不点 发表于 2024-11-27 07:43
交换磁盘盘号,是 grub4dos 在 BIOS 下的一个 “奇技淫巧”。其实,这是最基本的操作了,就连原始的 gnu gr ...

不点大分析很正确。

最初BIOS因缺陷,屏蔽了MBR(导致ud、Ventoy无法按预设流程启动成功),
usb --init执行时,重新枚举驱动U盘(此过程可以用硬件USB协议分析仪看到),
等于是废除了BIOS“原有”桎梏,MBR重新可见,后续启动就可以按正常流程走了。


作者: wuwuzz    时间: 2024-11-27 08:20
2011yaya2007777 发表于 2024-11-27 07:48
你重启UD、Ventoy的方法领教了。我原来以为多复杂。高手啊。

您过谦了,关键还在您的usb --init啊! 后续 chainloader就是常规操作了。


作者: 不点    时间: 2024-11-27 10:21
本帖最后由 不点 于 2024-11-27 10:47 编辑

wuwuzz 和 yaya,都拥有对 USB 硬件进行操作的知识。这非常宝贵。尤其是在 Linux 的情况下,由于 Linux 不使用 BIOS,那么就必须直接使用 USB 硬件协议。

如果仍然需要在 Legacy BIOS 下进入 grub4dos 进行操作,我觉得应该掌握 grub4dos 的一些常规手段,方便自己进行 hack 研究。可以研究一下置顶的 grub4dos 文档、教程。

比如 cat --hex 命令,这能够显示扇区数据:

cat --hex (fd0)+1 显示软盘的首扇区(扇区号为 0 的扇区)
cat --hex (fd0)1+1 显示软盘的第二扇区(扇区号为 1 的扇区)
cat --hex (fd0)2+1 显示软盘的第三扇区(扇区号为 2 的扇区)

再比如,在执行 usb --init 之前,看看 BIOS 提供的(原始的)真实软盘的扇区内容是啥:

cat     --hex     (fd0)+1

它显示的应该是 U 盘第一分区的首扇区(PBR)的内容,而不是 MBR 的内容。

而在执行 usb --init 之后,再来看看 usb 命令创建的虚拟软盘的扇区内容是啥:

cat     --hex     (fd0)+1

此时它显示的应该是 U 盘 MBR 扇区的内容,而不是第一分区的 PBR 的内容。此时,假定软盘的首扇区确实是 MBR(含有分区表),那么,就可以继续用下面这条命令来显示软盘第一分区 PBR 的内容:

cat     --hex     (fd0,0)+1


假定软盘上也存在第二主分区,同理,可以用如下命令来显示第二主分区的 PBR:


cat     --hex     (fd0,1)+1






作者: wuwuzz    时间: 2024-11-27 13:32
本帖最后由 wuwuzz 于 2024-11-27 13:33 编辑
不点 发表于 2024-11-27 10:21
wuwuzz 和 yaya,都拥有对 USB 硬件进行操作的知识。这非常宝贵。尤其是在 Linux 的情况下,由于 Linux 不 ...

按照您的想法,准备了2套图片。每套图片,均顺序反映usb --init前后的情况。

第1套图片,与您在25#设想完全一致。环境:启动盘用bootice制作,MBR装的g4d、
PBR装msdos;usb --init之后,U盘盘号保持为0x00(如果DOS下想A变C,需要map)







第2套图片,与您在25#原理一样,只不过usb --init后盘号变为0x81。环境:
启动盘用ventoy制作,MBR由ventoy生成、PBR装的g4d;U盘盘号变为0x81后,MBR
重新激活可见。不需要map,原始fd0将不可访问。






以上,U盘为同一U盘,BIOS为神舟A470/K470 buggy bios。


作者: 不点    时间: 2024-11-27 15:02
wuwuzz 发表于 2024-11-27 13:32
按照您的想法,准备了2套图片。每套图片,均顺序反映usb --init前后的情况。

第1套图片,与您在25#设 ...

两种 U 盘制作方法,在执行 usb --init 之前,没有表现出差别,BIOS 盘号都是 fd0,而且都是屏蔽掉 MBR,只有 PBR 可见。

但在 usb --init 执行后,出现了差异。

虚拟盘的盘号不同:00 和 81h

当 usb 虚拟盘盘号是 00 时,覆盖掉了 BIOS 原始的 00 软盘。由于虚拟盘 00 具有 MBR(分区表),所以虚拟盘的内容是硬盘格式,不是软盘格式。

当 usb 虚拟盘盘号是 81h 时,原始的 BIOS 软盘 00 未被覆盖,仍然存在。但却无法访问了(disk read error)。我贸然猜测,这有可能是因为 usb 驱动程序的代码执行以后,影响了 ROM BIOS 代码的执行,导致 ROM BIOS 无法正常访问 USB 设备。既然 00 无法访问了,那我觉得,此时还是屏蔽掉 00 比较好。即使不屏蔽掉 00,也不要去访问它了。

另外,我估计这种 BIOS 有很多。所以,这个 BIOS 究竟算不算 buggy BIOS?不同的人,可能得到不同的结论。
作者: wuwuzz    时间: 2024-11-27 16:46
不点 发表于 2024-11-27 15:02
两种 U 盘制作方法,在执行 usb --init 之前,没有表现出差别,BIOS 盘号都是 fd0,而且都是屏蔽掉 MBR, ...

我同意您的分析。

原始fd0是BIOS内置USB驱动产生,而新的0x81则是由G4D USB驱动生成,两个驱动是否会
产生潜在的重叠、冲突(或者说BIOS USB驱动无法被完整卸载,还残留有fd0空壳),不得
而知,从结果看,有这种可能性。如此看来,此时还是屏蔽fd0比较好。


作者: 求道者    时间: 2024-11-27 18:42
现在有啥进度?fbinst能复用吗?
作者: wuwuzz    时间: 2024-11-27 19:50
本帖最后由 wuwuzz 于 2024-11-27 19:59 编辑
求道者 发表于 2024-11-27 18:42
现在有啥进度?fbinst能复用吗?

进度就是问题解决了啊。

当初,神舟K470/A470 BIOS的问题是你最先提出来的,现在USB-HDD可以满血复活,
fbinst(UD)、Ventoy等复杂格式盘,原有内容不用改动,在普通可见数据区再加个
G4D做中介,就可以在这种BIOS下正常启动使用了。



作者: 求道者    时间: 2024-11-27 19:55
本帖最后由 求道者 于 2024-11-27 19:59 编辑
wuwuzz 发表于 2024-11-27 19:50
进度就是问题解决了啊。

当初,神舟K470/A470 BIOS的问题是你最先提出来的,现在USB-HDD可以满血复活 ...

直接在PBR里安装g4d的PBR引导块是吧?
然后usb --int,用链式引导引导fbinst?

作者: wuwuzz    时间: 2024-11-27 20:01
本帖最后由 wuwuzz 于 2024-11-28 07:08 编辑
求道者 发表于 2024-11-27 19:55
直接在PBR里安装g4d的PBR引导块是吧?
然后usb --int,用链式引导引导fbinst?

是啊,PBR故意装了G4D,把BIOS引入陷阱。

然后G4D usb --init重置U盘,MBR恢复。再chainloader (hd1)+1跳回MBR,正常引导。


作者: 求道者    时间: 2024-11-27 20:02
本帖最后由 求道者 于 2024-11-27 20:03 编辑
wuwuzz 发表于 2024-11-27 20:01
是啊,PBR故意装了G4D,把BIOS引入陷阱。

倒也是能自动化……
不过usb --init之后usb键鼠就挂了……
作者: wuwuzz    时间: 2024-11-27 20:06
求道者 发表于 2024-11-27 20:02
倒也是能自动化……
不过usb --init之后usb键鼠就挂了……

usb --init只是在引导阶段起作用吧,等进PE时,这个G4D USB驱动会被卸掉,
windows重新加载自己的USB驱动,USB鼠标应该就正常了。


作者: 求道者    时间: 2024-11-27 20:09
wuwuzz 发表于 2024-11-27 20:06
usb --init只是在引导阶段起作用吧,等进PE时,这个G4D USB驱动会被卸掉,
windows重新加载自己的USB驱 ...

你进了fbinst又不一定是用PE,可能用别的工具也不一定。
键鼠寄了,就只能想办法了……
作者: wuwuzz    时间: 2024-11-27 20:13
求道者 发表于 2024-11-27 20:09
你进了fbinst又不一定是用PE,可能用别的工具也不一定。
键鼠寄了,就只能想办法了……

这是个什么环境下的工具呢?
Linux也跟Win一样额,握手时加载OS自己的驱动。
DOS的话,倒是要考虑一下。



作者: 求道者    时间: 2024-11-27 20:15
wuwuzz 发表于 2024-11-27 20:13
这是个什么环境下的工具呢?
Linux也跟Win一样额,握手时加载OS自己的驱动。
DOS的话,倒是要考虑一下 ...

你在grub4dos里也要用键鼠才能选择菜单项目啊……
usb键鼠挂了的话,这部分就没法用……
作者: wuwuzz    时间: 2024-11-27 20:23
求道者 发表于 2024-11-27 20:15
你在grub4dos里也要用键鼠才能选择菜单项目啊……
usb键鼠挂了的话,这部分就没法用……

没用过这种USB鼠标选G4D菜单项的情况。
有这种菜单配置的话,可以发上来我实验一下外接USB鼠标。
不过A470/K470有内置键盘/触摸鼠标,应该问题不大吧。


作者: 求道者    时间: 2024-11-27 20:32
wuwuzz 发表于 2024-11-27 20:23
没用过这种USB鼠标选G4D菜单项的情况。
有这种菜单配置的话,可以发上来我实验一下外接USB鼠标。
不过A ...

笔记本上触控板和键盘走的PS/2或者I2C总线吧。
这部分又没被usb --init搞掉驱动……
作者: 红毛樱木    时间: 2024-11-27 20:38
这问题不就是上次讨论的那个问题么,UD情况下把grub4dos的pbr安装到U盘的可见分区,然后用这个pbr启动回去UD里的grldr?
作者: wuwuzz    时间: 2024-11-27 20:41
求道者 发表于 2024-11-27 20:32
笔记本上触控板和键盘走的PS/2或者I2C总线吧。
这部分又没被usb --init搞掉驱动……

就是这个意思额,笔记本有自己的键鼠(保底手段),
所以外接USB键鼠的问题不是刚需。

作者: 求道者    时间: 2024-11-27 20:54
wuwuzz 发表于 2024-11-27 20:41
就是这个意思额,笔记本有自己的键鼠(保底手段),
所以外接USB键鼠的问题不是刚需。

这又不一定只出现在笔记本上……
作者: wuwuzz    时间: 2024-11-27 20:56
红毛樱木 发表于 2024-11-27 20:38
这问题不就是上次讨论的那个问题么,UD情况下把grub4dos的pbr安装到U盘的可见分区,然后用这个pbr启动回去U ...

哪个问题?是在本坛说的,还是无奈U盘群里?

这里的问题是,UD被BIOS屏蔽了,要有一个恢复环节,然后才能用PBR跳回去。



作者: wuwuzz    时间: 2024-11-27 20:58
求道者 发表于 2024-11-27 20:54
这又不一定只出现在笔记本上……

那就超出本贴范围了,这里还是针对神舟A470/K470说的。
其他BIOS就得看具体是啥情况了。



作者: 红毛樱木    时间: 2024-11-27 23:06
wuwuzz 发表于 2024-11-27 20:56
哪个问题?是在本坛说的,还是无奈U盘群里?

这里的问题是,UD被BIOS屏蔽了,要有一个恢复环节,然后 ...

就无奈群里说的,识别为fd后用pbr的grub4dos跳回ud
作者: wuwuzz    时间: 2024-11-28 07:10
红毛樱木 发表于 2024-11-27 23:06
就无奈群里说的,识别为fd后用pbr的grub4dos跳回ud

那就是同一个大话题。只不过当时还没有发现有0x00、0x81区别,本贴算是补全了。


作者: wuwuzz    时间: 2024-11-28 07:26
吐槽一下phoenix BIOS USB启动按模块收费政策。

这里的收费区分有:
1、USB 1.X低速、USB2.0高速分别收费。
2、USB-HDD、USB-ZIP、USB-LS120、USB-FDD等启动按模块分别收费。

第1个,通过G4D虚拟盘,加载DOS USB2驱动,然后加速PE载入速度解决;
第2个,就造成今天本贴这个局面。
神舟K470/A470是裁剪USB-HDD模块功能,但保留USB-ZIP、USB-LS120、USB-FDD模块;
联想F31A相反,保留USB-HDD模块,裁剪USB-ZIP等模块。

作者: 不点    时间: 2024-11-28 09:16
wuwuzz 发表于 2024-11-28 07:26
吐槽一下phoenix BIOS USB启动按模块收费政策。

这里的收费区分有:

创新发展,果然永不停息!

继 CPU 收费开启某功能,主板也启动了 “按功能收费” 的政策。

只有想不到,没有做不到。

接下来的 “新时代”,会是怎样一个时代呢?

请大家给出预测。

作者: 红毛樱木    时间: 2024-11-28 12:40
wuwuzz 发表于 2024-11-28 07:10
那就是同一个大话题。只不过当时还没有发现有0x00、0x81区别,本贴算是补全了。

你这机器还在吗,能玩不
作者: 2011whp    时间: 2024-11-28 13:13
2011年那 会  U启   基本统一了 USB-hdd

2018年时 win10 认可了 u盘分区

Ud是 解决 CHS的



2011年有了UEFI,(安全证书2011)
2023  微软更换 安全证书2023


有CHS 问题的电脑 基本 消失了。

看讨论  是主板商 定置时bios时 做手脚了 ,g4d能启动  其它的 还是算了。
单 讨论 技术  例外。



作者: wuwuzz    时间: 2024-11-28 13:30
红毛樱木 发表于 2024-11-28 12:40
你这机器还在吗,能玩不

在。电池/电源不行了,冷启要按2次开关。
都是烂大街的机子,臭鱼上应该还能找到,机型EHA4,花几百块能买。



作者: wuwuzz    时间: 2024-11-28 13:34
2011whp 发表于 2024-11-28 13:13
2011年那 会  U启   基本统一了 USB-hdd

2018年时 win10 认可了 u盘分区

神舟A470/K470(机型EHA4) USB-HDD的问题,是求道者在本坛先提出来的。
我就是为了查看实情,专门花了几百块从臭鱼上买来测试用。



作者: 2011yaya2007777    时间: 2024-11-28 14:16
呀,你这专研技术的劲头,值得点赞!
作者: wuwuzz    时间: 2024-11-30 10:04
本帖最后由 wuwuzz 于 2024-11-30 20:53 编辑
不点 发表于 2024-11-28 09:16
创新发展,果然永不停息!

继 CPU 收费开启某功能,主板也启动了 “按功能收费” 的政策。

这个算是资本的基本操作,很早就开始了。

USB2.0刚出来的时候,phoenix官网就分模块配置、搭售。比较坑的是,PC机厂商最终展示
的用户界面:神舟A470/K470明明没有USB-HDD模块功能了,还显示大大的USB-HDD菜单选项,
误导观众啊!




作者: wuwuzz    时间: 2024-11-30 10:07
本帖最后由 wuwuzz 于 2024-11-30 20:53 编辑
2011yaya2007777 发表于 2024-11-28 14:16
呀,你这专研技术的劲头,值得点赞!

您过奖了。寻求答案的兴趣,是最好的激励动力,而兴趣的种子是前辈老师们种下的,
同时,前辈们还赠送新手大礼包,打开了通向答案的不同入门之路:

不点、bean:USB启动中的CHS/LBA
netwinxp:USB启动工作方式
victor888:USB-ZIP、
DOS USB DISK driver
yaya: DOS USB&PCI
数码之家无数前行者:USB-CDROM
UEFI/BIOS开发者论坛:BIOS/UEFI源码
USB开发者:USB枚举、USB抓包分析、U盘固件、(硬件)USB协议分析仪
等的资料
......




作者: 求道者    时间: 2024-12-20 01:17
本帖最后由 求道者 于 2024-12-20 01:22 编辑
wuwuzz 发表于 2024-11-30 10:07
您过奖了。寻求答案的兴趣,是最好的激励动力,而兴趣的种子是前辈老师们种下的,
同时,前辈们还赠送新 ...

说起来USB逻辑分析仪可以抓包慧荣量产工具的LUN切换所发送的指令吧。
然后把这指令用Linux下的工具发出去,这不完全可以把这玩意移植到安卓吗?
随身带电脑不现实,但手机Root一下用OTG,搞这东西完全可行嘛……




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