Реальный режим и загружающееся сбивающее с толку ядро Linux

В дополнение к тому, что предлагает uther, можно также попытаться загрузить Windows непосредственно от GRUB. Вы используете GRUB 0.97 (т.е. Личинка 'наследие'), так попробуйте это:

chainload (hd0,0)+1

Это загрузит первый сектор (+1) из первого раздела (,0) из первого HD (hd0). Ваше расположение раздела может отличаться. Нажмите Tab несколько раз после ввода вводной круглой скобки (() чтобы получить список Ваших разделов и выбрать тот, Вам нужно.

Первый сектор раздела Windows является своим загрузчиком, и chainload способ, которым GRUB обычно загружает Windows.

Если это работает, и Вы добираетесь до Windows, необходимо сделать, как uther предполагает: откройтесь оболочка (Запустите Выполнение → … → тип cmd Войдите), затем перепишите Windows MBR с bootsect /nt60 SYS /mbr. Это должно мешать GRUB работать на начальной загрузке.

4
28.08.2014, 19:55
2 ответа

GRUB не должен загружать целое ядро в память. Изображение ядра разделяется на две части:

  • Код ядра реального режима, который является маленьким и может быть загружен в пороге 640 КБ доступной памяти;
  • Остальная часть ядра, которое работает в защищенном режиме и загружается после первого мегабайта памяти.

Загрузчик только загружает код ядра реального режима, который в свою очередь загружается, остальные (смотрите на go_to_protected_mode() в arch/x86/boot/pm.c). Это - то, как процесс может остаться в рамках ограничений памяти выполнения в реальном режиме.

Маленькое примечание: GRUB может работать и в реальном режиме и в защищенном режиме, в зависимости от того, что он делает. Это может переключиться в защищенный режим для некоторых вещей (некоторое аппаратное обнаружение и изображение меню). Вы правы, однако, в размышлении, что это находится в реальном режиме, когда это поражает ядро.

5
27.01.2020, 20:54
  • 1
    Спасибо за Ваш быстрый ответ! В спецификации Личинки это загружается, оба ядра (может быть только одна часть :D), и корневая файловая система (мой составляет 32 МиБ). Так, как насчет корневой файловой системы? –  Bình Nguyên 14.05.2013, 08:15
  • 2
    @BìnhNguyên ядро является тем, имеющим дело с корневой файловой системой, не GRUB. –  Chris Down 14.05.2013, 08:24
  • 3
    , который я имел, который перепутал потому что эта статья: blog.adminnote.com/2010/10/linux-boot-process-step-by-step.html спасибо за исправленный меня ;) –  Bình Nguyên 14.05.2013, 09:16
  • 4
    Из того, что я читал здесь (mjmwired.net/kernel/Documentation/x86/boot.txt), это неправильно. Конечно, Личинка может получить доступ к памяти выше 1 мебибайт и запустить ядро в реальном режиме, тем не менее. Предположение, что Личинка не должна загружать полное изображение ядра и initrd, имеет мало смысла мне. Это означало бы, что ядро должно понять /boot файловая система, прежде чем это загрузит initrd (и даже большая часть из себя!). Вы знакомы с ядром, не могущим получить доступ к корневому устройству. Когда-нибудь услышанный о ядре, не могущем загрузить initrd? Думайте об этом снова. –  Hauke Laging 14.05.2013, 13:26
  • 5
    @HaukeLaging я не могу вполне понять то, что Вы говорите, но Вы захотите считать раздел 16 здесь. GRUB может запустить ядро в любом режиме, который это любит, который не означает, что это должно. Ядро не должно понимать /boot прежде чем это загрузит initrd - initrd предоставляется ядру загрузчиком (и загрузчик обрабатывает файловую систему). Находите ли Вы, что это имеет "мало смысла" или не не важно его правдивости. Если Вы ожидаете, что я прокомментирую некоторую определенную часть boot.txt, обеспечьте раздел. –  Chris Down 14.05.2013, 13:48

Это можно сделать в реальном режим с помощью функции BIOS int 0x15, 0x87. GDT должен быть заполнен соответствующим образом для источника и назначения. cx - количество байтов для перемещения.

    push edx
    push es
    xor  ax, ax
    mov  es, ax
    mov  ah, 0x87
    mov  si, gdt
    int  0x15
    jc   error
    pop  es
    pop  edx
    ret

gdt:
    times   16  db  0
    dw  0xffff              ; segment limit
.src:
    dw  0
    db  2
    db  0x93                ; data access rights
    dw  0
    dw  0xffff              ; segment limit
.dest:
    dw  0
    db  0x10                ; load protected-mode kernel to 100000h
    db  0x93                ; data access rights
    dw  0
    times   16  db  0

 error:
0
27.01.2020, 20:54

Теги

Похожие вопросы