关于 DELL 1420 无法从 USB-CDROM 引导

昨天拿到一个笔记本,是 DELL 的 1420,想要重装系统,结果发现没有办法从量产的 USB-CDROM 启动,google 一下,发现了一个新的东西,关于 BIOS 引导的,叫做 Mutil-Lun,帖子在这里,http://bbs.wuyou.com/viewthrea…,是由 wuwuzz 提出的,他的原文是说

问一下,是什么主控盘? 量产的USB-CD是前置(Lun0)还是后置(非Lun0)?
那些对Multi-Lun支持不佳的BIOS,即使支持USB-CD引导,也可能在Multi-Lun
映射连接环节有误,导致量产的USB-CD识别、引导失败。这种问题可通过量产单CD
(U盘容量全部分给CD)来测试。

LZ的问题不是什么巧合,也不是怪问题,而是常见的Multi-Lun支持不善问题。

LZ的这个DELL BIOS是很老的那种,USB模块只注重单Lun DISK启动的情况,
Multi-Lun支持差(包含了USB-CD支持不佳这个子问题)。

LZ的做法其实就是把U盘恢复成BIOS支持的单Lun DISK设备引导,当然能成功。

—————————————————————————————————————-

BIOS BOOT标准出来的时候,并未对USB下的Multi-Lun设备做出有针对性
的详细规定(很正常,那个年代,连U盘都少见)。对USB Multi-Lun的支持,
无论是BIOS,还是Windows/Linux这些操作系统,都是后来不断打补丁,
逐步实现的。

那么,这个 Mutil-Lun 是个什么东西呢,看百度百科,http://baike.baidu.com/view/54…

LUN的全称是Logical Unit Number,也就是逻辑单元号。我们知道SCSI总线上可挂接的设备数量是有限的,一般为6个或者15个,我们可以用Target ID(也有称为SCSI ID的)来描述这些设备,设备只要一加入系统,就有一个代号,我们在区别设备的时候,只要说几号几号就ok了。
  而实际上我们需要用来描述的对象,是远远超过该数字的,于是我们引进了LUN的概念,也就是说LUN ID的作用就是扩充了Target ID。每个Target下都可以有多个LUN Device,我们通常简称LUN Device为LUN,这样就可以说每个设备的描述就有原来的Target x变成Target x LUN y了,那么显而易见的,我们描述设备的能力增强了。

但是和我们这个问题进一步的解释百度百科就没有了,翻看了一下 wikipedia 也没怎么看到,我自己的理解是,我们计算中的设备一般都挂在 Lun0 下,而自己量产出来的 USB-CDROM 接入系统之后,会被认为是另外一个 Lun,而一些比较完善的主板,是可以支持多个 Lun 的,但是这个 DELL 的笔记本不支持Mutil-Lun,所以也就无法识别到这个设备,自然也就无法从这个设备去引导启动了。

另外,在查阅资料的过程中,就见到几个名词,例如 CHS,http://baike.baidu.com/view/20…

CHS寻址模式:

柱面解释(4张)
  ① CHS寻址模式将硬盘划分为磁头(Heads)、柱面(Cylinder)、扇区(Sector)。
  △磁头(Heads):每张磁片的正反两面各有一个磁头,一个磁头对应一张磁片的一个面。因此,用第几磁 头就可以表示数据在哪个磁面。
  △柱面(Cylinder):所有磁片中半径相同的同心磁道构成“柱面”,意思是这一系列的磁道垂直叠在一起,就形成一个柱面的形状。简单地理解,柱面数=磁道数。
  △扇区(Sector):将磁道划分为若干个小的区段,就是扇区。虽然很小,但实际是一个扇子的形状,故称为扇区。每个扇区的容量为512字节。
  ② 知道了磁头数、柱面数、扇区数,就可以很容易地确定数据保存在硬盘的哪个位置。也很容易确定硬盘的容量,其计算公式是:
  硬盘容量=磁头数×柱面数×扇区数×512字节
  ③LARGE寻址模式把柱面数除以整数倍、磁头数乘以整数倍而得到的逻辑磁头/柱面/扇区参数进行寻址,所以表示的已不是硬盘中的物理位置,而是逻辑位置。LBA寻址模式是直接以扇区为单位进行寻址的,不再用磁头/柱面/扇区三种单位来进行寻址。但为了保持与CHS模式的兼容,通过逻辑变换算法,可以转换为磁头/柱面/扇区三种参数来表示,但表示的也和LARGE寻址模式一样,已不是硬盘中的物理位置,而是逻辑位置了。

以及 LBA,http://baike.baidu.com/view/11…

LBA(Logical Block Addressing)逻辑块寻址。在 LBA 模式下,我们知道硬盘上的一个数据区域由它所在的磁头、柱面(也就是磁道)和扇区所唯一确定。早期系统就是直接使用磁头、柱面和扇区来对硬盘进行寻址(这称为CHS寻址),这需要分别存储每个区域的三个参数(这称为3D参数),使用时再分别读取三个参数,然后再送到磁盘控制器去执行。由于系统用8b来存储磁头地址,用10b来存储柱面地址,用6b来存储扇区地址,而一个扇区共有512B,这样使用CHS寻址一块硬盘最大容量为256 * 1024 * 63 * 512B = 8064 MB(1MB = 1048576B)(若按1MB=1000000B来算就是8.4GB)。随着硬盘技术的进步,硬盘容量越来越大,CHS模式无法管理超过8064 MB的硬盘,因此工程师们发明了更加简便的LBA寻址方式。在LBA地址中,地址不再表示实际硬盘的实际物理地址(柱面、磁头和扇区)。LBA编址方式将CHS这种三维寻址方式转变为一维的线性寻址,它把硬盘所有的物理扇区的C/H/S编号通过一定的规则转变为一线性的编号,系统效率得到大大提高,避免了烦琐的磁头/柱面/扇区的寻址方式。在访问硬盘时,由硬盘控制器再将这种逻辑地址转换为实际硬盘的物理地址。

还有 Fbinst,http://baike.baidu.com/view/28…

fbinst的巧妙构思

  预留8M(1-16064扇区)隐藏区,在每个扇区固定位置都写入该扇区在WIN下的LBA值,并在1-63扇区都写入boot code。BIOS启动时,通过boot code读取预先写入的LBA值,并与BIOS识别的LBA值进行比较,找出差距,倒推出当前BIOS对U盘的识别和访问情况,根据这个情况来调整纠正对U盘的访问。

fbinst隐藏区空闲空间的利用

  fbinst对付BOOT兼容性问题的开发已经完成,目前新版本的开发重点已转向隐藏区的利用。由于8M隐藏区的每个扇区记录LBA时只用了几个字节,且boot code占据空间也不是很大,所以大量扇区空间是空闲的。在这个区域里可以嵌入:
  1,不同版本的grub4dos
  2, grub2
  3, ntldr
  4, 1.44M/2.88M启动盘映像
  5, 微型Linux
  在最新的V1.3,有隐藏区扩大参数。例如,-r 20M,就是将隐藏区扩大到20M。其中8M是基本区,后12M是扩展数据区。扩展数据区延伸了fbinst的应用,可以放进体积较大的XP PE的ISO、其他IMG等。

所以其实硬件还是挺有意思的。。

Leave a Reply

Your email address will not be published. Required fields are marked *