自己动手写编译器,如何制作一个自己的编译器

首页 > 实用技巧 > 作者:YD1662023-05-29 22:46:11

自己动手写编译器,如何制作一个自己的编译器(13)

项目开源: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 处理器上运行。

自己动手写编译器,如何制作一个自己的编译器(14)

环境:

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的其他项目还包括:

(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

(with:陈晟祺,姚沛然)

这是大三上学期组成原理、软件工程的联合实验,在组成原理的 ThinPad 实验板上编写的 MIPS32 处理器。由于仅有 SRAM,处理器不带有 Cache,和 “龙芯杯” 的相比较为简陋。不过,加上之后操作系统和编译原理的成果,还是实现了在自己写的 CPU 上运行自己写的操作系统,同时运行自己写的编译器生成的程序。

Github: https://github.com/trivialmips/trivialmips

(with:陈晟祺)

这是大二下学期数字逻辑设计的项目,也是我的第一个 FPGA 项目。主要是通过 FPGA 接受键盘的输入,将输入转化为控制命令通过串口输出给计算机。同时也通过串口接受计算机传回的控制命令名且解析、执行,修改对应位置的字符,再将字符进行渲染通过 VGA 输出到屏幕。支持 VT220 以及部分 xterm-256color 的控制序列。

Github: https://github.com/Harry-Chen/fpga-virtual-console

这是数据库系统概论的课程项目,用 C 实现的一个 SQL 数据库引擎。实现了大部分常见的 SQL 语句和类型。同时支持多表连接、复杂表达式运算、多主键约束、外键约束、CHECK 约束、UNIQUE 和 DEFAULT 约束、聚集查询、利用 B 树索引的查询优化,同时,它支持任意长度的 VARCHAR 类型。

Github: https://github.com/miskcoo/TrivialDB

大学后的第一个课程项目,利用 Kociemba 算法实现的三阶魔方求解器。大约能够在 1 秒内通过不多于 32 步复原一个三阶魔方。另外,还实现了 Krof 算法,可以计算最少复原方案,不过这需要很长的时间。同时,我利用 OpenGL 对复原过程进行了动画展示。

Github: https://github.com/miskcoo/rubik-cube

其它项目(较为简单,部分没有公开。有需要代码可以联系我)

最后,Miskcoo同学的主页请收好:

Miskcoo’s Space - 一个数学和计算机爱好者的博客

blog.miskcoo.com

讨论地址:

https://www.zhihu.com/question/345718537

编辑:王菁

校对:林亦霖

— 完 —

关注清华-青岛数据科学研究院官方微信公众平台“THU数据派”及姊妹号“数据派THU”获取更多讲座福利及优质内容。

上一页1234末页

栏目热文

文档排行

本站推荐

Copyright © 2018 - 2021 www.yd166.com., All Rights Reserved.