X86 如何应对平台碎片化,设备树是答案吗?

X86 如何应对平台碎片化,设备树是答案吗?,x86,arm,cross-platform,embedded-linux,device-tree,X86,Arm,Cross Platform,Embedded Linux,Device Tree,我的任务是为以太网和LED等设备实现一个具有固定名称的自定义层 在x86和ARM设备上需要相同。因此,电源LED和eth1在应用中总是相同的,但没有连接到相同的硬件引脚。在我看来,我可以通过设备树分配在ARM上完成这项工作。但是我可以在基于x86的板上使用设备树来实现这一点吗?这是个好习惯吗 背景资料: 目标:广泛的嵌入式Linux板,Buildsystem:Buildroot,自定义Linux内核版本,无Linux发行版,Busybox在顶部运行使用 例如,您可以通过/sys/class/ne

我的任务是为以太网和LED等设备实现一个具有固定名称的自定义层

在x86和ARM设备上需要相同。因此,电源LED和eth1在应用中总是相同的,但没有连接到相同的硬件引脚。在我看来,我可以通过设备树分配在ARM上完成这项工作。但是我可以在基于x86的板上使用设备树来实现这一点吗?这是个好习惯吗

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

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


这已经使应用程序的x86/ARM差异降至最低。例如,我在考虑wpa_supplicant或大多数init级初始化脚本;DR-设备树不是您要寻找的答案。根据您的最终需求,有很多方法可以做到这一点


设备树是从PowerPC继承的。它不是用户空间的接口。它旨在为给定的CPU/SOC系列提供数据驱动的板布局定制。例如,表中有许多See设备,每个设备都有不同的芯片连接到CPU(不同的以太网MII/RMII等),具有不同的引脚、时钟、电源等配置。每个都有相同的TI OMAP SOC,因此配置该SOC的代码对它们都是已知的。设备树是板的输入,用于配置SOC以使用硬件。当发现特定的SOC(或电路板)时,设备驱动程序可能有钩子来改变行为

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


您可以使用多种方法与用户空间对话。在不同的用例中,有些是相同的底层事物

  • 给系统打一个新的电话
  • 网络链接
  • 文件系统(设备文件)
  • 过程
  • 系统功能
  • 调试
  • 信号
  • udev/mdev
  • 用户空间GPIO
  • 选择
    (文件/套接字)
  • 第3-6项基本相同。通常,文件是同步的。也就是说,如果您有一个PIN输出,它们就可以了,因为您可以从用户空间向它们写入。但是,假设您有一个像定制卡(子板)这样的输入pin存在/插入。也许你有一些RS-232电缆连接或头部电话插入引脚?对于文件接口,您必须轮询它们(或者您需要在内核代码中支持inotify etc)。netlink是一种从内核向用户空间提供消息的方法。如果您的pin可以连接到系统中断(在任何情况下),这是有意义的

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


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

    有一点与设备树相反,那就是我有一些运行旧内核版本(如3.2)的板,但我知道可能仍然可以使用它。但是随着引导加载程序和内核的变化,这个答案很简短,但有其道理。我本来会接受的,但天真的噪音确实让他/她的答案考虑了很多。非常感谢你分享这一点。8)udev/mdev是毫无疑问的,因为我已经很难为涉及的不同设备创建一致的规则(也可能是硬件造成的)。最后一点是我想要的,开发人员需要一个调试以太网接口,该接口在硬件中连接到eth0/1/2、usb0或虚拟的东西,还需要状态指示灯之类的抽象。我不确定我是否能用sysfs这样的东西涵盖所有的事情。