1. Linux设备树与Platform总线基础解析
在嵌入式Linux开发领域,设备树(Device Tree)和Platform总线是驱动开发的两大基石。设备树作为硬件描述语言,解决了ARM架构下硬件描述混乱的问题,而Platform总线则为那些没有物理总线的伪设备提供了标准化的管理方式。
设备树源文件(.dts)通过编译器(dtc)生成二进制blob(.dtb),由Bootloader传递给内核。内核解析后生成设备节点树,驱动通过特定API与这些节点交互。Platform总线则构建在设备树之上,为片上系统(SoC)中的各种控制器(如I2C、SPI控制器)提供了统一的抽象层。
提示:从Linux 3.x版本开始,ARM架构全面转向设备树机制,彻底取代了传统的board文件硬编码方式。这种转变使得同一内核镜像能够支持不同硬件配置。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 设备树操作API深度剖析
2.1 设备树节点基础操作
驱动中通过of_前缀的函数族访问设备树,核心结构体device_node表示设备节点。常用操作包括:
c复制// 获取兼容性属性
const char *of_get_property(const struct device_node *np,
const char *name, int *lenp);
// 查找子节点
struct device_node *of_get_child_by_name(const struct device_node *np,
const char *name);
// 解析地址映射
int of_address_to_resource(struct device_node *dev, int index,
struct resource *r);
典型应用场景是驱动probe函数中解析硬件参数:
c复制static int mydrv_probe(struct platform_device *pdev)
{
struct device_node *np = pdev->dev.of
