utils
folderThis folder contains utilities for device tree overlay.
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.
This is the layout for dtb
/dtbo
image:
+---------------------------+ - - - -
| 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
mkdtimg
Assume that you are at the root directory of the Android source.
source build/envsetup.sh
lunch
mmma system/libufdt/util/src
mkdtimg
mkdtimg
supports several commands, including create
, cfg_create
, and dump
.
create
CommandUse the create
command to create a dtb
/dtbo
image:
$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:
--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:
[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"; };
$mkdtimg create dtbo.img --id=/:board_id --rev=/:board_rev --custom0=0xabc \ board1.dtbo \ board2.dtbo --id=0x6800 \ board3.dtbo --id=0x6801 --custom0=0x123
dt_table_entry
(board1.dtbo
) id
is 0x00010000
and custom[0]
is 0x00000abc.
id
is 0x00006800
and custom[0]
is 0x00000abc
.id
is 0x00006801
and custom[0]
is 0x00000123
.cfg_create
CommandThe cfg_create
command creates an image with a config file in the following format:
# 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:
[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
$mkdtimg cfg_create dtbo.img dtboimg.cfg
dump
CommandFor dtb
/dtbo
images, use the dump
command to print the information in the image. Example:
$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 reserved[0] = 00000000 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
CommandUse help
command to get more detail options. Example:
$mkdtimg help cfg_create