구름IDE로 실습용 OS 개발 환경 구축하기

컴퓨터공학과 학부생이라면 운영체제는 필수로 수강해야 하는 수업입니다. 이론을 빠삭하게 공부하는 것도 좋지만, 실제로 운영체제가 어떻게 돌아가는지 만져보면서 공부하는 게 중요하다고 생각해요.

OS 개발 환경을 구축하라고 하면 어디서부터 시작해야 할지 막막하실 텐데요. 그런 분들을 위해 구름IDE로 실습용 운영체제 개발 환경을 구축해 보려고 합니다. 아주 간단해서 놀라실 거예요.

구름IDE를 사용하면 좋은 점

원래는 다음과 같은 단계를 거쳐 OS 개발 환경을 구축해야 했습니다.

  1. 리눅스 환경 설치
  2. 환경 변수 설정
  3. 컴파일러, NASM, QEMU와 같은 패키지 설치
  4. IDE 설치 등

시작부터 진이 빠지죠? 구름IDE를 사용하면 환경 구축에 대한 부담을 덜 수 있습니다. 구름IDE는 리눅스 환경(우분투)을 제공하고 있기 때문에 패키지 설치만 하면 개발 환경을 구성할 수 있어요.

내 로컬 사양을 신경 쓸 필요가 없다는 것도 장점이에요. 구름IDE에서 빌드하고 실행하는 모든 작업들은 서버 자원으로 돌아가기 때문이죠. 깔끔한 로컬 환경을 유지할 수 있습니다. 웹 기반 클라우드 개발 환경이라 어디에서든 개발 환경을 불러오거나 공유할 수 있어 장소에 구애 받지 않고 작업할 수 있어요.

이제 본격적으로 OS 개발 환경을 만들어 볼게요. 참고로 제가 소개할 운영체제 개발 환경은 ‘64비트 멀티코어 OS 원리와 구조’(한승훈 저)의 MINT64입니다.

MINT64 OS 환경 구축

  1. 구름IDE 로그인 후 ‘새 컨테이너’ 선택
  2. C/C++ 소프트웨어 스택 선택
  3. 운영체제 개발 환경을 위한 패키지 설치
apt update && apt install -y \\
    gcc-multilib \\
    g++-multilib \\
    binutils \\
    bison \\
    flex \\
    libc6-dev \\
    libtool \\
    make \\
    patchutils \\
    libgmp-dev \\
    libmpfr-dev \\
    libmpc-dev \\
		nasm \\
		qemu-kvm

끝입니다. 정말 간단하죠?

이제 간단한 부트로더를 작성해 보면서 잘 돌아가는지 확인해 볼게요. 부트로더를 작성하기 위해 ‘64비트 멀티코어 OS 원리와 구조’ 4장 내용을 참고해 세 파일을 적어보겠습니다.

  • 00.BootLodaer/BootLoader.asm
[ORG 0x00]
[BITS 16]

SECTION .text

jmp 0x07C0:START

START:
    mov ax, 0x07C0
    mov ds, ax
    mov ax, 0xB800
    mov es, ax

    mov si, 0

.SCREENCLEARLOOP:
    mov byte [ es: si ], 0
    mov byte [ es: si + 1 ], 0x06

    add si, 2

    cmp si, 80 * 25 * 2
    jl .SCREENCLEARLOOP

    mov si, 0
    mov di, 0

.MESSAGELOOP:
    mov cl, byte [ si + MESSAGE1 ]

    cmp cl, 0
    je .MESSAGEEND

    mov byte [ es: di ], cl

    add si, 1
    add di, 2

    jmp .MESSAGELOOP

.MESSAGEEND:
    jmp $

MESSAGE1:
    db "Hello World!", 0

times 510 - ( $ - $$ ) db 0x00

db 0x55
db 0xAA
  • 00.BootLoader/makefile
all: BootLoader.bin

BootLoader.bin: BootLoader.asm
	nasm -o BootLoader.bin BootLoader.asm

clean:
	rm -f BootLoader.bin
  • makefile
all: BootLoader Disk.img

BootLoader:
	@echo
	@echo ========== Build Boot Loader ==========
	@echo

	make -C 00.BootLoader

	@echo
	@echo ========== Build Complete =============
	@echo

Disk.img: 00.BootLoader/BootLoader.bin
	@echo
	@echo ========== Disk Image Build Start ======
	@echo

	cp 00.BootLoader/BootLoader.bin Disk.img

	@echo
	@echo ========== All Build Complete ==========
	@echo

clean:
	make -C 00.BootLoader clean
	rm -f Disk.img

아래의 명령어를 터미널에 입력하면 반가운 부트로더 화면이 나타나게 됩니다.

# run
cd /workspace/[CONTAINER_NAME]
make
qemu-system-x86_64 -L . -m 64 -drive file=Disk.img,format=raw -localtime -M pc -curses

# stop
ESC-2
q
MINT64 운영체제 실행 모습

TIP!💡

구름IDE에는 split 기능이 있습니다. 오른쪽 화면에는 터미널 창(왼쪽 상단 위 메뉴바의 창 → 새 터미널 창), 왼쪽 화면에는 코드 창을 배치하면 보다 편안하게 작업하실 수 있어요.

F1을 누르면 파일을 검색해 찾을 수 있고, Alt + H의 검색 기능으로 함수와 변수를 찾을 수 있습니다. 빌드 과정과 실행을 구름IDE 명령어 탭으로 저장해두고 쓰시면 더욱 좋아요.

# build
cd volumes
make
make clean

# run
cd volumes
qemu-system-x86_64 -L . -m 64 -drive file=Disk.img,format=raw -localtime -M pc -curses

xv6 OS 환경 구축

교육 목적으로 만든 OS인 pintos와 xv6도 구름IDE에 올려서 확인할 수 있어요. xv6를 예로 들어볼까요?

  1. 구름IDE 로그인 후 ‘새 컨테이너’ 선택
  2. 템플릿 탭 → Git → Anonymous → Repository URL에 https://github.com/mit-pdos/xv6-public.git 입력
  3. C/C++ 소프트웨어 스택 선택
  4. 운영체제 개발 환경을 위한 패키지 설치
apt update && apt install -y qemu

xv6를 구동시키기 위해 하단의 명령어를 터미널에 입력하면 xv6 화면을 보실 수 있습니다.

# run
cd /workspace/xv6-public
make qemu-nox

# stop
CTRL-A + X
XV6 실행 모습

구름IDE로 실습용 운영체제 개발 환경 구축하는 법 어렵지 않으시죠?

구름IDE에서는 파이썬부터 시작해서 Node.js, Spring, Tensorflow 등 여러 환경을 쉽게 구축할 수 있습니다. 여러분만의 개발 환경을 구축하시는데 이 글이 조금이라도 도움이 되었기를 바랍니다.🙂

Text Teo Edit Sunny Design Lil


OS 개발 환경 구축
어렵지 않아요

Posted by
goorm

ANYONE CAN DEVELOP