2014-07-04 3 views
0

부트 로더와 커널이 모두 어셈블리로 작성되었습니다.VirtualBox에서 커널 실행

이제이 파일에 2 가지 문제가 있습니다. 부트 로더의 크기가 512B이므로 VirtualBox에서 부트 로더의 .img 파일을 성공적으로 실행할 수 있습니다.

그러나 :

  1. 커널의 크기는 580B이며이 버추얼 플로피 드라이브에 의해 허용되지 않습니다. 어떻게 나올 수 있습니까? 그것은 VirtualBox에서 커널을 실행하는 것입니다.
  2. 부트 로더에서 어떻게 커널 부분으로 제어를 전송합니까?

그리고 Windows 7 환경입니다.

+0

누군가가 나를 여기에 응답 할 수있는 커널 코드로 이동할 수 있습니다? Plz! – user3803670

+0

플로피 이미지는 512 바이트 인 섹터 크기의 배수 여야합니다. 그리고 예고편 512 바이트 만 메모리에로드됩니다. 플로피 이미지의 나머지 부분을로드하는 코드를 작성해야합니다. –

답변

0

1)

miso my.iso -ab my.img 

MISO

를 사용하여 ISO 이미지를 확인 (사용 일 IMG 파일에 복사해야 복사/B)

2) 나는 완전히 이해하지 못했지만 가능한 한 내가 당신을 도울 것입니다. 커널에서 부트 로더 내부에 코드 부분을 호출하고 싶다고 생각합니다. 아시다시피, 호출하고 싶은 코드의 메모리 주소를 알아야합니다. 또는 .inc 파일을 사용하여 코드의이 부분을 호출 할 수 있습니다. 런타임에 커널이 부트 로더의 메모리 세그먼트에 액세스 할 수있게하려면,

[Bits 16] 
[ORG 0x7c00] 
start: 
... 
times 256-($-$$) db 0 
blbla:;I know that is in the [0x7d00] 
jmp $ 
times 256-($-$$) db 0 
dw 0xAA55 

나에게 질문을 자유롭게 : 내 첫 번째 조언처럼 당신이 좋아 호출 할 코드의 메모리 ADRESS을 알고있다 [email protected] 첫 번째 부분에 대한

0

는에 줄을 추가 커널 코드의 끝 -
...

no_of_sectors equ 8
times 512 * no_of_sectors db 0

섹터에 따라 크기를 고정하는 수를 변경하십시오. 초

- 만약 인터럽트 13H를 사용하여 커널을 메모리로로드 할 수

loading_kernel :
MOV BX, 0x1000 인; where_to_load_kernel
MOV DL을, 128; DRIVE_NUMBER 플로피
MOV 공통으로 HDD 128 0 dh, 0; head_no - 시작시 0
mov ah, 0x02; 섹터 읽기 BIOS에서 작동
mov al, 0x12
mov cx, 0x0002; 읽을 섹터 수가 없음
int 13h; BIOS 인터럽트 - 유일한 모드에서

JC의 loading_kernel를 사용합니다 오류가 발생하는 경우
JMP가 0x1000을 다시 시도, 당신은 단순히

관련 문제