X86 为什么较新的计算机无法从usb驱动器启动?

X86 为什么较新的计算机无法从usb驱动器启动?,x86,usb,bootloader,dd,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 我在两台电脑上测试。我将usb硬盘设置为两台计算机的最高启动优先级 采用英特尔奔腾M处理器(联想)的旧电脑通过usb驱动器上的引导加载程序进行引导 但采用英特尔i5进程的较新计算机(联想)表示没

我只是做了一个如下的引导加载程序

jmp $
times 510 - ($ - $$) db 0
db 0x55
db 0xaa
然后我就跟着

nasm bootloader.asm -o bootloader

dd if=bootloader of=/dev/sdb bs=512 count=1
我在两台电脑上测试。我将usb硬盘设置为两台计算机的最高启动优先级

采用英特尔奔腾M处理器(联想)的旧电脑通过usb驱动器上的引导加载程序进行引导

但采用英特尔i5进程的较新计算机(联想)表示没有操作系统

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

我以超级用户的身份打开了一个名为“Bless”的ubuntu实用程序,并检查/dev/sdb

实际上,在0x1fe和0x1ff处分别存在0x55 0xaa

我不知道为什么我不能用它在电脑上启动

这两台计算机具有相同的UEFI设置、启动优先级和无密码


请帮助

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

您可以将其添加到代码的开头,以便与所有BIOS一起识别。而且大多数人都能正确地加载它

添加此选项适用于所有类型的媒体。软盘以及硬盘、USB等
这将为您的驱动器添加一个公认的FAT12文件系统。
退房

使用nasm像往常一样编译它。并将其设置为带dd的MBR

;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