无忧启动论坛

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

[原创] U盘成功启动的思考

[复制链接]
跳转到指定楼层
1#
发表于 2020-2-4 11:29:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 sizhou 于 2020-3-29 10:20 编辑

U盘启动最后是BIOS通过int 13H 读写数据,必须指定DL=00还是80确定软盘、硬盘。
BIOS考虑什么因素来软盘还是硬盘,比较复杂。不同BIOS厂家不同时段都不同。
  • BIOS不会尝试引导任何超过512MB的USB设备–在系统POST期间,USB盘的LED甚至不会闪烁,因为从未发出读取请求!
  • BIOS不会尝试引导任何超过1GB的USB设备。
  • BIOS将XXX MB以下的任何USB设备视为USB-ZIP设备,而XXX MB以上的任何设备均视为USB-HDD
  • BIOS会将任何USB设备视为USB-ZIP,并始终将其作为软盘设备进行引导
  • BIOS会将任何USB设备视为USB-HDD,并始终将其作为硬盘设备启动
  • BIOS将引导没有MBR或分区表的USB-FDD格式化设备,但不会引导USB-ZIP或USB-HDD设备
  • BIOS将引导任何在 MBR中只有一个分区表条目的设备作为软盘设备,但是将引导具有两个分区表条目的设备作为USB-HDD设备。
  • BIOS设置菜单可用于使BIOS始终根据用户选择将USB设备视为“可移动”设备(USB-ZIP)或“固定磁盘”设备(USB-HDD)。
  • BIOS查看Volume Boot记录以确定设备的类型(例如,如果看到MSWIN4.1,则将其视为USB-ZIP设备)。
  • 分区参数-如果分区的每个磁道具有32hd和16个扇区,则将其视为USB-ZIP,如果63个扇区则将其视为硬盘。
  • 如果端圆柱为1023(最大),则将其视为硬盘。



其实不管BIOS认为U盘是 软盘还是硬盘,我们对U盘可以做一定的处理,让其适应BIOS启动要求。  结合网上学习的知识,U盘可以设置模拟USB Zip盘,就可以设置MBR ,同时兼容软盘、硬盘启动,没什么影响。


USB ZIP
此选项在驱动器的第一个扇区中创建一个主引导记录和分区表。写入驱动器的启动记录代码将适合作为软盘驱动器启动MS-DOS或FreeDOS。此外,将使用64hd \ 32sectors的驱动器几何形状(如果可能)。某些ZIP驱动器规范将分区表中的前三个条目定义为未使用,并使用了第四个分区表条目。

当BIOS从设备作为USB-ZIP设备引导时,它不会将第一个扇区MBR代码(LBA 0)加载到内存中-而是BIOS将卷启动记录代码直接加载到内存中,并通过读取来跳转到它分区表中的单个条目以查找分区的开始位置(因此,USB-ZIP驱动器只能包含一个分区条目)。然后BIOS映射USB驱动器为int 13H DL = 0调用 但它总是会加小号分区起始地址的任何访问。因此,一个BIOS INT 13h的DL = 0调用读取柱面0,磁头0 1扇区(LBA 0)将实际读取分区的第一个扇区。实扇区1(LBA地址0)根本无法访问。例如,假设USB-ZIP驱动器具有一个带有单个条目的分区表。分区表条目指示分区从扇区32开始,然后BIOS将扇区32加载到内存中并开始在其中执行代码。任何尝试读取扇区的尝试从该点开始通过软盘Int 13h DL = 0调用(或Extended Int 13h调用)CHS 0 \ 0 \ 1(LBA 0)实际上将读取扇区32。如果引导代码尝试读取CHS 0 \ 1 \ 1 (LBA 32),它将实际上读取位于CHS 0 \ 2 \ 1(LBA 64)的扇区,因为BIOS始终会将分区起始地址添加到任何访问中。这样,位于分区开头的启动代码与没有MBR或分区表的软盘上的启动代码相同。


一些BIOS不支持这种类型的引导,如果看到有效的分区表和MBR,它们可能总是将USB-ZIP设备引导为硬盘(即,映射USB设备以响应Int 13h DL = 80h调用)。USB-ZIP设备和USB-HDD设备之间的差异非常小,都具有主引导记录和有效的分区表,但是USB-ZIP设备应包含分区引导代码,该代码希望从软盘引导驱动器”(DL = 0),而USB-HDD设备应包含分区引导代码,该代码应从“硬盘驱动器”(DL = 80h)引导。许多现代的BIOS包含一个特殊的菜单选项来更改此行为。


怎么做Zip格式,下面就是方法,建议用1G以下的U盘,超过1G的盘是否可行,没有条件测试。大家可以帮忙测试下,
以下操作会破坏U盘数据,请备份好数据。
虚拟机安装Ubuntu,
  • 插入您的USB闪存盘
  • 打开终端窗口,然后输入sudo su
  • 键入apt-get install syslinux(如果您没有安装syslinux)
  • 键入apt-get install mtools(如果尚未安装mtools)
  • 键入fdisk -l列出可用磁盘(从列表中记下您的闪存驱动器)
  • 键入mkdiskimage -4 / dev / sdx 0 64 32(用实际的闪存驱动器号替换x) 请结合上面显示的盘 确定U盘是sda /sdb/ sdc???
  • 该过程完成(花了一段时间)后,键入fdisk -l并确认闪存驱动器的新几何形状“ 64磁头,32个扇区”


做好的U盘可以用Windows系统带的格式化随便格,但是用别的软件格式可能会破坏上面的设置64H 32S,
最后简单的用 BOOTICE  设置U盘MBR 为NT5.X或6.X,PBR设置为你用的PE 引导方式,为了兼容BIOS和uefi,建议U盘为fat16 fat32,分区ID是1C/1E,激活分区。
还忘记了说了U盘用单分驱,不用量产多分驱。盘也是单分区。   
上面有些文字读的不通顺,是英文翻译过来的,将就看吧,


U盘本质是LBA设备,靠LBA定地址读写数据。U盘提供随意的CHS值,对BIOS启动是否有影响,值得思考?


转一些网上写的,可能不对
BIOS在从USB驱动器的第一个扇区加载数据(代码)并运行该代码之前,必须决定如何将该设备“映射”到所有引导代码使用的标准int 13h BIOS调用。如果BIOS确定USB设备是软盘设备,则BIOS将响应“软盘驱动器” int 13h请求(即DL = 00)。如果BIOS将设备视为硬盘类型,它将响应“硬盘” int 13h请求(DL = 80h)。如果BIOS将USB设备视为ZIP设备,它将以软盘(DL = 00)响应访问请求,但它将转换任何请求,以便对扇区1(LBA0)的请求将返回该设备的PBR,对扇区2的请求将在策略路由之后返回该扇区,依此类推。因此,对于任何实模式(DOS)操作系统,

没有标准的BIOS应该如何“决定”如何映射USB设备。不同的BIOS使用不同的决策树。有些甚至不理会,只是假设所有USB存储设备都是一种类型(例如HDD)。一些旧的BIOS假定所有USB设备的大小都超过1.44MB,则它们都是ZIP设备-否则为FDD。如果您使用Int13h Standard CHS调用,则某些仅执行ZIP转换/调整,而如果您调用Extended Int13h中断例程,则不转换扇区地址!

BIOS必须决定的另一件事是,当操作系统使用标准的Int 13h 02/03调用从UFD上的Cylinder 5,Head 1,Sector 1请求“读”或“写”时,该怎么做。UFD没有真正的头部或圆柱体!因此,BIOS必须将此CHS“地址”转换为逻辑块地址(LBA)。但是如何知道一个磁道中有多少个扇区(SPT)或一个圆柱体中有多少个磁道(HPC)?一种常见的方法是查看MBR分区表中的Ending Head和Sector值。由于(直到Vista)所有分区都在整个圆柱体的末尾结束,因此End Head值显示每个圆柱体有多少个磁头,End Sector值显示每个磁道有多少个扇区。然后,当操作系统要求提供CHS地址5 1 1时,BIOS可以使用这些值来计算LBA地址。其他BIOS仅假定63 SPT和255 HPC。这在现代BIOS中尤其如此,因为Vista和Win 7 Diskpart现在可以在任何起始地址和任何结束地址创建分区,并且不遵循旧的DOS / Win98 / XP“规则”,即在磁道的开头和结尾处开始分区在圆柱体的末端分隔。每个磁道的扇区数和每个磁头的磁头数称为“驱动器几何形状”,可能会导致很多问题。对于某些较旧的BIOS,默认最大值为每缸240个Heads,这是很常见的。在轨道的开始处的起始分区和在圆柱体的末端处的终止分区的数量。每个磁道的扇区数和每个磁头的磁头数称为“驱动器几何形状”,可能会导致很多问题。对于某些较旧的BIOS,默认最大值为每缸240个Heads,这是很常见的。在轨道的开始处的起始分区和在圆柱体的末端处的终止分区的数量。每个磁道的扇区数和每个磁头的磁头数称为“驱动器几何形状”,可能会导致很多问题。对于某些较旧的BIOS,默认最大值为每缸240个Heads,这是很常见的。

因为在IBM PC上首次引入int 13h磁盘调用时,软件工程师没有想到您的磁盘可能大于500MB(这太疯狂了!),所以他们设计了int 13h接口只能将其扩展到最大每磁道63个扇区中的1024个柱面乘以16磁头(磁盘驱动器怎么可能有16个以上的磁头?)。随着磁盘大小的增加和磁盘的智能化,必须重新定义int 13h“标准”。每次重新定义BIOS时,都必须对其进行更改,其中某些更改要好于其他更改!当磁盘驱动器的容量超过8GB时,必须开发Extended Int 13h接口,现在甚至还不足以处理超过2TiB的现代驱动器(尽管4TiB磁盘只是只要最后一个分区的开始低于2TiB限制!)。整个过程真是太惨了,以至于整个磁盘都无法启动!


英文好的 可以阅读下面链接https://www.win.tue.nl/~aeb/linux/Large-Disk-10.html

https://www.win.tue.nl/~aeb/linux/Large-Disk.html

https://www.win.tue.nl/~aeb/linux/zip/zip-1.html

https://www.pendrivelinux.com/bo ... p-on-older-systems/

https://www.rmprepusb.com/home/r ... he-Override-options


评分

参与人数 2无忧币 +2 收起 理由
879792799 + 1 很给力!
ZXGU + 1 赞一个!

查看全部评分

2#
发表于 2020-2-4 11:51:49 | 只看该作者
这么长,先占位。
回复

使用道具 举报

3#
发表于 2020-2-4 11:57:19 | 只看该作者
板凳
回复

使用道具 举报

4#
 楼主| 发表于 2020-2-4 12:48:02 | 只看该作者
本帖最后由 sizhou 于 2020-3-27 13:05 编辑
匿名者 发表于 2020-2-4 11:59
文章是机翻的,不是原创?

网上学习的,谈点想法,英文不太好, 是机翻的,


回复

使用道具 举报

5#
发表于 2020-2-4 13:52:38 | 只看该作者
学习了
回复

使用道具 举报

6#
发表于 2020-2-4 14:20:54 | 只看该作者
对哦 我一直疑惑u盘为什么和硬盘不一样
回复

使用道具 举报

7#
发表于 2020-2-4 15:10:46 来自手机 | 只看该作者
这是U盘启动经历的艰辛路程。为了chs,多少人伤透了脑筋。发展到现在,chs基本退出历史舞台,新主板BIOS不再依靠它了。其实自从磁盘引入逻辑扇区的概念,并且成功实施后(95年或者更早),早就应该抛弃它了。
回复

使用道具 举报

8#
发表于 2021-1-26 18:49:13 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

9#
发表于 2021-2-7 12:55:31 | 只看该作者
想用Win to go
回复

使用道具 举报

10#
发表于 2021-2-7 12:56:19 | 只看该作者
羡慕USB3.1,二代U盘性能真差
回复

使用道具 举报

11#
发表于 2021-2-9 16:09:09 | 只看该作者
新人报道,来学习
回复

使用道具 举报

12#
发表于 2021-2-13 08:01:59 来自手机 | 只看该作者
学习学习
回复

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2024-4-19 22:38

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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