2021.5.19 嵌入式学习笔记3:设备树学习

本文介绍了Linux内核如何加载设备树(DTB),包括uboot传递DTB到内核、unflatten_device_tree展开设备树、驱动与设备的匹配过程。重点解析了设备树源码,探讨了#address-cells和#size-cells属性在设备描述中的作用,以及设备树数据的读取。通过实例解析设备树中reg属性和父节点规则,帮助深化对设备树的理解。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


设备树加载及与驱动的匹配过程

一开时,uboot将dtb文件的地址传给内核,由内核去读取设备树的信息。

1.start_kernel() --> setup_arch(0 --> unflatten_device_tree() --> __unflatten_device_tree()函数中扫描dtb,并转换成节点是device_node的树状结构。(展开设备树)

2.of_platform_device_create_pdata() —> of_device_add() 注册设备并添加到对应的链表中。(注册设备树)

3.driver_register()->driver_match_device() 注册驱动调用match ,配对成功运行probe,配对所用的名字就是compatible属性的值。 

传入probe参数的值是strcut device *dev,通过struct device_node *node=pdev->dev.of_node,由此可以获取到设备的节点信息

 

设备树源码

最近看了一下设备树知识,读个源码,加深一下理解


/dts-v1/;
#include <dt-bindings/pwm/pwm.h> //GPIO的宏定义
#include <dt-bindings/sound/samsung-i2s.h>
#include "exynos4412-itop-scp-core.dtsi"
  //对于一些相同的dts配置可以抽象到dtsi文件中,include到dts文件中,对于同一个节点的设置情况,在在dts中对dtsi中的配置进行覆盖

/ {
	model = "TOPEET iTop 4412 Elite board base
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值