电子工程师技术服务社区
公告
登录
|
注册
首页
技术问答
厂商活动
正点原子
板卡试用
资源库
下载
文章
社区首页
文章
【MIT6.S081/6.828】手把手教你搭建开发环境
分 享
扫描二维码分享
【MIT6.S081/6.828】手把手教你搭建开发环境
计算机基础
操作系统
嵌入式软件
嵌入式与Linux那些事
关注
发布时间: 2021-10-11
丨
阅读: 673
@[toc] > 秋招的时候,操作系统的八股文背了不少,但是仍然是缺乏动手实践的经历。对操作系统如何工作,用户程序如何运行,与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)。Robert 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 **学习资源:** - 课程官网:https://pdos.csail.mit.edu/6.828/2020/overview.html - 课程讲义:https://pdos.csail.mit.edu/6.828/2020/xv6/book-riscv-rev1.pdf - schedule:https://pdos.csail.mit.edu/6.828/2020/schedule.html - 视频:https://www.bilibili.com/video/BV1Dy4y1m7ZE ## 2. 安装ubuntu20.04 Ubuntu基本上是每半年更新一次,截至2021年7月30号,现在已经推出了20.0的版本了。 在第一次进行搭建环境时,使用的是18.0的版本,这个版本在安装环境的时候,需要自行安装、编译Riscv工具链,但是这个过程很耗时,容易出现错误。在被百般折磨之后,选择了在**Ubuntu20.04**上进行环境的搭建。省去了安装工具链的繁琐操作。 VMware下载链接:[点击这里](https://www.xitmi.com/2417.html) Ubuntu下载链接:[点击这里](https://ubuntu.com/download/desktop/thank-you?version=20.04.2.0&architecture=amd64) ## 3. 更换源 ### 3.1 更换/etc/apt/sources.list文件里的源 安装好ubuntu20.04后,默认的软件更新源是国外的,在国内使用速度很慢,需要更换成国内的源,这样才能正常安装和更新软件。 ### 3.2 备份源列表 Ubuntu配置的默认源并不是国内的服务器,下载更新软件都比较慢。首先备份源列表文件**sources.list**: ```bash # 首先备份源列表 sudo cp /etc/apt/sources.list /etc/apt/sources.list_backup ``` ### 3.3 打开sources.list文件修改 选择合适的源,替换原文件的内容,保存编辑好的文件, 我们选择的是中科大源。 ```BASH # 打开sources.list文件 sudo gedit /etc/apt/sources.list ``` 编辑/etc/apt/sources.list文件, 在文件最前面添加阿里云镜像源: ```bash #中科大源 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 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 刷新列表 ```bash sudo apt-get up
date sudo apt-get upgrade sudo apt-get install build-essential ``` 下载速度瞬间就起飞了。 ## 4. 安装SSH 默认情况下,首次安装Ubuntu时,不允许通过SSH进行远程访问。 在Ubuntu上启用SSH非常简单。以root 用户或具有sudo特权的用户执行以下步骤: 使用打开终端`Ctrl+Alt+T`并安装`openssh-server`软件包: ```bash sudo apt : enabled) Active: active (running) since Sun 2021-08-15 07:13:19 PDT; 23s ago 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端口: ```bash sudo ufw allow ssh ``` 现在,就可以通过SSH连接到Ubuntu系统,推荐使用SecureCRT。 ### 4.1 SecureCRT 报错 安装了ubuntu20.04后,以前老版本的SecureCRT通过ssh连接后报错 ```bash 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 ```bash sudo vi /etc/ssh/ssh_config ``` 打开这两行的注释 ![](https://img-blog.csdnimg.cn/img_convert/ec1900d69af629412f711b32986daf68.png) ### 4.4 修改sshd_config ``` sudo vi /etc/ssh/sshd_config ``` 加入下面的代码 ```bash 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服务 ```bash sudo service sshd restart ``` 重新连接即可。 ![](https://img-blog.csdnimg.cn/img_convert/18e89a9388550e53fc759908e878794d.png) ## 5. 配置静态IP 因为安装的是虚拟机,要将其改为桥接模式。 ![](https://img-blog.csdnimg.cn/img_convert/012c5a630f8c5ec430d3d70c2b20e081.png) ![](https://img-blog.csdnimg.cn/img_convert/64bd7e8a6c352108f9dc52aa1ae6cdd6.png) 接下来编辑文件: ```bash sudo gedit /etc/netplan/01-network-manager-all.yaml ``` 网络配置 ```bash # 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 ``` 然后应用修改: ```bash sudo netplan apply ``` ## 6. 安装RISC-V交叉编译工具 risc-v工具链安装是坑最多的一步,如果你使用的是非20.04,大概率会安装失败。因为**只有 ubuntu 20.04 下面才有对应的package的镜像源**! ![](https://img-blog.csdnimg.cn/img_convert/292626ca595f199e599dab4031759f60.png) ```bash 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执行。 ```bash 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. ## 拉取特定分支到本地 git clone -b pgtbl git://g.csail.mit.edu/xv6-labs-2020 ``` 在项目目录下编译,如果能进入xv6的shell,看到xv6 kernel is booting 则表示实验环境已搭建成功。 ``` make make qemu ``` ![](https://img-blog.csdnimg.cn/img_convert/839b2af852d517c9557b5f36abc40b32.png) 按下ctrl+a松开后再按x退出qemu,这个很关键。 ### 8.2 检查工具链 ```bash riscv64-unknown-elf-gcc --version ``` 预期 ```bash riscv64-unknown-elf-gcc (GCC) 10.1.0 ``` ```bash qemu-system-riscv64 --version ``` 预期: ```bash QEMU emulator version 5.1.0 ``` ### 8.3 检查调试工具 这里需要开启两个窗口,一个运行qemu,一个运行调试器gdb。 运行qemu的窗口执行make qemu-gdb后等待gdb的连接 ```bash 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 ``` 另外一个窗口运行 ```bash gdb-multiarch -q kernel/kernel ``` 如果看到如下内容,则基本上环境没有问题了。 ```bash Reading symbols from kernel/kernel... The target architecture is set to "riscv:rv64". 0x0000000000001000 in ?? () (gdb) ``` 如果是第一次运行,请根据提示先设置好.gdbinit ```bash echo set auto-load safe-path / >> ~/.gdbinit ``` 折腾了几天,到此为止,MIT 6.S081 环境搭建终于完成!下面就可以开心做实验了! > 本文参考 > > https://pdos.csail.mit.edu/6.828/2020/tools.html > > https://www.bilibili.com/video/BV11K4y127Qk > > https://zhuanlan.zhihu.com/p/359384544 > > https://zhuanlan.zhihu.com/p/343655412 >
原创作品,未经权利人授权禁止转载。详情见
转载须知
。
举报文章
点赞
(
0
)
嵌入式与Linux那些事
关注
评论
(0)
登录后可评论,请
登录
或
注册
相关文章推荐
MK-米客方德推出工业级存储卡
Beetle ESP32 C3 蓝牙数据收发
Beetle ESP32 C3 wifi联网获取实时天气信息
开箱测评Beetle ESP32-C3 (RISC-V芯片)模块
正点原子数控电源DP100测评
DP100试用评测-----开箱+初体验
Beetle ESP32 C3环境搭建
【花雕体验】16 使用Beetle ESP32 C3控制8X32位WS2812硬屏之二
X
你的打赏是对原创作者最大的认可
请选择打赏IC币的数量,一经提交无法退回 !
100IC币
500IC币
1000IC币
自定义
IC币
确定
X
提交成功 ! 谢谢您的支持
返回
我要举报该内容理由
×
广告及垃圾信息
抄袭或未经授权
其它举报理由
请输入您举报的理由(50字以内)
取消
提交