Day 30:赛後感言

这其实是有点长的故事,但我觉得这种缘分有点有趣,所以就决定在最後一天整理一下。

从开赛前几天说起

在比赛开前的一阵子,无意间把 Linux Foundation 举办的研讨会依照主题,整理了一份 资料。刚好在一个念德文的学姊揪的 Python 读书会中,认识了同校电机系的学长 shnovaj30101 学长,也知道了有这样一个比赛。所以就决定拿这个刚整理好的素材库去设计实验写看看吧!

核心维护者的断简残篇?

「断简残篇」是 doxography 的中文翻译 (可能不是很好的翻译),这个术语是研究「苏格拉底以前的古希腊哲学」的学者常用的词。现代学者在研究苏格拉底以前的哲学家时,往往会碰到着作佚失的问题。因此他们的研究方法,就是看其他同期人物口中是怎麽说这位哲学家的。比如说,如果有发现当时有人呛哲学家 A 的纪录:

「你这家伙脑袋坏去!居然觉得你我万物都是水构成的!」

这句话在研究「先苏哲学」的现代学者眼里,就会变成:

「原来哲学家 A 曾经主张万物本质是水!」

这类的资料就称作 doxography,中文通常会称呼上面这种资料为「先苏哲学家的断简残篇」。有一天我就突然觉得:这跟之前学 Linux 的状况好像满像的!专门的书籍几乎都是 10 年以上的书,不知为何 2010 年之後,几乎没有像 LDDLinux Kernel Development 这种专书。而且这几本书看了也不知道哪边是过时的,往往要另外花心力去考证。核心文件有时候又写得很简略,也得担心自己理解有没有正确。

刚好之前在机械系上课时,有整理资料并且用 Hackmd 的 Book Mode 整理成册的习惯。不管是像 机械制造数位控制导论系统动态学 这种比较专业的科目,还是 西洋哲学史国际关系 这种比较文组的科目,或是像代数导论分析(高等微积分) 这种数学课。既然这样,不如发挥一下之前整理笔记的精神,整理一下过去几年 Linux Foundation 的演讲。看看能不能像研究先苏哲学的学者们那样有所启发。整理完之後看起来就像这样

整理完的时候发现自己真是嗨到不行突然有种「我刚刚是听懂台上的人在讲什麽了吗?」的感觉,所以就很想要真的去弄弄看上面的程序有什麽。刚好之前在一个 Python 的读书会上,认识了电机系的学长 shnovaj30101 学长,知道了有这样一个比赛。所以就决定拿这个刚整理好的素材库去设计实验写看看吧!

那要从哪边开始呢?这时就突然想到机械系的学生常常会用一些很 Maker 的方法来做专题,不过满多时候就仅止於 Maker 式的工具,不如就来想想这些东西在 Linux 中是什麽样子好了。而且就有之前专题留下来的现成硬体,非常方便。恰好之前也参与过 (空一格) jserv 老师的课程几次,对於系统程序跟核心的一些背景知识也多少有一些基本概念。不过除了学到电脑科学的知识以外,影响最深的其实是这门课大力提倡的方法论:不确定的东西要查文件或规格、尽量找第一手资料、不要盲目阅读程序码、要设计实验验证、要尽量留下纪录等等。总之,现在有了地图,也有了基本的方法,也有了硬体。看起来是一件有趣的事。

Never Waste a Good Crisis

虽然说是如此,但一开始还是有一点晕头转向。比如觉得装置树到底在干嘛、 probe 一直失败等等。不过这个问题意外地很快解决了。其中一个原因是今年的 OSS NA 因为疫情的关系改成线上,而且多了超级无敌多tutorial, 到 装置树 到从 把 Data Sheet 的资讯反映在装置树上U-bootSPI、I2C ,根本一条龙式整个包办一堆硬体相关的入门主题。这麽完整的资源,有的还是第一线的维护者出面,亲自讲解自己维护的子系统。根本就是第一手资料中的第一手资料啊!

除了这之外,在一些演讲中也知道了以前不知道或不熟练的工具:比如说 eBPF 跟 ftrace。这些工具根本就是 Linux 核心的 X 光机,瞬间就可以看到核心内部在干嘛了!在盯着 Bootlin 的 elixir 点来点去找原始程序码之前,先用这些工具追踪一遍,再去找出现过的东西就好,追踪程序码的效率大大提升。不趁这个好机会把他们学起来,实在是太可惜了,那就用铁人赛的机会把他们弄一遍吧!

检讨

与其说这是有系统的文章,不如说是学习过程中的实验记录,几乎每一个子系统都是从零开始学习。而且满常两三天前才在想「接下来应该可以试试看这个部分」的。所以也常常出现「本来以为行为是 A,结果发生了完全不在预期内的事情」,以致於写的时候有些赶稿性质,笔误也随之而生。而且实作的程序都是一些 trivial 的程序,比较不敢大胆的尝试,毕竟还是会担心每天截稿前还没有做出来。除此之外,也只理解了一些跟周边有关的子系统而已,跟真正的核心恐怕还有点距离。

不过,相较於 30 天以前,在这 30 天之中,用相对好取得的硬体 (Raspberry Pi & Arduino) 开辟了一个可以去实验与观测核心功能的游戏场,方便日後继续深入学习。也培养了比直接阅读原始码还要有效率的理解与实验方法。这些大概就是这 30 天最大的收获了!

最後,虽然满多人会留自己的部落格或粉专,不过我其实比较希望留 hackmd 的帐号


<<:  Day30 - 结语、推荐

>>:  Day 30 - 平步青云,漫步云端 - 总结及开放测试预告。

[第六只羊] 迷雾森林建筑工事 V 哈罗世界安安vue

天亮了 昨晚是平安夜 关於迷雾森林故事 Rock you,Rock you,Rock you 敲家门...

神速改出专属你的 Bootstrap -金鱼都能懂的Bootstrap5网页框架开发

Bootstrap已是目前全球被大量网页开发者使用的一个网页UI框架了,其特色在於使用简单,开发快速...

[Day29] Windows Privilege Escalation

前言 昨天的Linux PrivEsc中已经介绍过提权的基本概念了,所以今天就直接进入正题吧 正文 ...

使用python 模拟使用者输入 for Win

故事是这样的 ... 有个专案需要在执行过程中输入某些文字, 但不能使用按键精灵之类的软件去使用. ...

Day 30 - 完赛啦!! 做个总结

睽违两年的完赛!!! 经过这两年真的感受到时间跟工作的压力,比起两年前待业中可以好好撰写文章的自己,...