udało mi się stworzyć minimalny sektor startowy, który współpracuje z QEMU 2.0.0 Ubuntu 14.04:Jak stworzyć minimalny sektor rozruchowy boot world z GCC, który działa z pamięci USB na prawdziwym sprzęcie?
.code16
.global _start
_start:
cli
mov $msg, %si
mov $0x0e, %ah
loop:
lodsb
or %al, %al
jz halt
int $0x10
jmp loop
halt:
hlt
msg:
.asciz "hello world"
.org 510
.word 0xaa55
skompilowany z:
as -o main.o main.S
ld --oformat binary -o main.img -Ttext 0x7C00 main.o
Przykładem jest dostępny na tym repo: https://github.com/cirosantilli/x86-bare-metal-examples/tree/2b79ac21df801fbf4619d009411be6b9cd10e6e0/no-ld-script
Po:
qemu -hda main.img
pokazuje hello world
na ekranie emulatora zgodnie z oczekiwaniami.
Ale gdy próbuję nagrać na USB:
sudo dd if=main.img of=/dev/sdb
następnie podłączyć urządzenie USB do ThinkPad T400 i T430, uderzył F12 i wybierz USB, co obserwuję to:
- Niektóre komunikaty startowe pokazać się szybko
- następnie ekran gaśnie, tylko z kursorem podkreślenia w górnym
Przetestowałem również ten sam port USB z obrazem Ubuntu 14.04, i uruchomiłem go poprawnie, więc USB działa.
Jak zmienić ten przykład, aby uruchamiał się na sprzęcie i wyświetlał komunikat "Cześć świat"?
Jaka jest różnica między obrazem systemu Ubuntu a tym, który utworzyłem?
Gdzie jest to udokumentowane?
Wysłałem wyjście sudo dmidecode
na T400 do: https://gist.github.com/cirosantilli/d47d35bacc9be588009f#file-lenovo-t400
Jako absolutne minimum należy wyzerować 'DS'. – Jester
Oprócz ustawienia 'DS', powinieneś jawnie ustawić segment stosu (' SS'), szczególnie jeśli zaczniesz używać procedur BIOS. Masz też trochę szczęścia, ponieważ QEMU i inne emulatory są o wiele ładniejsze, gdy zadzwonią do twojego kodu startowego. Segment 'CS' niekoniecznie musi być równy 0, kiedy bios wywoła twój bootloader. Element _segment: offset_ będzie równoważny z 0x0000: 0x7c00, ale "CS" może być inne wartości, takie jak 0x07c0 (0x07c0: 0x0000). Aby ominąć to, powinieneś zrobić daleko jmp na etykiecie w kodzie z 'CS' ustawionym na 0x0000. Na prawdziwym sprzęcie może to stanowić problem. –
@MichaelPetch dzięki za dalsze wskazówki! Czuję się bardziej nieszczęśliwy, że QEMU nie dokładnie emuluje mój sprzęt :-) Przeanalizuję segmenty rejestru, o których wspomniałeś bliżej. Nigdy wcześniej ich nie rozumiałem, ponieważ system operacyjny ukrył je przed mną. –