【问题标题】:Difference in writing a platform device driver for x86 and ARMx86和ARM编写平台设备驱动的区别
【发布时间】:2015-08-28 07:07:10
【问题描述】:

我之前从事 ARM 特定平台驱动程序的工作,最近转向基于 Intel Atom 的驱动程序。在 ARM 上,它曾经有 arch/arm/boot/dts/xx.dtsarch/arm/mach-xx/ 用于添加平台设备。我在 x86 上看不到这些文件或文件夹。当我进入arch/x86/... 时,没有 dts 文件或平台文件。

如果我想将我的平台设备添加到英特尔凌动平台,如何添加我的平台设备信息?我在哪里可以获得特定于 x86 的 dts 文件(假设即使 dts 不是特定于任何架构)?

【问题讨论】:

  • 有一个例子,arch/x86/platform/ce4100/falconfalls.dts,内核版本是3.18。也许这对你来说是一个好的开始。
  • 感谢克里斯,对于您的评论,这是我找到的唯一地方。但是有许多基于英特尔的板。但我发现他们正在使用 acpi 信息,类似于 dts。但我不确定这个 acpi 信息是如何发送到 linux 的。如果我想添加任何平台设备。如何添加。

标签: linux linux-kernel linux-device-driver


【解决方案1】:

有两项新功能可让您同时拥有一个用于 x86 和 ARM 世界的驱动程序。首先是 ACPI 中的 _DSD 方法,它允许供应商提供他们需要让 IP 正常工作的任何设备属性。第二部分是Linux内核中统一的设备属性接口(查看drivers/base/property.c)。因此,如果您的设备需要 clock-frequency 属性,您只需在驱动程序中编写如下内容:

u32 clock_freq;
int err;

err = device_property_read_u32(…, &clock_freq);
if (err)
  dev_err(…, "A mandatory property not found!\n");

【讨论】:

  • 感谢 Andy,此 ACPI 信息来自何处以及如何进入 Linux 内核
  • 如果这是一个问题,部分答案在上面的文本中。 _DSD 方法专门设计用于向操作系统提供设备属性的键值对。
  • _DSD (ACPI) 信息是从任何引导代码发送的/或者它使用内核显式编译。在ARM中,一般我们会从dts生成dtb,然后从uboot传给内核。
  • _DSD 是 DSDT 的一部分。您可以从固件中获取它,或者使用 initrd 提供覆盖。顺便说一句,ARM64 将使用 ACPI。
猜你喜欢
  • 1970-01-01
  • 2021-05-27
  • 1970-01-01
  • 1970-01-01
  • 2014-03-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多