ARTICLE

树莓派新板参数提前泄露,靠一份设备树文件就能读出来?

以更稳定的阅读节奏、更清晰的信息头部与更顺手的延展入口,让单篇内容页保持高效阅读体验。

树莓派新板参数提前泄露,靠一份设备树文件就能读出来?
READ MODE TECH LAYOUT

树莓派新板参数提前泄露,靠一份设备树文件就能读出来?

树莓派刚刚泄露了 Pi Zero 3W 的信息,方式不是发布会,也不是产品页,而是一份描述 Pi Zero 硬件的设备树(DeviceTree)文件。正是从这份文件里,人们读出了它搭载 BCM2711 (也就是 Pi 4 的 CPU)、用上了 PCIe(甚至可能已经引出)、带有一个板载电源键、多了一颗电源指示灯,还提供 eMMC 选项。 如果非要猜,这会是第一块双面布局的 Pi Zero 板;如果再抱点希望,它终于该用上 USB-C 了。不信的话,设备树文件就摆在那里,字里行间的信息其实非常好读。 设备树文件的作用,是告诉 Linux 内核或其他系统内核:该期待什么 CPU、该加载哪些驱动、板子上暴露了哪些接口,以及这些接口上接着什么设备。有时候,一份像样的设备树文件,就是让你手里那块被冷落的单板电脑跑上现代 Linux 系统的唯一必需品。 这类文件其实就在你身边。你的手机有,路由器有,ARM 笔记本有,各种单板电脑更不用说。有些设备树文件并不友善,只是 Linux 内核与专有驱动之间薄薄的一层;这类东西常见于某些厂商 CPU 的手机里。大多数设备树文件则只是老老实实做自己的事。 先要知道的事 设备树文件描述硬件,就像 HTML 描述网页元素。它不具备图灵完备性,所以单靠设备树是跑不了《毁灭战士》的——除非你碰上那种不友善的实现。设备树源文件(扩展名 .dts 、 .dtsi )会被编译成内核可读的二进制文件( .dtb 、 .dtbo )。就算手里没有源码,反编译并改动它也相对容易。 处理设备树文件并不难。编译与反编译命令简单到不能再简单,也很容易查到;那个编译器同时也是反编译器,一个小工具,一条 sudo apt install device-tree-compiler 就能装上。在为 Blepis PDA 干活时,团队写了一个脚本,为 Blepis 可能搭配的不同屏幕批量编译一堆 overlay,这大概是最直白不过的事情之一。 设备树文件分几类:include、基础文件和 overlay。include( .dtsi )通常存放 CPU 相关信息,多是些你永远不会去碰的无聊内容,比如时钟定义。基础文件完整描述一块板子,内核加载它,就知道该怎么对待这块板。overlay 一般是可选的,用来在基础设备树之上“添加”功能,既可以描述额外设备,也可以修改已经描述过的设备或接口。你在树莓派的 config.txt 里肯定见过 overlay 这个词。 想靠阅读来学设备树,可以去翻树莓派的 overlay 源码目录,从 README 开始。里面内容极多,大部分很无聊,但仔细找能找到金子。顺带一提, broadcom/ 目录下的基础设备树文件也值得一看,能让你了解不少树莓派硬件本来的样子。 从大量例子中学 多数时候你想写的是 overlay,而不是基础文件。写 overlay 要学的东西不多,因为可以学的地方实在太多。入门阶段,只需要掌握写出一个能用的 overlay 所需的最低限度知识;而 99% 的情况下,这意味着拿一份现成的 overlay 稍作修改。 树莓派有一份简单又格外啰嗦的 LED overlay,注释比代码还多,简直像是专门给人练手用的。它描述一个接在特定 GPIO 上的 LED、它的默认状态、标签,甚至还有覆盖项,让你可以随时替换这些参数。之后,在运行中的系统上用一条命令就能加载这个 overlay(这部分是树莓派独有),去拨弄那颗 LED,把它变成心跳灯或 CPU 活动信号,愿意的话还能写进 config.txt 永久加载。文件注释齐全,几乎解释了一切。 还有一份 overlay 描述接在 Pi 上的 I2C 触摸屏:把引脚编号改成对得上的,编译、加载,内核应该就会自动识别它。另一份 overlay 用来关闭 Pi 上的 WiFi——把两个变量设成“disabled”,看起来是不是超级简单?再有一份描述 SPI 以太网控制器,它定义了所用引脚,还特意把用到的那个 SPI 接口设为“disabled”,免得你从用户空间误写进去。 有时树莓派自家的 overlay 过于复杂,反而不利于学习,光看数量就知道。别担心,例子还有很多

about image
觉得有用?分享给朋友

让更多人看到这篇内容

推荐阅读