1 .. SPDX-License-Identifier: GPL-2.0 2 .. include:: ../disclaimer-zh_CN.rst 3 4 :Original: Documentation/devicetree/overlay-no 5 6 :翻译: 7 8 司延腾 Yanteng Si <siyanteng@loongson.cn> 9 10 :校译: 11 12 ============== 13 设备树覆盖说明 14 ============== 15 16 本文档描述了drivers/of/overlay.c中的 17 Documentation/devicetree/dynamic-resolution-no 18 19 覆盖如何工作 20 ------------ 21 22 设备树覆盖的目的是修改内核的实 23 由于内核主要处理的是设备,任何 24 而如果设备节点被禁用或被全部删 25 26 让我们举个例子,我们有一个foo板 27 28 ---- foo.dts ----------------------------- 29 /* FOO平台 */ 30 /dts-v1/; 31 / { 32 compatible = "corp,foo"; 33 34 /* 共享的资源 */ 35 res: res { 36 }; 37 38 /* 芯片上的外围设备 */ 39 ocp: ocp { 40 /* 总是被实例化 41 peripheral1 { ... }; 42 }; 43 }; 44 ---- foo.dts ----------------------------- 45 46 覆盖bar.dts, 47 :: 48 49 ---- bar.dts - 按标签覆盖目标位置 50 /dts-v1/; 51 /插件/; 52 &ocp { 53 /* bar外围 */ 54 bar { 55 compatible = "corp,bar 56 ... /* 各种属性和 57 }; 58 }; 59 ---- bar.dts ----------------------------- 60 61 当加载(并按照[1]中描述的方式解 62 63 ---- foo+bar.dts ------------------------- 64 /* FOO平台 + bar外围 */ 65 / { 66 compatible = "corp,foo"; 67 68 /* 共享资源 */ 69 res: res { 70 }; 71 72 /* 芯片上的外围设备 */ 73 ocp: ocp { 74 /* 总是被实例化 75 peripheral1 { ... }; 76 77 /* bar外围 */ 78 bar { 79 compatible = " 80 ... /* 各种 81 }; 82 }; 83 }; 84 ---- foo+bar.dts ------------------------- 85 86 作为覆盖的结果,已经创建了一个 87 如果加载了匹配的设备驱动程序, 88 89 如果基础DT不是用-@选项编译的,那 90 DT中的适当位置。在这种情况下, 91 较好的,因为不管标签在DT中出现 92 93 上面的bar.dts例子被修改为使用目标 94 95 ---- bar.dts - 通过明确的路径覆盖 96 /dts-v1/; 97 /插件/; 98 &{/ocp} { 99 /* bar外围 */ 100 bar { 101 compatible = "corp,bar 102 ... /* 各种外围设 103 } 104 }; 105 ---- bar.dts ----------------------------- 106 107 108 内核中关于覆盖的API 109 ------------------- 110 111 该API相当容易使用。 112 113 1) 调用of_overlay_fdt_apply()来创建和应 114 错误或一个识别这个覆盖的cookie 115 116 2) 调用of_overlay_remove()来删除和清理 117 而创建的覆盖变更集。不允许删 118 119 最后,如果你需要一次性删除所有 120 它将以正确的顺序删除每一个覆盖 121 122 你可以选择注册在覆盖操作中被调 123 of_overlay_notifier_register/unregister和enum 124 125 OF_OVERLAY_PRE_APPLY、OF_OVERLAY_POST_APPLY 126 的通知器回调可以存储指向覆盖层 127 续到OF_OVERLAY_POST_REMOVE的通知器回调 128 知器被调用后,包含覆盖层的内存 129 的通知器返回错误,内存也会被kfre 130 131 drivers/of/dynamic.c中的变更集通知器 132 覆盖层来触发。这些通知器不允许 133 覆盖层的内存因移除覆盖层而被释 134 135 任何其他保留指向覆盖层节点或数 136 后,该指针将指向已释放的内存。 137 138 覆盖层的用户必须特别注意系统上 139 盖层节点或数据的指针。任何无意 140 应用了覆盖后被加载,并且该驱动
Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.