一:准备工作
首先准备环境和文件,我用的环境是Ubuntu 16.04,在虚拟机中安装的,bochs用的是目前最新版本bochs2.6.7(尝试安装用2.8没成功)
- 下载bochs 选择 tar.gz 格式;https://sourceforge.net/projects/bochs/
- 下载pintos;(通过百度网盘分享的文件:pintos.tar.gz
链接:https://pan.baidu.com/s/1KhC6LlFSk1t13kvJQb4OQw
提取码:u6aq)该链接自取 - 将下载完成的两个文件(bochs-2.6.7.tar.gz, pintos.tar.gz)移动到ubuntu桌面上
- 使用tar命令分别解压缩两个文件
-
tar zxvf bochs-2.6.7.tar.gz tar zxvf pintos.tar.gz
到这里我们所需要的文件都已经准备就绪了。
二: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;
全部安装完成之后:
sudo apt-get install libc6:i386 libgcc1:i386 gcc-4.6-base:i386 libstdc++5:i386 libstdc++6:i386
运行该行命令时,会出现“Unable to locate package gcc-4.6-base:i386”
此时该如何解决:
在sources.list中添加:
deb http://archive.ubuntu.com/ubuntu/ trusty universe
deb-src http://archive.ubuntu.com/ubuntu/ trusty universe
改完,保存退出
三:安装bochs 和 pintos
在第一步的操作中我们已经解压缩了两个文件,为了方便默认使用的是~/文件夹,现在开始安装:
在命令行输入:
1、安装bochs:
# 安装bochs
cd bochs-2.6.7
./configure --enable-gdb-stub
make
sudo make install
2、安装和运行pintos
cd pintos/src/threads
make
cd build
../../utils/pintos -- run alarm-multiple
3、复制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
cd ̃/pintos/src/misc
sudo cp gdb-macros /usr/bin/
sudo vim /usr/bin/pintos-gdb
//修改第 4 行: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
cd ~/pintos/src/utils
make
sudo cp squish-pty /usr/bin
sudo chmod a+rx /usr/bin/squish-pty
make这里可能会报错,需要修改 Makefile 文件,将第 5 行的 LDFLAGS
修改为 LDLIBS
cd pintos/src/utils/
vim Makefile
# 修改第五行: 将LDFLAGS 改成 LDLIBS
改完之后,再make一遍
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的冒号后面有一个空格。
该界面显示出来,就是完成了