PintOS安装(实用于Ubuntu20.04及以上版本)

[复制链接]
发表于 2026-10-5 19:17:37 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×

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

这个文件里有四处要改:

  1. 第 103 行左右:把 bochs 换成 qemu。
  2. 第 257 行左右:把 kernel.bin 换成它的绝对路径。查找方式是在 threads 目录下 ls 就能看到编译产物kernel.bin 的实际位置,把完整路径填进去。
  3. 第 621 行左右:把 qemu-system-i386 换成 qemu-system-x86_64。这一步很关键——很多人的 qemu 只装了 64 位包,写 i386 会提示找不到可执行程序。
  4. 按 Esc 后输入 :wq 保存退出。

还有一个文件要处理:

vim Pintos.pm

第 362 行左右,把 loader.bin 也换成它的绝对路径,方法同上。

五、把 pintos 加进 PATH

sudo vim ~/.bashrc

在最后一行加上:

export PATH=/home/你的路径/pintos-anon/src/utilsPATH

注意把 /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企服评测-应用市场 编辑提示

回复

使用道具 举报

登录后关闭弹窗

登录参与点评抽奖  加入IT实名职场社区
去登录
快速回复 返回顶部 返回列表