[AOSP] Device Tree
DTSI (Device Tree Source Include)๋?
- DTSI๋ Device Tree๋ฅผ โ๋ชจ๋ํโํ๊ธฐ ์ํ include ํ์ผ
# ๋น๋ ํ๋ฆ .dts + .dtsi โ dtc (device tree compiler) โ .dtb / .dtbo โ boot.img ํฌํจ โ kernel boot ์ ์ ์ฉ
1. Device Tree ๊ตฌ์กฐ
.dts โ ์ต์ข
๋ณด๋ ์ค์ (entry point)
.dtsi โ ๊ณตํต ์ค์ (include ํ์ผ)
.dtbo โ overlay (๋์ ๋ณ๊ฒฝ์ฉ)
2. DTSI ์ญํ
- 1) DTSI๋ โ๊ณตํต ์ค์ ์ ๋ถ๋ฆฌโ
// yupik.dtsi #include "yupik-qupv3.dtsi" #include "test_uart.dtsi"- SoC ๊ธฐ๋ณธ UART ์ ์ โ
yupik-qupv3.dtsi - Vendor ์ปค์คํ
UART โ
test_uart.dtsi
- SoC ๊ธฐ๋ณธ UART ์ ์ โ
- 2) DISI ๋ฅผ ์ฐ๋ ์ด์
๊ฐ์ SoC ์ฐ๋ ๋ณด๋ ์ฌ๋ฌ ๊ฐ ์์ ๋ common_uart.dtsi โ ๊ณตํต ์ ์ ๊ฐ dts โ include๋ง ์ํ
3. ์์ _1 (ํน์ ๋ ธ๋ (UART))
/ {
aliases {
hsuart1 = &qupv3_se10_2uart;
};
};
property = &label;ย : ๋ ์ด๋ธ์ด ์ฐธ์กฐํ๋ ์ ์ฒด๋ ธ๋ ๊ฒฝ๋ก๋ฅผ ๋ฌธ์์ด ํน์ฑ์ผ๋ก ์ง์ - aliases ๋ ธ๋์ ๊ฐ ์์ฑ์ ๋ค๋ฅธ ๋ ธ๋์ ์ธ๋ฑ์ค๋ฅผ ์ ์
4. ์์ _2
qupv3_se10_2uart: qcom,qup_uart@a88000 {
compatible = "qcom,msm-geni-serial-hs";
reg = <0xa88000 0x4000>;
reg-names = "se_phys";
interrupts = <GIC_SPI 355 IRQ_TYPE_LEVEL_HIGH>;
clock-names = "se-clk", "m-ahb", "s-ahb";
clocks = <&gcc GCC_QUPV3_WRAP1_S2_CLK>,
<&gcc GCC_QUPV3_WRAP_1_M_AHB_CLK>,
<&gcc GCC_QUPV3_WRAP_1_S_AHB_CLK>;
pinctrl-names = "default", "active", "sleep";
pinctrl-0 = <&qupv3_se10_default_txrx>;
pinctrl-1 = <&qupv3_se10_2uart_active>;
pinctrl-2 = <&qupv3_se10_2uart_sleep>;
qcom,wrapper-core = <&qupv3_1>;
status = "disabled";
};
compatible : "qcom,msm-geni-serial-hs"- ์์คํ ์ด๋ฆ ์ง์ , โ์ ์กฐ์ ์ฒด, ๋๋ผ์ด๋ฒ๋ช โ ํ์์ ๋ฌธ์์ด์ ํฌํจ
reg = <0x98c000 0x4000>;- ์ฃผ์ ์ง์ ๋ฐฉ๋ฒ
- ํด๋น node์ address์ size๋ฅผ ์ ์, <address, size> ํํ๋ก ๊ตฌ์ฑ
interrupts = <GIC_SPI 355 IRQ_TYPE_LEVEL_HIGH>;- ๋๋ฐ์ด์ค์ ๊ฐ ์ธํฐ๋ฝํธ ์ถ๋ ฅ ์ ํธ๋ง๋ค ํ๋์ฉ ์ธํฐ๋ฝํธ ์ง์ ์ ๋ชฉ๋ก์ ํฌํจํ๋ ๋๋ฐ์ด์ค ๋ ธ๋์ ํน์ฑ์ด
clock-names = "se-clk", "m-ahb", "s-ahb";- clock ๋ ์ด๋ธ
clocks = <&gcc GCC_QUPV3_WRAP1_S2_CLK>, <&gcc GCC_QUPV3_WRAP_1_M_AHB_CLK>,<&gcc GCC_QUPV3_WRAP_1_S_AHB_CLK>;- clock ๋ ธ๋๋ฅผ ๋ํ๋
- ๋ณดํต clock์ ์์ ํ ์ผ์ด ๊ฑฐ์ ์์.
- ๊ธฐ์กด kernel ํ์ผ์ ์๋ ๋ด์ฉ์ ์ฐธ๊ณ ํด์ ์ถ๊ฐํ๋ ๊ฒฝ์ฐ๊ฐ ๋๋ถ๋ถ
- ๊ดํธ์ ์ฌ์ฉํ๋ clock์ ๋ํด ์ ์๋์ด์์. (๊ธฐ์กด kernel driver ๋จ์ ์ ์)
pinctrl-names = "default", "active", "sleep";- pin ์ํ๋ฅผ ํ ๋นํ๋ name List
- pinctrl์ pin mux ์ค์ ์ ํ๊ณ , ์ค์ ์ฌ์ฉํ ์ฅ์น ๋ ธ๋์ pin ๋ ธ๋ ๊ฐ์ ์ฐ๊ฒฐ ๊ด๋ฆฌ.
- ์ฅ์น ๋ ธ๋์๋ ๊ณ ์ ์ compatible ์ด๋ฆ์ ๊ฐ์ง๊ณ ์์ผ๋ฉฐ ์ด ์ด๋ฆ์ ์ค์ ๋๋ผ์ด๋ฒ๋ฅผ ๊ฒ์ํ ๋ ์ฌ์ฉ
- pinctrl-names์ pinctrl-0์ MUX ์ค์ ์ด๋ฉฐ ์ค์ GPIO ์ ๊ทผ์ ์ํด์๋ ๋ณ๋์ pin ์ค์ ์ ํจ
- status ๊ฐ okay๊ฐ ๋์ด์ผ ๋๋ผ์ด๋ฒ๊ฐ ํ์ฑ๋จ.
pinctrl-0 = <&qupv3_se10_default_txrx>;
pinctrl-1 = <&qupv3_se10_2uart_active>;
pinctrl-2 = <&qupv3_se10_2uart_sleep>;- pinctrl ๋ด์ pin configuration node๋ฅผ ๊ฐ๋ฆฌํค๋ phandles์ list
qcom,wrapper-core = <&qupv3_1>;- Qualcomm ์ฌ์ qup v3 hardware ID
status = "ok";- ์ฅ์น์ ์๋ ์ํ๋ฅผ ๋ํ๋ธ๋ค. (ok, diswabled ๋ฑ)
- ์์ product / device ์ค์ ์ด ์ด๋ค ๋ชจ๋์ ํฌํจํ ์ง ๊ฒฐ์
- make ๊ณ์ด ๋๊ตฌ๊ฐ ์ด๋ฅผ ๋ชจ์ system/vendor/product ์ด๋ฏธ์ง ๋ฑ์ ์์ฑํ๋ ๊ตฌ์กฐ
Leave a comment