1. 출처
1000줄로 운영체제를 직접 구현할 수 있다고 한다.
운영체제를 공부할 겸 한번 만들어 보자.
실제로 Linux의 0.01 version이 8413 줄에 불과했다고 하니 충분히 가능할 것 같다.
글에 따르면 완성된 OS에선 기본적인 context switching, paging, user mode, a command shell, disk device driver, file read/write operations in C 등을 할 수 있다고 한다.
이 과정에서 가장 어려운 부분은 ‘디버깅’이라고 한다.
구현되지 않은 printf 없이 디버깅하는 방법을 배워야 한다.
충분히 재미있고 의미 있는 시간이 될 것 같다.
2. 개발환경 구성
일전에 구축한 Proxmox에 Ubuntu 가상머신을 생성한다.
이유는 맥에 불필요한 의존성들을 설치하기 싫어서다.

VSCode의 Remote Development를 활용해서 SSH를 통해서 원격으로 개발한다.
Github에 새로운 Repo를 만든다.
/disk/*
!/disk/.gitkeep
*.map
*.tar
*.o
*.elf
*.bin
*.log
*.pcap
.gitignore를 추가한다.
3. 준비물
Ubuntu에 필요한 패키지를 설치한다.
sudo apt update && sudo apt install -y clang llvm lld qemu-system-riscv32 curl
clang: C 언어 컴파일러로, LLVM 프로젝트의 프론트엔드llvm: 컴파일러 인프라스트럭처 프로젝트로, 다양한 프로그래밍 언어를 지원lld: LLVM 프로젝트의 링커로, 오브젝트 파일을 실행 파일로 연결qemu-system-riscv32: RISC-V 32비트 아키텍처를 에뮬레이션 하는 시스템 에뮬레이터curl: URL을 통해 데이터를 전송하는 명령줄 도구
curl -LO https://github.com/qemu/qemu/raw/v8.0.4/pc-bios/opensbi-riscv32-generic-fw_dynamic.bin
Code language: JavaScript (javascript)
- OpenSBI : RISC-V 시스템의 부팅과 초기화를 담당하는 펌웨어