본문 바로가기

OS 개발 12챕터 오늘은 GDT를 재설정 하고 TSS, IDT를 추가했다. IDT는 시스템 콜 공부하면서 조금 공부해 봤었는데 이번 기회에 확실하게 다시 알 수 있는 기회가 되어 좋았다. 앞으로는 문법 오류보다는 논리 오류에 좀 더 신경을 써서 코딩을 해야겠다.원래 알고 있던 지식과 새로 공부해서 알게된 지식이 조합을 잘 이루어 조금씩 탄탄해 지는 것 같다. 더보기
OS 개발 11챕터 오늘은 드디어 처음 IA-32e 모드로 들어와서 키보드 디바이스 드라이버를 만들었다. 이번 챕터에서는 느낄 수 있던 점이 몇 가지 있었다. 먼저 키보드와 마우스가 컴퓨터와 어떻게 통신을 하는지와 scan code라는 것에 대해서 확실하게 알았다. 그리고 예전에 Reversing.kr의 Windows Kernel 문제를 풀 때에는 단순히 커널 디버깅만 하면서 엄청 노가다를 해서 풀었었다. 그 때에는 왜 키보드 입력은 0x60 포트로 받아 들이는 지도 몰랐었고 scan code의 존재도 몰랐었다. 그 때는 그냥 아 커널은 이런가 보다 하면서 scan code도 직접 수작업으로 노가다 해서 테이블 만들어 풀었었는데 지금 생각해 보니까 정말 많은 노가다 였던 것 같다.. 머리가 나쁘면 몸이 고생한다는 말이 역시.. 더보기
OS 개발 10챕터 드디어 오늘 IA-32e 모드로 들어갔다. 지금부터 키보드 드라이버도 만들고 멀티 쓰레드 등등 이것 저것 할 것 같다. IA-32e 모드로 전환할 때는 약간 복잡해서 여러번 책을 읽어 봤었다. 그리고 또다시 오류와 맞닥뜨렸다. 이 오류는 진짜 너무 오랬동안 찾던 오류였다. 크게 세 가지가 있었는데 첫 번째는 makefile에 문제가 있었다. 64비트용 makefile을 만들 때 32비트 makefile을 가져와서 수정하는 방식으로 했는데 중간에 수정하지 못한 부분이 있었던 것이다. 그렇게 한참을 찾고 난 뒤에 다시 빌드해서 부팅을 했는데 계속해서 리부팅만 하는 거였다. 삽질한 결과 문제는 또 ImageMaker에 있었다. 소스를 업데이트 하면서 중간에 빠뜨린게 또 있어서 섹션이 제대로 정렬이 안됬었나보다.. 더보기