首页 > 其他分享 >MIT 6.s081 实验环境搭建

MIT 6.s081 实验环境搭建

时间:2023-07-01 16:23:46浏览次数:40  
标签:kernel git gdbinit mit xv6 gdb s081 MIT 搭建

准备工作

Linux 系统,我是在实验室配的主机上装了 Debian Bookworm,然后mac 通过 ssh 连接上去进行操作,宿舍里则是使用的 wsl2,里面的发行版也是 Debian Bookworm。

开始配置

clone 源码

~/Documents/code/mit 目录下执行 git clone git://g.csail.mit.edu/xv6-labs-2021,将源码 clone 下来。并执行 git clone https://github.com/mit-pdos/xv6-riscv-book.git,这个是参考资料(即 PDF 对应的 Latex 源码)

前面 clone 下来的 repository 包含了多个分支,每个分支对应一个 Lab。

执行 cd xv6-labs-2021 && git checkout util,切换到 Lab Utilities 对应的 分支。

安装工具

执行以下两条命令:

$ sudo apt-get update && sudo apt-get upgrade
$ sudo apt-get install git build-essential gdb-multiarch qemu-system-misc gcc-riscv64-linux-gnu binutils-riscv64-linux-gnu

从而安装对应工具。

开始调试

这里会用到 tmux 的功能(非必需),在 util 分支下的 ~/Documents/code/mit/xv6-labs-2021 目录下,执行 make qemu-gdb, 然后先按 ctrl+b 再按 % 键,在 iterm2 的右侧创建一个新 panel,如图

4jr1zliCEksJax2

我们需要修改一下源文件,在 sh.c 中,在 $56$ 行附近,void runcmd(struct cmd *cmd) 之前添加 __attribute__((noreturn)) ,这样才能正常启动系统。

右侧的 panel 也切换到上述目录,然后运行 gdb-multiarch,之后会进入 gdb 终端命令界面,执行 set architecture riscv:rv64 以调试 RISCV 架构,然后执行 target remote localhost:26000(这里端口号要看 make qemu-gdb 的输出),从而调试 QEMU 中的 xv6 系统,执行 file kernel/kernel 命令说明我们要调试 kernel/kerel.c 编译生成的可执行文件 kernel

我们可以看一下 kernel.asm 的内容,如下图:

ij9Vt1Uf2cGwKQd

然后回到 GDB 对应的 panel,然后执行 b _entry,于是在 _entry 这里打了个断点。

说明我们调试 xv6 没什么问题了,亦说明环境已经配置好了。

之后,为了方便起见,我们可以在当前目录创建 .gdbinit,从而使得每次启动 GDB 都能执行 .gdbinit 中的命令,省得我们再一遍遍敲,.gdbinit 的内容如下:

set architecture riscv:rv64
target remote localhost:26000

然后在 ~/.config/gdb/gdbinit 文件中追加一行,内容为 add-auto-load-safe-path /home/zwyyy/Documents/code/mit/xv6-labs-2021/.gdbinit

之后就能直接 gdb-multiarch 调试 xv6 了。

标签:kernel,git,gdbinit,mit,xv6,gdb,s081,MIT,搭建
From: https://www.cnblogs.com/zwyyy456/p/17519458.html

相关文章

  • 使用纯 ABAP 开发 SAP UI5 应用(一):abap2UI5 开发环境搭建介绍
    我从SAP社区博客上了解到一个开源项目,名叫abap2UI5,作者是OblomovDev,这是Github项目地址:https://github.com/abap2UI5/abap2UI5这个项目最吸引ABAP开发人员之处在于:传统的ABAP搞定一切:仅仅依靠最基础的传统ABAP编程语言,就可以开发并运行SAPUI5应用。不需要......
  • 基本数据类型(primitive type)
    数据类型数据类型分为基本数据类型(primitivetype)和引用数据类型(referencetype)基本数据类型(primitivetype)数值类型整数类型浮点类型字符类型boolean类型引用数据类型(referencetype)类接口数组八大基本数据类型byte,占1个字节(1B),表示整数范围:-128--127sh......
  • 十分钟搭建openstack平台
    十分钟搭建openstack平台https://www.rdoproject.org/install/packstack/先决条件在CentOSStream8/RHEL8上:network-scripts已弃用且默认未安装,因此需要显式安装。sudodnfinstallnetwork-scripts-y禁用firewalld和NetworkManagersudosystemctldisablefirewalldsudo......
  • Maven高级相关知识:模块,打包方式,依赖继承,聚合,私服搭建
    Maven高级相关知识:模块,打包方式,依赖继承,聚合,私服搭建01.Maven是一款构建和管理Java项目的工具1.Maven高级内容包括:1.分模块设计与开发2.继承与聚合3.私服02.分模块设计:我们在进行项目设计阶段,就可以将一个大的项目拆分成若干个模块,每一个模块都是独立的.分模块设计就是......
  • 基于GPT搭建私有知识库聊天机器人(一)实现原理
    1、成品演示支持微信聊天支持网页聊天支持微信语音对话支持私有知识文件训练,并针对文件提问步骤1:准备本地文件a.txt,支持pdf、txt、markdown、ppt等步骤2:上传a.txt,并选择要保存的在哪个知识库步骤3:对上传的a.txt文件进行训练步骤4:进行提问(网页和微信)2、实现原理目前......
  • 如何搭建独享的IP代理池?
    随着互联网技术的日趋成熟,爬虫已经成为一种常见的数据获取方法。在采集业务中,建立本地IP代理池是非常重要的。今天将与您探讨IP代理池的选择以及如何搭建独享的IP代理池。独享IP代理池与共享IP代理池,如何选择独享IP代理池是指由客户单独使用的IP池,优点是客户可以享受池中所有的IP地......
  • 项目的初始化和服务器的简单搭建
    ##项目初始化新建文件夹,命名为`students-system`(根据自己的情况命名),注意这里的命名不得为中文或其他特殊字符```shellnpminit-y(初始化命令)```##安装包```shellnpmijqueryexpressexpress-art-template(安装命令)```##新建文件夹新建public,views文件夹,public下新建img,js......
  • git rebase合并多个commit
    一、为什么要合并commit?一般要merge到master的时候才会有这个要求,清晰明了的commit有利于团队维护。 二、什么是gitrebase?含义:rebase的意思是变基,‘re’前缀在英语里是‘再’的意思,'base':基础。命令:pick:正常选中squash:选中,会将当前commit与上一个commit合并fixup:与squ......
  • 中小企业怎么轻松搭建产品发行说明文档?
    发行说明是产品上线必备的文档,它包含了项目进度的跟踪和产品版本的基础信息以及新增功能的介绍。以下是为什么您需要发行说明的几个原因:1.通知用户新功能:发行说明是向用户传达团队正在进行的工作和产品更新的重要途径。定期更新发行说明可以回答用户的疑问,让他们知道您的团队仍在积......
  • git撤销commit未push
    1.使用参数--mixed(默认参数),如gitreset--mixed<commitID>或gitreset<commitID>撤销gitcommit,撤销gitadd,保留编辑器改动代码2.使用参数--soft,如gitreset--soft<commitID>撤销git commit,不撤销gitadd,保留编辑器改动代码3.使用参数--hard,如gitreset--hard<comm......