虚拟使用DTS
在运行时使用vexpress-v2p-ca9.dtb二进制。
vexpress-v2p-ca9.dtb是由vexpress-v2p-ca9.dts生成的,在smb节点末尾有
/include/ "vexpress-v2m.dtsi"
所以:
vexpress-v2p-ca9.dtb是由vexpress-v2p-ca9.dts和vexpress-v2m.dtsi编译生成的。
问题1:
在函数中显示,motherboard的父节点是smb。
20 motherboard {
21 model = "V2M-P1";
22 arm,hbi = <0x190>;
23 arm,vexpress,site = <0>;
24 compatible = "arm,vexpress,v2m-p1", "simple-bus";
25 #address-cells = <2>; /* SMB chipselect number and offset */
26 #size-cells = <1>;
27 #interrupt-cells = <1>;
28 ranges;
.............................
157 v2m_serial0: uart@09000 {
158 compatible = "arm,pl011", "arm,primecell";
159 reg = <0x09000 0x1000>;
160 interrupts = <5>;
161 clocks = <&v2m_oscclk2>, <&smbclk>;
162 clock-names = "uartclk", "apb_pclk";
163 };
164
165 v2m_serial1: uart@0a000 {
166 compatible = "arm,pl011", "arm,primecell";
167 reg = <0x0a000 0x1000>;
168 interrupts = <6>;
169 clocks = <&v2m_oscclk2>, <&smbclk>;
170 clock-names = "uartclk", "apb_pclk";
171 };
172
173 v2m_serial2: uart@0b000 {
174 compatible = "arm,pl011", "arm,primecell";
175 reg = <0x0b000 0x1000>;
176 interrupts = <7>;
177 clocks = <&v2m_oscclk2>, <&smbclk>;
178 clock-names = "uartclk", "apb_pclk";
179 };
180
181 v2m_serial3: uart@0c000 {
182 compatible = "arm,pl011", "arm,primecell";
183 reg = <0x0c000 0x1000>;
184 interrupts = <8>;
185 clocks = <&v2m_oscclk2>, <&smbclk>;
186 clock-names = "uartclk", "apb_pclk";
187 };
....................
441 };
在vexpress-v2p-ca9.dts中:
303 smb {
304 compatible = "simple-bus";
305
306 #address-cells = <2>;
307 #size-cells = <1>;
308 ranges = <0 0 0x40000000 0x04000000>,
309 <1 0 0x44000000 0x04000000>,
310 <2 0 0x48000000 0x04000000>,
311 <3 0 0x4c000000 0x04000000>,
312 <7 0 0x10000000 0x00020000>;
...
355 <0 0 39 &gic 0 39 4>,
356 <0 0 40 &gic 0 40 4>,
357 <0 0 41 &gic 0 41 4>,
358 <0 0 42 &gic 0 42 4>;
359
360 /include/ "vexpress-v2m.dtsi"
361 };
因为在smb节点后,include vexpress-v2m.dtsi,则刚好包含motherboard。