为什么更新的计算机无法从USB驱动器启动?

时间:2014-09-23 07:58:00

标签: x86 usb bootloader dd

我只是制作了一个跟随引导程序

jmp $
times 510 - ($ - $$) db 0
db 0x55
db 0xaa

然后我跟着

nasm bootloader.asm -o bootloader

dd if=bootloader of=/dev/sdb bs=512 count=1

我在2台电脑上测试过。我将usb hdd设置为两台计算机的最高启动优先级。

采用Intel Pentium M进程(lenovo)的老式计算机使用USB驱动程序的引导程序启动

但是采用Intel i5进程的新型计算机(联想)表示没有操作系统。

(如果启动序列有hdd,usb指示灯闪烁几次,计算机从hdd驱动器启动。如果启动顺序没有hdd,则发生错误操作系统丢失)

我打开了一个叫做“祝福”的ubuntu工具。作为超级用户并检查/ dev / sdb

确实在0x1fe和0x1ff分别有0x55 0xaa。

我不知道为什么我无法在某台计算机上启动它。

两台计算机都具有相同的UEFI设置,启动优先级,无密码。

请帮助

1 个答案:

答案 0 :(得分:0)

某些BIOS要求您添加BPB标准代码以轻松识别USB及其文件系统。

您可以将其添加到代码的开头,以便使用所有BIOS进行识别。而且他们中的大多数都正确加载它。

添加此功能适用于所有类型的媒体。软盘以及硬盘,USB等。
这将为您的驱动器添加一个公认的FAT12文件系统 查看osdev wiki

;bits   16                      ; we are in 16 bit real mode
use16
org     0                   ; we will set regisers later

start:  jmp main                    ; jump to start of bootloader
;nop                ; Pad out before disk description

; ------------------------------------------------------------------
; Disk description table, to make it a valid floppy
; Note: some of these values are hard-coded in the source!
; Values are those used by IBM for 1.44 MB, 3.5" diskette

bpbOEM          db "My OS   " ; Disk label
bpbBytesPerSector:      DW 512 ; Bytes per sector
bpbSectorsPerCluster:   DB 1 ; Sectors per cluster
bpbReservedSectors:     DW 1 ; Reserved sectors for boot record
bpbNumberOfFATs:    DB 2 ; Number of copies of the FAT
bpbRootEntries:     DW 224 ; Number of entries in root dir
; (224 * 32 = 7168 = 14 sectors to read)
bpbTotalSectors:    DW 2880 ; Number of logical sectors
bpbMedia:       DB 0xf0  ;; 0xF1 ; Medium descriptor byte
bpbSectorsPerFAT:   DW 9 ; Sectors per FAT
bpbSectorsPerTrack:     DW 18 ; Sectors per track (36/cylinder)
bpbHeadsPerCylinder:    DW 2 ; Number of sides/heads
bpbHiddenSectors:   DD 0 ; Number of hidden sectors
bpbTotalSectorsBig:     DD 0 ; Number of LBA sectors
bsDriveNumber:          DB 0 ; Drive No: 0
bsUnused:       DB 0
bsExtBootSignature:     DB 0x29;0x41 ; Drive signature: 41 for floppy
bsSerialNumber:         DD 0xa0a1a2a3 ; Volume ID: any number
bsVolumeLabel:          DB "MOS FLOPPY " ; Volume Label: any 11 chars
bsFileSystem:           DB "FAT12   " ; File system type: don't change!

maincode:

jmp $
times 510 - ($ - $$) db 0
db 0x55
db 0xaa

像往常一样用鼻子编译它。并使用dd将其设置为MBR。