분류 전체보기
-
Virtualbox [작성중]카테고리 없음 2023. 7. 2. 01:36
글의 참고 - https://www.virtualbox.org/wiki/Linux_Downloads 글의 전제 - 밑줄로 작성된 글은 강조 표시를 의미한다. - 그림 출처는 항시 그림 아래에 표시했다. 글의 내용 - 설치 : Virtualbox는 수동으로 설치해서 딱히 좋은 점이 없다. 그냥 installer를 다운받아서 설치하는게 가장 편하다. 현재 2023-07-02를 기준으로 7.0.8이 최신인 듯 하다. 나는 호스트 OS가 우분투라서 `Ubuntu 18.04`를 다운받았다. : 이 페이지 아래로 내려가면 수동 설치 방법이 있는데, 한 번더 말하지만 QEMU나 BOCHS와 달리 Virtualbox는 커맨드라인으로 다운받아서 좋은 점이 전혀없다. 그러니, 인스톨러를 받아서 설치하도록 하자. - 실행 ..
-
에러 사항 2카테고리 없음 2023. 6. 29. 15:32
글의 참고 글의 전제 - 밑줄로 작성된 글은 강조 표시를 의미한다. - 그림 출처는 항시 그림 아래에 표시했다. 글의 내용 - relocation truncated to fit: R_X86_64_32 against `.rodata'(미해결) : 해결은 했지만, 아직 원인은 찾지 못했다. 일단 `-fPIC` 옵션을 통해서 해결을 했다. - 64비트 전환 이후 모든 변수 초기화?(미해결) : 64비트 전환이후, 아래의 코드로 64비트 진입을 출력하려고 했는데, 출력이 안됨. #include "io.h" int main(); int main() { kprintf("64bit Kernel Start!!!\n"); while(1); } : 디버깅 해보니, vga_text_bp, vga_text_cp 에 0xb80..
-
[x86] Unreal mode프로젝트/운영체제 만들기 2023. 6. 28. 18:57
글의 참고 - https://en.wikipedia.org/wiki/Unreal_mode - https://wiki.osdev.org/Unreal_Mode - https://riptutorial.com/x86/example/19574/unreal-mode 글의 전제 - 밑줄로 작성된 글은 강조 표시를 의미한다. - 그림 출처는 항시 그림 아래에 표시했다. 글의 내용 - 언리얼 모드를 사용하는 이유 : 리얼 모드에서 1MB이상에 보호 모드 커널을 로드하고 싶은 경우 사용한다. 이렇게 생각할 수 도 있다. 보호 모드를 `부트 로더 + 커널`로 나누고, 부트 로더를 1MB 아래에 로드하고, 32비트 부트 로더에서 32비트 커널을 로드하면 안될까? 당연히 그게 가장 좋다고 생각된다. 그러나, 드라이버 드라이버 ..
-
디스크 이미지 [작성중]카테고리 없음 2023. 6. 28. 02:13
글의 참고 - - https://en.wikipedia.org/wiki/Floppy_disk - https://en.wikipedia.org/wiki/QEMU#Supported_disk_image_formats - https://en.wikipedia.org/wiki/IMG_(file_format) 글의 전제 - 밑줄로 작성된 글은 강조 표시를 의미한다. - 그림 출처는 항시 그림 아래에 표시했다. 글의 내용 - CD-ROM 이미지 : CD-ROM 이미지는 ISO9660 파일 시스템 포맷을 따르기 때문에, 그냥 로우 디스크 파일과는 다르게 봐야 한다. 즉, CD-ROM 디스크 드라이버는 기본저으로 ISO9660 파일 시스템 포맷으로 프로그래밍 되어 있기 때문에, *.ISO 확장자를 따르는 이미지를 전달해..
-
[x86] 멀티 부트프로젝트/운영체제 만들기 2023. 6. 27. 17:20
글의 참고 - https://www.gnu.org/software/grub/manual/multiboot2/multiboot.html 글의 전제 - 밑줄로 작성된 글은 강조 표시를 의미한다. - 그림 출처는 항시 그림 아래에 표시했다. 글의 내용 - Overview : 멀티 부트는 부트 로더와 운영 체제 사이의 인터페이스를 정의한 스펙이다. 멀티 부트2에서 중요시 다루는 3가지 요점은 아래와 같다(참고로, 멀티 부트는 스펙 1, 2로 나뉘어져 있다. 당연히 2가 최신이다) 1" 부트 로더 입장에서 본 OS 이미지 포맷 2" 부트 로더가 운영체제를 시작시킬 때, 머신의 상태 3" 부트 로더가 운영체제에게 파라미터를 던질 때 파라미터의 포맷 - 운영체제 이미지 포맷 : 운영체제 이미지 파일은 대개 표준 32..
-
BOCHS프로젝트/운영체제 만들기 2023. 6. 24. 22:27
글의 참고 - https://bochs.sourceforge.io/doc/docbook/user/bochsrc.html#BOCHSOPT-FLOPPYAB 글의 전제 - 밑줄로 작성된 글은 강조 표시를 의미한다. - 그림 출처는 항시 그림 아래에 표시했다. 글의 내용 - 설치 : 리눅스 배포판에서는 기본적으로 아래의 명령어로 설치가 가능하다. " sudo apt-get install bochs " sudo apt-get install bochs-x : 그러나 이건 훼이크다. 나는 위에 처럼 설치하는 걸 추천하지 않는다. BOCHS는 `GDB`와 BOSCH가 자체적으로 제공하는 `인터널 디버깅` 기능 중에서 하나만 선택해야 한다. 기본적으로 `인터널 디버깅`이 선택이 되는데, GDB로 설치해도 상관은 없다. ..
-
Long mode프로젝트/운영체제 만들기 2023. 6. 20. 18:56
글의 참고 - https://en.wikipedia.org/wiki/X86-64 - https://os.phil-opp.com/entering-longmode/ - https://wiki.osdev.org/Setting_Up_Long_Mode 글의 전제 - 밑줄로 작성된 글은 강조 표시를 의미한다. - 그림 출처는 항시 그림 아래에 표시했다. 글의 내용 - 사전 작업 : 롱 모드 진입을 위해서는 당연히 머신이 64비트를 지원해야 한다. 즉, QEMU에서 64비트를 지원하는 머신(`qemu-system-x86_64`)을 사용해야 한다. - 진입 절차 : 진입 자체는 쉽다. 레지스터의 비트 몇 개만 건들면 되지만, 문제는 페이징이다. 일단 스펙을 봐야한다. : IA-32e 모드 진입 전, 운영 체제는 반드시..
-
[리눅스] - printf & printk프로젝트/운영체제 만들기 2023. 6. 19. 01:59
글의 참고 - https://wiki.osdev.org/Formatted_Printing - https://gcc.gnu.org/onlinedocs/gcc/Common-Function-Attributes.html#index-format-function-attributehttps://gcc.gnu.org/onlinedocs/gcc-3.2/gcc/Function-Attributes.html - https://en.wikipedia.org/wiki/Control_character - https://stackoverflow.com/questions/15549893/modify-printfs-via-macro-to-include-file-and-line-number-information - https://stac..