本文参与「新人创作礼」活动,一起开启掘金创作之路。
最近在做6.s081,使用的是WSL,ubuntu20.04
WSL安装
WSL,全称 Windows System for Linux,能够在Windows上直接运行Linux的可执行文件。
安装具体过程参见微软官网文档
安装成功后,打开微软应用商店,搜索Ubuntu,点击下载,这个版本默认的是 ubuntu20.04版本
vscode 远程连接 本地的WSL
首先在VScode中下载,remote for WSL插件
然后按下 ctrl + shift + p,输入remote - WSL,就能自动连接本地的WSL环境了
xv6 实验环境配置
安装实验所需要的各种工具
$ 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
- git
- build-essential,ubuntu默认没有提供C/C++的编译环境,需要手动安装。但是,Ubuntu提供了一个build-essential软件包,安装了这个,编译c/c++所需要的软件包也都会被安装。
- gdb-multiarch,Ubuntu 下的 gdb-multiarch 是一款支持多个 Arch 的 gdb 调试工具,因为xv6是运行在riscv架构下的,所以需要支持多个架构的gdb调试工具
- qemu-system-misc,qemu是一个可以模拟处理器的软件,实验中通过qemu来模拟出一个基于riscv架构的机器,并在上面运行xv6
- gcc-riscv64-linux-gnu,gcc-riscv64-linux-gnu是gcc的riscv版本
- binutils-riscv64-linux-gnu,binutils是一整套的编程语言工具程序,用来处理许多格式的目标文件
获取xv6源代码并编译运行
$ git clone git://g.csail.mit.edu/xv6-labs-2021
$ cd xv6-labs-2021
$ make qemu
当看到如下提示则代表xv6成功运行了起来
按下ctrl + x + a 即可退出xv6
使用gdb调试xv6内核
众所周知,调试是找到bug的最好帮手,写代码最离不开的可以说就是调试。在写 xv6 内核的时候,会遇到大量感到迷惑的地方,但是这些都能通过调试来一步一步摸清楚。在xv6中,调试是通过远程调试工具来进行的。xv6本身又是运行在qemu模拟出的riscv处理器上的。所以在调试过程中,我们需要借助 gdb-multiarch来支持riscv架构的调试。
首先在对应目录下面,输入命令 make qemu-gdb
然后会提示在本地端口26000处
此时我们再在另外一个终端窗口开启一个gdb调试界面输入gdb-multiarch
,进入gdb的调试界面
读取你要调试的可执行文件,并在其执行入口打上断点。
然后我们利用gdb远程调试target remote localhost:26000
,去连接本地的端口26000
然后输入c
(continue),让程序继续运行下去
此时可以发现输入之前的那个终端窗口开始运行起来了,由于之前我们在ls的可执行文件上打了一次断点,所以在xv6 shell界面输入ls的时候,就会卡在之前设置的断点上,此时就能按照一般的gdb调试来对ls进行调试了