Могу ли я угадать, что мой usb не работает, если мой загрузчик не работает?
Я нахожусь на Ubuntu, и я сделал простой загрузчик, который просто печатает символ.
Хорошо работает на qemu-system-i386
Это выглядит так:
start:
mov ah, 0x0e
mov al, '~'
int 0x10
jmp $
times 510-($-$$) db 0
db 0x55
db 0xaa
И я строю с
fasm loader.asm img.bin
затем проверьте, доступен ли мой usb:
lsblk
после проверки, что мой USB доступен в /dev/sdc, я запустил
sudo dd if=img.bin of=/dev/sdc
sync
И, наконец, проверьте, хорошо ли написал дд:
dd if=/dev/sdc bs=512 count=1 > f
ndisasm -b 16 f
выше ndisasm печать:
00000000 B40E mov ah,0xe
00000002 B07E mov al,0x7e
00000004 CD10 int 0x10
00000006 EBFE jmp short 0x6
00000008 0000 add [bx+si],al
0000000A 0000 add [bx+si],al
repeats 0000...
000001FE 55 push bp
000001FF AA stosb
Теперь я подключил этот usb к реальному ноутбуку с 32-битным процессором (Pentium M).
но он перезагружается снова и снова.
Итак, мой вопрос: могу ли я угадать мой USB сломан?
Я не знаю, связано ли это с моей проблемой, но... вот еще одна вещь: когда я запускаю, следуйте командам без вставленного USB,
dd if=/dev/sdc bs=512 count=1 > f
ndisasm -b 16 f
выше ndisasm печать:
00000000 B40E mov ah,0xe
00000002 B07E mov al,0x7e
00000004 CD10 int 0x10
00000006 EBFE jmp short 0x6
00000008 0000 add [bx+si],al
0000000A 0000 add [bx+si],al
repeats 0000...
000001FE 55 push bp
000001FF AA stosb
как будто я вставил карту памяти USB.
Вы дадите мне несколько советов?
Благодарю. (Я очень старался сформулировать четкий и полезный вопрос. Если это не так, пожалуйста, дайте мне знать.)
РЕДАКТИРОВАТЬ: я проверил с BPB. Исходный код выглядит следующим образом (добавлен nop):
jmp start
nop
bpbOEM db "TEST "
bpbBytesPerSector: DW 512
bpbSectorsPerCluster: DB 1
bpbReservedSectors: DW 1
bpbNumberOfFATs: DB 2
bpbRootEntries: DW 224
bpbTotalSectors: DW 2880
bpbMedia: DB 0xF0
bpbSectorsPerFAT: DW 9
bpbSectorsPerTrack: DW 18
bpbHeadsPerCylinder: DW 2
bpbHiddenSectors: DD 0
bpbTotalSectorsBig: DD 0
bsDriveNumber: DB 0
bsUnused: DB 0
bsExtBootSignature: DB 0x00
bsSerialNumber: DD 0x00000000
bsVolumeLabel: DB " "
bsFileSystem: DB " "
start:
mov ah, 0x0e
mov al, '~'
int 0x10
jmp $
times 510-($-$$) db 0
db 0x55
db 0xaa
Я побежал:
fasm loader.asm img.bin
lsblk
sudo dd if=img.bin of=/dev/sdc
sync
dd if=/dev/sdc bs=512 count=1 > f
ndisasm -b 16 f
и это печатает:
00000000 EB3B jmp short 0x3d
00000002 54 push sp
00000003 45 inc bp
00000004 53 push bx
00000005 54 push sp
00000006 2020 and [bx+si],ah
00000008 2020 and [bx+si],ah
0000000A 0002 add [bp+si],al
0000000C 0101 add [bx+di],ax
0000000E 0002 add [bp+si],al
00000010 E000 loopne 0x12
00000012 40 inc ax
00000013 0BF0 or si,ax
00000015 0900 or [bx+si],ax
00000017 1200 adc al,[bx+si]
00000019 0200 add al,[bx+si]
0000001B 0000 add [bx+si],al
0000001D 0000 add [bx+si],al
0000001F 0000 add [bx+si],al
00000021 0000 add [bx+si],al
00000023 0000 add [bx+si],al
00000025 0000 add [bx+si],al
00000027 0000 add [bx+si],al
00000029 0020 add [bx+si],ah
0000002B 2020 and [bx+si],ah
0000002D 2020 and [bx+si],ah
0000002F 2020 and [bx+si],ah
00000031 2020 and [bx+si],ah
00000033 2020 and [bx+si],ah
00000035 2020 and [bx+si],ah
00000037 2020 and [bx+si],ah
00000039 2020 and [bx+si],ah
0000003B 2020 and [bx+si],ah
0000003D B40E mov ah,0xe
0000003F B07E mov al,0x7e
00000041 CD10 int 0x10
00000043 EBFE jmp short 0x43
repeats 0000...
000001FD 0055AA add [di-0x56],dl
И результат был таким же. Реальная машина перезагружается снова и снова.
EDIT2: это загрузчик, который подает звуковой сигнал. Он работал на разных USB, один и тот же компьютер.
bits 16
org 0x7c00
jmp main
main:
mov ax, 3
int 0x10
mov ah, 0x0e
mov al, 'A'
int 0x10
mov al, 0xb6
out 0x43, al
mov al, 0xa9
out 0x42, al
mov al, 0x04
out 0x42, al
in al, 0x61
mov ah, al
or al, 011b
test al, ah
je done
out 0x61, al
done:
jmp $
times 510-($-$$) db 0
db 0x55
db 0xaa
times 1474560 - ($-$$) db 0