您的位置:首页 > 其它

【MIT6.S081/6.828】手把手教你搭建开发环境

2021-09-03 22:17 881 查看

目录
  • 4. 安装SSH
  • 5. 配置静态IP
  • 6. 安装RISC-V交叉编译工具
  • 7. 安装QEMU
  • 8 测试

    秋招的时候,操作系统的八股文背了不少,但是仍然是缺乏动手实践的经历。对操作系统如何工作,用户程序如何运行,与CPU等硬件如何交互等问题完全没有清晰的认识。

    所以最近打算好好学习下操作系统的知识,选择了以动手实践为主的课程,直接对内核源码进行学习和扩展,一步步揭开OS的神秘面纱。

    1. 简介

    MIT 6.S081是著名的操作系统课程,理论与实践相结合的经典。通过实现部分内核功能来学习设计和实现操作系统。

    6.S081 由课程和实验组成。课程的前半部分是介绍系统的各种概念和实现。后半部分是讲一些论文,比如 meldown,et3fs。

    实验有 11 个,需要实现不同功能,比如 page table,network driver。

    课程的学习打算直接跟着官网的schedule走,先看Lecture下提供的讲义和手册,然后完成相应的Lab,Lab共计11个,主要内容是在xv6基础上进行内核开发和扩展。

    每个实验都有对应的知识点供你学习,学完理论知识后会有相应的练习,大多数都需要你手写代码。边学边做,学习效果更加高效。

    顺便一提,6.S081 2020 的两位老师其中一位是 Robert Morris(RTM)。Rob 1044 ert Morris 写了历史上第一个蠕虫,还是 Y-Combinator 的 co-founder。

    现在微内核概念这么火,鸿蒙就被宣传为微内核全场景OS,难道不想从原理上真正理解一下微内核OS吗? 而6.S081 这个课程就是引导我们实现了一个微内核操作系统。

    我的实现环境:

    • qemu for riscv
    • gdb for riscv
    • gcc for riscv
    • binutils for riscv
    • Windows 10 + VMWare + Ubuntu 20.04

    学习资源:

    2. 安装ubuntu20.04

    Ubuntu基本上是每半年更新一次,截至2021年7月30号,现在已经推出了20.0的版本了。

    在第一次进行搭建环境时,使用的是18.0的版本,这个版本在安装环境的时候,需要自行安装、编译Riscv工具链,但是这个过程很耗时,容易出现错误。在被百般折磨之后,选择了在Ubuntu20.04上进行环境的搭建。省去了安装工具链的繁琐操作。

    VMware下载链接:点击这里

    Ubuntu下载链接:点击这里

    3. 更换源

    3.1 更换/etc/apt/sources.list文件里的源

    安装好ubuntu20.04后,默认的软件更新源是国外的,在国内使用速度很慢,需要更换成国内的源,这样才能正常安装和更新软件。

    3.2 备份源列表

    Ubuntu配置的默认源并不是国内的服务器,下载更新软件都比较慢。首先备份源列表文件sources.list

    # 首先备份源列表
    sudo cp /etc/apt/sources.list /etc/apt/sources.list_backup

    3.3 打开sources.list文件修改

    选择合适的源,替换原文件的内容,保存编辑好的文件, 我们选择的是中科大源。

    # 打开sources.list文件
    sudo gedit /etc/apt/sources.list

    编辑/etc/apt/sources.list文件, 在文件最前面添加阿里云镜像源:

    #中科大源
    deb https://mirrors.ustc.edu.cn/ubuntu/ focal main restricted universe multiverse
    deb-src https://mirrors.ustc.edu.cn/ubuntu/ focal main restricted universe multiverse
    deb https://mirrors.ustc.edu.cn/ubuntu/ focal-updates main restricted universe multiverse
    deb-src https://mirrors.ustc.edu.cn/ubuntu/ focal-updates main restricted universe multiverse
    deb https://mirrors.ustc.edu.cn/ubuntu/ focal-backports main restricted universe multiverse
    deb-src https://mirrors.ustc.edu.cn/ubuntu/ focal-backports main restricted universe multiverse
    deb https://mirrors.ustc.edu.cn/ubuntu/ focal-security main restricted universe multiverse
    deb-src https://mirrors.ustc.edu.cn/ubuntu/ focal-security main restricted universe multiverse
    deb https://mirrors.ustc.edu.cn/ubuntu/ focal-proposed main restricted universe multiverse
    deb-src https://mirrors.ustc.edu.cn/ubuntu/ focal-proposed main restricted universe multiverse
    
    #添加阿里源
    deb http://mirrors.aliyun.com/ubuntu/ focal main restricted universe multiverse
    deb-src http://mirrors.aliyun.com/ubuntu/ focal main
    ad0
    restricted universe multiverse
    deb http://mirrors.aliyun.com/ubuntu/ focal-security main restricted universe multiverse
    deb-src http://mirrors.aliyun.com/ubuntu/ focal-security main restricted universe multiverse
    deb http://mirrors.aliyun.com/ubuntu/ focal-updates main restricted universe multiverse
    deb-src http://mirrors.aliyun.com/ubuntu/ focal-updates main restricted universe multiverse
    deb http://mirrors.aliyun.com/ubuntu/ focal-proposed main restricted universe multiverse
    deb-src http://mirrors.aliyun.com/ubuntu/ focal-proposed main restricted universe multiverse
    deb http://mirrors.aliyun.com/ubuntu/ focal-backports main restricted universe multiverse
    deb-src http://mirrors.aliyun.com/ubuntu/ focal-backports main restricted universe multiverse
    
    #添加清华源
    deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal main restricted universe multiverse
    # deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal main restricted universe multiverse
    deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-updates main restricted universe multiverse
    # deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-updates main restricted universe multiverse
    deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-backports main restricted universe multiverse
    # deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-backports main restricted universe multiverse
    deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-security main restricted universe multiverse
    # deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-security main restricted universe multiverse multiverse

    3.4 刷新列表

    sudo apt-get update
    sudo apt-get upgrade
    sudo apt-get install build-essential

    下载速度瞬间就起飞了。

    4. 安装SSH

    默认情况下,首次安装Ubuntu时,不允许通过SSH进行远程访问。

    在Ubuntu上启用SSH非常简单。以root 用户或具有sudo特权的用户执行以下步骤:

    使用打开终端

    Ctrl+Alt+T
    并安装
    openssh-server
    软件包:

    sudo apt update
    sudo apt install openssh-server

    安装完成后,SSH服务将自动启动。可以通过键入以下命令来验证SSH是否正在运行:

    sudo systemctl status ssh

    输出显示该服务正在运行,并已启用以在系统引导时启动:

    ● ssh.service - OpenBSD Secure Shell server
    Loaded: loaded (/lib/systemd/system/ssh.service; enabled; vendor preset: enabled)
    Active: active (running) since Sun 2021-08-15 07:13:19 PDT; 23s ago
    
    1b1c
    Docs: man:sshd(8)
    man:sshd_config(5)
    Main PID: 46470 (sshd)
    Tasks: 1 (limit: 2275)
    Memory: 1.3M
    CGroup: /system.slice/ssh.service
    └─46470 sshd: /usr/sbin/sshd -D [listener] 0 of 10-100 startups

    q
    返回到命令行提示符。

    Ubuntu随附了一个名为UFW的防火墙配置工具。如果在系统上启用了防火墙,请确保打开SSH端口:

    sudo ufw allow ssh

    现在,就可以通过SSH连接到Ubuntu系统,推荐使用SecureCRT。

    4.1 SecureCRT 报错

    安装了ubuntu20.04后,以前老版本的SecureCRT通过ssh连接后报错

    Key exchange failed.
    No compatible key exchange method. The server supports these methods: curve25519-sha256,curve25519-sha256@libssh.org,ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521,diffie-hellman-group-exchange-sha256,diffie-hellman-group16-sha512,diffie-hellman-group18-sha512,diffie-hellman-group14-sha256

    4.2 解决方法

    需要修改两个地方:

    4.3 修改ssh_config

    sudo vi /etc/ssh/ssh_config

    打开这两行的注释

    4.4 修改sshd_config

    sudo vi /etc/ssh/sshd_config

    加入下面的代码

    KexAlgorithms curve25519-sha256@libssh.org,ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521,diffie-hellman-group-exchange-sha256,diffie-hellman-group14-sha1,diffie-hellman-group-exchange-sha1,diffie-hellman-group1-sha1

    4.5 重新启动服务并测试

    重启sshd服务

    sudo service sshd restart

    重新连接即可。

    5. 配置静态IP

    因为安装的是虚拟机,要将其改为桥接模式。

    接下来编辑文件:

    sudo gedit /etc/netplan/01-network-manager-all.yaml

    网络配置

    # Let NetworkManager manage all devices on this system
    network:
    version: 2
    renderer: NetworkManager
    ethernets:
    ens33: #配置的网卡名称,使用ifconfig -a查看得到
    dhcp4: no #dhcp4关闭
    addresses: [192.168.1.8/24] #设置本机IP及掩码
    gateway4: 192.168.1.1 #设置网关
    nameservers:
    addresses: [223.5.5.5,223.6.6.6,166.111.8.28,166.111.8.29,202.141.162.123] #设置阿里云,中科大等的DNS

    然后应用修改:

    sudo netplan apply

    6. 安装RISC-V交叉编译工具

    risc-v工具链安装是坑最多的一步,如果你使用的是非20.04,大概率会安装失败。因为只有 ubuntu 20.04 下面才有对应的package的镜像源

    sudo apt install git build-essential gdb-multiarch qemu-system-misc gcc-riscv64-linux-gnu binutils-riscv64-linux-gnu libglib2.0-dev libpixman-1-dev gcc-riscv64-unknown-elf

    7. 安装QEMU

    QEMU用于在我们机器上(X86)模拟RISC-V架构的CPU,编译生成的risc-v平台的机器码,需要通过模拟cpu执行。

    wget https://download.qemu.org/qemu-5.1.0.tar.xz  /home/zhongyi/6S081
    cd qemu-5.1.0
    ./configure --disable-kvm --disable-werror --prefix=/usr/local --target-list=riscv64-softmmu
    make
    sudo make install

    8 测试

    8. 1 下载xv6源码

    从github下载xv6源码,切入源码的主目录,分支切换为util

    git clone git://g.csail.mit.edu/xv6-labs-2020
    cd xv6-labs-2020
    git checkout util

    在项目目录下编译,如果能进入xv6的shell,看到xv6 kernel is booting 则表示实验环境已搭建成功。

    make
    make qemu

    按下ctrl+a松开后再按x退出qemu,这个很关键。

    8.2 检查工具链

    riscv64-unknown-elf-gcc --version

    预期

    riscv64-unknown-elf-gcc (GCC) 10.1.0
    qemu-system-riscv64 --version

    预期:

    QEMU emulator version 5.1.0

    8.3 检查调试工具

    这里需要开启两个窗口,一个运行qemu,一个运行调试器gdb。

    运行qemu的窗口执行make qemu-gdb后等待gdb的连接

    make qemu-gdb
    sed "s/:1234/:26000/" < .gdbinit.tmpl-riscv > .gdbinit
    *** 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::26000

    另外一个窗口运行

    gdb-multiarch -q kernel/kernel

    如果看到如下内容,则基本上环境没有问题了。

    Reading symbols from kernel/kernel...
    The target architecture is set to "riscv:rv64".
    0x0000000000001000 in ?? ()
    (gdb)

    如果是第一次运行,请根据提示先设置好.gdbinit

    echo set auto-load safe-path / >> ~/.gdbinit

    折腾了几天,到此为止,MIT 6.S081 环境搭建终于完成!下面就可以开心做实验了!

    本文参考

    https://pdos.csail.mit.edu/6.828/ 1044 2020/tools.html

    https://www.bilibili.com/video/BV11K4y127Qk

    https://zhuanlan.zhihu.com/p/359384544

    https://zhuanlan.zhihu.com/p/343655412

  • 内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
    标签: