LINUX.ORG.RU

Не работает MBR на материнской плате с UEFI

 , , , ,


0

3

Есть свой собственный загрузчик, но он почему-то не работает на материнской плате с UEFI (Intel DH77EB), MBR не выдаёт никаких сообщений, на материнских платах с обычным BIOS всё нормально. MBR записываю на флешку, UEFI Boot выключен.

Код начала загрузчика (BOOTSTACK=0xFFF0, BOOTSEG=0x1000):

        .set SIGNATURE,0xaa55
        .set LOAD,0x7c00        # Load address
        .code16
        .text
        .globl start            # Entry point
start:
         jmp    main
        .= start +3 
oem :.ascii "oc2k 210"
secsiz  :.word  0
clsiz   :.byte  0
ressecs :.word  0
fatcnt  :.byte  0
rootsiz :.word  0
totsec  :.word  0
media   :.byte  0
fatsiz  :.word  0
trksecs :.word  0
headcnt :.byte  0   #?????????????????
hidnsec :.word  0
# нестандартные расширения 
        .= start +52
fsec:   .word 0        # первый сектор                  52
        .word 0        #                    
spc :   .word 0        # spt*headcnt                    56
        .word 0        #                        
spt :   .word 0        #                                60
        .word 0        #                        
fsec0:  .word 0        # первый сектор                  64
        .word 0        #                    
drive:  .byte 0        # номер диска например 0x80      68
head:   .byte 0        #                                69
cyl :   .word 0        #                                70
nsec:   .word 0        #                                72
        .word 0        #                                74
startmsg:.ascii "Start \0"  #        80
okmsg:.ascii "Ok \r\n\0"  #        
main:   
    
    movw    $BOOTSEG, %ax           #  ax=0x1000 
    movw    %ax, %es                # es=ax=0x1000 set up %es, (where we will load boot2 to)
    movw    %ax, %ss                # ss=0x1000  
    movw    $BOOTSTACK-64, %sp      # sp=0xfff0-64
    movw    $(LOAD/16),%ax        
    movw    %ax,%ds                 #  data  ds=0x7c0

    movw    $startmsg, %si
    call    message

На материнской плате с UEFI сообщение не выводится.

Или, вот, для примера, MBR, который выводит «Hello World», записываю его на флешку напрямую командой dd, на материнской плате с BIOS работает, а с UEFI — нет.

В чём отличия между настоящим BIOS и эмуляцией BIOS в UEFI?


В чём отличия между настоящим BIOS и эмуляцией BIOS в UEFI?

хочу добавить некоторый комментарий:

в своей жизни — я встречал парочку~тройку материнок\ноутбуков — в которых имитация BIOS была выполнена настолько плохо...

...что это могло работать *только* при соблюдении определённых условий (у вендопользователей проблем не было, так как условия подбирались под них :)).

условие было: отсутствие раздела «0xEE» внутри MBR . (если всё-таки раздел «0xEE» НЕ отсутствовал в MBR, то коду загрузчика управление даже не передавалось)

ну и может и +ещё какие-нибудь дополнительные условия.. :-)

# P.S.: а вывод тут такой: имитация BIOS это неочень хорошо.. и темболее в современное время уже безсмысленно.. изучай как писать загрузчики для UEFI — это более полезный опыт!

user_id_68054 ★★★★★
()
Последнее исправление: user_id_68054 (всего исправлений: 3)
Ответ на: комментарий от anonymous

anonimous чтоли?

Врят ли, anonimous практическим программированием не занимается, у него вместо этого «computer science»

kravich ★★★★
()
Ответ на: комментарий от kravich

Hello World собираю, как и написано, nasm boot.asm, потом записываю на флешку dd if=boot of=/dev/sdf

IOne
() автор топика
Ответ на: комментарий от user_id_68054

условие было: отсутствие раздела «0xEE» внутри MBR . (если всё-таки раздел «0xEE» НЕ отсутствовал в MBR, то коду загрузчика управление даже не передавалось)

В примере Hello World таблица разделов заполнена нулями.

IOne
() автор топика

лучше напиши загрузчик под UEFI. Полезнее будет.

Dark_SavanT ★★★★★
()
Ответ на: комментарий от IOne

В примере Hello World таблица разделов заполнена нулями.

да, но чёрт знает какие-ещё там были идиотские условия кроме этого :-)

и темболее я просто привёл пример того что эта BIOS-имитации может быть заточена только(!) лишь для одного win-случая :-)..

(но качественные BIOS-имитации — я тоже разумеется встречал)

user_id_68054 ★★★★★
()

csm включил?
grub с флешки с mbr грузится?

dimon555 ★★★★★
()

UEFI не использует код из MBR.

Попробуй записать свой код в начало раздела, а не диска.

anonymous
()
Ответ на: комментарий от anonymous

UEFI не использует код из MBR.

Попробуй записать свой код в начало раздела, а не диска.

«Native UEFI» не использует даже и код из начала раздела :-) ..

а если ты говоришь про «UEFI CSM» (а НЕ про «Native UEFI») — то в идеальном случае с чего бы ему не использовать код из MBR ?

(а говоря не про идеальный случай, а про забагованный — тут да — всякое-разное может быть :))

user_id_68054 ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.