niewidoczny customowy bootloader

1

Dzien dobry ostatnio korzystajac z nasm asm postanowilem pobawic sie w tworzenie malego bootloadera, korzystajac z qemu proces testowania bootladera przechodzil bez problemu , rowniez po konwersji pliku .bin na .img podajac floppy disk jako owy plik .img na VirtualBoxie bootloader dziala bez problemu.Jednak chcialem na fizycznym sprzecie potestowac moj bootloader w tym celu przy pomocy dd nadpisywalem boot sector w moim pendrive.
$sudo dd if=bootloader.bin of=/dev/sda1
podrzucam wiecej info o dysku

Disk /dev/sda: 29.3 GiB, 31457280000 bytes, 61440000 sectors
Disk model: ProductCode     
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x00000000

Device     Boot Start      End  Sectors  Size Id Type
/dev/sda1  *     2048 61439999 61437952 29.3G 86 NTFS volume set

Sam kod nie jest niczym specjalnym

jmp $
times 510 - ($ - $$) db 0
dw 0xAA55

Po ustawieniu w biosie dysku z ktorego powinnien on wystartowac na pendrive z bootloaderem po restarcie dostaje imformacje
This is not a bootable disk. Please insert a bootable floppy

Nadpisanie sektora w pendrive powiodlo sie
screenshot-20231231153855.pngscreenshot-20231231153912.png
Jak przetestowac moj bootloader na fizycznym sprzecie? Na nowszym biosie boot manager nawet nie widzi dysku a na starszym zwraca blad o ktorym wspomnialem wczesniej.

1

A jaki komputer? Jeśli ma mniej niż 10 lat, na pewno ma już UEFI, a nie BIOS. Poszukaj w konfiguracji UEFI opcji "Legacy boot" czy czegoś takiego. Jeśli nie ma, to musiałbyś nadpisać firmware, a z tym już więcej zabawy (oczywiście zakładając że np coreboot wspiera twój sprzęt).

W dzisiejszych czasach pisze się takie rzeczy w C używając UEFI/Tianocore. Nie ma już czegoś takiego jak kod wykonwyalny MBR tylko jest osobna partycja z programami ładującymi. Jak chcesz się nauczyć czegoś praktycznego, pisz to pod UEFI.

EDK2:
https://github.com/tianocore/edk2

UEFI dla QEMU na ubuntu:
https://wiki.ubuntu.com/UEFI/OVMF

0
elwis napisał(a):

A jaki komputer? Jeśli ma mniej niż 10 lat, na pewno ma już UEFI, a nie BIOS. Poszukaj w konfiguracji UEFI opcji "Legacy boot" czy czegoś takiego. W dzisiejszych czasach pisze się takie rzeczy w C używając UEFI/Tianocore. Nie ma już czegoś takiego jak kod wykonwyalny MBR tylko jest osobna partycja z programami ładującymi.

Bralem sie juz za poszukiwanie legacy boota na moim starym lapku ktorego uzywam Biosu InsydeH20 Rev 3.5 gdzie w zakladce boot pozostaje mi Boot priority order do przydzialu.

1

W kwestii formalnej.
Jak robisz "bootloader" (nie neguję tego słowa) w stosunku do komputera, to już nie bardzo "embedded", przynajmniej nie tak, jak ja rozumiem to słowo

Bootloader w sensie embedded (to samo słowo, ale mocno inna rzeczywistość) to jakby Arduino

Tak czytam co napisałem ... chyba odrózniłbym to, co wywołuje ładowanie loadER, a to co jest ładowane (przedmiot ładowania, bootsector, bootimage, bootpartition)
Fakt, w systemach operacyjnych (inaczej niż bare metal embedde) to rzeczywistość warstwowa / wielopoziomowa

1 użytkowników online, w tym zalogowanych: 0, gości: 1