Я хотел бы спросить, является ли GRUB переключением CPU в защищенный режим во время загрузки или это ядро Linux это делает. А также я хотел бы спросить - это само ядро (vmlinuz) ELF или это простой двоичный формат? Спасибо.
Переводит ли GRUB в защищенный режим?
Ответ 1
GRUB отбрасывает вас в защищенный режим.
GRUB Спецификация Multiboot (версия 0.6.96) Раздел 3.2 сообщает об этом
"CR0
Бит 31 (PG) должен быть очищен. Должен быть установлен бит 0 (PE). Другие биты - все undefined.
И Отображение списка CR0 сообщает вам, что система должна находиться в защищенном режиме.
Linux не является многозадачным ядром и не полагается на некоторый загрузчик для переключения в PM, он следует за Linux Boot Protocol. Но linux делает сам режим защищенного режима и не полагается на загрузчик
check: http://lxr.linux.no/#linux+v2.6.39/arch/x86/boot/main.c
Здесь он вызывает go_to_protected_mode();
, когда затем вызывает protected_mode_jump ()
, который затем выполняет CR0
stuff (устанавливает бит 0)
(Другой бит говорит, что пейджинг отключен)
ИЗМЕНИТЬ
Что я могу понять, так это то, что GRUB может определять протокол загрузки linux (GRUB2, а также наследие) и загружает linux в память, но не переключается в защищенный режим. Посмотрите на эту ссылку: http://www.gnu.org/software/grub/manual/grub.html#GNU_002fLinux и раздел 16 страницы в этой ссылке.
Ответ 2
Согласно http://www.moses.uklinux.net/patches/lki-1.html Ядро Linux - это ELF-бинарный файл. Я почти уверен, что именно Linux переключается в защищенный режим, а не на загрузчик. Эта страница соглашается: http://oss.sgi.com/LDP/HOWTO/Kernel-HOWTO/linux_boot_process.html
Ответ 3
Я бы сказал, что ответом здесь является то, что загрузчик GRUB переключается в "нереальный режим" перед загрузкой ядра (что объясняет, почему бит CR0 0 не установлен в этот момент). Полная 32-битная адресация включена, для GDT установлен плоский [0,4Gigs>, линия A20 включена, но подкачка не включена, поэтому ядру Linux (или любому другому ядру) все равно придется сделать это и переключиться вернуться в защищенный режим.