Я создал простой загрузчик, который выглядит следующим образом:Простой загрузчик на USB палку
[BITS 16]
[ORG 0x7C00]
MOV AL, 65
CALL PrintCharacter
JMP $ ;Infinite loop
PrintCharacter:
MOV AH, 0x0E
MOV BH, 0x00
MOV BL, 0x07
INT 0x10
RET
TIMES 510 - ($ - $$) db 0 ;Fill the rest of sector with 0
DW 0xAA55 ;Add boot signature
Тогда я скомпилированный его nasm -f bin -o boot.bin bootloader.asm
. Следующим шагом, который я предпринял, было тестирование его на VirtualBox с использованием новой виртуальной системы (я выбрал тип: другое).
Я создал файл iso
с помощью mkisofs -no-emul-boot -boot-load-size 4 -o boot.iso -b boot.bin isodir/
Он правильно загрузился и персонаж A
был отображен так, как я хотел.
Далее я хотел протестировать этот простой загрузочный код на физической машине. Я не хотел перезаписывать свой MBR, поэтому решил использовать USB-накопитель в качестве загрузочного устройства (мой BIOS поддерживает это).
Сначала я использовал dd if=boot.iso of=/dev/sdb1 conv=notrunc bs=512 count=1 seek=0
. Это не сработало, ничего не появилось, просто черный экран и курсор.
Мой вопрос: как правильно подготовить MBR на USB-накопителе. Или как я могу изменить код, чтобы попытаться записать только первые 446 байт с загрузочным кодом (например, dd if=boot.iso of=/dev/sdb1 conv=notrunc bs=446 count=1 seek=0
), потому что следующие 4 * 16 байтов представляют собой таблицу разделов + 2 байта для начальной загрузки.
Заранее спасибо.
Я думаю, что '/ dev/sdb1' указывает на первый раздел, определенный таблицей разделов. Можете ли вы попробовать '/ dev/sdb' вместо этого? – nodakai