First.S

LKSAS

Jump to: navigation, 찾기
  • BIOS가 MBR을 읽어서 0x7c00에 저장하고 제어를 0x7c00으로 옮긴다.
  • 현재 CS는 0x7c00이고 DS, ES, SS 역시 0x7c00으로 지정한다.
  • 스택 포인터를 0x7c00 + 2048로 지정한다.
  • 화면에 'L'을 출력한다.
  • External parameter 여부를 검사한다. (이것이 어떻게 사용되는지는 알아내지 못함)
  • MBR에 있던 boot sector가 로딩된 메모리의 바로 뒷 부분의 오프셋을 bx 레지스터에 저장한다. 이 영역은 앞으로 디스크에서 LILO을 읽어들일때 사용할 버퍼로 사용된다.
  • 하드디스크 개수를 확인한다.
  • 하드디스크에서 MBR을 읽어와서 LILO volume S/N를 체크해서 자기 자신이 맞는지 확인한다. 이 과정은 LILO를 찾을때까지 루프를 돌면서 모든 디스크를 확인한다.
  • LILO 인스톨 당시 지정된 second.s의 disk absolute offset를 확인한다. second.s는 리눅스의 /boot 디렉토리 안에 있기 때문에 시스템 설치 당시 파티션을 어떻게 만들었냐에 따라 디스크상의 위치(absolute offset)가 달라진다.
  • 0x8800으로 second.s의 앞 부분을 로드해서 LILO 매직스트링이 있는지 확인한다.
  • 나머지 second.s를 loop를 돌면서 모두 로드한다.
  • 0x7c00에 로드된 first.s와 0x8800에 로드된 second.s의 signature(LILO 문자열)을 비교한다.
  • 화면에 'I'를 출력한다.
  • far return을 사용해서 0x8800으로 점프해서 제어를 second.s로 옮긴다.