xref: /aosp_15_r20/system/libufdt/utils/README.md (revision 13e8728f0cffde9369df671f7b293a048a99c7ed)
1*13e8728fSAndroid Build Coastguard Workerlibufdt `utils` folder
2*13e8728fSAndroid Build Coastguard Worker=====================
3*13e8728fSAndroid Build Coastguard Worker
4*13e8728fSAndroid Build Coastguard WorkerThis folder contains utilities for device tree overlay.
5*13e8728fSAndroid Build Coastguard Worker
6*13e8728fSAndroid Build Coastguard Workermkdtimg (DEPRECATED, use mkdtboimg.py instead.)
7*13e8728fSAndroid Build Coastguard Worker-------
8*13e8728fSAndroid Build Coastguard Worker
9*13e8728fSAndroid Build Coastguard WorkerIf your DTB/DTBO is in an unique partition, e.g. `dtb` and `dtbo` partition.
10*13e8728fSAndroid Build Coastguard Worker`mkdtimg` is a tool for creating the `dtb`/`dtbo` image.
11*13e8728fSAndroid Build Coastguard WorkerYou can use `mkdtimg` to pack one or more DTB/DTBO files into an image.
12*13e8728fSAndroid Build Coastguard Worker
13*13e8728fSAndroid Build Coastguard Worker### Image Format
14*13e8728fSAndroid Build Coastguard Worker
15*13e8728fSAndroid Build Coastguard WorkerThis is the layout for `dtb`/`dtbo` image:
16*13e8728fSAndroid Build Coastguard Worker
17*13e8728fSAndroid Build Coastguard Worker```txt
18*13e8728fSAndroid Build Coastguard Worker  +---------------------------+  - -   -                    -
19*13e8728fSAndroid Build Coastguard Worker  |      dt_table_header      |  ^ |   v dt_entries_offset  | header_size
20*13e8728fSAndroid Build Coastguard Worker  +===========================+  | | - -                    -
21*13e8728fSAndroid Build Coastguard Worker  |      dt_table_entry #0    |  | | ^ | dt_entry_size
22*13e8728fSAndroid Build Coastguard Worker  +---------------------------+  | | | -
23*13e8728fSAndroid Build Coastguard Worker  |      dt_table_entry #1    |  | | |
24*13e8728fSAndroid Build Coastguard Worker  +---------------------------+  | | |
25*13e8728fSAndroid Build Coastguard Worker  |            ...            |  | | | dt_entry_size * dt_entry_count
26*13e8728fSAndroid Build Coastguard Worker  +---------------------------+  | | |
27*13e8728fSAndroid Build Coastguard Worker  |      dt_table_entry #N    |  | | v
28*13e8728fSAndroid Build Coastguard Worker  +===========================+  | | -
29*13e8728fSAndroid Build Coastguard Worker  | +-----------------------+ |  | |
30*13e8728fSAndroid Build Coastguard Worker  | |    fdt_header     #0  | |  | |
31*13e8728fSAndroid Build Coastguard Worker  + +-----------------------+ |  | |  dt_offset
32*13e8728fSAndroid Build Coastguard Worker  |      DTBO           #0    |  | v (dt_entry_entry #1)
33*13e8728fSAndroid Build Coastguard Worker  +===========================+  | _
34*13e8728fSAndroid Build Coastguard Worker  | +-----------------------+ |  | ^
35*13e8728fSAndroid Build Coastguard Worker  | |    fdt_header     #1  | |  | |
36*13e8728fSAndroid Build Coastguard Worker  + +-----------------------+ |  | |  dt_size
37*13e8728fSAndroid Build Coastguard Worker  |      DTBO           #1    |  | v (dt_entry_entry #1)
38*13e8728fSAndroid Build Coastguard Worker  +===========================+  | -
39*13e8728fSAndroid Build Coastguard Worker  |            ...            |  |
40*13e8728fSAndroid Build Coastguard Worker  +===========================+  |
41*13e8728fSAndroid Build Coastguard Worker  | +-----------------------+ |  |
42*13e8728fSAndroid Build Coastguard Worker  | |    fdt_header     #N  | |  | total_size
43*13e8728fSAndroid Build Coastguard Worker  + +-----------------------+ |  |
44*13e8728fSAndroid Build Coastguard Worker  |      DTBO           #N    |  v
45*13e8728fSAndroid Build Coastguard Worker  +---------------------------+  -
46*13e8728fSAndroid Build Coastguard Worker```
47*13e8728fSAndroid Build Coastguard Worker
48*13e8728fSAndroid Build Coastguard WorkerYou can find the data structure `dt_table_header` and `dt_table_entry`
49*13e8728fSAndroid Build Coastguard Workerin file `src/dt_table.h`
50*13e8728fSAndroid Build Coastguard Worker
51*13e8728fSAndroid Build Coastguard Worker### Build `mkdtimg`
52*13e8728fSAndroid Build Coastguard Worker
53*13e8728fSAndroid Build Coastguard WorkerAssume that you are at the root directory of the Android source.
54*13e8728fSAndroid Build Coastguard Worker
55*13e8728fSAndroid Build Coastguard Worker1. `source build/envsetup.sh`
56*13e8728fSAndroid Build Coastguard Worker2. `lunch`
57*13e8728fSAndroid Build Coastguard Worker3. `mmma system/libufdt/util/src`
58*13e8728fSAndroid Build Coastguard Worker
59*13e8728fSAndroid Build Coastguard Worker### Using `mkdtimg`
60*13e8728fSAndroid Build Coastguard Worker
61*13e8728fSAndroid Build Coastguard Worker`mkdtimg` supports several commands, including `create`, `cfg_create`,
62*13e8728fSAndroid Build Coastguard Workerand `dump`.
63*13e8728fSAndroid Build Coastguard Worker
64*13e8728fSAndroid Build Coastguard Worker#### `create` Command
65*13e8728fSAndroid Build Coastguard Worker
66*13e8728fSAndroid Build Coastguard WorkerUse the `create` command to create a `dtb`/`dtbo` image:
67*13e8728fSAndroid Build Coastguard Worker
68*13e8728fSAndroid Build Coastguard Worker```sh
69*13e8728fSAndroid Build Coastguard Worker$mkdtimg create <image_filename> (<global-option>...) \
70*13e8728fSAndroid Build Coastguard Worker  <ftb1_filename> (<entry1_option>...) \
71*13e8728fSAndroid Build Coastguard Worker  <ftb2_filename> (<entry2_option>...) \
72*13e8728fSAndroid Build Coastguard Worker  ...
73*13e8728fSAndroid Build Coastguard Worker```
74*13e8728fSAndroid Build Coastguard Worker
75*13e8728fSAndroid Build Coastguard WorkerEach dtb/dtbo `ftbX_filename` will generate a `dt_table_entry` in image.
76*13e8728fSAndroid Build Coastguard Worker`entryX_options` are the values to assign to `dt_table_entry`. These values
77*13e8728fSAndroid Build Coastguard Workercan be any of the following:
78*13e8728fSAndroid Build Coastguard Worker
79*13e8728fSAndroid Build Coastguard Worker```sh
80*13e8728fSAndroid Build Coastguard Worker  --id=<number|path>
81*13e8728fSAndroid Build Coastguard Worker  --rev=<number|path>
82*13e8728fSAndroid Build Coastguard Worker  --custom0=<number|path>
83*13e8728fSAndroid Build Coastguard Worker  --custom1=<number|path>
84*13e8728fSAndroid Build Coastguard Worker  --custom2=<number|path>
85*13e8728fSAndroid Build Coastguard Worker  --custom3=<number|path>
86*13e8728fSAndroid Build Coastguard Worker```
87*13e8728fSAndroid Build Coastguard Worker
88*13e8728fSAndroid Build Coastguard WorkerNumber values can be a 32-bit digit (such as `68000`) or a hex number
89*13e8728fSAndroid Build Coastguard Worker(such as `0x6800`). Alternatively, you can specify a path using the format:
90*13e8728fSAndroid Build Coastguard Worker
91*13e8728fSAndroid Build Coastguard Worker```
92*13e8728fSAndroid Build Coastguard Worker<full_node_path>:<property_name>
93*13e8728fSAndroid Build Coastguard Worker```
94*13e8728fSAndroid Build Coastguard Worker
95*13e8728fSAndroid Build Coastguard WorkerFor example, `/board/:id`. `mkdtimg` will read the value from the path in
96*13e8728fSAndroid Build Coastguard Workerthe DTB/DTBO file and assign into relative property in `dt_table_entry`.
97*13e8728fSAndroid Build Coastguard WorkerIt should be a 32-bits value.
98*13e8728fSAndroid Build Coastguard Worker
99*13e8728fSAndroid Build Coastguard WorkerYou can also give a `global_option` as a default option for all entries.
100*13e8728fSAndroid Build Coastguard WorkerThe default value of `page_size` in `dt_table_header` is `2048`. You can
101*13e8728fSAndroid Build Coastguard Workeruse `global_option` `--page_size=<number>` to assign a different value.
102*13e8728fSAndroid Build Coastguard Worker
103*13e8728fSAndroid Build Coastguard WorkerExample:
104*13e8728fSAndroid Build Coastguard Worker
105*13e8728fSAndroid Build Coastguard Worker```dts
106*13e8728fSAndroid Build Coastguard Worker[board1.dts]
107*13e8728fSAndroid Build Coastguard Worker
108*13e8728fSAndroid Build Coastguard Worker/dts-v1/;
109*13e8728fSAndroid Build Coastguard Worker/plugin/;
110*13e8728fSAndroid Build Coastguard Worker
111*13e8728fSAndroid Build Coastguard Worker/ {
112*13e8728fSAndroid Build Coastguard Worker  compatible = "board_manufacturer,board_model";
113*13e8728fSAndroid Build Coastguard Worker  board_id = <0x00010000>;
114*13e8728fSAndroid Build Coastguard Worker  board_rev = <0x00010001>;
115*13e8728fSAndroid Build Coastguard Worker  another_hw_information = "some_data";
116*13e8728fSAndroid Build Coastguard Worker  ...
117*13e8728fSAndroid Build Coastguard Worker};
118*13e8728fSAndroid Build Coastguard Worker
119*13e8728fSAndroid Build Coastguard Worker&device@0 {
120*13e8728fSAndroid Build Coastguard Worker  value = <0x1>;
121*13e8728fSAndroid Build Coastguard Worker  status = "okay";
122*13e8728fSAndroid Build Coastguard Worker};
123*13e8728fSAndroid Build Coastguard Worker```
124*13e8728fSAndroid Build Coastguard Worker
125*13e8728fSAndroid Build Coastguard Worker```sh
126*13e8728fSAndroid Build Coastguard Worker$mkdtimg create dtbo.img --id=/:board_id --rev=/:board_rev --custom0=0xabc \
127*13e8728fSAndroid Build Coastguard Worker  board1.dtbo \
128*13e8728fSAndroid Build Coastguard Worker  board2.dtbo --id=0x6800 \
129*13e8728fSAndroid Build Coastguard Worker  board3.dtbo --id=0x6801 --custom0=0x123
130*13e8728fSAndroid Build Coastguard Worker```
131*13e8728fSAndroid Build Coastguard Worker
132*13e8728fSAndroid Build Coastguard Worker* First `dt_table_entry` (`board1.dtbo`) `id` is `0x00010000` and `custom[0]`
133*13e8728fSAndroid Build Coastguard Worker  is `0x00000abc.`
134*13e8728fSAndroid Build Coastguard Worker* Second `id` is `0x00006800` and `custom[0]` is `0x00000abc`.
135*13e8728fSAndroid Build Coastguard Worker* Third `id` is `0x00006801` and `custom[0]` is `0x00000123`.
136*13e8728fSAndroid Build Coastguard Worker* All others use the default value (0).
137*13e8728fSAndroid Build Coastguard Worker
138*13e8728fSAndroid Build Coastguard Worker#### `cfg_create` Command
139*13e8728fSAndroid Build Coastguard Worker
140*13e8728fSAndroid Build Coastguard WorkerThe `cfg_create` command creates an image with a config file in the following
141*13e8728fSAndroid Build Coastguard Workerformat:
142*13e8728fSAndroid Build Coastguard Worker
143*13e8728fSAndroid Build Coastguard Worker```sh
144*13e8728fSAndroid Build Coastguard Worker# global options
145*13e8728fSAndroid Build Coastguard Worker  <global_option>
146*13e8728fSAndroid Build Coastguard Worker  ...
147*13e8728fSAndroid Build Coastguard Worker# entries
148*13e8728fSAndroid Build Coastguard Worker<ftb1_filename>     # comment
149*13e8728fSAndroid Build Coastguard Worker  <entry1_option>   # comment
150*13e8728fSAndroid Build Coastguard Worker  ...
151*13e8728fSAndroid Build Coastguard Worker<ftb2_filename>
152*13e8728fSAndroid Build Coastguard Worker  <entry2_option>
153*13e8728fSAndroid Build Coastguard Worker  ...
154*13e8728fSAndroid Build Coastguard Worker...
155*13e8728fSAndroid Build Coastguard Worker```
156*13e8728fSAndroid Build Coastguard Worker
157*13e8728fSAndroid Build Coastguard WorkerThe `global_options` and `entryX_options` must start with one or more space
158*13e8728fSAndroid Build Coastguard Workercharacters (these options are the same as create options, without the `--`
159*13e8728fSAndroid Build Coastguard Workerprefix). Empty lines or lines beginning with `#` are ignored.
160*13e8728fSAndroid Build Coastguard Worker
161*13e8728fSAndroid Build Coastguard WorkerExample:
162*13e8728fSAndroid Build Coastguard Worker
163*13e8728fSAndroid Build Coastguard Worker```sh
164*13e8728fSAndroid Build Coastguard Worker[dtboimg.cfg]
165*13e8728fSAndroid Build Coastguard Worker
166*13e8728fSAndroid Build Coastguard Worker# global options
167*13e8728fSAndroid Build Coastguard Worker  id=/:board_id
168*13e8728fSAndroid Build Coastguard Worker  rev=/:board_rev
169*13e8728fSAndroid Build Coastguard Worker  custom0=0xabc
170*13e8728fSAndroid Build Coastguard Worker
171*13e8728fSAndroid Build Coastguard Workerboard1.dtbo
172*13e8728fSAndroid Build Coastguard Worker
173*13e8728fSAndroid Build Coastguard Workerboard2.dtbo
174*13e8728fSAndroid Build Coastguard Worker  id=0x6800 # override the value of id in global options
175*13e8728fSAndroid Build Coastguard Worker
176*13e8728fSAndroid Build Coastguard Workerboard2.dtbo
177*13e8728fSAndroid Build Coastguard Worker```
178*13e8728fSAndroid Build Coastguard Worker
179*13e8728fSAndroid Build Coastguard Worker```sh
180*13e8728fSAndroid Build Coastguard Worker$mkdtimg cfg_create dtbo.img dtboimg.cfg
181*13e8728fSAndroid Build Coastguard Worker```
182*13e8728fSAndroid Build Coastguard Worker
183*13e8728fSAndroid Build Coastguard Worker#### `dump` Command
184*13e8728fSAndroid Build Coastguard Worker
185*13e8728fSAndroid Build Coastguard WorkerFor `dtb`/`dtbo` images, use the `dump` command to print the information in
186*13e8728fSAndroid Build Coastguard Workerthe image. Example:
187*13e8728fSAndroid Build Coastguard Worker
188*13e8728fSAndroid Build Coastguard Worker```sh
189*13e8728fSAndroid Build Coastguard Worker$mkdtimg dump dtbo.img
190*13e8728fSAndroid Build Coastguard Workerdt_table_header:
191*13e8728fSAndroid Build Coastguard Worker               magic = d7b7ab1e
192*13e8728fSAndroid Build Coastguard Worker          total_size = 1300
193*13e8728fSAndroid Build Coastguard Worker         header_size = 32
194*13e8728fSAndroid Build Coastguard Worker       dt_entry_size = 32
195*13e8728fSAndroid Build Coastguard Worker      dt_entry_count = 3
196*13e8728fSAndroid Build Coastguard Worker   dt_entries_offset = 32
197*13e8728fSAndroid Build Coastguard Worker           page_size = 2048
198*13e8728fSAndroid Build Coastguard Worker             version = 0
199*13e8728fSAndroid Build Coastguard Worker
200*13e8728fSAndroid Build Coastguard Workerdt_table_entry[0]:
201*13e8728fSAndroid Build Coastguard Worker             dt_size = 380
202*13e8728fSAndroid Build Coastguard Worker           dt_offset = 128
203*13e8728fSAndroid Build Coastguard Worker                  id = 00010000
204*13e8728fSAndroid Build Coastguard Worker                 rev = 00010001
205*13e8728fSAndroid Build Coastguard Worker           custom[0] = 00000abc
206*13e8728fSAndroid Build Coastguard Worker           custom[1] = 00000000
207*13e8728fSAndroid Build Coastguard Worker           custom[2] = 00000000
208*13e8728fSAndroid Build Coastguard Worker           custom[3] = 00000000
209*13e8728fSAndroid Build Coastguard Worker           (FDT)size = 380
210*13e8728fSAndroid Build Coastguard Worker     (FDT)compatible = board_manufacturer,board_model
211*13e8728fSAndroid Build Coastguard Worker...
212*13e8728fSAndroid Build Coastguard Worker```
213*13e8728fSAndroid Build Coastguard Worker
214*13e8728fSAndroid Build Coastguard Worker#### `help` Command
215*13e8728fSAndroid Build Coastguard Worker
216*13e8728fSAndroid Build Coastguard WorkerUse `help` command to get more detail options. Example:
217*13e8728fSAndroid Build Coastguard Worker
218*13e8728fSAndroid Build Coastguard Worker```sh
219*13e8728fSAndroid Build Coastguard Worker$mkdtimg help cfg_create
220*13e8728fSAndroid Build Coastguard Worker```
221