我的任务是为以太网和 LED 等事物实现一个具有固定名称的自定义层。
它在 x86 和 ARM 设备上必须相同。因此,电源 LED 和 eth1 对于应用程序而言始终相同,但未连接到相同的硬件引脚。从我的角度来看,我可以通过设备树分配在 ARM 上执行此操作。但是我可以在基于 x86 的板上使用设备树来执行此操作吗?这是好习惯吗?
背景资料:
目标:广泛的嵌入式 Linux 板,Buildsystem:Buildroot,自定义 Linux 内核版本,无 Linux 发行版,Busybox 运行在上面
最佳答案
TL;DR - 设备树不是您要寻找的答案。根据您的最终需求,有很多方法可以做到这一点。
设备树继承自 PowerPC。它不是用户空间的接口(interface)。它旨在为给定的 CPU/SOC 系列提供数据驱动的电路板布局定制。例如,有很多 TI OMAP devices查看表格中的设备,每个设备都有不同的芯片连接到 CPU(不同的以太网 MII/RMII 等),具有不同的引脚、时钟、电源等配置。每个都具有相同的 TI OMAP SOC,因此配置它的代码对所有人来说都是已知的。设备树是电路板配置 SOC 以使用硬件的输入。当找到特定的 SOC(或板)时,设备驱动程序可能具有改变行为的 Hook 。
设备树是引导加载程序告诉内核存在哪些硬件并且应该配置的一种方式。
您可以使用多种方法与用户空间对话。有些是具有不同用例的相同底层事物......
select
(文件/套接字)3-6项基本相同。通常,文件是同步的。即,如果您有 PIN 输出,它们很好,因为您可以从用户空间写入它们。但是,假设您有一个输入引脚,例如存在/插入的自定义卡(子板)。也许您连接了一些 RS-232 电缆或耳机插针?使用文件接口(interface),您必须轮询它们(或者您需要在内核代码中支持 inotify 等)。 netlink 是一种从内核向用户空间提供消息的方法。如果您的引脚可以连接到系统中断(无论如何),这是有道理的。
mdev 和 udev 使用 netlink 告诉用户空间有关 PCI、USB 等硬件的连接/断开连接。您可以对 GPIO 使用类似的方案。您只需使用 mdev/udev 脚本在/sys/class/output/led1 和/dev/my_company/power_led 之间建立链接。
就个人而言,我想将命名放在用户空间而不是内核中。例如 eth1 是什么?也许您想要一个诊断和主要通信以太网端口?硬件在某些时候可能不会填充诊断端口以使 BOM 更便宜。那么也许 eth1 是 eth0?
关于x86 - 如何应对平台碎片化,设备树是答案吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34882213/