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