好久没参加tunight了,今天去听杰哥讲用Rust写的OS,收获很大。现记录一下学到的东西。
杰哥是学Stanford CS140e课之后打算参与rCore的开发的。
- Hex Packet Decoder,解析网络包的网站。
- 有人用Go写了操作系统(OSDI 18: The benefits and costs of writing a POSIX kernel in a high-level language)。
- 现在比较新的中断控制器是MSI(X),我之前那个OS用的是8259A,后来是想用APIC代替8253 timer和PIC,其实我已经对这些东西有点晕了,不过似乎也没必要用了。以后会把这个坑填上。
- 一个OJ叫评测鸭,是贵系某同学搞的,跑在自己写的OS上。
- netns,虚拟化网络设备
- ld应该是GCC里collect2组件的一个wrapper。
- QEMU的一些快捷键,比如CTRL+A X退出之类的,调试的时候方便,回头试试。
- rCore似乎用的是BusyBox。WXC之前好像讲过这玩意,还有musl和alpine。rCore也用了musl。
- dig,以前一直没想起来用。需要IP的话比ping少个字母。
- QEMU的monitor可以调试很多东西,比较方便,比如
info registers
。
对于rCore,我问了些问题:
- 为什么用Rust:相比C更严格。不过Stanford CS140e又要改回C了,据说因为斯坦福只有这老师一个人会Rust。
- shell怎么弄的:自己写的,判断命令直接fork进程执行。
- 文件系统怎么弄的:自己写的,跟uCore类似,简单的inode搞搞。
最主要的收获是,我原本写的OS遇到跳转中断服务例程的时候直接挂掉的问题不知道怎么调试了,因为gdb只能精确到汇编级。杰哥提供了一个方案,可以改QEMU的源码,在模拟CPU的执行过程的代码处加printf。杰哥说他这么调试过,QEMU编译很快,只要一两分钟。回头可以试试,可以不用弃坑了Orz。
Comments
注:如果长时间无法加载,请针对 disq.us | disquscdn.com | disqus.com 启用代理。