6.S081环境配置

【MIT6.S081 xv6实验】gdb环境搭建:ubuntu无法运行riscv64-linux-gnu-gdb MIT6.S081实验,安装gdb,调试内核程序。显示**‘riscv64-linux-gnu-gdb’ ''riscv-unknown Command not found**。参考资料给出了解决方案,但是有一些细节上的问题导致仍然无法成功运行gdb。 阅读详情

更好的阅读体验


title: 6.S081环境配置及参考资料
date: 2023-03-09 18:55:59
tags: [‘OS’, ‘6.S081’]

参考资料

安装XV6

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

The latest xv6 source and text are available via

git clone git://github.com/mit-pdos/xv6-riscv.git

and

git clone git://github.com/mit-pdos/xv6-riscv-book.git
cd xv6-riscv
make qemu

安装成功

指针预备知识

#include <stdio.h>
#include <stdlib.h>

void f(void) {
    int a[4];
    int *b = malloc(16);
    int *c;
    int i;

    printf("1: a = %p, b = %p, c = %p\n", a, b, c);

    c = a;
    for (i = 0; i < 4; i++)
	a[i] = 100 + i;
    c[0] = 200;
    printf("2: a[0] = %d, a[1] = %d, a[2] = %d, a[3] = %d\n",
	   a[0], a[1], a[2], a[3]);

    c[1] = 300;
    *(c + 2) = 301;
    3[c] = 302;
    printf("3: a[0] = %d, a[1] = %d, a[2] = %d, a[3] = %d\n",
	   a[0], a[1], a[2], a[3]);

    c = c + 1;
    *c = 400;
    printf("4: a[0] = %d, a[1] = %d, a[2] = %d, a[3] = %d\n",
	   a[0], a[1], a[2], a[3]);

    c = (int *) ((char *) c + 1);
    *c = 500;
    printf("5: a[0] = %d, a[1] = %d, a[2] = %d, a[3] = %d\n",
	   a[0], a[1], a[2], a[3]);

    b = (int *) a + 1;
    c = (int *) ((char *) a + 1);
    printf("6: a = %p, b = %p, c = %p\n", a, b, c);
}

int main(int ac, char **av) {
    f();
    return 0;
}

GDB 调试

  1. 打开两个终端窗口

  2. 在第一个窗口中输入make qemu-gdb

    *** Now run 'gdb' in another window. qemu-system-riscv64 -machine virt -bios none -kernel kernel/kernel -m 128M -smp 3 -nographic -drive file=fs.img,if=none,format=raw,id=x0 -device virtio-blk-device,drive=x0,bus=virtio-mmio-bus.0 -S -gdb tcp::25500
    
  3. 在第二个窗口中,修改自己 home 目录下的 .gdbinit 文件,允许 gdb 在xv6-riscv这个目录启动的时候,加载该文件夹下的 .gdbinit 文件。

    echo "add-auto-load-safe-path YOUR_PATH/xv6-riscv/.gdbinit " >> ~/.gdbinit
    
  4. 输入gdb-multiarch

    $ echo "add-auto-load-safe-path /home/ubuntu/xv6-riscv/.gdbinit " >> ~/.gdbinit
    $ gdb-multiarch                                                                                             
    GNU gdb (Ubuntu 9.2-0ubuntu1~20.04) 9.2
    Copyright (C) 2020 Free Software Foundation, Inc.
    License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.ht
    ml>
    This is free software: you are free to change and redistribute it.
    There is NO WARRANTY, to the extent permitted by law.
    Type "show copying" and "show warranty" for details.
    This GDB was configured as "x86_64-linux-gnu".
    Type "show configuration" for configuration details.
    For bug reporting instructions, please see:
    <http://www.gnu.org/software/gdb/bugs/>.
    Find the GDB manual and other documentation resources online at:
        <http://www.gnu.org/software/gdb/documentation/>.
    
    For help, type "help".
    Type "apropos word" to search for commands related to "word".
    The target architecture is assumed to be riscv:rv64
    warning: No executable has been specified and target does not support
    determining executable automatically.  Try using the "file" command.
    0x0000000000001000 in ?? ()
    (gdb)
    
  • 给代码打断点 简单来说,就是以下几步:
  1. file user/_ls
  2. b main
  3. c
  4. 之后就是正常的GDB 使用流程了

FINALLY:

第二个窗口:

(gdb) file user/_ls
Reading symbols from user/_ls...
(gdb) b main
Breakpoint 1 at 0x27a: file user/ls.c, line 75.
(gdb) c
Continuing.
[Switching to Thread 1.3]

Thread 3 hit Breakpoint 1, main (argc=0, argv=0x6c <fmtname+108>)
    at user/ls.c:75
75      {
(gdb)

第一个窗口

(......)
xv6 kernel is booting                                        

hart 1 starting                                                  
hart 2 starting                                                  
init: starting sh                                                
$ ls
(等待 gdb 发送 continue 信号)
  1. 之后我们就可以正常地通过 GDB 调试程序啦~

VSCode 调试

  • https://www.515code.com/posts/r1eiw7kt/#1-4-VSCode%E8%B0%83%E8%AF%95

比较推荐,功能更全。

首先在xv6-labs-2021目录下创建.vscode文件夹,在这个文件夹下新建launch.json、tasks.json,内容分别如下:

// launch.json
{
    "version": "0.2.0",
    "configurations": [
        {
            "name": "xv6debug",
            "type": "cppdbg",
            "request": "launch",
            "program": "${workspaceFolder}/kernel/kernel",
            "stopAtEntry": true,
            "cwd": "${workspaceFolder}",
            "miDebuggerServerAddress": "127.0.0.1:25000", //见.gdbinit 中 target remote xxxx:xx
            "miDebuggerPath": "/usr/bin/gdb-multiarch", // which gdb-multiarch
            "MIMode": "gdb",
            "preLaunchTask": "xv6build"
        }
    ]
}

// tasks.json
{
    "version": "2.0.0",
    "options": { //指定make qemu的执行位置
        "cwd": "${workspaceFolder}"
    },
    "tasks": [
        {
            "label": "xv6build",
            "type": "shell",
            "isBackground": true,
            "command": "make qemu-gdb",
            "problemMatcher": [
                {
                    "pattern": [
                        {
                            "regexp": ".",
                            "file": 1,
                            "location": 2,
                            "message": 3
                        }
                    ],
                    "background": {
                        "beginsPattern": ".*Now run 'gdb' in another window.",
                        "endsPattern": "."
                    }
                }
            ],
            "group": {
                "kind": "build",
                "isDefault": true
            }
        }
    ]
}

然后进行调试测试,我们可以找到 kernel/main.c 下的第13行,打一个断点,然后按F5。

错误1:如果出现 /Program path ‘xv6-labs-2021/kernel/kernel’ is missing or invalid 错误,先不用管,等待终端的gdb跑起来。

错误2:如果出现 Unexpected GDB output from command “-target-select remote 127.0.0.1:25000”. Remote communication error. Target disconnected.: Connection reset by peer. 错误,需要在xv6-labs-2021下找到.gdbinit文件,注释掉target remote这行:

set confirm off
set architecture riscv:rv64
# target remote 127.0.0.1:25000
symbol-file kernel/kernel
set disassemble-next-line auto
set riscv use-compressed-breakpoints yes

注意1:如果make clean后再按F5(它会执行make qemu-gdb),.gdbinit这个文件会被刷新,所以我们又要去注释掉target remote那行,然后再按F5,目前我还没找到更好的解决方法。

注意2:由于xv6默认多核运行,所以调试代码的时候可能会有点混乱,可以通过修改tasks.json中command字段为make qemu-gdb CPUS=1,即单核运行。这仅供调试使用,因为正常情况下代码要通过多核的运行。

系统调用

系统调用描述
fork()创建进程
exit()结束当前进程
wait()等待子进程结束
kill(pid)结束 pid 所指进程
getpid()获得当前进程 pid
sleep(n)睡眠 n 秒
exec(filename, *argv)加载并执行一个文件
sbrk(n)为进程内存空间增加 n 字节
open(filename, flags)打开文件,flags 指定读/写模式
read(fd, buf, n)从文件中读 n 个字节到 buf
write(fd, buf, n)从 buf 中写 n 个字节到文件
close(fd)关闭打开的 fd
dup(fd)复制 fd
pipe( p)创建管道, 并把读和写的 fd 返回到p
chdir(dirname)改变当前目录
mkdir(dirname)创建新的目录
mknod(name, major, minor)创建设备文件
fstat(fd)返回文件信息
link(f1, f2)给 f1 创建一个新名字(f2)
unlink(filename)删除文件
xv6 6.S081实验全攻略:从环境配置到mmap实现心得分享 本文详细解析了MIT 6.S081课程中xv6实验的全过程,从环境配置到mmap系统调用的实现。提供了RISC-V工具链和QEMU模拟器的安装指南,深入讲解xv6代码结构及实验方法论,并重点剖析了mmap的实现细节与优化策略,帮助读者系统掌握操作系统内核开发的核心技术。 阅读详情

相关推荐

计算机视觉-全景图像拼接中的特征匹配与优化策略

本文深入探讨了计算机视觉中全景图像拼接的核心技术,重点解析了特征匹配后的关键优化策略。通过SIFT特征提取、RANSAC算法剔除误匹配,并结合APAP算法应对视差与鬼影问题,详细阐述了从基础对齐到无缝融合的完整流程,为开发者实现高质量全景拼接提供了实用指南。

weixin_29039773的博客 361

GDB使用手册

简述 一 列文件清单 二:执行程序 三:显示数据 四:断点(breakpoint) 五.断点的管理 六.变量的检查和赋值 七. 单步执行 八.函数的调用 九.机器语言工具 十.信号 GDB的使用方法 简述一 列文件清单List (gdb) list line1,line2二:执行程序要

弹琴的企鹅 965

python123题目——个税计算器

类型:简单分支。

m0_62488776的博客 5803

Mit6.s081环境配置踩坑之旅WSL2+VScode

久闻6.s081大名,于是寒假尝试完成几个lab。在折腾了几天的环境配置后,依然是不得要领,遂作罢。近日尝试了另一种环境,终有所得,欣然献于诸君。

John_Snowww的博客 5165

模拟ic入门——设计一个带隙基准Bandgap(三)高阶温度补偿与启动电路设计

本节我们来介绍高阶温度补偿,以及一些启动电路的设计,附上一些经典的论文供大家学习

qq_64956710的博客 1万+

OpenClaw + Ollama 本地大模型部署教程:彻底告别Token焦虑

OpenClaw + Ollama 本地大模型部署教程:彻底告别Token焦虑

leaning_java的博客 1228

6.S081 Lab0 搭建系统

MIT 6.S081 实验环境搭建

ahundredmile的博客 833

安时积分法和开路电压法结合估算锂电池SOC

基于安时积分法和开路电压法结合的锂电池SOC估计Simulink仿真建模,利用安时积分法计算放电过程中的SOC,在搁置状态利用开路电压法进行SOC修正。

qq_39304296的博客 2554

MIT6.S081的gdb调试方法

MIT6.S081的gdb调试方法

qq_46514141的博客 1430

标题:Stata17安装后遇到Java安装问题解决方法

设置JAVA_HOME环境变量:在Windows上,您需要设置JAVA_HOME环境变量以告诉Stata Java的安装路径。d. 输入变量名为JAVA_HOME,变量值为Java安装路径。注意:请确保您的Java版本与Stata兼容,并使用正确的Java安装路径。设置Stata的Java安装路径:现在,您需要告诉Stata Java的安装路径。如果您看到Java版本信息,则表示Java已成功安装。如果没有安装,请先下载并安装Java。确认Java已安装:首先,请确保您的计算机上已经正确安装了Java。

CyberSparkZ的博客 2867

python实现下载和离线安装包环境

导出当前电脑python安装的所有包列表requirement.txt。

m0_60352504的博客 1676

MIT 6.S081—环境配置和初步学习day01(VMware和Ubuntu安装)

本文介绍了在虚拟机中安装和配置Ubuntu 20.04系统以运行xv6操作系统的完整流程。首先从VMware官网下载并安装Workstation Pro虚拟机软件,然后获取Ubuntu 20.04.3桌面版ISO镜像。详细展示了创建虚拟机、分配资源(建议4GB内存、25GB存储)和安装Ubuntu的步骤。安装完成后,需执行命令安装必要的开发工具链,包括RISC-V编译器、QEMU模拟器和调试工具。最后通过git克隆xv6-labs-2021项目仓库,运行make qemu命令成功启动xv6系统。

勇敢牛牛 1092

某智能物流无人值守系统 ExportReport SQL注入漏洞复现

某智能物流无人值守系统 ExportReport存在SQL注入漏洞,未经身份验证的远程攻击者除了可以利用 SQL 注入漏洞获取数据库中的信息(例如,管理员后台密码、站点的用户个人信息)之外,甚至在高权限的情况可向服务器中写入木马,进一步获取服务器系统权限。

0xSec 818

mit 6.s081 环境配置 过程记录2

进入xv6实验系统步骤梳理,以及如何将本地代码push到远端再pull到环境里去调试,一些细节记录。

ectfgd的博客 1060

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

6s081环境配置以及使用vscode连接本地wsl2

课程:6s081的2020版本的:https://pdos.csail.mit.edu/6.S081/2020/schedule.html。

qq_55841287的博客 622

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

MIT-6.S081实验一学习记录

MIT6.S081实验一的一些踩坑,学习与心得体会

qq_44145502的博客 1078

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

MIT 6.828/6.S081 (2023)环境配置 过程记录

怨念我是先跟着课程官网的步骤下载的,刚开始没注意,看的是的,按照Installing on Windows的步骤进行下载,后来又发现似乎看最新的比较合适(到处找博文视频参考,想死。让我回忆起上人工智能导论被conda安装配置支配的恐惧。所以我决定小心翼翼。官网上有个步骤:下载ubuntu Desktop,下载了但不知道有什么用(困惑)再下载了VMware,要密钥,百度。按照b站一个up的视频做了前面一部分,下载了Linux镜像(),创建了一个虚拟机。接下来都是在虚拟机的终端上进行操作。

ectfgd的博客 1361

MIT 6.828/6.S081 Fall 环境配置

官网配置 主要就是安装RISC-V和qemu,其中qemu有可能需要额外安装几个文件,具体可以参考下这篇文章:MIT 6.828 环境配置 主要是上面这两个安装的速度比较慢,网上的建议是git走代理,效果感觉也不太理想。 码云上有镜像仓库,速度会好一些,不过我没有安装成……码云 riscv-gnu-toolchain 无奈之下只好在自己的vps上下载了,希望能对大家有所帮助 riscv...

whynot_996的博客 1322

【MIT6.S081 xv6实验】gdb调试环境配置:解决riscv64-linux-gnu-gdb缺失与断点失效问题

本文针对MIT6.S081课程中调试xv6内核时遇到的riscv64-linux-gnu-gdb缺失与断点失效问题,提供了完整的解决方案。通过编译安装特定版本的gdb-9.2,并配置.gdbinit安全路径,成功搭建了稳定的RISC-V架构调试环境,确保能正常连接QEMU并设置断点,助力深入理解操作系统内核机制。

http9protocoller的博客 223

6.S081环境配置-问题解决(Mac(m1)安装6.S081所需实验环境 riscv-tools)

6.S081 mac(m1) riscv-tools安装

ahundredmile的博客 2317

MIT 6s081 lab 0.环境配置

安装虚拟机、换源。

厚积而薄发 199

从0到1学习MIT 6.S081:6.S081-All-in-one助你克服英文障碍

MIT 6.S081(原6.828)是计算机科学领域公认的操作系统经典课程,但其全英文资料常常让中文学习者望而却步。6.S081-All-in-one项目通过系统化的中文翻译和实验解析,为零基础学习者提供了一条快速掌握操作系统核心概念的捷径,让你无需担心语言障碍即可深入理解MIT顶尖课程的精髓。 ## 📚 为什么选择6.S081-All-in-one? 对于大多数中文学习者而言,MIT 6.

gitblog_00575的博客 975

2020 MIT6.S081 Lab环境搭建

2020 MIT6.S081 Lab环境搭建

sun%moon 2780

【6S.081】Lab1 Xv6 and Unix utilities

对于xv6的使用,更推荐用VSCode等文本编辑器进行启动,毕竟面对着命令提示符,还是太过寒酸了。每次实验完成之后需要进行提交和测试,并且要新创一个time.txt文件告知完成时间。每次创建文件会需要在Makefile中指定文件的编译顺序。即一般进行以下操作$U/_操作名\可以通过github进行提交。注意:代码中的注释往往包含重要信息,务必要仔细查看。

Skrrapper的博客 1230

MIT 6.S081: Lab 0 搭建环境

MIT6.S081实验环境搭建

爱做梦的猪的博客 1349

从零开始实现MIT6.S081实验环境配置(Ubuntu+Qemu+Xv6)

踩坑无数次总结出的MIT6.S081实验环境配置经验,包括Ubuntu 20.04+Qemu+Xv6的环境配置,VScode上远程连接Linux操作系统,以及配置过程中容易遇到的各种问题

2301_79981746的博客 2046
上一篇: Wireshark-Lab10:ARP
下一篇: 6.S081-Lab 1: Xv6 and Unix utilities
MINGgoS
博客等级 码龄7年 292粉丝 90原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值