从零开始学RISC:第十五篇
三权分立:USM
我们在 从零开始学RISC:第十三篇 中支持了基础的机器模式M-Mode所需要的CSR寄存器。运行一些简单的程序大抵是够了,如裸机C程序或是汇编等。但在实际生产环境中,这根本不够。
我们考虑更复杂的情况。RISC-V规范规定,M 模式是唯一强制要求的模式,U 模式面向应用,而 S 模式面向操作系统。特权级就是用来给软件栈不同组件之间做保护的,为了后续能更方便地移植,我们这里就要考虑不同的特权级对不同指令进行分层,分出个三六九等。低等指令禁止访问高等资源,就是这种感觉。
放到实际系统里,就是:
U 模式跑用户进程;
S 模式跑内核;
M 模式留给最底层固件/安全监控/平台控制。
这样应用、内核、固件三层彼此分开,任何一层出问题,都不至于直接拿到“整机最高权限”。
实际上,RISC-V 规范本身就把只支持 M 的实现定位在简单嵌入式系统,支持M和U的算是更强调隔离的嵌入式系统,而同时支持M、U与S,才算是面向类 Unix 系统的典型组合。
defines.svh 修改
首先加一些需要用到的宏:
123456789101112131415161718192021222 ...
全栈 Cloudflare 部署的小型在线语音房
前言
最近玩杀戮尖塔2玩的上头疯了,身边人全在玩,每次打开Steam都看到一堆正在联机爬塔的。
然后好友有的用KOOK有的用小黑盒有的用微信电话……太乱了。所以自己整一个多人在线语音房:
AI
release
commit
license
Online Demo
特点
100% AI生成,不含任何人工代码
基于全栈Cloudflare服务,轻松白嫖部署
简易控制台管理
定期清理
高通与小米,造就了历史上最完美的一次『合作』。
现在是大越狱时代!
Butterfly主题中自定义Highlight.js语法高亮
前言
看了一下 Highlight.js 的说明文档,不支持RISCV的汇编。只能自己摸索怎么高亮了。
因为Hexo在启动时就会对Markdown文件进行编译并转换成HTML文件,因此修改本地安装好的node库就行。
Highlight.js
在Hexo项目下的node_modules\highlight.js\lib内新建riscvasm.js和riscvasm.js.js:
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130/*Language: RISC-V Assembly ...
从零开始学RISC:第十四篇
CoreMark移植
功能验证和CSR都做完了,该跑个分了。
CoreMark 是由 EEMBC 推出的一个处理器基准测试(benchmark),主要用来衡量 嵌入式处理器、MCU 和 CPU 内核的整数运算性能。它的设计目标是尽量只测试“处理器核心本身”的能力,而不过多受操作系统、外设或平台差异影响,因此很常被用来做不同芯片之间的横向比较。
源代码获取
源代码可以在eembc/coremark获取。
目录结构
CoreMark的库底下有很多文件。我们只需要关心barebones文件夹下的内容即可,这是适用于裸机的移植方案。
1234567891011121314151617181920├── barebones/ # barebones 移植│ │ # 这两个文件需要修改│ ├── core_portme.c # coremark 的平台移植层实现模板│ ├── core_portme.h # 核心可移植层头文件│ ││ ├── core_portme.mak # Makefile│ ...
Python脚本实现PDF书签的修改与导入导出
前言
在 使用PDFBookmark-Exchanger对PDF书签导入导出 中用了个Java写的软件导入导出。臃肿又不好看!还不如TerminalUI呢。遂拿Python重新写了一个。感谢Claude Opus 4.6。
代码
需要PyMuPDF才能正常运行。
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815 ...
小米BE3600Pro折腾记录
前言
在宿舍把吸顶灯改造成了蓝牙mesh控制的,自然想整个中枢网关。单独买一个网关太不划算,不如换个路由器。把原来的BE3600换了BE3600Pro。
上恩山论坛搜了下,这玩意可玩性很高,比家里的BE6500Pro好很多,可以免刷机解锁SSH,还原生支持Docker。折腾一下。
参考教程:小米路由器 BE3600 Pro 笔记:初步分析、折腾路由 Docker(一)-腾讯云开发者社区-腾讯云
开启SSH
去官方库下载解锁工具:openwrt-xiaomi/xmir-patcher: Firmware patcher for Xiaomi routers,随后按照TUI的指令执行即可。我的路由器固件版本是1.0.74,可以一键解锁。默认root密码是root,建议自己修改一下。不过内网用没啥大问题。
在进行下面操作之前,务必提前备份所有数据(Create full backup)!
但是在解锁并固化SSH后,在Windows上使用ssh root@192.168.31.1后,会提示:
12Unable to negotiate with 192.168.31.1 port 22: n ...
酒桌文化,是中华文化中最『精髓』的『糟粕』。
湎酒更宜戒、平地有深堑。
Waline迁移LeanCloud数据库到MongoDB Atlas
前言
在群里看到有人说LeanCloud要停止服务了。登上评论管理界面看了一眼,还真是,好在期限很宽泛,直到明年才结束。好在数据不多,趁早就迁移一下吧。
前置准备
导出备份
进入LeanCloud,在导出界面选择“备份导出”,因其可用于mongorestore直接导入MongoDB数据库。申请后会提示12h内发送下载链接到邮箱,实际上两个小时就收到邮件了,很快。
理论上讲只要下载名字开头不为_的资料,但保险起见都下载一下吧。将压缩包全部放到一个目录下,如C:\Users\0D000721\Downloads\Waline下。
注册 MongoDB Atlas
似乎Vercel内也可以注册MongoDB数据库,但是配置精细度不如自己在MongoDB网站上注册。
访问官网:https://www.mongodb.com/
注册完之后,选择新建一个集群(cluster)。记得一定要选择最右边的Free计划。可以选三个服务商的数据库:AWS、GCP和Azure。经典御三家了。
之后会配置放行的IP。理论上最安全的是将Vercel的IP池放入,但是我也没什么敏感内容,干脆就全放行了。填写0. ...
禁止QQNT自动更新
前言
因为装了BStar插件,仅适配特定版本的QQNT,所以要关闭QQNT的更新。但某一个版本后,自动更新的开关从原本的“不检测更新”改为“不自动安装更新”——也就是说,启动后仍会自动检测并下载更新。好恶心!
解决方案1——写入权限控制
使用火绒的安全分析软件对软件行为进行监控,发现其会下载安装包到安装目录下的versions文件夹内。因此,只需修改该文件夹权限,改为“禁止创建新的文件/文件夹”即可。
右键versions文件夹,选择属性—安全—高级,随后添加一个新的条目,填写如下:
保存并退出,这样就将该文件夹内的权限设置为禁止新建文件了,但原有的文件以及子文件夹内不受影响。
解决方案2——FQDN网络流量过滤(未生效)
搜了一下网络日志,QQNT下载安装包会从dldir1.qq.com下载。只要让它连不上这个域名不就行了?
聪明的你一定想到了修改hosts文件。遗憾的是,傻逼的QQ会自动检测,而一旦检测到存在相应域名的记录,就会自动删去该记录,使其不生效。化腾司马了。
而Windows面板内的防火墙只能设置程序的出入站,无法做到域名级控制,因此需要通过Powershell的动态关 ...



![[星港游记] 满月与后期](https://webpn.esing.dev/img/starport.webp)
