這個學期在學習操作系統課程,實踐課要求要用pintos。老師給的環境是openSUSE,因為之前用過ubuntu覺得很好用,於是便自己找教程在Ubuntu下面裝pintos。
一:准備工作
首先准備環境和文件,我用的環境是Ubuntu 14.04,在虛擬機中安裝的,bochs用的是目前最新版本bochs2.6.7。
到這里我們所需要的文件都已經准備就緒了。
二:Ubuntu環境配置
為了避免出現一些不必要的麻煩,建議下面幾個操作都做一下。
在命令行輸入以下代碼:
$ sudo apt-get install buid-essential
$ sudo apt-get install xorg-dev $ sudo apt-get install bison $ sudo apt-get install libgtk2.0-dev $ sudo apt-get install libc6:i386 libgcc1:i386 gcc-4.6-base:i386 libstdc++5:i386 libstdc++6:i386 $ sudo apt-get install libncurses5:i386 $ sudo apt-get install g++-multilib
輸入命令后會提示輸入密碼,這里的密碼是不顯示位數的。
然后會提示Y/N,輸入y;
全部安裝完成之后:
三:安裝bochs 和 pintos
在第一步的操作中我們已經解壓縮了兩個文件,為了方便默認使用的是~/文件夾,現在開始安裝:
在命令行輸入:
1、安裝bochs:
# 安裝bochs
$ cd bochs-2.6.7 $ ./configure --enable-gdb-stub $ make $ sudo make install
常見錯誤:
1.configure: error: C++ preprocessor "/lib/cpp"fails sanity check
解決方法:聯網狀態下在終斷輸入 $ sudo aptitude install build-essential
2.X windows gui was selected, but Xwindows libraries were not found.",
解決方法:聯網狀態下在終端輸入
$ sudo apt-get install libx11-dev
$ sudo apt-get install xserver-xorg-dev $ sudo apt-get install xorg-dev
2、安裝和運行pintos
$ tar zxvf pintos2011.tar.gz
$ cd pintos/src/threads $ make $ cd build $ ../../utils/pintos -- run alarm-multiple
3、復制utils
# Copy utils
$ cd ̃/pintos/src/utils $ sudo cp backtrace /usr/bin/ $ sudo cp pintos /usr/bin/ $ sudo cp pintos-gdb /usr/bin/ $ sudo cp pintos-mkdisk /usr/bin/ $ sudo cp Pintos.pm /usr/bin/
4、安裝pintos-gdb
# Install pintos-gdb
$ cd ̃/pintos/src/misc $ sudo cp gdb-macros /usr/bin/ $ sudo vim /usr/bin/pintos-gdb # Modify the 4th line: GDBMACROS=/usr/bin/gdb-macros $ cd /usr/bin/ $ sudo chmod a+rx backtrace $ sudo chmod a+rx pintos* $ sudo chmod a+rx gdb-macros
$ sudo chmod a+rx Pintos.pm $ test pintos-gdb
5、編譯utils
# Compile utils
$ cd ~/pintos/src/utils $ make $ sudo cp squish-pty /usr/bin $ sudo chmod a+rx /usr/bin/squish-pty
在這一步我make的時候出錯了,去知乎上提問了一下,得到答案:
$ cd pintos/src/utils/
$ vim Makefile
# Modify the 5th line: LDFLAGS -> LDLIBS
中間有個小插曲,在我提問下面回答的那位朋友告訴了我如果修改,結果在我安裝完了之后他表示他還沒成功。。。
5、用gdb來調試pintos
$ cd /pintos/src/threads/build
$ ../../utils/pintos --gdb -s -- run alarm-multiple (我們已經配置好了環境可以直接用pintos命令)
這個時候終端顯示等待連接,打開另一個終端,輸入:
$ cd pintos/src/threads/build/
$ gdb kernel.o
注意:這里是小寫的字母o,而不是數字0。
成功進入gdb,在(gdb)中輸入:
(gdb) target remote localhost: 1234
(gdb) continue
注意: 這里的localhost的冒號后面有一個空格。
OK,連接完成,這個時候應該能看到等待的終端上有顯示了。(圖片中因為我沒開另一個所以會出現time out)
如果有什么問題歡迎大家一起討論,有出現錯誤的也可以評論告訴我,我會盡力找到原因並解答。
2015年4月19日