본문 바로가기

프로그래밍 이야기

GeekOS 과제를 위한 환경설정

에전 OS과목에서 과제로 악명이 높았던 GeekOS,
다행이도 제가 수업을 들을 땐 이게 없어지고 그냥 이론만 배우는 수업으로 바뀌었는데,
4학년 1학기 시스템 프로그래밍 과목을 들으면서 GeekOS 0번과제가 필수과제로 나오는바람에 -_-;
오래간만에 안드로메다로 빠져살고 있습니다.

사실 Geek OS라는 것 자체도 생소해서 힘들었지만, 다른 과제와는 다르게 환경설정을 하는 것 자체부터(...) 아주 대놓고 속을 썩이더군요. (아직 과제 구현은 시작도 안했는데...ㅠㅠ) 그래서, 간단하게 환경설정 방법에 대해 정리해 보려 합니다.

개발환경 설정은 크게 다음과 같은 단계로 나뉩니다.

1. 리눅스 설치 (응?)
2. bochs(GeekOS 실행을 위한 에뮬레이터) 설치
3. nasm (Netwide assembler) 설치
4. GeekOS 다운로드 및 환경설정
5. GeekOS 실행 테스트 


각 단계별로 자세한 내용을 알아보겠습니다.

1. 리눅스 설치


리눅스를 항상 쓰지 않는 이상, 일반적으로 가상머신을 통해 사용할 겁니다. 적절한 가상머신에 깔고 진행하면 됩니다.
저는 우분투 11.10으로 진행했습니다. 버전은 큰 관계가 없지만, 32bit로 설치해야 합니다.

리눅스 설치야 다들 잘 하실 거라 믿고(..) 별다른 부가설명은 하지 않겠습니다.


2. bochs 설치



bochs는 GeekOS 실행을 위해 필요한 에뮬레이터입니다. (홈페이지: http://bochs.sourceforge.net/)
홈페이지에서 설치 파일을 다운로드할 수 있지만, 우분투에서는 더 간단하게 설치할 수 있습니다.
터미널에서 다음 명령어를 입력합니다. (bochs, bochs-x 두개를 설치)

sudo apt-get install bochs bochs-x


다음과 같은 화면이 나오면서 bochs가 설치됩니다.


 터미널에서 bochs를 입력했을 때 다음과 같은 화면이 나오면 제대로 설치된 것입니다.



3. nasm 설치



GeekOS 컴파일에 필요한 어셈블러입니다. (홈페이지 : http://www.nasm.us/)
최신버전은 호환성에 문제가 있어 2.08대 버전을 사용해야 합니다. 홈페이지로 들어가 Download 링크를 누른 후, 2.08 디렉토리의 linux 디렉토리에서 nasm-2.08-1.i386.rpm을 다운로드합니다.


설치 패키지를 다운로드 한 후, 우분투에서 설치 가능한 패키지로 변환하기 위해 alien을 사용합니다. alien은 다음 명령어로 설치할 수 있습니다.

sudo apt-get install alien


 alien을 설치했다면, 다음 명령어를 입력하여 다운로드한 *.rpm 패키지를 *.deb 패키지로 변환합니다.

sudo alien -k nasm-2.08-1.i386.rpm

 
 변환이 완료되면 다음과 같이 nasm-2.08-1_i386.deb 파일이 생성됩니다.

 
다음, 생성된 설치 패키지를 설치합니다.

sudo dpkg -i nasm-2.08-1_i386.deb

 
nasm 설치가 완료되었다면, 이제 GeekOS를 다운로드하도록 하죠.


4. GeekOS 다운로드 및 환경설정

 


이제 드디어 GeekOS를 다운로드 할 차례입니다. 홈페이지 (
http://geekos.sourceforge.net/)에서 파일을 다운로드하거나, 이 링크 (http://sourceforge.net/projects/geekos/geekos-0.3.0.zip)를 통해 바로 파일을 다운로드합니다.

파일을 다운로드한 후, 적절한 곳에 압축을 해제합니다. 압축을 해제한 후, GeekOS관련 스크립트를 실행할 수 있도록 환경변수에 다음을 추가합니다. 환경변수를 수정하기 위해 홈 디렉토리에서 다음 명령을 입력하여 .bashrc를 엽니다. (여기서는 Gedit을 사용하여 .bashrc를 열었으며, vi나 다른 편집기를 사용해도 무방합니다)

gedit .bashrc


.bashrc를 연 후, 하이라이트된 부분을 추가해줍니다.
이 때, GEEKOS_HOME은 자신이 GeekOS 파일을 압축 해제한 곳의 경로를 입력해야 합니다. 저는 홈 폴더의 /sp 디렉터리에 압축을 풀었기에 다음과 같이 설정했습니다.


이제 GeekOS를 시작하기 위한 절차는 모두 끝났습니다.
첫번째 과제(Project0)을 시작하기 위한 준비를 할 차례입니다. 프로젝트를 시작할 디렉토리로 이동한 후, startProject 명령어를 사용하여 새 프로젝트를 위한 준비를 합니다. 여기에서는 GeekOS관련 파일이 있는 폴더에서 프로젝트를 시작합니다. 다음 명령어를 사용하여 0번 프로젝트를 위한 폴더를 생성합니다.

startProject project0 ./src


 다음과 같이 project0 폴더에 프로젝트에 필요한 파일들이 생성된 것을 확인할 수 있습니다.



 이제, 마지막으로 GeekOS 실행을 위해 몇몇 설정을 바꿔야 합니다. build 디렉토리로 이동한 후, Makefile 을 열어 148, 149번째 줄을 다음과 같이 수정합니다.

148줄: GENERAL_OPTS := -O -Wall $(EXTRA_C_OPTS)
-> GENERAL_OPTS := -O -Wall $(EXTRA_C_OPTS) -fno-stack-protector 

149줄: CC_GENERAL_OPTS := $(GENERAL_OPTS) -Werror
-> CC_GENERAL_OPTS := $(GENERAL_OPTS) #-Werror 

 
다음, .bochsrc를 연 후 다음 내용으로 대체합니다.

vgaromimage: file=/usr/local/share/bochs/VGABIOS-lgpl-latest
romimage: file=/usr/local/share/bochs/BIOS-bochs-latest

megs: 8
boot: floppy 

floppy_bootsig_check: disabled=0
floppya: 1_44=fd.img, status=inserted, write_protected=1
#floppya: 1_44=fd_aug.img, status=inserted

log: ./bochs.out
keyboard_serial_delay: 250
keyboard_paste_delay: 100000
#floppy_command_delay: 500
#vga_update_interval: 300000
#vga: extension=vbe, update_freq=1

vga: extension=vbe
#ips:  1000000
#cpu: count=1, ips=1000000, reset_on_triple_fault=1, ignore_bad_msrs=1, msrs="msrs.def"
#cpu: cpuid_limit_winnt=0

mouse: enabled=0
private_colormap: enabled=0
#i440fxsupport: enabled=0
#pci: enabled=1, chipset=i440fx
#newharddrivesupport: enabled=1

# Uncomment this to write all bochs debugging messages to
# bochs.out.  This produces a lot of output, but can be very
# useful for debugging the kernel.
#debug: action=report


이제 모든 준비가 끝났습니다. GeekOS를 빌드하고 실행해볼 차례입니다.
프로젝트 폴더에서 make 명령을 입력하여 빌드를 수행합니다. 아래는 빌드가 완료된 모습입니다.

 
터미널에서 bochs를 입력하면 bochs 에뮬레이터가 실행되면서 방금 빌드한 GeekOS가 실행되는 것을 확인할 수 있습니다.