부팅하는 동안 CPU를 보호 모드로 전환하는 GRUB인지 아니면 부팅하는 Linux 커널인지 묻고 싶습니다. 또한 저는 커널 자체 (vmlinuz)가 ELF인가 아니면 일반적인 바이너리 형식인지 묻고 싶습니다. 감사.GRUB이 보호 모드로 전환합니까?
답변
http://www.moses.uklinux.net/patches/lki-1.html에 따르면 리눅스 커널은 ELF 바이너리입니다. 나는 그것이 부트 로더가 아닌 보호 모드로 전환하는 리눅스라는 것을 확신한다. 이 페이지는 동의합니다 http://oss.sgi.com/LDP/HOWTO/Kernel-HOWTO/linux_boot_process.html
GRUB 이는 보호 모드에서 당신을 드롭 않습니다.
은 GRUB Multiboot Specification (version 0.6.96) Section 3.2이
'CR0'가
비트 (31) (PG)를 지워야합니다 당신을 알려줍니다. 비트 0 (PE)을 설정해야합니다. 다른 비트는 모두 정의되지 않습니다.
그리고 CR0 Register mapping 시스템 이 보호 모드에 있어야 함을 알려줍니다. 리눅스 멀티 부팅 커널 아니고, PM의 전환에 대한 몇 가지 부트 로더에 의존하지 않는
, 그것은 Linux Boot Protocol 다음과 같습니다. 그러나 리눅스는 보호 모드 자체를 전환 않으며, 부트 로더에 의존하지 않는 체크
: 다음 다음 CR0
물건을 수행 protected_mode_jump()
호출 할 때이 go_to_protected_mode();
를 호출 여기 http://lxr.linux.no/#linux+v2.6.39/arch/x86/boot/main.c
이
(비트 0으로 설정)는 (다른 비트는 페이징되지 않습니다 것을 말한다)
편집
내가 알아낼 수있는 것은 GRUB can detect linux boot protocol (GRUB2 및 레거시도 있어야 함)이며 메모리에 Linux를로드하지만 은 보호 모드로 전환하지 않습니다. 이 링크를 보시려면 http://www.gnu.org/software/grub/manual/grub.html#GNU_002fLinux과이 링크의 16 단원을 참조하십시오.
정답은 +1입니다. 그의 질문에 "linux"라는 태그가 붙어 있기 때문에, 첫 번째 라인을 "다른 운영 체제에서는 GRUB이 보호 모드에서 빠져 나오지만 리눅스에서는 그렇지 못하다"(또는 유사하게) 것으로 다시 작성할 것을 고려할 수 있습니다. – Nemo
실제로 나는 위의 라인을 지키기 위해 그것에 대해 연구하고 있는데, 정확히 어떻게되는지, 그리고 약간의 혼란이 있습니다. 그러나 리눅스가 부팅 될 때 리눅스가 전환하는 것은 혼란이 아닙니다. 다른 멀티 부트 호환 커널의 경우 grub이 전환됩니다. – phoxis
충분합니다. 필자는 한때이 코드를 패치해야했기 때문에 Linux는 리얼 모드에서 시작한다고 확신합니다. 그럼에도 불구하고 완전한 대답을 얻었을 때, 나는 리눅스에 대한 답으로 열어야한다고 생각한다. – Nemo
grub legacy 또는 grub2에 대해 묻고 있습니까? –
두 버전의 grub에 관심이 있습니다. – mnc
Grub과 LILO의 두 버전 모두 귀하의 질문과 똑같이 작동하기 때문에 (부팅하는 커널이 동일하기 때문에) 추측하는 것이 안전하다고 생각합니다. –