无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站投放广告、加入VIP会员,请联系 微信:wuyouceo
查看: 2611|回复: 55
打印 上一主题 下一主题

[已解决] 请yaya看看,g4d usb驱动未能将U盘盘号0x00映射到0x81

  [复制链接]
跳转到指定楼层
1#
发表于 2024-11-25 21:13:57 | 显示全部楼层 |只看大图 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 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?

2#
 楼主| 发表于 2024-11-26 02:57:55 | 显示全部楼层
本帖最后由 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格式盘。

点评

我再试试,看看能否有帮助。 usb --init 的工作任务,(在用 int13 读 USB 盘数据时)不就是取代(接管)主板 BIOS 吗?否则,运行 usb --init 有啥用? usb --init 运行后,无论创建的是什么盘(软盘 00h,硬  详情 回复 发表于 2024-11-26 07:28
回复

使用道具 举报

3#
 楼主| 发表于 2024-11-26 09:54:25 | 显示全部楼层
本帖最后由 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资源的最终目的。


点评

明白了。 关注的焦点不同。 我关注的是 “基本层面”,即,“能否成功启动” 的问题。属于 “温饱” 问题。 您关注的是 “提高层面”,即,属于 “高质量发展” 方面的问题。 真是抱歉,我并不关注 “高  详情 回复 发表于 2024-11-26 10:38
回复

使用道具 举报

4#
 楼主| 发表于 2024-11-26 10:07:12 | 显示全部楼层
本帖最后由 wuwuzz 于 2024-11-26 10:41 编辑
不点 发表于 2024-11-26 09:45
任何启动方案,都有其局限性。超越了限度,那就无解。“挽救”,属于 “变通”,属于“走旁道”。

...

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

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

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


回复

使用道具 举报

5#
 楼主| 发表于 2024-11-26 11:07:44 | 显示全部楼层
不点 发表于 2024-11-26 10:38
明白了。

关注的焦点不同。

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

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

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


回复

使用道具 举报

6#
 楼主| 发表于 2024-11-26 23:52:56 | 显示全部楼层
本帖最后由 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则会出错,
达不到想要效果。

回复

使用道具 举报

7#
 楼主| 发表于 2024-11-26 23:59:14 | 显示全部楼层
本帖最后由 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的问题。

回复

使用道具 举报

8#
 楼主| 发表于 2024-11-27 00:03:51 | 显示全部楼层
不点 发表于 2024-11-26 17:47
wuwuzz 写的帖子很认真、很仔细,也很长。世风日下,现在很少有这样 “严肃认真” 的人了。就连那些大公司 ...

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

回复

使用道具 举报

9#
 楼主| 发表于 2024-11-27 07:17:04 | 显示全部楼层
2011yaya2007777 发表于 2024-11-27 05:37
这么说使用不点大推荐的交换磁盘方法解决了问题,可喜可贺啊!

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

回复

使用道具 举报

10#
 楼主| 发表于 2024-11-27 08:16:04 | 显示全部楼层
不点 发表于 2024-11-27 07:43
交换磁盘盘号,是 grub4dos 在 BIOS 下的一个 “奇技淫巧”。其实,这是最基本的操作了,就连原始的 gnu gr ...

不点大分析很正确。

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

回复

使用道具 举报

11#
 楼主| 发表于 2024-11-27 08:20:12 | 显示全部楼层
2011yaya2007777 发表于 2024-11-27 07:48
你重启UD、Ventoy的方法领教了。我原来以为多复杂。高手啊。

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

回复

使用道具 举报

12#
 楼主| 发表于 2024-11-27 13:32:04 | 显示全部楼层
本帖最后由 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。

点评

两种 U 盘制作方法,在执行 usb --init 之前,没有表现出差别,BIOS 盘号都是 fd0,而且都是屏蔽掉 MBR,只有 PBR 可见。 但在 usb --init 执行后,出现了差异。 虚拟盘的盘号不同:00 和 81h 当 usb 虚拟  详情 回复 发表于 2024-11-27 15:02
回复

使用道具 举报

13#
 楼主| 发表于 2024-11-27 16:46:13 | 显示全部楼层
不点 发表于 2024-11-27 15:02
两种 U 盘制作方法,在执行 usb --init 之前,没有表现出差别,BIOS 盘号都是 fd0,而且都是屏蔽掉 MBR, ...

我同意您的分析。

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

回复

使用道具 举报

14#
 楼主| 发表于 2024-11-27 19:50:16 | 显示全部楼层
本帖最后由 wuwuzz 于 2024-11-27 19:59 编辑
求道者 发表于 2024-11-27 18:42
现在有啥进度?fbinst能复用吗?

进度就是问题解决了啊。

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


点评

这BIOS不是会直接引导PBR吗? 这部分不用动手脚吗?  详情 回复 发表于 2024-11-27 19:55
回复

使用道具 举报

15#
 楼主| 发表于 2024-11-27 20:01:46 | 显示全部楼层
本帖最后由 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
回复

使用道具 举报

16#
 楼主| 发表于 2024-11-27 20:06:37 | 显示全部楼层
求道者 发表于 2024-11-27 20:02
倒也是能自动化……
不过usb --init之后usb键鼠就挂了……

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

点评

你进了fbinst又不一定是用PE,可能用别的工具也不一定。 这就寄了……  详情 回复 发表于 2024-11-27 20:09
回复

使用道具 举报

17#
 楼主| 发表于 2024-11-27 20:13:38 | 显示全部楼层
求道者 发表于 2024-11-27 20:09
你进了fbinst又不一定是用PE,可能用别的工具也不一定。
键鼠寄了,就只能想办法了……

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


点评

你在grub4dos里也要用键鼠才能选择菜单项目啊…… usb键鼠挂了的话,这部分就没法用……  详情 回复 发表于 2024-11-27 20:15
回复

使用道具 举报

18#
 楼主| 发表于 2024-11-27 20:23:40 | 显示全部楼层
求道者 发表于 2024-11-27 20:15
你在grub4dos里也要用键鼠才能选择菜单项目啊……
usb键鼠挂了的话,这部分就没法用……

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

点评

笔记本上走PS/2或者I2C总线吧。 这部分又没被usb --init搞掉驱动……  详情 回复 发表于 2024-11-27 20:32
回复

使用道具 举报

19#
 楼主| 发表于 2024-11-27 20:41:13 | 显示全部楼层
求道者 发表于 2024-11-27 20:32
笔记本上触控板和键盘走的PS/2或者I2C总线吧。
这部分又没被usb --init搞掉驱动……

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

点评

这又不一定只出现在笔记本上……  详情 回复 发表于 2024-11-27 20:54
回复

使用道具 举报

20#
 楼主| 发表于 2024-11-27 20:56:08 | 显示全部楼层
红毛樱木 发表于 2024-11-27 20:38
这问题不就是上次讨论的那个问题么,UD情况下把grub4dos的pbr安装到U盘的可见分区,然后用这个pbr启动回去U ...

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

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


点评

就无奈群里说的,识别为fd后用pbr的grub4dos跳回ud  详情 回复 发表于 2024-11-27 23:06
回复

使用道具 举报

21#
 楼主| 发表于 2024-11-27 20:58:34 | 显示全部楼层
求道者 发表于 2024-11-27 20:54
这又不一定只出现在笔记本上……

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


回复

使用道具 举报

22#
 楼主| 发表于 2024-11-28 07:10:24 | 显示全部楼层
红毛樱木 发表于 2024-11-27 23:06
就无奈群里说的,识别为fd后用pbr的grub4dos跳回ud

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

点评

你这机器还在吗,能玩不  详情 回复 发表于 2024-11-28 12:40
回复

使用道具 举报

23#
 楼主| 发表于 2024-11-28 07:26:18 | 显示全部楼层
吐槽一下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等模块。

点评

创新发展,果然永不停息! 继 CPU 收费开启某功能,主板也启动了 “按功能收费” 的政策。 只有想不到,没有做不到。 接下来的 “新时代”,会是怎样一个时代呢? 请大家给出预测。  详情 回复 发表于 2024-11-28 09:16
回复

使用道具 举报

24#
 楼主| 发表于 2024-11-28 13:30:20 | 显示全部楼层
红毛樱木 发表于 2024-11-28 12:40
你这机器还在吗,能玩不

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


回复

使用道具 举报

25#
 楼主| 发表于 2024-11-28 13:34:23 | 显示全部楼层
2011whp 发表于 2024-11-28 13:13
2011年那 会  U启   基本统一了 USB-hdd

2018年时 win10 认可了 u盘分区

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


回复

使用道具 举报

26#
 楼主| 发表于 2024-11-30 10:04:28 | 显示全部楼层
本帖最后由 wuwuzz 于 2024-11-30 20:53 编辑
不点 发表于 2024-11-28 09:16
创新发展,果然永不停息!

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

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

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



回复

使用道具 举报

27#
 楼主| 发表于 2024-11-30 10:07:51 | 显示全部楼层
本帖最后由 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协议分析仪
等的资料
......



点评

说起来逻辑分析仪可以抓包慧荣的LUN切换所发送的指令吧。 然后把这指令用Linux下的工具发出去,这不完全可以把这玩意移植到安卓吗? 身上带电脑不现实,但手机Root一下用OTG,搞这东西完全可行嘛……  详情 回复 发表于 2024-12-20 01:17
回复

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2025-2-22 22:33

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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