그냥 개발 및 잡담/OS 개발

[OS] Pintos 설치하기

pental 2020. 1. 16. 21:14

필자의 환경조건 )

Ubuntu 14.04 x86버전.

 

필자만 잘 따라하면 좋은 결과를 얻을 수 있을 것이다.

make 부분에서 오류가 나지 않으려면 gcc를 제대로 설치해야한다.

$ sudo apt-get install g++ xorg-dev ncurses-dev vim
$ sudo apt-get install gcc-4.4
$ sudo mv /usr/bin/gcc-4.4 /usr/bin/gcc

위 세가지 소스코드를 확실히 실행시켜야 한다.

자신이 원하는 위치에 dir를 하나 생성하고 pintos 파일을 받아온다.

$ cd /
$ sudo mkdir temp
$ wget http://www.stanford.edu/class/cs140/projects/pintos/pintos.tar.gz
$ tar xzf pintos.tar.gz

이렇게 함으로써 pintos파일을 받아 왔다.

필자는 Bochs 대신 Qemu를 사용할 것이다.

$ sudo apt-get install qemu

qemu 설치후 몇가시 환경 세팅을 해줘야 한다.

$ sudo vi ~/.bashrc
export PINTOSDIR=/temp/pintos
export PATH=$PINTOSDIR/src/utils:$PATH

마지막에 위 export 두줄을 넣어주고

$ sudo source ~/.bashrc

새로고침을 해준다. 위 구문을 치기 싫다면, 재부팅 또는 ssh를 껐다 키도록 하자.

$ sudo vi $PINTOSDIR/src/utils/Makefile
"LDFLAGS = -lm" -> IBS = -lm" 수정
$ sudo vi $PINTOSDIR/src/threads/Make.vars

"SIMULATOR = --bochs" 를 "SIMULATOR = --qemu" 로 바꿔준다.
마찬가지로 아래 항목도 바꿔준다

$ sudo vi $PINTOSDIR/src/userprog/Make.vars
$ sudo vi $PINTOSDIR/src/vm/Make.vars
$ sudo vi $PINTOSDIR/src/filesys/Make.vars
$ cd $PINTOSDIR/src/threads/
$ sudo make
$ cd $PINTOSDIR/src/utils/
$ sudo make
$ sudo vi $PINTOSDIR/src/utils/pintos

$sim = "bochs" if !defined $sim; -> $sim = "qemu" if !defined $sim; 로 수정 (Line : 103)

my $name = find_file ('kernel.bin'); ->
	my $name = find_file ($ENV{'PINTOSDIR'}.'/src/threads/build/kernel.bin');
수정 (Line : 259)
$ sudo vi $PINTOSDIR/src/utils/Pintos.pm

$name = find_file ("loader.bin") if !defined $name; ->
	$name = find_file ($ENV{'PINTOSDIR'}."/src/threads/build/loader.bin") if !defined $name;
수정 (Line : 362)
$ cd /usr/bin/
$ sudo ln -s qemu-system-x86_64 qemu

qemu 버전을 선택하기 위해서 위 명령어를 쳐준다.

 

이렇게만 하면 Power Off가 되지 않기 때문에 아래의 구문을 추가해준다.

$ sudo vi $PINTOSDIR/src/devices/shutdown.c

outw(0x604, 0x0|0x2000); (Line : 103 아래 추가)

다시 make 해줘야 하기때문에

$ cd $PINTOSDIR/src/threads/
$ sudo make clean; make
$ cd $PINTOSDIR/src/utils/
$ sudo make clean; make

반복해준다.

Prototype mismatch: sub main::SIGVTALRM () vs none at /temp/pintos/src/utils/pintos line 935.
Constant subroutine SIGVTALRM redefined at /temp/pintos/src/utils/pintos line 927.

이런 오류가 뜨는데 무시하도록 하자.