我只是制作了一个跟随引导程序
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设置,启动优先级,无密码。
请帮助
答案 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。