如何应对平台碎片,设备树的答案是什么?

时间:2016-01-19 16:40:43

标签: x86 arm cross-platform embedded-linux device-tree

我的任务是为以太网和LED之类的东西实现一个固定名称的自定义图层。

在x86和ARM设备上需要相同。因此,电源LED eth1 对于应用程序始终是相同的,但未连接到相同的硬件引脚。从我的角度来看,我可以使用设备树分配在ARM上执行此操作。但是,我可以在基于x86的主板上使用设备树来执行此操作吗?这是好习惯吗?

背景资料: 目标:广泛的嵌入式Linux主板,Buildsystem:Buildroot,自定义Linux内核版本,没有Linux发行版,Busybox在顶部运行

2 个答案:

答案 0 :(得分:2)

使用sysfs

例如,您可以通过/sys/class/net/eth0/访问网络接口信息。对于特定外设,您可以提供自己的内核对象,这些对象提供稳定的名称。

这使应用程序的x86 / ARM差异降至最低。我想的是例如wpa_supplicant或大多数init级初始化脚本。

答案 1 :(得分:2)

TL; DR - 设备树不是您正在寻找的答案。根据您的最终需求,有很多方法可以做到这一点。

设备树继承自PowerPC。它不是用户空间的接口。它旨在为给定的CPU / SOC系列提供数据驱动的电路板布局定制。例如,有许多TI OMAP devices 参见表中的设备,每个设备都有不同的芯片连接到CPU(不同的以太网MII / RMII等),具有各种引脚,时钟,电源等配置。每个都具有相同的TI OMAP SOC,因此可以了解所有这些的配置代码。 设备树是电路板的输入,用于配置SOC以使用硬件。设备驱动程序可能具有钩子以在找到特定SOC(或板)时改变行为。

设备树是一种引导加载程序告诉内核存在哪些硬件并应该配置的方法。

您可以使用各种方法与用户空间进行对话。有些是不同用例的相同基础...

  1. 进行系统新通话。
  2. 网络链路
  3. 文件系统(设备文件)
  4. PROCFS
  5. 的sysfs
  6. debugfs
  7. 信号
  8. 的udev / MDEV
  9. 用户空间GPIO
  10. select(文件/套接字)
  11. 第3-6项基本相同。通常,文件是同步的。即,如果您有PIN输出,它们就可以了,因为您可以从用户空间写入它们。但是,假设您有一个输入引脚,如定制卡(子板)存在/插入。也许您有一些RS-232电缆连接或头戴式电话插针?使用文件界面,您必须轮询它们(或者您需要在内核代码中使用 inotify 等支持)。 netlink 是一种从内核向用户空间提供消息的方法。如果您的引脚可以连接到系统中断(无论如何),这是有意义的。

    mdev udev 使用 netlink 告诉用户空间有关连接/断开的PCI,USB等硬件。您可以为GPIO使用类似的方案。您只需使用mdev / udev脚本在 / sys / class / output / led1 / dev / my_company / power_led 之间建立链接。

    就个人而言,我想将命名放在用户空间而不是内核中。例如 eth1 是什么?也许你想要一个诊断通信以太网端口?硬件可能不会在某些时候填充诊断端口,以使BOM更便宜。那么 eth1 可能 eth0