linux-kernel - 在设备树中的节点之间共享变量
问题描述
我正在尝试找到一种方法来从 node_1 访问此设备树中 node_0 中的变量(请参见下面的代码):
/ {
amba_pl: amba_pl@0 {
node_0: node@a8000000 {
node_id = <0x0>;
node0State = <0x0>;
};
};
node_1: node@a9000000 {
node1State = <node_0's node0State>;
};
};
};
主要目标是能够在内核模块之间共享状态。我知道我可以在写入节点中 EXPORT_SYMBOL(variable) ,然后在读取节点中使用 extern *variable ,但想看看我是否可以在设备树本身中完成此操作。node_0 将始终是唯一设置 nodeState 的节点,而 node_1 只会读取。这可能吗?
解决方案
您可以存储一个 phandle 引用包含以下内容的节点node0state
:
/ {
amba_pl: amba_pl@0 {
node_0: node@a8000000 {
node_id = <0x0>;
node0State = <0x0>;
};
};
node_1: node@a9000000 {
stateNode = <&node_0>;
};
};
};
在驱动代码中,如果struct device_node *mynode;
引用了node_1
节点,node0state
则phandle属性引用的其他节点的stateNode
属性可以访问如下:
int rc = 0;
struct device_node *np;
u32 node0state;
np = of_parse_phandle(mynode, "stateNode", 0);
if (!np) {
// error node not found
rc = -ENXIO;
goto error1;
}
// Do whatever is needed to read "node0state". Here is an example.
rc = of_property_read_u32(np, "node0state", &node0state);
if (rc) {
// error
of_node_put(np); // decrement reference to the node
goto error2;
}
// Finished with the node.
of_node_put(np); // decrement reference to the node
推荐阅读
- kubernetes - Kubernetes 节点消息 Unable to authentication the request due to an error: invalid bearer token
- mysql - 奇怪的行为优化查询索引(MariaDB + InnoDB)
- spring-integration - Spring 集成:如何拦截所有 spring 集成组件并获取属性值以记录
- arrays - 从json响应访问对象值反应本机
- java - 使用 for 循环嵌套下拉菜单会导致过时的元素引用错误
- c# - 如何在 C# 中执行通用 SQL 命令?
- rest - EnvelopeDefinition:EventNotification API 类型的基本身份验证
- ios - 在 XCODE 中使用 Distr 证书组装后,Iphone 无法安装我的应用程序
- java - 使用 Kotlin 属性访问语法设置 Java 字段是否安全
- arrays - 根据多个数组条件计算表中的行数