「BUAA OS」操作系统假期预习
预习内容
OS的假期预习发布时间远晚于 CO 的假期预习,将近开学才开放预习内容,正确的。
按照个人理解,假期预习大概就是理解这么几件事:
- 学习使用
linux和 linux 中基本的GNU工具,如lsmakevim等等 - 学习一个标准一点的、系统一点的 MIPS 程序长什么样子
- 学习 C 语言是怎么被翻译成 MIPS 汇编,再翻译成二进制可执行文件,再跑起来的
- 学习使用
GDB和QEMU
一步步来。
安装Linux
我安装的是Ubuntu22.04,使用vmware workstation运行。理由是配置比较白痴。同时我也在WSL上安装了Ubuntu。虽然还没弄明白wsl的图形化界面要怎么安装,但即便没有图形化界面,个人感觉使用体验要远好于vmware。
本地代理
wsl的开本地代理可以在本地的”C:\Users%USERNAME%.wslconfig”文件中进行配置完成。一般来说该文件不存在,需要自行创建。创建后向其中写入以下内容:
1 | [experimental] |
然后在命令行将wsl关掉:
1 | > wsl --shutdown |
如果打开wsl没有出现“NAT模式下不支持localhost”之类的文字就算成功了
在vmware的Ubuntu中进行本地代理则稍微有一点麻烦。我使用的是clash for windows进行联网,在Ubuntu中也可以启动本地代理通过windows的clash访问指定网站。
- 先在windows下打开命令行,输入
ipconfig,找到无线局域网适配器 WLAN下的IPv4 地址 - 将clash中的
Allow LAN打开,记录Port号。 - 在ubuntu的网络设置中选择
本地代理-手动,将https代理、http代理、Socks主机三个选项的每一个都分别写入IPv4 地址以及Port号。随后就可以正常上网了
安装相关GNU工具
基本gcc工具
1 | sudo apt install build-essential |
mips相关模拟开发工具
1 | sudo apt install gcc-mips-linux-gnu qemu-system-mips gdb-multiarch |
之后的作业如果遇到奇怪的报错可能还有一下其他的库没有装。这个到时候再说吧。
作业
我们直接看Makefile,这里参考了绿导师的makefile查看技巧。
1 | $ make -nB # 查看make命令都会执行哪些命令,并输出到标准输出(但是不执行这些命令) |
-n和-B选项可以用man make | vim -来查看
对于make中眼花缭乱的指令,可以在vim中输入:%s/ /\n /g命令来完成一种简单的formatting。
拿mips-exercise的makefile来说,
1 | # make |
可以发现:
- make就是简单的生成了一个hello的可执行文件。它忽略了标准库,使用静态链接,禁用内联函数和栈保护器,禁用对mips-r4000的修复。简单来说,这些编译操作都是为了保证我们写的程序能够在裸机上运行
- 使用
qemu-system-mipsel在4Kc, MIPS Malta Core运行了hello。在Debug的时候使用了-S选项让CPU在开始运行的时候停下来,使用-s指令在localhost:1234开启了一个gdbserver用于远程调试。 - 使用
gdb-multiarch进行remote dbg,完成之后再干碎qemu进程。
观察运行情况
gdb自带tui,能够方便地查看运行结果
1 | (gdb) layout asm |
asm这可以将CPU从启动时的0xBFC00000开始执行的所有指令都显示出来,能够很好地观察到每一条指令的运行
1 | $ mips-linux-gnu-objdump -d hello | vim - |
将可执行文件hello反汇编来看到hello是怎么运行的。在asm的tui下也可以显示相同的内容。
- 标题: 「BUAA OS」操作系统假期预习
- 作者: Squirrel7ang
- 创建于 : 2024-03-03 15:08:00
- 更新于 : 2024-03-16 22:05:33
- 链接: https://redefine.ohevan.com/2024/03/03/OS/Pre/
- 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。