为 x86 和 ARM 编写平台设备驱动程序的区别
Difference in writing a platform device driver for x86 and ARM
我以前从事 ARM 特定平台驱动程序的工作,最近转向基于 Intel Atom 的驱动程序。在 ARM 上,它曾经有 arch/arm/boot/dts/xx.dts
和 arch/arm/mach-xx/
用于添加平台设备。我在 x86 上看不到这些文件或文件夹。当我进入 arch/x86/...
时,没有 dts 文件或平台文件。
如果我想将我的平台设备添加到英特尔凌动平台,我该如何添加我的平台设备信息?我在哪里可以获得特定于 x86 的 dts 文件(假设即使 dts 不特定于任何体系结构)?
有两项新功能允许您同时拥有一个适用于 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");
我以前从事 ARM 特定平台驱动程序的工作,最近转向基于 Intel Atom 的驱动程序。在 ARM 上,它曾经有 arch/arm/boot/dts/xx.dts
和 arch/arm/mach-xx/
用于添加平台设备。我在 x86 上看不到这些文件或文件夹。当我进入 arch/x86/...
时,没有 dts 文件或平台文件。
如果我想将我的平台设备添加到英特尔凌动平台,我该如何添加我的平台设备信息?我在哪里可以获得特定于 x86 的 dts 文件(假设即使 dts 不特定于任何体系结构)?
有两项新功能允许您同时拥有一个适用于 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");