2025回顾

上课

  喜欢一周上8节操作系统吗?可太有操作了 :)

  喜欢一学期上3门思政吗?他的出身啊,红得发紫!

做实验

尼卓计网实验—OpenWrt

  尼软2023级开始有新的实验,使用OpenWrt框架检测流量。   在普通班基础上,增加烧录至路由器实机作为必做内容,实际上却是降低难度,因为直接插线就有ssh用,可以不用折腾VMware。

  只写了CLI界面,所以附一张逼格波斯的帅脸。

尼卓的OS实验

  一共10个实验,牛🐮大了
  这10个魔丸分别是

  • 哲学家吃饭 (用pthread,信号量,共享内存,消息队列分别实现)
  • 生产者消费者 (同上)
  • 写一个ls
  • 写一个cp
  • 做一个能并发的 Linux WebServer( ?)
  • 写一个 Char 设备
  • 写 V4L2 设备驱动,并用电脑前置摄像头拍下帅照一张(我最后用ffmpeg转出的,但是照片搞丢了)
  • 配置 Keil5 工程
  • 在开发板上跑 uC/OS(忘记是2还是3了)
  • 改良 uC/OS 的调度算法

  可以很清楚地看到前面4个实验和后面6个根本不是一个画风的,之后采访其他方向的同学,了解到尼卓的实验大纲很有可能超级拼装来的,前4个是普通班实验,后面的不知道哪弄过来的。

  说实话后面三个都是水过去的,因为给的开发资料牛头不对马嘴,线也少给一根,当然更主要的是我根本不会嵌入式

  该课的期末考试最后一题是手写一个Linux内核态模块,实现ls的功能,并能用dmesg查看,但是也没说到底写到什么程度(一切尽在不言之中)

  没发图中红框的这根线,图是之前学长的做实验拍的。

Arm实验

  全程写 Arm汇编/C,然后仿真看看波形,也不上板,偏简单,没啥好说的

马原小科普文

  题目是《编译器的魔法:从“人话”到“机器语言”的哲学思考》(逆天)

做项目/课外实验

rotvi

  一个类似 vi 的 CLI 文本编辑器小玩具

  对比展示如图

  整体比较简单,但是 ncurses 的接口太复古了,文本上色很难受。
  token类型识别用的是正则表达式(所以无法精准识别),其实完全可以考虑内置一个 C 的前端获取 Ast 信息。
  地址:https://github.com/Leakbox258/rotvi

新 OS

  fedora 42,稳定性挺好,rpm 和 dnf 也还可以,N卡支持意外的好(不知道啥时候的一个更新之后),不过弄 CUDA 需要上点魔法,但是已安装字体太少,ibus更是一坨。

gnalc

  编译系统实现赛(华子赞助,奖金不老少)的参赛作品,拿了一个全国第一和一个外卡二等奖,被@caozhanhao带飞了说是。

  从24年11月份做到25年8月份,尼卓不得不评鉴的马拉松比赛,累积约13万行的修改

  由于我有一个单独的分支,所以交的很多 commit 都一坨一坨的,习惯不好。
  地址:https://github.com/0x676e616c63/gnalc

C-Blunt

  本意是补上编译器前端和中端的一些知识,C 编译到 mlir-scf,最后展平到 llvm-ir,但是不透明指针和隐式类型转换我又给执行坏了。
  最后上不去又下不来,变成白银编译器了。
  地址:https://github.com/Leakbox258/C-Blunt

rustlings & rcore

  有 rust 和 OS 基础的情况下,rcore 部分大概一周就能看完做完,反正挺轻松的。
  宣传一下尼软的 rcore 训练营:https://github.com/uestc-workshop-os-camp   有意向春夏季打全国大学生操作系统实现赛/挑战赛的请联系负责人或者加QQ群了解。

etoy

  魔改 google 的 mlir 教程得到的 tensor 计算器,作为对 mlir 实现 ai-compiler 的一点基本的了解和尝试。   ps:LLVM 编译笑传之吃撑爆,最后只能限制到只用4个核
  地址:https://github.com/Leakbox258/etoy-mlir

riscv-as

  可拓展的 RISC-V 汇编器,现在能支持 riscv64-gc 所有的指令/伪指令,不过宏指令支持比较少。   指令和伪指令的模式配置在.def文件中,并且所有这方面的过程都是constexpr的。

  • 对指令的 Encoding 模式直接 slice 然后记录即可。
  • 对于伪指令则是写了一个 constexpr Lisp 解析器,毕竟汇编的OpCode前置确实很像 Lisp 的算符前置。灵感来源:https://github.com/AdUhTkJm/sysy-competition 中   RegularFold 优化中设计的DSL

  ps:IDA 拿来看 Obj 确实好用,虽然已经不打 CTF 了

  地址:https://github.com/Leakbox258/riscv-as.git

Tai-e-assignments

  今年看了853分钟甜品专家 :)

  地址:https://tai-e.pascal-lab.net
  前3个实验都不算难,毕竟写过类似的东西,不过 ir 和 cfg 和之前接触过的不一样,加上我在此之前都没学过 java,所以看代码花了不少时间。
  指针分析到别名分析开始上强度,java 写起来很啰嗦,debug花了不少时间。
  最后的污点分析,OJ上最后的一个testcase卡了快一个月(虽然是中途做别的去了)

riscv64 软核

  (某种意义上的入组笔试)
  本来打算的是跟着一生一芯的进度学的,于是连了三四天的logisim。

  大概完成E阶段之后(补习数电知识之后),基本就是跳着看文档,找其中有用的东西搬到我的项目中再改改配置。
  在完成了一个单周期 MVP 之后,就从 Verilog 改用了 SystemVerilog,Verilog 没 struct 根本不是给人看的。
  之后的经历是:

  • 哈佛架构改冯诺伊曼架构
  • 64位加法链太长,所以得单周期改5级流水线
  • Quartus Lite 对 SystemVerilog 支持有限所以用工具转回 Verilog
  • 大型 reg/logic 数组难以综合,故改成调 IP 核
  • IP 核构建的同步 RAM 需要缓冲,又加两个流水级
  • 前递逻辑导致关键路径太长,再加一级流水级
  • 新的前递逻辑导致出现一条新的关键路径,重写 ALU 部分,提升并行性

  其实就是面多加水水多加面的过程,最后保持了在FPGA默认的50MHZ下能时序收敛,无需PLL调频。
  可以拿来做编译系统的测试平台:)

  地址:https://github.com/Leakbox258/riscv64i

新建文件夹

  包括不限于 https://opencamp.cn 上一大堆 fork 了但是一直没写的东西,综设的 Linker,还有 SICP .

Game🥌

MGSV

  I’m afraid it’s been…10 years
  **剧烈地振动**

S.T.A.L.K.E.R.2

  将近200个小时的游戏时间,2次哈基夫结局,1次牢疤结局

  • 1.6更新夜视仪之后基本就是一个完全可玩的状态了,不过罗斯托克或者熔渣堆这种npc很多场景还是会卡,内存泄漏还是没修
  • 我看这1.7更新搞得不错,变异体极大丰富,潜行者基本消灭,怪物内战、神器刷新(指能刷出切尔诺贝利之心,史特列牢克的一辈子)也受重视,如果加上更多奇美拉和大脚怪,1.7就是我们理想中的特异区
  • 1.8加了一个大概3小时流程的支线,僵尸电台本意是好的,但是流水账的任务设计又给执行坏了。
紫球

  最喜欢的玩法是沙漠之旅3v3,开局直接拉基地偷掉对位一家 AI 变成3打2

Stalker Anomaly

  一边玩儿一边看 Log 然后修 Bug 说是
  图为 GAMMA 0.94




Enjoy Reading This Article?

Here are some more articles you might like to read next:

  • Google Gemini updates: Flash 1.5, Gemma 2 and Project Astra
  • Displaying External Posts on Your al-folio Blog
  • Compiler BackEnd Pre
  • ONNX-opt 0
  • 内核模块开发环境及调试