项目开源:rCore for MIPS32 - Linux 兼容的 rust 编写的操作系统
rCore for MIPS32这个项目已经在Github上开源,感兴趣的读者可以去研究一下:
Github:https://github.com/rcore-os/rCore
rCore for MIPS32 - Linux 兼容的 rust 编写的操作系统(with:陈晟祺)
这是操作系统的课程项目,rCore 是用 rust 编写的一个操作系统,也是由清华的同学编写的。在我们加入之前支持了 x86_64, RISCV32/64, AArch64 三个平台。我们主要将其移植到 MIPS32 上。它最终可以在组成原理课程编写的 MIPS32 处理器上运行。
环境:
Rust toolchain at nightly-2019-03-05
Cargo tools: cargo-xbuild
QEMU >= 3.1.0
bootimage (for x86_64)
RISCV64 GNU toolchain (for riscv32/64)
AArch64 GNU toolchain (for aarch64)
musl-cross-make (for userland musl, or download prebuilt toolchain from musl.cc)
libfuse-dev (for userland image generation)
See Travis script for details.
如何运行:
$ rustup component add rust-src llvm-tools-preview
$ cargo install cargo-binutils
$ cargo install cargo-xbuild --force
$ cargo install bootimage --version 0.5.7 --force
$ git clone https://github.com/rcore-os/rCore.git --recursive$ cd rCore/user
$ make sfsimg arch={riscv32,riscv64,x86_64,aarch64,mipsel} # requires $(arch)-linux-musl-gcc$ cd ../kernel
$ make run arch={riscv32,riscv64,x86_64,aarch64,mipsel} mode=release
$ make run arch=x86_64 mode=release pci_passthru=0000:00:00.1 # for ixgbe real nic, find its pci (bus, dev, func) first
miskcoo的其他项目还包括:
- NonTrivialMIPS - 十级双发射顺序 MIPS32 处理器
(with:陈晟祺,刘晓义,陈嘉杰)
这是参加 “龙芯杯” 的作品,获得特等奖。我们自己实现了一个十级双发射顺序 MIPS32 处理器,包含 32 位浮点单元和一个 AES 加速单元。在其上自行设计了 SoC 同时移植了 Linux 操作系统。可以运行图形界面(X 服务)以及 Python 等一大类程序,在 OpenSSL 上利用 AES 单元加速后吞吐率大约为 10MBps(CPU 主频 80MHz,在 i7-8750H 上不利用 AESNI 指令的实现吞吐率大约为 100MBps)。同时浮点单元能够较快地绘制 Mandelbrot 集的图像,我们还实现了通过变分自编码器(VAE)生成手写数字图像等。
Github: https://github.com/miskcoo/nontrivial-mips
- TrivialMIPS - 五级双发射顺序 MIPS32 处理器
(with:陈晟祺,姚沛然)
这是大三上学期组成原理、软件工程的联合实验,在组成原理的 ThinPad 实验板上编写的 MIPS32 处理器。由于仅有 SRAM,处理器不带有 Cache,和 “龙芯杯” 的相比较为简陋。不过,加上之后操作系统和编译原理的成果,还是实现了在自己写的 CPU 上运行自己写的操作系统,同时运行自己写的编译器生成的程序。
Github: https://github.com/trivialmips/trivialmips
- FPGA Console - 硬件实现的 VT220 兼容终端
(with:陈晟祺)
这是大二下学期数字逻辑设计的项目,也是我的第一个 FPGA 项目。主要是通过 FPGA 接受键盘的输入,将输入转化为控制命令通过串口输出给计算机。同时也通过串口接受计算机传回的控制命令名且解析、执行,修改对应位置的字符,再将字符进行渲染通过 VGA 输出到屏幕。支持 VT220 以及部分 xterm-256color 的控制序列。
Github: https://github.com/Harry-Chen/fpga-virtual-console
- TrivialDB - 简易 SQL 数据库引擎
这是数据库系统概论的课程项目,用 C 实现的一个 SQL 数据库引擎。实现了大部分常见的 SQL 语句和类型。同时支持多表连接、复杂表达式运算、多主键约束、外键约束、CHECK 约束、UNIQUE 和 DEFAULT 约束、聚集查询、利用 B 树索引的查询优化,同时,它支持任意长度的 VARCHAR 类型。
Github: https://github.com/miskcoo/TrivialDB
- rubik-cube - 快速魔方解算器
大学后的第一个课程项目,利用 Kociemba 算法实现的三阶魔方求解器。大约能够在 1 秒内通过不多于 32 步复原一个三阶魔方。另外,还实现了 Krof 算法,可以计算最少复原方案,不过这需要很长的时间。同时,我利用 OpenGL 对复原过程进行了动画展示。
Github: https://github.com/miskcoo/rubik-cube
其它项目(较为简单,部分没有公开。有需要代码可以联系我)
- Mandelbrot-Render,一个高精度 Mandelbrot 渲染器。
- SimpleTomasulo - Tomasulo 算法模拟器。
- SimilaritySearch - 近似查找 / 近似连接算法,以及一个 “互联网打车” 应用。
- OfficeOnline - 在线审批系统。
- RIPRouter - 支持 RIP 协议的路由器。
- TrivialNews - Java 实现的 Android 新闻阅读器。
- 数独 - Qt 编写的数独,可生成及求解不同难度数独。
- 国际跳棋 - Qt 编写的双人国际跳棋游戏。
- 人物信息检索 - Python 编写的爬虫,可以抓取 Wikipedia 的人物信息并且显示。
最后,Miskcoo同学的主页请收好:
Miskcoo’s Space - 一个数学和计算机爱好者的博客
blog.miskcoo.com
讨论地址:
https://www.zhihu.com/question/345718537
编辑:王菁
校对:林亦霖
— 完 —
关注清华-青岛数据科学研究院官方微信公众平台“THU数据派”及姊妹号“数据派THU”获取更多讲座福利及优质内容。