2011-01-27 5 views
13

부팅하는 동안 CPU를 보호 모드로 전환하는 GRUB인지 아니면 부팅하는 Linux 커널인지 묻고 싶습니다. 또한 저는 커널 자체 (vmlinuz)가 ELF인가 아니면 일반적인 바이너리 형식인지 묻고 싶습니다. 감사.GRUB이 보호 모드로 전환합니까?

+0

grub legacy 또는 grub2에 대해 묻고 있습니까? –

+1

두 버전의 grub에 관심이 있습니다. – mnc

+0

Grub과 LILO의 두 버전 모두 귀하의 질문과 똑같이 작동하기 때문에 (부팅하는 커널이 동일하기 때문에) 추측하는 것이 안전하다고 생각합니다. –

답변

13

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 단원을 참조하십시오.

+0

정답은 +1입니다. 그의 질문에 "linux"라는 태그가 붙어 있기 때문에, 첫 번째 라인을 "다른 운영 체제에서는 GRUB이 보호 모드에서 빠져 나오지만 리눅스에서는 그렇지 못하다"(또는 유사하게) 것으로 다시 작성할 것을 고려할 수 있습니다. – Nemo

+0

실제로 나는 위의 라인을 지키기 위해 그것에 대해 연구하고 있는데, 정확히 어떻게되는지, 그리고 약간의 혼란이 있습니다. 그러나 리눅스가 부팅 될 때 리눅스가 전환하는 것은 혼란이 아닙니다. 다른 멀티 부트 호환 커널의 경우 grub이 전환됩니다. – phoxis

+0

충분합니다. 필자는 한때이 코드를 패치해야했기 때문에 Linux는 리얼 모드에서 시작한다고 확신합니다. 그럼에도 불구하고 완전한 대답을 얻었을 때, 나는 리눅스에 대한 답으로 열어야한다고 생각한다. – Nemo

관련 문제