linux设备树概要
1.dtsi文件。一般命名为xxx.dtsi。i表示include ,表示被别的dts文件引用。dtsi文件跟dts文件的语法是完全相同的。
2.程序员一般不需要从零写dts文件,而是修改,改的对不对,就需要编译一下。内核中直接使用dts文件太过于低效,因此需要使用编译过后的二进制格式的dtb文件。设置好ARCH、CROSS_COMPILE、PATH这三个环境变量后,进入ubuntu上板子内核源码目录,执行如下命令即可编译得到dtb文件。
点击查看代码
make dtbs
3.内核对设备树的处理过程:
dts文件在PC上被编译为dtb文件-->uboot把dtb文件传给内核-->内核解析dtb文件,把每一个节点转化为device_node结构体-->对于某些device_node结构体,会被转化为platform_device结构体。
4.device_node结构体由dtb中的每一个节点转化而来
点击查看代码
struct device_node {
const char *name; // 设备树中常用属性name(因为已经过时,因此在设备树常用属性中没有做介绍)
const char *type; // 设备树常用属性type(因为已经过时,因此在设备树常用属性中没有做介绍)
phandle phandle;
const char *full_name;
struct fwnode_handle fwnode;
struct property *properties; // 节点属性
struct property *deadprops; /* removed properties */
struct device_node *parent; // 父亲节点
struct device_node *child; // 孩子节点
struct device_node *sibling;
struct kobject kobj;
unsigned long _flags;
void *data;
#if defined(CONFIG_SPARC)
const char *path_component_name;
unsigned int unique_id;
struct of_irq_controller *irq_trans;
#endif
};
struct property {
char *name; // 属性的名字
int length; // 属性值的长度
void *value; // 属性的值
struct property *next;
unsigned long _flags;
unsigned int unique_id;
struct bin_attribute attr;
};
5.DTC为编译工具,它可以将.dts文件编译成.dtb文件。DTC的源码位于内核的scripts/dtc目录.
参考链接:
1.https://blog.csdn.net/weixin_39674445/article/details/118398831
2.https://blog.csdn.net/Rank_d/article/details/106289183?spm=1001.2101.3001.6650.1&utm_medium=distribute.pc_relevant.none-task-blog-2~default~CTRLIST~Rate-1-106289183-blog-129138552.235^v38^pc_relevant_anti_vip&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2~default~CTRLIST~Rate-1-106289183-blog-129138552.235^v38^pc_relevant_anti_vip&utm_relevant_index=2
3.http://www.chinaaet.com/article/3000152508
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通