【发布时间】:2022-10-15 04:47:10
【问题描述】:
我在 arm64 的一些 .dts 文件中看到了这种表示法:
&foo {
addrs = /bits/ 64 <0x11223344556677aa>,
/bits/ 64 <0x11223344556677bb>;
};
显然,这意味着一个 64 位的值。 但是这个语法是在哪里指定的?它不在latest 'official' spec 中。
【问题讨论】:
-
它被实现为分隔符起始字符串脚本/dtc/treesource.c内核源代码。
-
另请查看说明of_property_read_u8_array()和of_property_read_u16_array()在包括/linux/of.h但是这些程序的 32 位和 64 位版本并没有提及使用该大小说明符!?
-
内核树中的 dtc 似乎来自“上游”(请参阅
scripts/dtc/update-dtc-source.sh),所以这个 /bits/ 前缀看起来像未记录的语法扩展,不是特定于 Linux 的 - 如果目标知道其他元素大小。 @sawdust 如果您将 cmets 转换为回答,我会将其标记为已接受 -
/bits/ 8|16|32|64 的解析器 src 在
scripts/dtc/dtc-parser.y中,arrayprefix: case (第 356 行) -
谢谢,但我会继续写一个答案,因为我的 cmets 就是这样,我没有什么要补充的。我很惊讶这没有记录。也许你可以收集你发现的所有东西,然后回答你自己的帖子。