본문 바로가기

개발일지

[OS개발] 10. 64비트 모드로 전환하자

지금 다 책대로 했는데 아래 오류가 남

 

디스크 이미지를 못불러 온다는데, 위에 bin 파일까지 모두 정상적으로 빌드는 완료 되었다.

 

imagemaker.c 파일이 문제인 것 같은데..

 

근데 신기하게 c 파일을 계속 수정해도 똑같은 에러가 발생한다. 심지어 에러 메시지도 수정했는데

 

뭔가 makefile은 캐시같은걸 남기나 해서 검색중..

 

그게 아니라 이전 챕터에서 내가 utility 파일 하위에 makefile을 만들지 않아서 그랬음.. 빌드할때 꼬였음

 

 

 

이제 빌드는 모두 성공하는데 무한 재부팅이 된다...

 

화면 기록 2022-10-03 오전 12.48.22.mov
5.60MB

 

 

비슷한 문제 질문

https://stackoverflow.com/questions/69573387/switch-to-32-bit-protected-mode-causes-qemu-to-restart-in-a-loop

 

Switch to 32-bit Protected Mode causes QEMU to restart in a loop

boot.asm: [org 0x7c00] [BITS 16] boot: mov bp, 0x9000 ; set the stack mov sp, bp mov bx, MSG_REAL_MODE call print_string call switch_to_pm jmp $ %include "print/pri...

stackoverflow.com

 

kSwitchAndExecute64bitKernel 만 주석처리하면 정상 동작한다 (물론 64비트 모드 전환 하는것은 아니지만)
 
 

[221009]

https://forum.osdev.org/viewtopic.php?f=1&t=43490 

 

OSDev.org • View topic - QEMU OVMF kernel stuck in reboot loop. Works on Legacy Bios

wireboy5 wrote: I have a very simple higher half long mode kernel. Higher half? This address is nowhere near the higher half. Addresses have 64 bits in long mode. While you could choose any canonical address in the higher half, I recommend something at or

forum.osdev.org

-d int -no-repeat 옵션을 넣어서 진짜 에러 로그를 확인했다.

 

진짜에러 

 

진짜에러.asm
0.02MB

 

64비트 전환 함수를 주석처리해서 동작한 로그랑 비교해보니, 426번째 라인이 달랐다.

 

64비트. 전환. 에러로그일때 - Servicing hardware INT=0x08
64비트 주석처리. 정상동작 - Servicing hardware INT=0x0e

이 부분이 달랐다.

 

참고( 그냥 블로그 재밌어서 링크 검): https://devsdk.github.io/ko/categories/#development

 

Category Archive

Development and Tech blog

devsdk.github.io

 

일단 ModeSwitch.asm의

; jmp 0x08:0x200000
 
를 주석처리하니 정상동작. 여기서 시작하자.
 
 
 
 

결론

 
허탈하다... 책을 다시 찬찬히 읽어보니 04/utility/00ImageMaker에서 빌드된 ImageMaker 실행파일을 최상단에 올려서 사용하라고 되어있다. 
 
맞다.. 이래야 빌드된 ImageMaker를 사용하게 되는데
 
기존에 나는 자연스레 전체 빌드 돌면서 당연히 ImageMaker를 사용하는줄 알았는데 그게 아니었다.
실제로 root makefile 보니까 유틸리티 빌드 하기 전에 진짜 소스코드 bin 파일을 생성하네..
 
하........ 책을 제대로 안 읽고 코드만 따라친게 원인이었다. 젠장
 
 
아무튼, 드디어 64비트로 전환이 완료되었다!!!!
 
이제 여기까지 PART2가 완료되었는데, 다시 처음으로 돌아가서 맥에서 세팅부분 + 이론적인 내용도 정리해서 올리려고한다.
 
아이신나~