본문 바로가기

Project/OS

OS 개발 8챕터 8챕터이다. 이번에는 A20 게이트를 이용해서 1MB 이상의 주소에 접근할 수 있도록 하고, IA-32e 모드로 넘어가기 위한 64비트 커널을 올릴 영역을 검사하는 부분을 만들었다. 그렇게 큰 어려움은 없었는데 빌드를 해서 부팅시켜 보면 이상하게 자꾸 글자가 중간에 짤리는 오류가 있었다. 그래서 이것저것 다 찾아보다가 저번에 만들어 놓은 ImageMaker가 오류라는 것을 알았다. 나는 책대로 소스를 잘 짰는데 어디가 오류인가 하고 봤더니 책 오탈자 리스트에서 lPosition = lseek( iTargetFd, 5, SEEK_SET ); 을 lPosition = lseek( iTargetFd, (off_t)5, SEEK_SET ); 라고 써야 한다는 것이다. 그래서 (off_t)5로 바꾸고 다시 컴파일.. 더보기
OS 개발 7챕터 이번에는 C언어로 짠 커널을 직접 로드하여 실행하는 부분을 했다.일단 무사히 잘 끝냈는데, 책에 있는 소스를 직접 손으로 옮겨 적었더니 진짜 오류가 장난 아니게 났다... 진짜 OS 목표 중 하나가 소스는 반드시 복붙 안하고 손으로 치기 였는데 고작 200줄 정도 따라 쳤는데도 오타만 6~7개가 났다.. 뒤에 막 파일시스템 만들고 하면 2000줄 정도 되던데 정말 큰일났다.. 더 웃긴건 오타가 너무 황당하다는 거였다. 오타 종류를 좀 적자면 확장자의 .을 ,로 적은거랑 목적 파일의 .o를 .0으로 적고, $를 안붙인다던가 objcopy 프로그램을 사용해야 되는데 평소 rop할 때의 버릇이 나와서 objdump 프로그램을 사용해서 또 오류 나고 ,를 m으로 적고 이것들 등등 진짜 여러가지 황당한 오류가 너.. 더보기
OS 개발 6챕터 방학동안 OS를 개발해 오던 스터디가 개학을 하면서 터지고, 잠깐동안 OS 개발을 멈췄다가 다시 OS 개발의 중요성을 느끼고 6주차 부터 다시 만들기 시작했다.6주차 내용은 리얼 모드에서 보호 모드로 전환하는 부분이다. 직접 cr0 레지스터랑 GDT를 설정하니까 되게 신기했었다. 다만 세그먼트 디스크립터에서 왜 굳이 Base 주소 비트를 여기저기 나눠놨는지를 모르겠다.. 참 이상하다. 더보기
OS 개발 및 공부 스터디 5주차 보호되어 있는 글입니다. 더보기
OS 개발 및 공부 스터디 4주차 보호되어 있는 글입니다. 더보기
OS 개발 및 공부 스터디 3주차 보호되어 있는 글입니다. 더보기
OS 개발 및 공부 스터디 2주차 보호되어 있는 글입니다. 더보기