当 Linus Torvalds 厌倦了 Linux 内核时,他会做什么
想象一下,Linux 和 Git 的创始人在业余时间决定深入研究模拟电路设计和数字音频处理。其成果就是 GitHub 上的 GuitarPedal 项目。这是一个功能完整的吉他多效果踏板,Linus 本人使用 KiCad 设计了印刷电路板,并用 C 语言编写了固件。
这个项目源于他之前废弃的旧原型。之前它使用模拟电位器,配置起来非常麻烦。现在这个踏板配备了 OLED 屏幕、一对编码器和一个全新的微控制器。
模块化硬件和微型连接器
硬件采用模块化、可拆卸的设计。Linus 没有将整个电路布置在一块大板上,而是将设备分成了四个独立的模块。
第一块板载有来自 Raspberry Pi Pico 2 系列的 RP2354 微控制器。第二块板搭载 TI TAC51 音频编解码器,用于将吉他信号数字化。第三个模块包含 9V 电源接口和音频插孔,第四个模块则负责与 128x128 屏幕、脚踏开关和编码器的接口连接。

模块之间通过扁平的 12 针 FFC 电缆连接。数据传输方面,控制使用 I2C,音频使用 I2S。电路板采用间距仅 0.35 mm 的广濑 BM28 连接器。Torvalds 在 README 中明确表示,手工组装这种微型元件相当困难。但这些设计使得所有组件能够容纳在一个紧凑的外壳中。
作者强调:模块化设计是为了方便实验布局。如果你打算复刻这个设计,更合理的做法是将编解码器直接放在连接板上,微控制器放在控制板上。这样可以避免双面组装和复杂的排线。

控制与固件编译
外壳顶部是一块单色显示屏,下面是两个带内置按钮的旋转编码器和两个脚踏开关。
上面的编码器用于改变当前参数的值,按下它可以切换到列表中的下一个参数。下面的编码器则用来浏览各种效果。左边的脚踏开关用于通过脚踩来启用或禁用所选效果,右边的开关则将踏板切换到信号直通模式。
固件编译过程简单直接,没有不必要的复杂步骤。源代码使用纯 C 语言编写,并绑定了 pico-sdk 和 tinyusb。在 Linux 上的编译过程如下:
git clone https://github.com/torvalds/GuitarPedal.git
cd GuitarPedal/Software
make prep
make
在 build/ 目录中,会生成已编译好的 blink.uf2 文件。要烧录设备,需要在通过 USB 连接时按住两个编码器,然后将文件复制到出现的虚拟驱动器中。
DSP 内部揭秘
这个仓库最有趣的部分在软件处理文件夹中。Torvalds 编写了自己的一套 DSP 算法。计算以 32 位浮点格式运行。
以下是这款踏板已经实现的功能:
- 噪声门。阈值可低至 -85 dBV。代码计算起音和释音参数,以消除拾音器嗡嗡声,同时不会快速切断琴弦的延音。当噪声门触发时,状态 LED 会改变亮度。
- 压缩器。可调节起音时间、释音时间和补偿增益电平。
- 带信号限幅的激励。与标准的波形削波不同,Linus 采用了信号折叠方式。当振幅超过阈值时,波形不会被切断——而是折返回来。这会产生丰富的谐波频谱。
- 回声和延迟。Echo King 效果是从 Hothouse 项目移植过来的,模拟了 Maestro Echoplex 磁带延迟。附近也有基本的移相器和镶边器。
- 移调器。无需繁重的快速傅里叶变换即可工作。该算法使用带有两个相位的环形延迟缓冲器,并在接缝处进行正弦平滑。添加反馈后会产生带有逐渐音高漂移的回声效果。
- 十段均衡器。每个频段可在 -20 dB 到 +20 dB 之间调节,当前频响曲线会在屏幕上以图形方式显示。
代码还有一个通过 USB 向电脑发送音频的存根,尽管 Linus 本人警告说这部分不够稳定。
为什么要关注这个项目
GuitarPedal 仓库的吸引力不仅在于它是一个成品乐器,更在于它是一个人完成全流程嵌入式开发的清晰范例。
在这里你可以学到:
- 现成的 KiCad 原理图和布局,包含紧凑外壳设计的实例
- 在 RP2040 和 RP2350 芯片上通过 I2S 与音频编解码器交互的原生 C 代码
- 清晰的吉他效果数学算法,无需外部重型库
- 基于编码器的 OLED 屏幕简单 UI
如果你想了解微控制器上的 DSP,或者想看看 Torvalds 在 Linux 内核之外如何编写代码,研究这个仓库绝对值得。
相关项目