2017-02-09 16 views
5

Jeśli chcę, aby mój bootloader startował z pamięci USB, muszę dołączyć BPB. Pamięci USB działa w trybie emulacji dyskietki. Jak widać here, istnieje wiele różnych wersji BPB. W jaki sposób bios wie, jaki rodzaj BPB jest obecny? GRUB 0.97 wydaje się używać jeszcze jednego formatu BPB?W jaki sposób bios wie, jaki rodzaj BPB jest obecny?

Podkręć mój bootloader z przesunięcia 0xb, a następnie zadziała. Czy istnieje standardowy/typowy rozmiar do użycia? Nie używam żadnego systemu plików na moim USB, tylko na surowo.

Podejrzewam, że potrzebuję BPB, ponieważ bios próbuje zaktualizować niektóre wartości, które nadpisują niektóre z kodu. Ponieważ każdy BPB wydaje się nieco inny, jak bios może wiedzieć, gdzie aktualizować jaką wartość?

Odpowiedz

2

Nie wszystkie wdrożenia BIOSu są ważne, jeśli masz BPB. Ogólny format dla BPB z początku w sektorze rozruchowym MBR jest poniżej:

bits 16 
org 0     ; BIOS will load the MBR to this location. 

    bootStart: 
      jmp  _start 
      nop 
      osType  db 'MSDOS6.0' 
      bpb 
      bps   dw 512 
      spc   db 8 
      rs   dw 1 
      fats  db 2 
      re   dw 512 
      ss   dw 0 
      media  db 0xf8 
      spfat  dw 0xc900 
      spt   dw 0x3f00 
      heads  dw 0x1000 
      hidden  dw 0x3f00, 0 
      ls   dw 0x5142,0x0600 
      pdn   db 0x80 
      cheads   db 0 
      sig   db 0x29 
      serialno dw 0xce13, 0x4630 
      label  db 'NO NAME' 
      fattype  db "FAT32" 

    _start: 
           ; set up the registers 
      mov  ax, 0x07c0 
      mov  ds, ax 
      mov  fs, ax 
      mov  gs, ax 
      mov  ax, 0x0700 
      mov  es, ax 

Pola są zawsze w tym samym miejscu .. Sposób, że system, jeśli dba o BPB, to sprawdza po prostu przez analizowanie go.

+0

[GRUB] (https://github.com/jezze/grub-legacy/blob/master/stage1/stage1.S) linia od 65 do 85 używa innej kolejności, prawda? Wartości w nim są również ustawione na zero, czy nie można oklejać przestrzeni bpb zerami? – user237948

+1

Teoretycznie byłoby, ale miałem systemy, które odmawiają załadowania ważnego MBR, chyba że jest to uzasadnione, szczególnie w głowach. –

+3

@ user237948: Możesz wstawić spację za pomocą zer (potrzebujesz JMP, aby zacząć). W kodzie GRUB wykorzystują przestrzeń BPB do własnych zmiennych. Nie obchodzi ich, co BIOS może tam umieścić, i tak i tak nadpisują dane. (Jeśli używasz dyskietki, pobierają geometrię napędu z samego BIOS-u). Jedną z przyczyn umieszczenia w nich rozsądnych wartości reprezentujących napęd jest zdarzenie, w którym używasz obrazów dysków, można pobrać oprogramowanie do odczytu nagłówka i wybrać konfigurację obrazu dysku z pozycji BPB. –

Powiązane problemy