2010-03-03 4 views
5

:부팅 나는 다음과 같은 구성으로, 디스크/CD/USB에서 내 작은 콘솔을 부팅 할 수있는 방법

  1. 내가 더 예를 완전히 원시됩니다 사용하려는 미디어 그것에 파일 시스템.
  2. 내 시스템에 미디어를 삽입하거나 이미 삽입했다고 가정 할 때, 내 자신의 작은 OS로 부팅되도록하고 싶습니다.

사용하려는 절차는 시스템이 시작될 때 디스크/cd/usb에서 부팅하고 내 OS를 시작한다는 것입니다. 지금은 OS가 세계 프로그램이 될 것이라고 상상해보십시오. 실제로 실제 OS가 어떻게 구현되는지보고 싶습니다.

+0

이러한 예는 Google에 미리 알려 주신 것에 관계없이 SO에 비해 조금 길 수도 있습니다. 살펴볼 수있는 몇 가지 오픈 소스 부트 로더가 있으며, 해당 학교에서 수업을들을 수 있습니다. –

답변

3

부트 로더는 512 바이트 여야합니다. 더 이상 없습니다. 그리고 표준 PC 부팅 서명 (0xAA55)으로 끝나야합니다.

PC는 16 비트 모드로 부팅됩니다. 커널 또는 두 번째 단계의 부트 로더를 해당 코드에서 메모리로로드 한 다음 해당 코드로 이동해야합니다 (CPU를 32 비트 보호 모드로 전환해야 할 수도 있음). 예를 들어

(NASM) : 부트 로더의 작업 인공 고관절

BITS 16 

; Your assembly code here (510 bytes max)... 
jmp $ 

; Fills the remaining space with 0 
times 510 - ($ - $$) db 0 

; Boot signature 
dw 0xAA55 
+0

+1 좋은 답변입니다. – Tronic

+0

나는 공부하고 성공적으로 컴퓨터 조직 및 어셈블리 언어의 내 과정을 지 웠지 만 위의 코드를 이해하지 못합니다 .. 부분 어셈블리 언어와 부분적으로 다른 것 ..어셈블리 언어의 어떤 종류인지 말해 줄 수 있습니까? 또한 몇 권의 책을 추천 해주십시오. – sp3tsnaz

+0

플러스 또 다른 질문이 있습니다 .. 내가 다른 사이트에서 꽤 좋은 설명과 부트 로더 코드를 가지고 ..하지만 위의 지침을 컴파일하지 않고 직접 실행하는 방법을 이해하지 못하겠습니까? 또한 일단 내 작은 OS를 성공적으로 부팅 한 후에는 운영 체제처럼 실행할 수 있도록 컴파일러를 어떻게 추가 할 수 있습니까? 예를 들어 윈도우가 부팅 할 때, asm 명령이 아닌 미리 설치된 작업 프로그램이 있습니다. 컴파일해야합니까? 어떻게 된거 야? 설명 해주십시오. – sp3tsnaz

2

. 부트 로더는 하드 디스크의 처음 512 바이트에 있어야합니다. 이 위치는 MBR (마스터 부트 레코드)이라고

  1. 미디어가 MBR을 포함하는 경우는 바이오스 부하를 확인

    . MBR의 마지막 2 바이트로 존재해야하는 MBR 서명 0xAA55를 확인합니다.
  2. 그런 다음 BIOS는

  3. 그런 다음 부트 로더가 실제로 파일 시스템을 읽고, 메모리에 커널 인을로드하는 일이 주소 0x7C00에서 RAM으로 부트 로더를로드합니다.

  4. 보통 512 바이트로 모든 코드에 들어갈 수 없으므로 2 차 부트 로더가 있습니다.

  5. 기본 부트 로더가 보조 부트 로더를로드합니다.

  6. 보조 부팅 로더가 IDT 및 GDT (Interupt 벡터 테이블 및 글로벌 설명자 테이블)를로드합니다. A20 게이트가 보호 모드로 이동할 수있게합니다.

  7. 2 차 부트 로더는 리눅스 커널 v0.01 (첫 번째 버전)을 다운로드 할 수 있습니다 자세한 내용은 커널 코드

로 이동 한 후, 디스크에서 메모리로 32 비트 커널을로드합니다. 그것이 어떻게 이루어 졌는지보십시오. 놀랍게도 파일 시스템을 읽는 코드 + 보호 모드로 이동하는 코드는 512 바이트의 코드에 맞습니다.

관련 문제