You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
221 lines
5.4 KiB
221 lines
5.4 KiB
libufdt `utils` folder
|
|
=====================
|
|
|
|
This folder contains utilities for device tree overlay.
|
|
|
|
mkdtimg (DEPRECATED, use mkdtboimg.py instead.)
|
|
-------
|
|
|
|
If your DTB/DTBO is in an unique partition, e.g. `dtb` and `dtbo` partition.
|
|
`mkdtimg` is a tool for creating the `dtb`/`dtbo` image.
|
|
You can use `mkdtimg` to pack one or more DTB/DTBO files into an image.
|
|
|
|
### Image Format
|
|
|
|
This is the layout for `dtb`/`dtbo` image:
|
|
|
|
```txt
|
|
+---------------------------+ - - - -
|
|
| dt_table_header | ^ | v dt_entries_offset | header_size
|
|
+===========================+ | | - - -
|
|
| dt_table_entry #0 | | | ^ | dt_entry_size
|
|
+---------------------------+ | | | -
|
|
| dt_table_entry #1 | | | |
|
|
+---------------------------+ | | |
|
|
| ... | | | | dt_entry_size * dt_entry_count
|
|
+---------------------------+ | | |
|
|
| dt_table_entry #N | | | v
|
|
+===========================+ | | -
|
|
| +-----------------------+ | | |
|
|
| | fdt_header #0 | | | |
|
|
+ +-----------------------+ | | | dt_offset
|
|
| DTBO #0 | | v (dt_entry_entry #1)
|
|
+===========================+ | _
|
|
| +-----------------------+ | | ^
|
|
| | fdt_header #1 | | | |
|
|
+ +-----------------------+ | | | dt_size
|
|
| DTBO #1 | | v (dt_entry_entry #1)
|
|
+===========================+ | -
|
|
| ... | |
|
|
+===========================+ |
|
|
| +-----------------------+ | |
|
|
| | fdt_header #N | | | total_size
|
|
+ +-----------------------+ | |
|
|
| DTBO #N | v
|
|
+---------------------------+ -
|
|
```
|
|
|
|
You can find the data structure `dt_table_header` and `dt_table_entry`
|
|
in file `src/dt_table.h`
|
|
|
|
### Build `mkdtimg`
|
|
|
|
Assume that you are at the root directory of the Android source.
|
|
|
|
1. `source build/envsetup.sh`
|
|
2. `lunch`
|
|
3. `mmma system/libufdt/util/src`
|
|
|
|
### Using `mkdtimg`
|
|
|
|
`mkdtimg` supports several commands, including `create`, `cfg_create`,
|
|
and `dump`.
|
|
|
|
#### `create` Command
|
|
|
|
Use the `create` command to create a `dtb`/`dtbo` image:
|
|
|
|
```sh
|
|
$mkdtimg create <image_filename> (<global-option>...) \
|
|
<ftb1_filename> (<entry1_option>...) \
|
|
<ftb2_filename> (<entry2_option>...) \
|
|
...
|
|
```
|
|
|
|
Each dtb/dtbo `ftbX_filename` will generate a `dt_table_entry` in image.
|
|
`entryX_options` are the values to assign to `dt_table_entry`. These values
|
|
can be any of the following:
|
|
|
|
```sh
|
|
--id=<number|path>
|
|
--rev=<number|path>
|
|
--custom0=<number|path>
|
|
--custom1=<number|path>
|
|
--custom2=<number|path>
|
|
--custom3=<number|path>
|
|
```
|
|
|
|
Number values can be a 32-bit digit (such as `68000`) or a hex number
|
|
(such as `0x6800`). Alternatively, you can specify a path using the format:
|
|
|
|
```
|
|
<full_node_path>:<property_name>
|
|
```
|
|
|
|
For example, `/board/:id`. `mkdtimg` will read the value from the path in
|
|
the DTB/DTBO file and assign into relative property in `dt_table_entry`.
|
|
It should be a 32-bits value.
|
|
|
|
You can also give a `global_option` as a default option for all entries.
|
|
The default value of `page_size` in `dt_table_header` is `2048`. You can
|
|
use `global_option` `--page_size=<number>` to assign a different value.
|
|
|
|
Example:
|
|
|
|
```dts
|
|
[board1.dts]
|
|
|
|
/dts-v1/;
|
|
/plugin/;
|
|
|
|
/ {
|
|
compatible = "board_manufacturer,board_model";
|
|
board_id = <0x00010000>;
|
|
board_rev = <0x00010001>;
|
|
another_hw_information = "some_data";
|
|
...
|
|
};
|
|
|
|
&device@0 {
|
|
value = <0x1>;
|
|
status = "okay";
|
|
};
|
|
```
|
|
|
|
```sh
|
|
$mkdtimg create dtbo.img --id=/:board_id --rev=/:board_rev --custom0=0xabc \
|
|
board1.dtbo \
|
|
board2.dtbo --id=0x6800 \
|
|
board3.dtbo --id=0x6801 --custom0=0x123
|
|
```
|
|
|
|
* First `dt_table_entry` (`board1.dtbo`) `id` is `0x00010000` and `custom[0]`
|
|
is `0x00000abc.`
|
|
* Second `id` is `0x00006800` and `custom[0]` is `0x00000abc`.
|
|
* Third `id` is `0x00006801` and `custom[0]` is `0x00000123`.
|
|
* All others use the default value (0).
|
|
|
|
#### `cfg_create` Command
|
|
|
|
The `cfg_create` command creates an image with a config file in the following
|
|
format:
|
|
|
|
```sh
|
|
# global options
|
|
<global_option>
|
|
...
|
|
# entries
|
|
<ftb1_filename> # comment
|
|
<entry1_option> # comment
|
|
...
|
|
<ftb2_filename>
|
|
<entry2_option>
|
|
...
|
|
...
|
|
```
|
|
|
|
The `global_options` and `entryX_options` must start with one or more space
|
|
characters (these options are the same as create options, without the `--`
|
|
prefix). Empty lines or lines beginning with `#` are ignored.
|
|
|
|
Example:
|
|
|
|
```sh
|
|
[dtboimg.cfg]
|
|
|
|
# global options
|
|
id=/:board_id
|
|
rev=/:board_rev
|
|
custom0=0xabc
|
|
|
|
board1.dtbo
|
|
|
|
board2.dtbo
|
|
id=0x6800 # override the value of id in global options
|
|
|
|
board2.dtbo
|
|
```
|
|
|
|
```sh
|
|
$mkdtimg cfg_create dtbo.img dtboimg.cfg
|
|
```
|
|
|
|
#### `dump` Command
|
|
|
|
For `dtb`/`dtbo` images, use the `dump` command to print the information in
|
|
the image. Example:
|
|
|
|
```sh
|
|
$mkdtimg dump dtbo.img
|
|
dt_table_header:
|
|
magic = d7b7ab1e
|
|
total_size = 1300
|
|
header_size = 32
|
|
dt_entry_size = 32
|
|
dt_entry_count = 3
|
|
dt_entries_offset = 32
|
|
page_size = 2048
|
|
version = 0
|
|
|
|
dt_table_entry[0]:
|
|
dt_size = 380
|
|
dt_offset = 128
|
|
id = 00010000
|
|
rev = 00010001
|
|
custom[0] = 00000abc
|
|
custom[1] = 00000000
|
|
custom[2] = 00000000
|
|
custom[3] = 00000000
|
|
(FDT)size = 380
|
|
(FDT)compatible = board_manufacturer,board_model
|
|
...
|
|
```
|
|
|
|
#### `help` Command
|
|
|
|
Use `help` command to get more detail options. Example:
|
|
|
|
```sh
|
|
$mkdtimg help cfg_create
|
|
```
|