Dtb to dts windows

acdev

2014-12-24

Преобразование dtb.img (QCDT) в набор DTS-файлов

Порой при работе с образом ядра boot.img требуется изменить, содержащуюся в оном структуру Flattened Device Tree (FDT), или же необходимо просто изучение FDT структуры, когда нету исходников ядра. Попробую вкратце объяснить как из образа boot.img получить DTS-файлы и как полученные файлы упаковать обратно в boot.img.

Редактирование DTS-файлов рассматривать не буду, т.к. это другая история.

В образе boot.img кроме ядра и ramdisk’а содержится образ dtb.img , который представляет бинарную QCDT-структуру. В свою очередь QCDT-структура содержит в себе DTB-структуры (Device Tree Blob). Что бы из образа boot.img извлечь dtb.img нужно воспользоваться утилитой AndImgTool. Эта утилита для Windows платформы (существуют аналоги для Linux).

После получения файла dtb.img следует перейти на Linux платформу, т.к. оставшиеся две утилиты под Windows найти не удалось. В вашей Linux-подобной системе создайте директорию, в которую скопируйте файл dtb.img . В эту же директорию скопируйте утилиты dtc и dtbToolCM (скачать). Далее в консоли выполните следующий скрипт:
В результате появится новая директория «phone_dts», в которой будут находится все DTS-файлы, содержащиеся в dtb.img образе. Теперь эти файлы можно изучать и редактировать.

Замечу, что полученные DTS-файлы являются «очищенным» вариантом файлов, которые изначально находились в исходниках ядра по пути «/arch/arm/boot/dts».

Welcome to the Corner of Excellence

From boot.img to boot.img-dt to DTB and DTS in Windows OS

Uncompress boot.img using carliv_image_kitchen-v1.3-x86.zip:

Then execute this command in cmd:

Executing carliv and we have boot.img-dt. Let’s see whether the utility called dtc can be use to decode this file.

The dtc utility should be compiled first from: D:\Projects\dtc. So, let’s compile:

D:\Projects\dtc>make
CHK version_gen.h
CC convert-dtsv0-lexer.lex.o
convert-dtsv0-lexer.l:42:21: fatal error: fnmatch.h: No such file or directory
compilation terminated.
make: *** [convert-dtsv0-lexer.lex.o] Error 1

To capture what command that causes this error, it is necessary to use procmon.exe, using this settings:

And then export to a command line using batch file.

After examining more closely, the causes is that MINGW is not supporting the fnmatch function, so it should use Cygwin’s compiler instead. This is done by changing CC variable in makefile:

D:\Projects\dtc>make
CHK version_gen.h
CC srcpos.o
CC util.o
cc1: warnings being treated as errors
util.c: In function `util_is_printable_string’:
util.c:90:3: error: array subscript has type `char’
make: *** [util.o] Error 1

This is because the -Werror flag in the make file, remove it and I have:

D:\Projects\dtc>dir *.exe
Volume in drive D is Data
Volume Serial Number is EFCE-4830

Directory of D:\Projects\dtc

08/15/2017 03:50 PM 115,009 convert-dtsv0.exe
08/15/2017 03:50 PM 279,645 dtc.exe
08/15/2017 03:50 PM 78,242 fdtdump.exe
08/15/2017 03:50 PM 106,605 fdtget.exe
08/15/2017 03:50 PM 134,453 fdtput.exe

D:\Projects\AndromaxQ\carliv\boot>dtc -I dtb -O dts -o mydts.dts boot.img-dt
FATAL ERROR: Blob has incorrect magic number

Seems, that this file is not intended to be processed by dtc.

Obtain dtbTool from github and compile:

D:\Projects\dtbTool>make
i686-pc-cygwin-gcc-4 -O2 -g -Wall -c dtbtool.c
dtbtool.c: In function `getChipInfo’:
dtbtool.c:273:23: warning: `entryEndedST’ may be used uninitialized in this func
tion
dtbtool.c:273:51: warning: `entryEndedDT’ may be used uninitialized in this func
tion
dtbtool.c:273:79: warning: `entryEndedPT’ may be used uninitialized in this func
tion
i686-pc-cygwin-gcc-4 -g -o dtbtool dtbtool.o

But actually the dtbTools is used to create the dt.img from files of *.dtb.

But now let’s use this:

D:\Projects\dtbTool>gcc split-appended-dtb.c -o split-appended-dtb

Читайте также:  Windows have no trim

Now executed it at:

D:\Projects\AndromaxQ\carliv\boot>split-appended-dtb boot.img-dt
Found 47 appended dtbs, please check the output.

D:\Projects\AndromaxQ\carliv\boot>dir *.dtb
Volume in drive D is Data
Volume Serial Number is EFCE-4830

Directory of D:\Projects\AndromaxQ\carliv\boot

08/15/2017 04:40 PM 178,176 dtbdump_1.dtb
08/15/2017 04:40 PM 163,840 dtbdump_10.dtb
08/15/2017 04:40 PM 163,840 dtbdump_11.dtb

Let’s try our dtc.exe again:

D:\Projects\AndromaxQ\carliv\boot>dtc -I dtb -O dts -o mydts.dts dtbdump_1.dtb

It runs without error this time. And I have a decompiled *.dts file here:

Dtb to dts windows

imgRePackerRK
Утилита для распаковки/запаковки образов прошивок RockChip (*.img)

Версия 1.06 windows&linux imgRePackerRK_106.zip ( 176,25 КБ )

Назначение:
Распаковка для внесения изменений и последующей запаковки образов прошивок формата RockChip. Также можно использовать для исправления контрольных сумм md5 и RockChip CRC.

Возможности:
— распаковка и запаковка RKFW-образов (описание формата) прошивок (с/без обработки файлов 2-го слоя);
— распаковка и запаковка RKAF-образов (описание формата) прошивок (с/без обработки файлов 2-го слоя);
— распаковка и запаковка файлов 2-го слоя; поддерживаются: Android boot image (04), RockChip bootloader image (15), gzip/cpio archive file (14), cpio_ascii_new archive file (19), Rockchip resources image (30).
— проверка и исправление контрольных сумм md5 и RockChip CRC.

Проверено на прошивках:
— RK28xx (ChipID=0xXXXXXX21);
— RK29xx (ChipID=0xXXXXXX5X);
— RK30xx (ChipID=0xXXXXXX6X);
— RK31xx (ChipID=0xXXXXXX7X);
— RK32xx (ChipID=0xXXXXXX8X);
— RK33xx (ChipID=0xXXXXXX4X).

Примечание:
Для распаковки/запаковки gzip/cpio файлов Windows-версия утилиты использует внешнюю библиотеку zlib1.dll (http://www.zlib.net/) и собственный упрощенный алгоритм распаковки/запаковки cpio (впрочем, аналогичный, судя по результату, оригинальному). Linux-версия использует вызов внешних нативных утилит gzip/gunzip и cpio (поэтому простая перепаковка без изменений не дает прямого совпадения полученной прошивки).

Состав архива:
1. imgRePackerRK.exe — Windows-версия.
2. zlib1.dll — библиотека поддержки gzip-файлов для Windows-версии.
3. imgrepackerrk — Linux-версия.
4. ReadMe.txt — этот файл.
5. ReadMe_utf8.txt — то же самое в кодировке UTF-8.

Special thanks:
Jean-loup Gailly & Mark Adler for zlib library (http://www.zlib.net/)

улучшен алгоритм чтения bcpath и lname;

мелкие улучшения.
1.05 [W&L] (10.08.2015) imgRePackerRK_105.zip ( 153,68 КБ )

использование WinAPI для создания каталогов;
+ поддержка формата Rockchip resources image;
+ поддержка RK32xx (ChipID=0x00000080);
+ добавлен ключ /symb;
+ добавлен ключ /bcpath;
+ добавлен ключ /lname;
+ создание конфигурационных файлов для RKAndroidTool v.1.xx/2.xx;
+ проверка «пересечений» разделов и «дырок» между ними;
+ сравнение длины файлов с размером раздела.
1.04 [W&L] (17.02.2014) imgRePackerRK_104.zip ( 132,86 КБ )
+ распаковка/запаковка «одиночно стоящих» PARM-signed файлов;

изменен алгоритм распаковки KRNL-signed файлов (отрезаем «лишнее»);

усовершенствован алгоритм автоматической коррекции ошибки описания размера области, отведенной под отдельные файлы;
— удален ключ /blk;
+ мелкие улучшения.
1.03 [W&L] (21.01.2014) imgRePackerRK_103.zip ( 131,45 КБ )

исправлен баг проверки symlink-ов с абсолютными путями (CPIO);
+ добавлена автоматическая коррекция ошибки описания размера области, отведенной под отдельные файлы;
+ добавлен ключ /blk;
+ добавлен ключ /cid.
1.02 [W&L] (03.10.2013) imgRePackerRK_102.zip ( 130,35 КБ )

исправлен баг с распаковкой/запаковкой «одиночно стоящих» KRNL-signed образов.
1.01 [W&L] (01.10.2013) imgRePackerRK_101.zip ( 130,15 КБ )
+ добавлена поддержка формата nongzipped cpio_ascii_new archive file;
+ добавлен ключ /skip.
1.00 [W&L] (06.09.2013) imgRePackerRK_100.zip ( 125,34 КБ )
! Release;
+ добавлена поддержка формата gzip/cpio archive file;
+ добавлена поддержка формата cpio_ascii_new archive file;

оптимизированы некоторые участки кода;
— удален ключ /inter;
— устранены мелкие ошибки в коде;
+ мелкие улучшения.
0.95 [W&L] (26.05.2013) imgRePackerRK_095.zip ( 57,5 КБ )
! pre-Release #5;
+ добавлена поддержка формата RockChip bootloader image.
0.94 [W&L] (17.05.2013) imgRePackerRK_094.zip ( 51,52 КБ )
! pre-Release #4;
+ добавлен ключ /2nd;
+ добавлена поддержка формата Android boot image.
0.93 [W&L] (29.04.2013) imgRePackerRK_093.zip ( 38,54 КБ )
! pre-Release #3.
0.92 [W&L] (21.04.2013)
! pre-Release (for internal use)

Сообщение отредактировал RedScorpio — 03.08.17, 15:12

Использование:
«imgRePackerRK.exe [options] » — распаковка (Windows)
«imgRePackerRK.exe [options] .dump» — запаковка (Windows)
«imgRePackerRK.exe [options] .cfg» — запаковка файла 2-го слоя (Windows)
«./imgrepackerrk [options] » — распаковка (Linux)
«./imgrepackerrk [options] .dump» — запаковка (Linux)
«./imgrepackerrk [options] .cfg» — запаковка файла 2-го слоя (Linux)

Читайте также:  Speedtest vpn для windows

Опции (в скобках указано имя в ini-файле и значение по умолчанию):
/log — создавать log-файл (log = 0);
/debug — писать отладочную информацию, работает только с опцией /log (debug = 0);
/quiet — отключить вывод в консоль (quiet = 0);
/mono — включить монохромный режим (mono = 0);
/md5 — игнорировать ошибки md5 (при распаковке) или
не добавлять контрольную сумму md5 (при запаковке) (md5 = 0);
/rkcrc — игнорировать ошибки RockChip CRC (rkcrc = 0);
/rkaf — создавать RKAF image (запаковка) (rkaf = 0);
/skip — пропустить проверку размера файла образа прошивки; используется при распаковке
(skip = 0);
/2nd — распаковка/запаковка файлов второго слоя (2nd = 0);
/cid — не проверять ChipID (cid = 0);
/rmd4 — выравнивание ramdisk в Android Boot image по границе 4 байта (rmd4 = 0);
/symb — игнорировать ошибки проверки символьных линков (symb = 0);
/bcpath:

— базовый путь для конфигурационных файлов RKAndroidTool;
/lname:
— название загрузчика для конфигурационных файлов RKAndroidTool;
/ini — перезаписать ini-file с опциями из командной строки (-);
Примечание:
Опции командной строки всегда имеют приоритет выше параметров ini-файла.

Сообщение отредактировал RedScorpio — 03.05.17, 23:14

Формат RKFW-файла (RockChip batch firmware image)

Структура файла (рис.1)
1. Header
2. boot.img
3. Простой update.img или RKAF-файл
4. Контрольная сумма MD5 (опционально)

Примечания:
1. Названия структуры и ее полей могут не совпадать с задуманными разработчиком(ами).
2. В качестве boot.img во всех встреченных прошивках использовался bootloader (например, «RK30xxLoader(L)_V1.24.bin» для прошивок RK3066).
3. Выравнивания файлов нет.
4. Контрольная сумма MD5 встречается не во всех прошивках (установить точно, когда она нужна, а когда нет — пока не удалось).

Сообщение отредактировал RedScorpio — 03.08.17, 14:17

Формат RKAF-файла (RockChip update firmware image)

Структура файла (рис.2)
1. Header
2. Файлы
3. Контрольная сумма RockChip CRC (см. алгоритм)

struct RKAF_Hdr <
char Magic[4]; // «RKAF»
unsigned long int ImgLen;
char Model[34];
char Id[30];
char Manufacturer[56];
unsigned long int Unknown_1;
unsigned long int Version;
unsigned long int FileCount;

struct sUpdFile uFiles[16];
unsigned char Reserved[116];
> UpdHdr;

Сообщение отредактировал RedScorpio — 20.10.16, 18:23

Это код чипа RK29xx (см., например, у wendal).

По поводу «2. boot.img«, то это ВСЕГДА простой загрузчик, т.е. Boot.bin.
По поводу выравнивания «1. Файлы выравниваются по границе 2КБ (0x0800).», то Вы его задаете в том же файле parameter.

Сообщение отредактировал vin2809 — 04.05.13, 08:24

Какой параметр? При упаковке у меня сейчас сделано фиксировано. Нужно будет поправить.

Update (18.05.2013) Вопрос «повис в воздухе»; как править, пока не знаю

Сообщение отредактировал RedScorpio — 18.05.13, 18:59

Назначение — описание состава прошивки (названия файлов).
Представляет из себя простой текстовый файл, в котором каждая строка описывает файл двумя полями: имя (ID) и название файла на физическом носителе с относительным путем. Поля разделены пробелами и/или знаками табуляции, комментарии в файле начинаются с символа #. Первое поле соответствует Name, второе — FileName структуры sUpdFile (описание файлов в прошивке) заголовка RKAF-файла.

Зарезервированные имена для второго поля SELF и RESERVED

Сообщение отредактировал RedScorpio — 08.05.13, 20:15

Назначение — описание прошивки.
Представляет из себя простой текстовый файл, в котором каждая строка представляет из себя название параметра и его значение, разделенные символом «двоеточие» («:«), комментарии в файле начинаются с символа «#«.

Описание параметров (что удалось выяснить):
FIRMWARE_VER = RKAF_Hdr.Version
MACHINE_MODEL = RKAF_Hdr.Model
MACHINE_ID = RKAF_Hdr.Id
MANUFACTURER = RKAF_Hdr.Manufacturer
MAGIC = ? (в примере «PARK»)
ATAG = ?
MACHINE = ?
CHECK_MASK = ?
KERNEL_IMG = ?
CMDLINE = Командная строка (?); наибольший интерес представляет mtdparts, описывающая разделы NAND. Например, 0x00100000@0x00554000(system) означает, что раздел system (файл Image/system.img) размещается по адресу 0x00554000 (sUpdFile.NandAddr) и имеет размер 0x00100000 (sUpdFile.NandSize). Значения задаются в блоках (512Б).

Читайте также:  Как перезагрузить комп через терминал линукс

Сообщение отредактировал RedScorpio — 14.09.13, 11:01

Контрольная сумма RockChip CRC

Алгоритм найден на просторах интернета, проблем при «вживлении» в утилиту не возникло

/*-
* Copyright (c) 2010 FUKAUMI Naoki.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR «AS IS» AND ANY EXPRESS OR
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
* IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/

#ifndef _RKCRC_H
#define _RKCRC_H

static uint32_t _t[256] = <
0x00000000, 0x04c10db7, 0x09821b6e, 0x0d4316d9,
0x130436dc, 0x17c53b6b, 0x1a862db2, 0x1e472005,
0x26086db8, 0x22c9600f, 0x2f8a76d6, 0x2b4b7b61,
0x350c5b64, 0x31cd56d3, 0x3c8e400a, 0x384f4dbd,
0x4c10db70, 0x48d1d6c7, 0x4592c01e, 0x4153cda9,
0x5f14edac, 0x5bd5e01b, 0x5696f6c2, 0x5257fb75,
0x6a18b6c8, 0x6ed9bb7f, 0x639aada6, 0x675ba011,
0x791c8014, 0x7ddd8da3, 0x709e9b7a, 0x745f96cd,
0x9821b6e0, 0x9ce0bb57, 0x91a3ad8e, 0x9562a039,
0x8b25803c, 0x8fe48d8b, 0x82a79b52, 0x866696e5,
0xbe29db58, 0xbae8d6ef, 0xb7abc036, 0xb36acd81,
0xad2ded84, 0xa9ece033, 0xa4aff6ea, 0xa06efb5d,
0xd4316d90, 0xd0f06027, 0xddb376fe, 0xd9727b49,
0xc7355b4c, 0xc3f456fb, 0xceb74022, 0xca764d95,
0xf2390028, 0xf6f80d9f, 0xfbbb1b46, 0xff7a16f1,
0xe13d36f4, 0xe5fc3b43, 0xe8bf2d9a, 0xec7e202d,
0x34826077, 0x30436dc0, 0x3d007b19, 0x39c176ae,
0x278656ab, 0x23475b1c, 0x2e044dc5, 0x2ac54072,
0x128a0dcf, 0x164b0078, 0x1b0816a1, 0x1fc91b16,
0x018e3b13, 0x054f36a4, 0x080c207d, 0x0ccd2dca,
0x7892bb07, 0x7c53b6b0, 0x7110a069, 0x75d1adde,
0x6b968ddb, 0x6f57806c, 0x621496b5, 0x66d59b02,
0x5e9ad6bf, 0x5a5bdb08, 0x5718cdd1, 0x53d9c066,
0x4d9ee063, 0x495fedd4, 0x441cfb0d, 0x40ddf6ba,
0xaca3d697, 0xa862db20, 0xa521cdf9, 0xa1e0c04e,
0xbfa7e04b, 0xbb66edfc, 0xb625fb25, 0xb2e4f692,
0x8aabbb2f, 0x8e6ab698, 0x8329a041, 0x87e8adf6,
0x99af8df3, 0x9d6e8044, 0x902d969d, 0x94ec9b2a,
0xe0b30de7, 0xe4720050, 0xe9311689, 0xedf01b3e,
0xf3b73b3b, 0xf776368c, 0xfa352055, 0xfef42de2,
0xc6bb605f, 0xc27a6de8, 0xcf397b31, 0xcbf87686,
0xd5bf5683, 0xd17e5b34, 0xdc3d4ded, 0xd8fc405a,
0x6904c0ee, 0x6dc5cd59, 0x6086db80, 0x6447d637,
0x7a00f632, 0x7ec1fb85, 0x7382ed5c, 0x7743e0eb,
0x4f0cad56, 0x4bcda0e1, 0x468eb638, 0x424fbb8f,
0x5c089b8a, 0x58c9963d, 0x558a80e4, 0x514b8d53,
0x25141b9e, 0x21d51629, 0x2c9600f0, 0x28570d47,
0x36102d42, 0x32d120f5, 0x3f92362c, 0x3b533b9b,
0x031c7626, 0x07dd7b91, 0x0a9e6d48, 0x0e5f60ff,
0x101840fa, 0x14d94d4d, 0x199a5b94, 0x1d5b5623,
0xf125760e, 0xf5e47bb9, 0xf8a76d60, 0xfc6660d7,
0xe22140d2, 0xe6e04d65, 0xeba35bbc, 0xef62560b,
0xd72d1bb6, 0xd3ec1601, 0xdeaf00d8, 0xda6e0d6f,
0xc4292d6a, 0xc0e820dd, 0xcdab3604, 0xc96a3bb3,
0xbd35ad7e, 0xb9f4a0c9, 0xb4b7b610, 0xb076bba7,
0xae319ba2, 0xaaf09615, 0xa7b380cc, 0xa3728d7b,
0x9b3dc0c6, 0x9ffccd71, 0x92bfdba8, 0x967ed61f,
0x8839f61a, 0x8cf8fbad, 0x81bbed74, 0x857ae0c3,
0x5d86a099, 0x5947ad2e, 0x5404bbf7, 0x50c5b640,
0x4e829645, 0x4a439bf2, 0x47008d2b, 0x43c1809c,
0x7b8ecd21, 0x7f4fc096, 0x720cd64f, 0x76cddbf8,
0x688afbfd, 0x6c4bf64a, 0x6108e093, 0x65c9ed24,
0x11967be9, 0x1557765e, 0x18146087, 0x1cd56d30,
0x02924d35, 0x06534082, 0x0b10565b, 0x0fd15bec,
0x379e1651, 0x335f1be6, 0x3e1c0d3f, 0x3add0088,
0x249a208d, 0x205b2d3a, 0x2d183be3, 0x29d93654,
0xc5a71679, 0xc1661bce, 0xcc250d17, 0xc8e400a0,
0xd6a320a5, 0xd2622d12, 0xdf213bcb, 0xdbe0367c,
0xe3af7bc1, 0xe76e7676, 0xea2d60af, 0xeeec6d18,
0xf0ab4d1d, 0xf46a40aa, 0xf9295673, 0xfde85bc4,
0x89b7cd09, 0x8d76c0be, 0x8035d667, 0x84f4dbd0,
0x9ab3fbd5, 0x9e72f662, 0x9331e0bb, 0x97f0ed0c,
0xafbfa0b1, 0xab7ead06, 0xa63dbbdf, 0xa2fcb668,
0xbcbb966d, 0xb87a9bda, 0xb5398d03, 0xb1f880b4,
>;

#define RKCRC(crc, buf, size) \
do < \
size_t _s = (size); \
uint8_t *_b = (uint8_t *)(buf); \
while (_s— > 0) \
(crc) = ((crc) > 24) ^ *_b++]; \
> while (/* CONSTCOND */0)

Сообщение отредактировал RedScorpio — 08.05.13, 21:28

Оцените статью