马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
×
PintOS 是 MIT 那套操作系统实验内核,很多学校的《操作系统》课程都在用。官方给的安装说明停留在老版本 Linux 上,直接照做在 Ubuntu 20.04 及以上会连环报错:gcc 找不到 stropts.h、bochs 并不是默认模拟器、Makefile 变量名对不上。本文按 Ubuntu 20.04+ 的实际情况,把每一步该改哪里、为什么这么改讲清楚。
一、前期准备
需要准备这些东西:
- qemu:
sudo apt install qemu-system
- gcc:
sudo apt install g++
- make:
sudo apt install make
- vim:
sudo apt install vim
- PintOS 源码:从公共仓库获取。进仓库后找到 master 分支的 tree 点进去,再点 snapshot 就能下载压缩包(也可以直接 clone,但速度可能很慢)。
源码下载解压后,把文件夹改名为 pintos-anon。后面的路径都跟这个名字绑定,改了名会导致后面一系列路径要跟着改,不如一开始就定死。
二、编译 utils:两个 Ubuntu 专属坑
2.1 改 pintos-gdb 里的宏路径
解压后进 pintos-anon/src,在里面右键「在终端打开」,然后:
cd utils
vim pintos-gdb
按 i 进入编辑模式,把 GDBMACROS 变量路径里 /src/misc/gdb-macros 前面的部分改成 pintos-anon 文件夹的绝对路径。改完按 Esc 退出编辑,输入 :wq 保存退出。
2.2 Makefile 里的 LOADLIBES
接着:
vim Makefile
把 LOADLIBES 改成 LDLIBS。这是个纯粹的历史遗留变量名,老 GNU make 支持、新版不行,改一个词就好。
2.3 编译
确保还在 pintos-anon/src/util/ 目录下,执行:
make
2.4 坑一:gcc 报找不到 stropts.h
如果你的 Ubuntu 版本 ≥ 20.04,到这一步 gcc 大概率会报错说找不到头文件 stropts.h。原因是 glibc 2.34 起把这个头文件废弃删掉了。
绕过方法:开一个新终端窗口,依次执行:
cd /usr/include
sudo vim stropts.h
:wq
也就是手动创建一个空的 stropts.h 占位。因为这个头文件里的内容在新 glibc 里已经被合并进其他头了,留空文件能让老代码过编译,不产生实际影响。创建完把这个窗口关掉。
2.5 坑二:squish-pty.c 第 288 行附近
回到原来那个终端(还处在 pintos-anon/src/util/),执行:
vim squish-pty.c
跳到第 288 行左右,把 if (isastream (slave)) 这一整块代码注释掉。这是源码兼容新编译器的第二刀。改完保存退出。
2.6 再次编译
仍在 pintos-anon/src/util/ 下,执行:
make
这次应该能过。
三、编译 threads:把 bochs 换成 qemu
接着往上走:
cd ..
cd threads
vim Make.vars
第 7 行,把 bochs 换成 qemu。PintOS 官方年代默认模拟器是 bochs,现在装 bochs 既麻烦又慢,直接用 qemu 更实际。
保存退出后执行:
make
四、最终修 pintos 启动脚本
回到 src 层再进 utils:
cd ..
cd utils
vim pintos
这个文件里有四处要改:
- 第 103 行左右:把
bochs 换成 qemu。
- 第 257 行左右:把
kernel.bin 换成它的绝对路径。查找方式是在 threads 目录下 ls 就能看到编译产物kernel.bin 的实际位置,把完整路径填进去。
- 第 621 行左右:把
qemu-system-i386 换成 qemu-system-x86_64。这一步很关键——很多人的 qemu 只装了 64 位包,写 i386 会提示找不到可执行程序。
- 按
Esc 后输入 :wq 保存退出。
还有一个文件要处理:
vim Pintos.pm
第 362 行左右,把 loader.bin 也换成它的绝对路径,方法同上。
五、把 pintos 加进 PATH
sudo vim ~/.bashrc
在最后一行加上:
export PATH=/home/你的路径/pintos-anon/src/utils PATH
注意把 /home/你的路径 换成你实际的目录。然后关掉终端重新打开,或者执行 source ~/.bashrc 让环境变量生效。
六、验证是否装成功
在终端输入:
pintos run alarm-multiple
如果能跑起来并输出预期的内核启动日志 和测试结果,说明整套环境就通了。这一步跑的是线程实验里最简单的 alarm 多个用例,算是冒烟测试。
七、踩坑汇总
- bochs / qemu 混写:Make.vars、pintos、PintOS.pm 三处都要一致改成 qemu,漏一处就会提示找不到模拟器。
- i386 / x86_64:qemu-system-i386 和 x86_64 是不同包,写错直接报 command not found。
- kernel.bin / loader.bin 相对路径:换了机器或者目录挪动就会失效,老老实实写绝对路径一劳永逸。
- 忘了 source ~/.bashrc:PATH 没生效,敲
pintos 会提示命令不存在。
- 源码目录没改名:名字一变,前面改的那几个路径全对不上,症状是各种「找不到文件」。
- make 报错先看缺哪个包:绝大多数编译失败是 qemu-system、g++、make 没装全,别急着怀疑代码。
整体看,这套东西在 Ubuntu 20.04 上的主要工作量就是「替官方老代码打三个补丁」:空 stropts.h、注释 isastream、bochs 换 qemu。把这三条搞定,剩下的就是按路径走流程。
qidao123.com企服评测-应用市场 编辑提示 |