OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 6027|回复: 9

关于[设备树]中#address-cells和#size-cells的困惑

[复制链接]

3

主题

14

帖子

0

精华

初级会员

Rank: 2

积分
71
金钱
71
注册时间
2016-3-14
在线时间
13 小时
发表于 2021-3-10 12:43:49 | 显示全部楼层 |阅读模式
1金钱
既然#address-cells和#size-cells是用来描述reg中的<address, lenth>对,那么当address-cells = 1,而size-cells =  0 ,reg的值却是两个?例如:
ecspi1: ecspi@02008000 {
     #address-cells = <1>;
     #size-cells = <0>;
     compatible = "fsl,imx6ul-ecspi", "fsl,imx51-ecspi";
     reg = <0x02008000 0x4000>;
};

(摘取自Linux驱动开发指南V1.5第1099页)

最佳答案

查看完整内容[请看2#楼]

1. properties 中是允许 # 作为标识符存在的,因此#开头并非注释 2. #address-cells 表示的是 reg 中用几个数表示一个数据,因为 reg 中每个cells是4字节,也就是32位 3. reg 中有几个数据与#address-cells和#size-cells无关,这个可以去分析dtb文件
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

3

主题

37

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1461
金钱
1461
注册时间
2016-7-1
在线时间
288 小时
发表于 2021-3-10 12:43:50 | 显示全部楼层
1. properties 中是允许 # 作为标识符存在的,因此#开头并非注释
2. #address-cells 表示的是 reg 中用几个数表示一个数据,因为 reg 中每个cells是4字节,也就是32位
3. reg 中有几个数据与#address-cells和#size-cells无关,这个可以去分析dtb文件
回复

使用道具 举报

70

主题

6697

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
12687
金钱
12687
注册时间
2012-11-26
在线时间
3710 小时
发表于 2021-3-10 13:45:54 | 显示全部楼层
我也曾经疑惑过,不过井号起始的都是注释行,也就不去在意了,反正是无意义代码
回复

使用道具 举报

1

主题

385

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1023
金钱
1023
注册时间
2019-9-21
在线时间
269 小时
发表于 2021-3-10 14:53:03 | 显示全部楼层
帮顶!
回复

使用道具 举报

3

主题

14

帖子

0

精华

初级会员

Rank: 2

积分
71
金钱
71
注册时间
2016-3-14
在线时间
13 小时
 楼主| 发表于 2021-3-12 15:18:27 | 显示全部楼层
jermy_z 发表于 2021-3-10 13:45
我也曾经疑惑过,不过井号起始的都是注释行,也就不去在意了,反正是无意义代码

那reg里面的个数就没办法限定了呀
回复

使用道具 举报

70

主题

6697

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
12687
金钱
12687
注册时间
2012-11-26
在线时间
3710 小时
发表于 2021-3-12 15:50:22 | 显示全部楼层
寒暄12233 发表于 2021-3-12 15:18
那reg里面的个数就没办法限定了呀

#address-cells = <1>;
#size-cells = <0>;

你随便修改这俩数字试试看有没有什么副作用,我暂时还没试过,如果没有副作用,这应该没啥实际意义
学无止境
回复

使用道具 举报

3

主题

37

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1461
金钱
1461
注册时间
2016-7-1
在线时间
288 小时
发表于 2021-3-13 20:27:13 | 显示全部楼层
本帖最后由 Seri。 于 2021-3-13 20:52 编辑
Seri。 发表于 2021-3-13 20:25
1. properties 中是允许 # 作为标识符存在的,因此#开头并非注释
2. #address-cells 表示的是 reg 中用几 ...

补充一点,properties结构是固定的,这个可以阅读设备树的手册
简单说,properties结构为:token、len、name_string、data

随便找了一个dtb文件:
0x00000003是token;
0x00000008是数据长度,就是reg数据长度,8个字节;
0x00000102是property的名称在string block中的偏移,找到后就是"reg";
0x02020000,0x00004000是数据



#address-cells = 1,#size-cells-0, 意味着reg中的数据都是address,也就是没有表示size的
还需指出,#address-cells和#size-cells定义在上一级节点,对本节点起作用,且不被继承

回复

使用道具 举报

70

主题

6697

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
12687
金钱
12687
注册时间
2012-11-26
在线时间
3710 小时
发表于 2021-3-16 15:52:12 | 显示全部楼层
Seri。 发表于 2021-3-13 20:27
补充一点,properties结构是固定的,这个可以阅读设备树的手册
简单说,properties结构为:token、len、 ...

那你貌似还是没有回答楼主的问题,楼主问的是 #address-cells = <1>;#size-cells = <0>;  reg里怎么出现size的值了
学无止境
回复

使用道具 举报

3

主题

37

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1461
金钱
1461
注册时间
2016-7-1
在线时间
288 小时
发表于 2021-3-16 18:31:24 | 显示全部楼层
本帖最后由 Seri。 于 2021-3-16 18:33 编辑
jermy_z 发表于 2021-3-16 15:52
那你貌似还是没有回答楼主的问题,楼主问的是 #address-cells = ;#size-cells = ;  reg里怎么出现size的 ...

我的回答里已经说明了,请仔细看
回复

使用道具 举报

70

主题

6697

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
12687
金钱
12687
注册时间
2012-11-26
在线时间
3710 小时
发表于 2021-3-17 11:38:46 | 显示全部楼层
Seri。 发表于 2021-3-16 18:31
我的回答里已经说明了,请仔细看

哦哦  是的   不是注释,进入linux内核下,打印节点是可以打印出来这俩的
学无止境
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-22 21:33

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表