2015-09-14 3 views
1

Я попытался сделать загрузчик для своей операционной системы. Я попытался записать его на USB-накопитель с программой imageusb (из формата: img, iso и bin, ничего не работает). Затем я попытался загрузить его, но я не нашел его в меню загрузки BIOS. Я закодировал его с помощью сборки. Как я могу загрузить операционную систему с помощью моего собственного загрузчика?Как написать загрузчик моей операционной системы на USB-накопитель?

Вот часть моего кода:

[BITS 16] 
[ORG 0x7C00] 

JMP Main 

Main: 

MOV SI, Text 
CALL PrintString 
CALL NextLine 

MOV SI, PressKeyForBoot 
CALL PrintString 
CALL Boot 
JMP $ 

PrintCharacter: 
MOV AH, 0x0E 
MOV BH, 0x00 
MOV BL, 0x07 

INT 0x10 
RET 

NextLine: 
MOV AL, 0 
stosb 
mov AH, 0x0E 
MOV AL, 0x0D 
INT 0x10 
MOV AL, 0x0A 
INT 0x10 
ret 

Boot: 
CALL RebootKey 
db 0x0ea 
dw 0x0000 
dw 0xffff 

RebootKey: 
mov ah, 0 
int 0x16 
cmp ah, 01h 
jne RebootKey 

PrintString: 
next_character: 
MOV AL, [SI] 
INC SI 
OR AL, AL 
JZ exit_function 
CALL PrintCharacter 
JMP next_character 
exit_function: 
RET 


Text db 'Loading...', 0 
PressKeyForBoot db 'Press ESC key to reboot.', 0 
TIMES 510 - ($ - $$) db 0 
DW 0xAA55 

ответ

2

Чтобы написать код загрузчика в первый сектор USB флэшки вы можете использовать dmde на Windows. Откройте программу dmde и выберите правильное физическое устройство. На следующем экране нажмите f2, чтобы показать необработанные двоичные данные секторов. Вы должны написать загрузчик до первых 512 байтов USB-накопителя. Подпись загрузчика 0xAA55 должна быть двумя последними байтами первого сектора (т. Е. 510, 511). Для записи данных используйте ctrl+e, для сохранения изменений используйте ctrl+w. Для получения дополнительной информации посмотрите на панель меню в верхней части окна dmde.

После этого убедитесь, что ваш USB-накопитель имеет больший приоритет в настройках порядка загрузки BIOS, чем любые другие диски с допустимыми загрузчиками.

Кроме того, @RossRidge прав насчет бесполезности маркировки любого раздела как активного, в то время как блочное устройство имеет загрузчик в первом секторе.

P.S. Вот мой article о создании собственного загрузчика для USB-накопителя.

+0

Я использую окна, спасибо за помощь. – AsdMan

+0

@AsdMan, в Windows вы можете пометить раздел как загрузочный с помощью утилиты ** diskpart **. Вы должны пометить раздел на вашем USB-накопителе как 'active'. –

+0

Вам не нужно отмечать какой-либо раздел активным, если загрузочный сектор находится в первом секторе USB-накопителя, так как первый сектор находится за пределами любого раздела. На самом деле это код кода, содержащегося в первом секторе устройства, для чтения встроенной в него таблицы разделов MBR и загрузки раздела, помеченного как активная. –