Pintos ์ค์นํ๊ธฐ
๊ฐ๋ฐํ๊ฒฝ ์ค์
๋งฅ๋ถ์์ ํํ ์ค๋ฅผ ์ค์นํด๋ณด์. ๋งฅ๋ถ์ Arm์ํคํ ์ณ์ด๊ธฐ ๋๋ฌธ์ ํํ ์ค๋ฅผ ๋ฐ๋ก ์คํํ ์ ์์ผ๋ฏ๋ก ๋์ปค๋ฅผ ์ด์ฉํ๋ค.
brew install --casks docker
๋์ปค์์ ์ฐ๋ถํฌ bionic ๋ฒ์ ์ด๋ฏธ์ง๋ฅผ ์ค์นํ์
docker pull --platform linux/amd64 ubuntu:bionic # ubuntu ์ด๋ฏธ์ง๋ฅผ ๋์ปค๋ก ๊ฐ์ ธ์จ๋ค.
docker run --platform linux/amd64 -it -d --name pintos ubuntu:bionic # pintos์ด๋ฆ์ผ๋ก ์ปจํ
์ด๋ ์์ฑ ํ ์คํ
docker attach pintos # ์ปจํ
์ด๋ ํ๊ฒฝ์ ์ ์
Dev Container๋ฅผ ํตํด ์ฐ๋ฆฌ์๊ฒ ์ต์ํ vscode๋ฅผ ์ด์ฉํด ํด๋น ์ปจํ
์ด๋์ ์ ์ํ ์ ์๋ค.
์ค์นํ ์์ ๊ฐ์ด ํ์ฌ ํ์ฑํ๋์ด์๋ ์ปจํ
์ด๋๊ฐ ๋์ค๊ณ , ์ด๋ฅผ ๋๋ธํด๋ฆญํด ์ ์ํ ์ ์๋ค. (์ ์์ ์ง์ํ์ง ์์ ๋ฒ์ ์ด๋ผ๊ณ ๋์ค๋ ๊ทธ๋ฅ ๋ฌด์ํ๊ณ ํด๋ ๋๋ค.)
ํํ ์ค๋ ๋ค์ ๊ฐ๋ฐ ํ๊ฒฝ์ด ํ์ํ๋ค.
- GCC, GNU binutils
- Perl
- GNU make
- QEMU (QEMU๋ฅผ ์ฌ์ฉํ๊ธฐ ํ๋ค๋ Bochs๋ฅผ ์ฌ์ฉํด๋ ๋๋ค.)
- GDB
apt update && apt upgrade -y
apt install build-essential gcc binutils perl gdb qemu -y # ์๊ตฌ์ฌํญ ์ค์น
apt install vim wget unzip # ํ์ผ ํธ์ง, ์์ถ ๋ฐ ํด์ ๋ฅผ ์ํด ์ค์น
apt install git # github์์ pintosํ์ผ์ ๋ถ๋ฌ์ค๊ธฐ ์ํจ.
ํํ ์ค ์ค์น
์์ ๊ฐ๋ฐํ๊ฒฝ์ค์ ์ด ์๋ฃ๋์์ผ๋ฉด, ์ด์ Pintos๋ฅผ ๋ค์ด๋ฐ์. (ํ์๋ root ๊ฒฝ๋ก๋ด์ ๋ค์ด๋ฐ์๋ค.)
git clone https://github.com/WyldeCat/pintos-anon.git pintos
src/utils/pintos
๋ฅผ ํตํด pintos ์คํ์ด ๊ฐ๋ฅํ๋ค. ํ์ง๋ง ๋๋ฒ๊น
๋ฑ์ ์ข ๋ ํธ๋ฆฌํ๊ฒ ํ๊ธฐ ์ํด ์ถ๊ฐ์ ์ธ ์ค์ ์ ํ๋ค.
cd pintos/src/utils
chmod +x Pintos.pm backtrace pintos pintos-gdb pintos-mkdisk pintos-set-cmdline # ํด๋น ํ์ผ์ ์คํ๊ถํ ๋ถ์ฌ
cp Pintos.pm backtrace pintos pintos-gdb pintos-mkdisk pintos-set-cmdline /usr/local/bin # /usr/local/bin์ผ๋ก ๋ณต์ฌ, ์ด์ ๊ฒฝ๋ก ์ง์ ์์ด pintos๋ฅผ ์คํํ ์ ์๋ค.
๋๋ฒ๊น ๋๊ตฌ ์ค์
cd pintos/src/misc
cp gdb-macros /usr/local/bin #gdb-macors๋ฅผ /usr/local/bin์ ๋ณต์ฌ
์์์ gdb-macros
ํ์ผ์ usr/local/bin
์ ๋ณต์ฌํ๋ค. ์ด์ pintos-gdb
ํ์ผ์ ํด๋น gdb-macros
ํ์ผ ๊ฒฝ๋ก๋ฅผ ์์ ํด์ค์ผํ๋ค. (ํ์๋ vim์ ์ด์ฉํด ์์ ํ๋ค. vim์ ๋ชจ๋ฅธ๋ค๋ฉด ์์๋๋๋ก ํ์.)
cd /usr/local/bin
vim pintos-gdb # vim ํธ์ง๊ธฐ๋ก ํด๋น ํ์ผ ์์
์๋ GDBMACROS
๋ณ์๋ฅผ ํ์ฌ gdb-mcros
์ ๊ฒฝ๋ก๋ก ๋ฐ๊ฟ์ฃผ์.
#! /bin/sh
# Path to GDB macros file. Customize for your site.
GDBMACROS=/usr/local/bin # /usr/local/bin/gdb-macros๋ก ์์
# Choose correct GDB.
if command -v i386-elf-gdb >/dev/null 2>&1; then
GDB=i386-elf-gdb
else
GDB=gdb
fi
# Run GDB.
if test -f "$GDBMACROS"; then
exec $GDB -x "$GDBMACROS" "$@"
else
echo "*** $GDBMACROS does not exist ***"
echo "*** Pintos GDB macros will not be available ***"
exec $GDB "$@"
fi
ํ์ผ์ ์ ์ฅํ๊ณ pintos-gdb
๋ฅผ ์
๋ ฅํ๋ฉด ๋ค์๊ณผ ๊ฐ์ ๊ฒฐ๊ณผ๊ฐ ๋์จ๋ค. ๋ง์ฝ pintos-gdb
๋ฅผ ์ฐพ์ ์ ์๋ค๋ ๋ฌธ๊ตฌ๊ฐ ๋์ค๋ฉด ๊ฒฝ๋ก๋ฅผ ์ ๋๋ก ์ค์ ํ๋์ง ํ์ธํด๋ณด์.
ํํ ์ค ์คํ
cd pintos/src/threads
make # threads ๊ฒฝ๋ก๋ด ์ฝ๋ ์ปดํ์ผ
cd build # ๋น๋ ๋๋ ํ ๋ฆฌ๋ก ์ด๋
pintos --qemu -- run alarm-multiple # qemu๋ฅผ ์ด์ฉํด ์คํํ๋๋ก ์ค์
์คํํ ๋ค์ ํ๋ฉด์ด ๋์จ๋ค.
๊ณ ์์ ๊ธฐ๋ก
๊ณต์ ๋ฌธ์์ ๋์์๋๋ฐ๋ก ํ๋ คํ์ผ๋โฆ ๋ฌดํ๋ถํ , Pintos ์ฝ๋ ์ค๋ฅ๋ฑ๋ฑ ์๋ง์ ์ค๋ฅ๋ก ์ธํด ์ฝ์ง์ ๋ง์ดํ๋ค. ์๋ง ์ค๋๋ ์ฝ๋์ด๋ค๋ณด๋ ํธํ์ฑ ์ด์์ด์ง ์์๊น ์๊ฐํ๋ค. ์ด ๊ธ์ ๋ณด๋ ์ฌ๋ฌ๋ถ์ ์ด๋ฌํ ์ฝ์ง์ ํ์ง ์์์ผ๋ฉด ํ๋ค.