2010-03-03 14 views
5

Jak mogę uruchomić moją małą konsolę z dysku/CD/USB, o następującej konfiguracji:uruchamiania z dysku/CD/USB

  1. mediach, że chcę używać będzie całkowicie surowy czyli nie system plików na nim.
  2. Po włożeniu nośnika do systemu lub założeniu, że jest już włożony, chcę go uruchomić z własnego systemu operacyjnego.

Procedura, której chcę użyć, polega na tym, że gdy mój system się uruchamia, uruchamia się z dysku/cd/usb i uruchamia mój system operacyjny. Na razie wyobraź sobie, że OS będzie programem na cześć świata. Naprawdę chcę zobaczyć, jak wdraża się system operacyjny świata rzeczywistego.

+0

Te przykłady mogą być nieco zbyt długie dla SO, niezależnie od tego, jak bardzo z góry dziękujemy. Istnieje kilka programów ładujących o otwartym kodzie źródłowym, na które możesz patrzeć, i możesz wziąć udział w zajęciach w lokalnej szkole. –

Odpowiedz

3

Program ładujący musi mieć 512 bajtów. Nie mniej nie więcej. Musi to kończyć się standardową sygnaturą rozruchową komputera: 0xAA55.

Należy również zwrócić uwagę na rozruch komputera w trybie 16-bitowym. Musisz załadować jądro lub drugi program ładujący z tego kodu do pamięci, a następnie przejść do tego kodu (i być może przełączyć procesor na tryb chroniony na 32 bity).

Na przykład (nasm):

BITS 16 

; Your assembly code here (510 bytes max)... 
jmp $ 

; Fills the remaining space with 0 
times 510 - ($ - $$) db 0 

; Boot signature 
dw 0xAA55 
+0

+1 dobra odpowiedź. – Tronic

+0

Uczyłem się i pomyślnie ukończyłem mój kurs organizacji komputerowej i języka asemblera, ale nie rozumiem powyższego kodu .. jego częściowy język asemblerowy i częściowo coś innego ..czy możesz mi powiedzieć, jaki to jest język asemblerowy? również polecam niektóre książki. – sp3tsnaz

+0

plus mam inne pytanie .. mam kod programu ładującego i całkiem dobre wyjaśnienie z innej strony .. ale nie rozumiem w jaki sposób powyższe instrukcje będą wykonywane bezpośrednio bez kompilacji? także po pomyślnym uruchomieniu mojego małego systemu operacyjnego, w jaki sposób mogę dodać do niego kompilator lub niektóre pliki wykonywalne, aby mogły działać jak system operacyjny? na przykład przy uruchamianiu systemu Windows ma kilka wstępnie zainstalowanych programów roboczych, które zdecydowanie nie są po prostu instrukcjami asm ... muszą być skompilowane czy coś? jak to się dzieje? proszę opisać. – sp3tsnaz

2

Thas pracy programu ładującego. Program ładujący powinien być obecny w pierwszych 512 bajtach dysku twardego. Ta lokalizacja nazywa się MBR (główny rekord rozruchowy)

  1. Po załadowaniu biosu sprawdza, czy nośnik zawiera MBR. weryfikuje podpis MBR 0xAA55, który powinien być obecny jako ostatnie 2 bajty MBR.

  2. Następnie Bios ładuje bootloader do pamięci RAM pod adresem 0x7C00

  3. Następnie program ładujący jest ten, kto rzeczywiście ładuje kernal do pamięci, poprzez czytanie plików.

  4. Zazwyczaj nie można zmieścić całego kodu w 512 bajtach, więc pojawi się drugi boot loader.

  5. dodatkowy program ładujący zostanie załadowany przez podstawowy program ładujący.

  6. program ładujący pomocniczy ładuje IDT i GDT (tabela wektorów przerwania i tabela deskryptorów globalnych). Umożliwia bramce A20 przejście do trybu chronionego.

  7. wtórny ładujący ładuje jądro 32-bitowe z dysku do pamięci, a następnie przeskakuje do kodu jądra

Więcej informacji można pobrać Linux wesją 0.01 jądra (pierwsza wersja). Zobacz, jak to się robi. ku mojemu zaskoczeniu kod do odczytu systemu plików + kod do przejścia w tryb chroniony mieści się w 512 bajtach kodu.

Powiązane problemy