문제

나는 나 자신을 위해 부트 스트랩과 커널을 쓰고 있으며 부트 스트랩과 커널은 CD-R에서 화상을 입고 CD- 라이브로 작동합니다. Linux CD-Live가 아니거나 다른 것이 아니며 전적으로 내 부트 로더 및 커널입니다. 나는 다른 booloaders (즉, 그루브)를 사용하고 싶지 않으므로 사용하라고 제안하지 마십시오.

내 질문은 다음과 같습니다. 부트 로더 ASM 코드에서 커널과 커널 항목을 RAM에로드하고 싶습니다. CD-ROM에서 (하드 디스크 또는 플로피 디스크가 아님), 커널이 CD-ROM (섹터 번호)에있는 위치를 알고 있다고 가정합니다. 내가 아는 한 int 0x13, ah = 02h를 사용해야하는데, 이는 드라이브에서 RAM까지 섹터를 읽습니다. 이 인터럽트 서비스를 사용하려면 Bellow : Parameters : AH 02H AL Sectors Count CX 트랙 + 섹터 / 비고 DH 헤드 DL 드라이브 ES : BX 버퍼 주소 포인터를 참조하십시오.

내 문제는 DL과 DH.in에 관한 것입니다. 1st 하드 드라이브를 읽을 수있는 순서는 80h로 설정하거나 플로피 디스크의 경우 00h로 설정할 수 있습니다. 그러나 CD-ROM에서 읽고 싶고 DH와 DL에 어떤 값을 사용해야하는지 모르겠습니다.

하기 위해 CD-ROM에서 읽으십시오 몇 개의 부문 램에 올바른 인터럽트 (int 0x13)입니까? 그렇다면 DH와 DL에 어떤 값을 넣어야 해야하는지.

안부, 가난한 사람.

도움이 되었습니까?

해결책

BIOS가 CD에서 부팅 섹터를로드하려면 "엘 토리 토" 기준.

일단 사용하면 두 가지 옵션이 있습니다
ㅏ. 에뮬레이션 - BIOS는 플로피 또는 하드 드라이브를 모방하며 장치 00 또는 장치 80을 사용하여 int13 호출을 통해 커널을 읽을 수 있습니다.
비. 장치는 에뮬레이션되지 않으며 Int13 ExtendedRead 기능을 사용하여 CD에서 직접 읽을 수 있습니다.

이것이 어떻게 수행되는지 보려면 Linux "Irlinux"로더를보십시오. 분리 .ASM

질문에 대한보다 구체적인 출발점을 제공하려면 El Torito Spec, 섹션 5.3 :

Once the system jumps to segment:0, the program can retrieve its boot
information by issuing INT 13, Function 4B, AL=01.  After the boot process
has been initiated the INT 13 Extensions (functions 41-48) will access the
CD using 800 byte sectors and the LBA address provided to INT 13 is an
absolute sector number. This gives any program running in no emulation mode
the ability to locate the boot catalog, and any other information on the
CD, without providing a device driver.
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top