6.S081 Lab0 搭建系统

本文详细介绍了如何在RISC-V架构上搭建实验环境,包括安装RISC-V GNU编译工具链、QEMU模拟器以及XV6操作系统。通过QEMU模拟器,XV6得以在非真实硬件上运行。实验步骤清晰,从下载所需软件到编译运行XV6,最后展示了成功的启动画面及系统操作。文章还提供了XV6内核中cat命令的源代码示例。
摘要由CSDN通过智能技术生成

6.S081 Lab0 搭建系统

实验环境总结:XV6运行在一个RISC-V微处理器上,但是使用的并不是真正的RISC-V计算机,而是使用QEMU模拟器来模拟RISC-V微处理器,因此最终总结就是:XV6运行在QEMU上(一个RISC-V微处理器模拟器)

建议去看官网的实验环境配置——十分详细,并且根据不同环境有不同的做法。

0. 总览

配置好的实验环境如下:

总共需要安装三个东西,编译器riscv-gnu-toolchainqemu模拟器操作系统xv6-riscv-fall19。

(这里其实我并没有下载,因为19年的时候参与过OS的助教工作,因此我还是用的qemu-4.1.0和xv6-riscv-fall19)

wc@r740:~/OS_experiment$ ls -lh
total 4.0G
-rw-rw-r--  1 wc wc 7.2K Jun 25 21:24 Makefile
drwxr-xr-x 50 wc wc  12K Jun 25 21:33 qemu-4.1.0
drwxrwxr-x 24 wc wc 4.0K Jun 25 21:32 riscv-gnu-toolchain
-rw-r--r--  1 wc wc 4.0G Jun 25 21:22 riscv-gnu-toolchain.zip
drwxrwxr-x  2 wc wc 4.0K Jun 25 21:24 test
-rw-rw-r--  1 wc wc  595 Jun 25 21:24 Untitled-1.c
-rw-rw-r--  1 wc wc  20M Jun 25 21:22 xv6backup.zip
drwxrwxr-x  9 wc wc 4.0K Jun 25 21:58 xv6-riscv-fall19

1. 安装编译器:RISC-V GNU的编译工具链

地址是

https://github.com/riscv/riscv-gnu-toolchain

配置和安装命令

./configure --prefix=/usr/local
sudo make

2. 安装QEMU模拟器

这个是RISC-V微处理器模拟器,可以模拟内存和CPU等。

地址

https://download.qemu.org/qemu4.1.0.tar.xz

解压,配置,编译

tar xf qemu-5.1.0.tar.xz
./configure --disable-kvm --disable-werror --prefix=/usr/local --target-list="riscv64-softmmu"
sudo make
sudo make install

3. 下载操作系统xv6

git下载

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

编译

cd xv6-riscv
make qemu

成功界面(可以看到boot,内存初始化等,最终init: starting sh,$表示进入shell )

wc@r740:~/OS_experiment/xv6-riscv-fall19$ make qemu
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

xv6 kernel is booting

virtio disk init 0
hart 2 starting
hart 1 starting
page table 0x0000000087f6e000
..0: pte 0x0000000021fda801 pa 0x0000000087f6a000
.. ..0: pte 0x0000000021fda401 pa 0x0000000087f69000
.. .. ..0: pte 0x0000000021fdac1f pa 0x0000000087f6b000
.. .. ..1: pte 0x0000000021fda00f pa 0x0000000087f68000
.. .. ..2: pte 0x0000000021fd9c1f pa 0x0000000087f67000
..255: pte 0x0000000021fdb401 pa 0x0000000087f6d000
.. ..511: pte 0x0000000021fdb001 pa 0x0000000087f6c000
.. .. ..510: pte 0x0000000021fdd807 pa 0x0000000087f76000
.. .. ..511: pte 0x000000002000200b pa 0x0000000080008000
init: starting sh
$ 

ls命令可以查看当前存在那些文件,ctrl + P可以查看进程;ctrl + a,然后按x可以退出当前系统。

4. 源码预览

可以进入xv6目录下的kernel文件夹下,查看内核程序,比如cat.c如下:

其实关键代码只有:write(1, buf, n); 也就是向fd = 1处写buf,其中1是标准输出,因此会输出到屏幕上。

#include "kernel/types.h"
#include "kernel/stat.h"
#include "user/user.h"
/*连接文件并打印到标准输出设备上。*/

//策略:打开文件,保存描述符fd,n = read(fd, buf, sizeof(buf)); 然后, write(1, fd, n)

char buf[512];

void
cat(int fd)
{
  int n;

  while((n = read(fd, buf, sizeof(buf))) > 0) {
    if (write(1, buf, n) != n) {
      printf("cat: write error\n");
      exit(1);
    }
  }
  if(n < 0){
    printf("cat: read error\n");
    exit(1);
  }
}

int
main(int argc, char *argv[])
{
  int fd, i;

  if(argc <= 1){
    cat(0);
    exit(1);
  }

  for(i = 1; i < argc; i++){
    if((fd = open(argv[i], 0)) < 0){
      printf("cat: cannot open %s\n", argv[i]);
      exit(1);
    }
    cat(fd);
    close(fd);
  }
  exit(0);
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值