Ver código fonte

Use shared dtbhtool.

bigbiff 7 anos atrás
pai
commit
3181f5eed6

+ 1 - 0
BoardConfig.mk

@@ -37,6 +37,7 @@ BOARD_KERNEL_SEPARATED_DT := true
 # 000RU = recovery kernel, 000KU = system kernel
 BOARD_MKBOOTIMG_ARGS := --kernel_offset 0x00008000 --ramdisk_offset 0x01000000 --tags_offset 0x00000100 --board SRPOI30A000RU
 TARGET_CUSTOM_DTBTOOL := dtbhtoolExynos
+TARGET_SPECIFIC_HEADER_PATH += device/samsung/herolte/include
 
 # File systems
 BOARD_HAS_LARGE_FILESYSTEM := true

+ 0 - 69
dtbhtool/Android.mk

@@ -1,69 +0,0 @@
-LOCAL_PATH:= $(call my-dir)
-
-# Host static library
-include $(CLEAR_VARS)
-LOCAL_SRC_FILES := dtbimg.c
-LOCAL_STATIC_LIBRARIES := libfdt
-LOCAL_EXPORT_C_INCLUDE_DIRS := $(LOCAL_PATH)/libdtbimg
-LOCAL_MODULE := libdtbimg
-include $(BUILD_HOST_STATIC_LIBRARY)
-
-include $(CLEAR_VARS)
-
-LOCAL_SRC_FILES := mkbootimg.c
-LOCAL_STATIC_LIBRARIES := libdtbimg libfdt libcrypto_static
-
-LOCAL_MODULE := mkdtbhbootimg
-
-include $(BUILD_HOST_EXECUTABLE)
-
-include $(CLEAR_VARS)
-LOCAL_SRC_FILES := unpackbootimg.c
-LOCAL_MODULE := unpackdtbhbootimg
-include $(BUILD_HOST_EXECUTABLE)
-
-include $(CLEAR_VARS)
-
-LOCAL_SRC_FILES := mkdtbimg.c
-LOCAL_STATIC_LIBRARIES := libdtbimg libfdt
-
-LOCAL_MODULE := dtbhtoolExynos
-
-include $(BUILD_HOST_EXECUTABLE)
-
-# Target static library
-include $(CLEAR_VARS)
-LOCAL_SRC_FILES := dtbimg.c
-LOCAL_STATIC_LIBRARIES := libfdt
-LOCAL_EXPORT_C_INCLUDE_DIRS := $(LOCAL_PATH)/libdtbimg
-LOCAL_MODULE := libdtbimg
-include $(BUILD_STATIC_LIBRARY)
-
-include $(CLEAR_VARS)
-LOCAL_SRC_FILES := mkbootimg.c
-LOCAL_STATIC_LIBRARIES := libdtbimg libfdt libcrypto_static libcutils libc
-LOCAL_MODULE := utility_mkdtbhbootimg
-LOCAL_MODULE_STEM := mkdtbhbootimg
-LOCAL_MODULE_CLASS := EXECUTABLES
-LOCAL_UNSTRIPPED_PATH := $(PRODUCT_OUT)/symbols/utilities
-LOCAL_MODULE_PATH := $(PRODUCT_OUT)/utilities
-LOCAL_FORCE_STATIC_EXECUTABLE := true
-include $(BUILD_EXECUTABLE)
-
-include $(CLEAR_VARS)
-LOCAL_SRC_FILES := unpackbootimg.c
-LOCAL_STATIC_LIBRARIES := libcutils libc
-LOCAL_MODULE := utility_unpackdtbhbootimg
-LOCAL_MODULE_STEM := unpackdtbhbootimg
-LOCAL_MODULE_CLASS := EXECUTABLES
-LOCAL_UNSTRIPPED_PATH := $(PRODUCT_OUT)/symbols/utilities
-LOCAL_MODULE_PATH := $(PRODUCT_OUT)/utilities
-LOCAL_FORCE_STATIC_EXECUTABLE := true
-include $(BUILD_EXECUTABLE)
-
-include $(CLEAR_VARS)
-LOCAL_SRC_FILES := unpackdtbhimg.c
-LOCAL_MODULE := unpackdtbhimg
-include $(BUILD_HOST_EXECUTABLE)
-
-$(call dist-for-goals,dist_files,$(LOCAL_BUILT_MODULE))

+ 0 - 102
dtbhtool/bootimg.h

@@ -1,102 +0,0 @@
-/* tools/mkbootimg/bootimg.h
-**
-** Copyright 2007, The Android Open Source Project
-**
-** Licensed under the Apache License, Version 2.0 (the "License"); 
-** you may not use this file except in compliance with the License. 
-** You may obtain a copy of the License at 
-**
-**     http://www.apache.org/licenses/LICENSE-2.0 
-**
-** Unless required by applicable law or agreed to in writing, software 
-** distributed under the License is distributed on an "AS IS" BASIS, 
-** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 
-** See the License for the specific language governing permissions and 
-** limitations under the License.
-*/
-
-#ifndef _BOOT_IMAGE_H_
-#define _BOOT_IMAGE_H_
-
-typedef struct boot_img_hdr boot_img_hdr;
-
-#define BOOT_MAGIC "ANDROID!"
-#define BOOT_MAGIC_SIZE 8
-#define BOOT_NAME_SIZE 16
-#define BOOT_ARGS_SIZE 512
-
-struct boot_img_hdr
-{
-    unsigned char magic[BOOT_MAGIC_SIZE];
-
-    unsigned kernel_size;  /* size in bytes */
-    unsigned kernel_addr;  /* physical load addr */
-
-    unsigned ramdisk_size; /* size in bytes */
-    unsigned ramdisk_addr; /* physical load addr */
-
-    unsigned second_size;  /* size in bytes */
-    unsigned second_addr;  /* physical load addr */
-
-    unsigned tags_addr;    /* physical addr for kernel tags */
-    unsigned page_size;    /* flash page size we assume */
-    unsigned dt_size;      /* device tree in bytes */
-    unsigned unused;       /* future expansion: should be 0 */
-    unsigned char name[BOOT_NAME_SIZE]; /* asciiz product name */
-    
-    unsigned char cmdline[BOOT_ARGS_SIZE];
-
-    unsigned id[8]; /* timestamp / checksum / sha1 / etc */
-};
-
-/*
-** +-----------------+ 
-** | boot header     | 1 page
-** +-----------------+
-** | kernel          | n pages  
-** +-----------------+
-** | ramdisk         | m pages  
-** +-----------------+
-** | second stage    | o pages
-** +-----------------+
-** | device tree     | p pages
-** +-----------------+
-** | signature       | 256 bytes
-** +-----------------+
-**
-** n = (kernel_size + page_size - 1) / page_size
-** m = (ramdisk_size + page_size - 1) / page_size
-** o = (second_size + page_size - 1) / page_size
-** p = (dt_size + page_size - 1) / page_size
-**
-** 0. all entities are page_size aligned in flash
-** 1. kernel and ramdisk are required (size != 0)
-** 2. second is optional (second_size == 0 -> no second)
-** 3. load each element (kernel, ramdisk, second) at
-**    the specified physical address (kernel_addr, etc)
-** 4. prepare tags at tag_addr.  kernel_args[] is
-**    appended to the kernel commandline in the tags.
-** 5. r0 = 0, r1 = MACHINE_TYPE, r2 = tags_addr
-** 6. if second_size != 0: jump to second_addr
-**    else: jump to kernel_addr
-*/
-
-#if 0
-typedef struct ptentry ptentry;
-
-struct ptentry {
-    char name[16];      /* asciiz partition name    */
-    unsigned start;     /* starting block number    */
-    unsigned length;    /* length in blocks         */
-    unsigned flags;     /* set to zero              */
-};
-
-/* MSM Partition Table ATAG
-**
-** length: 2 + 7 * n
-** atag:   0x4d534d70
-**         <ptentry> x n
-*/
-#endif
-
-#endif

+ 0 - 297
dtbhtool/dtbimg.c

@@ -1,297 +0,0 @@
-/* tools/mkbootimg/dtbimg.c
-**
-** Copyright 2007, The Android Open Source Project
-** Copyright 2013, Sony Mobile Communications
-**
-** Licensed under the Apache License, Version 2.0 (the "License");
-** you may not use this file except in compliance with the License.
-** You may obtain a copy of the License at
-**
-**     http://www.apache.org/licenses/LICENSE-2.0
-**
-** Unless required by applicable law or agreed to in writing, software
-** distributed under the License is distributed on an "AS IS" BASIS,
-** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-** See the License for the specific language governing permissions and
-** limitations under the License.
-**
-** December 2016, Christopher N. Hesse
-** Separate dt creation from mkbootimg program.
-*/
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <unistd.h>
-#include <fcntl.h>
-#include <errno.h>
-#include <limits.h>
-
-#include <sys/types.h>
-#include <arpa/inet.h>
-#include <assert.h>
-#include <dirent.h>
-#include <err.h>
-#include <stdint.h>
-
-/* must be provided by the device tree */
-#include <samsung_dtbh.h>
-
-#include "libfdt.h"
-
-struct dt_blob;
-
-struct dt_entry {
-    uint32_t chip;
-    uint32_t platform;
-    uint32_t subtype;
-    uint32_t hw_rev;
-    uint32_t hw_rev_end;
-    uint32_t offset;
-    uint32_t size; /* including padding */
-    uint32_t space;
-
-    struct dt_blob *blob;
-};
-
-/*
- * Comparator for sorting dt_entries
- */
-static int dt_entry_cmp(const void *ap, const void *bp)
-{
-    struct dt_entry *a = (struct dt_entry*)ap;
-    struct dt_entry *b = (struct dt_entry*)bp;
-
-    if (a->chip != b->chip)
-        return a->chip - b->chip;
-    return a->hw_rev - b->hw_rev;
-}
-
-/*
- * In memory representation of a dtb blob
- */
-struct dt_blob {
-    uint32_t size;
-    uint32_t offset;
-
-    void *payload;
-    struct dt_blob *next;
-};
-
-static void *load_file(const char *fn, unsigned *_sz)
-{
-    char *data;
-    int sz;
-    int fd;
-
-    data = 0;
-    fd = open(fn, O_RDONLY);
-    if(fd < 0) return 0;
-
-    sz = lseek(fd, 0, SEEK_END);
-    if(sz < 0) goto oops;
-
-    if(lseek(fd, 0, SEEK_SET) != 0) goto oops;
-
-    data = (char*) malloc(sz);
-    if(data == 0) goto oops;
-
-    if(read(fd, data, sz) != sz) goto oops;
-    close(fd);
-
-    if(_sz) *_sz = sz;
-    return data;
-
-oops:
-    close(fd);
-    if(data != 0) free(data);
-    return 0;
-}
-
-void *load_dtbh_block(const char *dtb_path, unsigned pagesize, unsigned *_sz)
-{
-    const unsigned pagemask = pagesize - 1;
-    struct dt_entry *new_entries;
-    struct dt_entry *entries = NULL;
-    struct dt_entry *entry;
-    struct dt_blob *blob;
-    struct dt_blob *blob_list = NULL;
-    struct dt_blob *last_blob = NULL;
-    struct dirent *de;
-    unsigned new_count;
-    unsigned entry_count = 0;
-    unsigned offset;
-    unsigned dtb_sz;
-    unsigned hdr_sz = DT_HEADER_PHYS_SIZE;
-    uint32_t version = DTBH_VERSION;
-    unsigned blob_sz = 0;
-    char fname[PATH_MAX];
-    const unsigned *prop_chip;
-    const unsigned *prop_platform;
-    const unsigned *prop_subtype;
-    const unsigned *prop_hw_rev;
-    const unsigned *prop_hw_rev_end;
-    int namlen;
-    int len;
-    void *dtb;
-    char *dtbh;
-    DIR *dir;
-    unsigned c;
-
-    dir = opendir(dtb_path);
-
-    if (dir == NULL)
-        err(1, "failed to open '%s'", dtb_path);
-
-    while ((de = readdir(dir)) != NULL) {
-        namlen = strlen(de->d_name);
-        if (namlen < 4 || strcmp(&de->d_name[namlen - 4], ".dtb"))
-            continue;
-
-        snprintf(fname, sizeof(fname), "%s/%s", dtb_path, de->d_name);
-
-        dtb = load_file(fname, &dtb_sz);
-        if (dtb == NULL)
-            err(1, "failed to read dtb '%s'", fname);
-
-        if (fdt_check_header(dtb) != 0) {
-            warnx("'%s' is not a valid dtb, skipping", fname);
-            free(dtb);
-            continue;
-        }
-
-        offset = fdt_path_offset(dtb, "/");
-        prop_chip = fdt_getprop(dtb, offset, "model_info-chip", &len);
-        if (len % (sizeof(uint32_t)) != 0) {
-            warnx("model_info-chip of %s is of invalid size, skipping", fname);
-            free(dtb);
-            continue;
-        }
-
-        prop_platform = fdt_getprop(dtb, offset, "model_info-platform", &len);
-        if (strcmp((char *)&prop_platform[0], DTBH_PLATFORM)) {
-            warnx("model_info-platform of %s is invalid, skipping (expected %s but got %s)",
-                  fname, DTBH_PLATFORM, (char *)&prop_platform[0]);
-            free(dtb);
-            continue;
-        }
-
-        prop_subtype = fdt_getprop(dtb, offset, "model_info-subtype", &len);
-        if (strcmp((char *)&prop_subtype[0], DTBH_SUBTYPE)) {
-            warnx("model_info-subtype of %s is invalid, skipping (expected %s but got %s)",
-                  fname, DTBH_SUBTYPE, (char *)&prop_subtype[0]);
-            free(dtb);
-            continue;
-        }
-
-        prop_hw_rev = fdt_getprop(dtb, offset, "model_info-hw_rev", &len);
-        if (len % (sizeof(uint32_t)) != 0) {
-            warnx("model_info-hw_rev of %s is of invalid size, skipping", fname);
-            free(dtb);
-            continue;
-        }
-
-        prop_hw_rev_end = fdt_getprop(dtb, offset, "model_info-hw_rev_end", &len);
-        if (len % (sizeof(uint32_t)) != 0) {
-            warnx("model_info-hw_rev_end of %s is of invalid size, skipping", fname);
-            free(dtb);
-            continue;
-        }
-
-        blob = calloc(1, sizeof(struct dt_blob));
-        if (blob == NULL)
-            err(1, "failed to allocate memory");
-
-        blob->payload = dtb;
-        blob->size = dtb_sz;
-        if (blob_list == NULL) {
-            blob_list = blob;
-            last_blob = blob;
-        } else {
-            last_blob->next = blob;
-            last_blob = blob;
-        }
-
-        blob_sz += (blob->size + pagemask) & ~pagemask;
-        new_count = entry_count + 1;
-        new_entries = realloc(entries, new_count * sizeof(struct dt_entry));
-        if (new_entries == NULL)
-            err(1, "failed to allocate memory");
-
-        entries = new_entries;
-        entry = &entries[entry_count];
-        memset(entry, 0, sizeof(*entry));
-        entry->chip = ntohl(prop_chip[0]);
-        entry->platform = DTBH_PLATFORM_CODE;
-        entry->subtype = DTBH_SUBTYPE_CODE;
-        entry->hw_rev = ntohl(prop_hw_rev[0]);
-        entry->hw_rev_end = ntohl(prop_hw_rev_end[0]);
-        entry->space = 0x20; /* space delimiter */
-        entry->blob = blob;
-
-        entry_count++;
-
-        hdr_sz += entry_count * DT_ENTRY_PHYS_SIZE;
-    }
-
-    closedir(dir);
-
-    if (entry_count == 0) {
-        warnx("unable to locate any dtbs in the given path");
-        return NULL;
-    }
-
-    hdr_sz += sizeof(uint32_t); /* eot marker */
-    hdr_sz = (hdr_sz + pagemask) & ~pagemask;
-
-    qsort(entries, entry_count, sizeof(struct dt_entry), dt_entry_cmp);
-
-    /* The size of the dt header is now known, calculate the blob offsets... */
-    offset = hdr_sz;
-    for (blob = blob_list; blob; blob = blob->next) {
-        blob->offset = offset;
-        offset += (blob->size + pagemask) & ~pagemask;
-    }
-
-    /* ...and update the entries */
-    for (c = 0; c < entry_count; c++) {
-        entry = &entries[c];
-
-        entry->offset = entry->blob->offset;
-        entry->size = (entry->blob->size + pagemask) & ~pagemask;
-    }
-
-    /*
-     * All parts are now gathered, so build the dt block
-     */
-    dtbh = calloc(hdr_sz + blob_sz, 1);
-    if (dtbh == NULL)
-            err(1, "failed to allocate memory");
-
-    offset = 0;
-
-    memcpy(dtbh, DTBH_MAGIC, sizeof(uint32_t));
-    memcpy(dtbh + sizeof(uint32_t), &version, sizeof(uint32_t));
-    memcpy(dtbh + (sizeof(uint32_t) * 2), &entry_count, sizeof(uint32_t));
-
-    offset += DT_HEADER_PHYS_SIZE;
-
-    /* add dtbh entries */
-    for (c = 0; c < entry_count; c++) {
-        entry = &entries[c];
-        memcpy(dtbh + offset, entry, DT_ENTRY_PHYS_SIZE);
-        offset += DT_ENTRY_PHYS_SIZE;
-    }
-
-    /* add padding after dt header */
-    offset += pagesize - (offset & pagemask);
-
-    for (blob = blob_list; blob; blob = blob->next) {
-        memcpy(dtbh + offset, blob->payload, blob->size);
-        offset += (blob->size + pagemask) & ~pagemask;
-    }
-
-    *_sz = hdr_sz + blob_sz;
-
-    return dtbh;
-}

+ 0 - 136
dtbhtool/dtbtool.txt

@@ -1,136 +0,0 @@
-Copyright (c) 2012, The Linux Foundation. All rights reserved.
-
-Redistribution and use in source form and compiled forms (SGML, HTML,
-PDF, PostScript, RTF and so forth) with or without modification, are
-permitted provided that the following conditions are met:
-
-Redistributions in source form must retain the above copyright
-notice, this list of conditions and the following disclaimer as the
-first lines of this file unmodified.
-
-Redistributions in compiled form (transformed to other DTDs,
-converted to PDF, PostScript, RTF and other formats) 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 DOCUMENTATION IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
-WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
-MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE AND
-NON-INFRINGEMENT ARE DISCLAIMED. IN NO EVENT SHALL THE FREEBSD
-DOCUMENTATION PROJECT 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 DOCUMENTATION, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
-DAMAGE.
-
-June 2014, Ketut Putu Kumajaya
-Samsung Exynos DTBH device tree documentation.
-
-
-Android - Table of Device Tree
-==============================
-
-0) Document revision
-   v1.0 - Initial version (dng)
-
-1) Android boot image:
-----------------------
-1.1) Header:
-   1) Magic (8B)
-   2) kernel size (4B)
-   3) kernel addr (4B)
-   4) ramdisk size (4B)
-   5) ramdisk addr (4B)
-   6) 2ndary size (4B)
-   7) 2ndary addr (4B)
-   8) tags addr (4B)
-   9) page size (4B)
-  10) unused #1 (4B) (zero in standard Android)
-  11) unused #2 (4B) (zero in standard Android)
-  12) product name (16B)
-  13) kernel cmdline (512B)
-  14) id (8B)
-
-1.2) Layout:
-   A) header (as above - 1 page)
-   B) kernel (n pages)
-   C) ramdisk (m pages)
-   D) second stage (o pages)
-
-2) Exynos DTBH table of device tree
---------------------------
-2.1) Changes:
-   i) use "unused #1, #2" members in existing boot image
-      header to point to new table of device tree
-      (#1 - size of Exynos DTBH table of DT)
-  ii) append table of device tree (described later)
-      after "D) second stage"
-
-2.2) Format:
-                                 size
-   x      +------------------+
-   |      | MAGIC ("DTBH")   |   4B
-   |      +------------------+
- header   | VERSION          |   uint32 (version 2, 0x00000002)
-   |      +------------------+
-   |      | num of DTBs      |   uint32 (number of DTB entries, e.g. 5 entries, 0x00000005)
-   x      +------------------+
-   |      | chip #1          |   uint32 (e.g. ID for 5422, 0x0000152e)
-   |      +------------------+
-   |      | platform #1      |   uint32 (e.g. ID for k3g, 0x00001e92)
-   |      +------------------+
- device   | subtype #1       |   uint32 (e.g. ID for k3g_eur_open, 0x7d64f612)
-  #1      +------------------+
- entry    | hw_rev #1        |   uint32 (e.g. k3g rev 2, 0x00000002)
-   |      +------------------+
-   |      | hw_rev_end #1    |   uint32 (e.g. k3g rev_end 2, 0x00000002)
-   |      +------------------+
-   |      | offset #1        |   uint32 (byte offset from start/before MAGIC
-   |      +------------------+           to DTB entry, e.g. 0x00000800)
-   |      | size #1          |   uint32 (size in bytes of DTB blob
-   |      +------------------+           e.g. 110,592 bytes, 0x0001b000)
-   |      | space #1         |   uint32 (0x00000020)
-   x      +------------------+
-   .              .
-   .              .  (repeat)
-   .              .
-
-   x      +------------------+
-   |      | chip #Z          |   uint32 (e.g. ID for 5422, 0x0000152e)
-   |      +------------------+
-   |      | platform #Z      |   uint32 (e.g. ID for k3g, 0x00001e92)
-   |      +------------------+
- device   | subtype #Z       |   uint32 (e.g. ID for k3g_eur_open, 0x7d64f612)
-  #1      +------------------+
- entry    | hw_rev #Z        |   uint32 (e.g. k3g rev 10, 0x0000000A)
-   |      +------------------+
-   |      | hw_rev_end #Z    |   uint32 (e.g. k3g rev_end 255, 0x000000FF)
-   |      +------------------+
-   |      | offset #Z        |   uint32 (byte offset from start/before MAGIC
-   |      +------------------+           to DTB entry, e.g. 0x0006c800)
-   |      | size #Z          |   uint32 (size in bytes of DTB blob
-   |      +------------------+           e.g. 110,592 bytes, 0x0001b000)
-   |      | space #Z         |   uint32 (0x00000020)
-   x      +------------------+
-          | padding          |   variable length for next DTB to start on
-          +------------------+           page boundary
-          | DTB #1           |   variable (start is page aligned)
-          |                  |
-          |                  |
-          +------------------+
-          | padding          |   variable length for next DTB to start on
-          +------------------+           page boundary
-                  .
-                  .
-                  .
-
-          +------------------+
-          | DTB #Z (last)    |   variable (start is page aligned)
-          |                  |
-          |                  |
-          +------------------+
-

+ 0 - 30
dtbhtool/libdtbimg/dtbimg.h

@@ -1,30 +0,0 @@
-/* tools/libdtbimg/dtbimg.h
-**
-** Copyright 2017, The LineageOS Project
-**
-** Licensed under the Apache License, Version 2.0 (the "License");
-** you may not use this file except in compliance with the License.
-** You may obtain a copy of the License at
-**
-**     http://www.apache.org/licenses/LICENSE-2.0
-**
-** Unless required by applicable law or agreed to in writing, software
-** distributed under the License is distributed on an "AS IS" BASIS,
-** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-** See the License for the specific language governing permissions and
-** limitations under the License.
-*/
-
-#ifndef _DTBIMG_H_
-#define _DTBIMG_H_
-
-/*
- * Returns dt image data.
- *
- * dtb_path: path to the compiled device tree blobs
- * pagesize: board pagesize
- * _sz: size of the resulting dt image
- */
-void *load_dtbh_block(const char *dtb_path, unsigned pagesize, unsigned *_sz);
-
-#endif // _DTBIMG_H_

+ 0 - 338
dtbhtool/mkbootimg.c

@@ -1,338 +0,0 @@
-/* tools/mkbootimg/mkbootimg.c
-**
-** Copyright 2007, The Android Open Source Project
-** Copyright 2013, Sony Mobile Communications
-**
-** Licensed under the Apache License, Version 2.0 (the "License");
-** you may not use this file except in compliance with the License.
-** You may obtain a copy of the License at
-**
-**     http://www.apache.org/licenses/LICENSE-2.0
-**
-** Unless required by applicable law or agreed to in writing, software
-** distributed under the License is distributed on an "AS IS" BASIS,
-** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-** See the License for the specific language governing permissions and
-** limitations under the License.
-**
-** June 2014, Ketut Putu Kumajaya
-** Modified for Samsung Exynos DTBH, based on mkqcdtbootimg from Sony
-*/
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <unistd.h>
-#include <fcntl.h>
-#include <errno.h>
-#include <limits.h>
-
-#include <sys/types.h>
-#include <arpa/inet.h>
-#include <assert.h>
-#include <dirent.h>
-#include <err.h>
-#include <stdint.h>
-
-#include <dtbimg.h>
-
-#include <openssl/sha.h>
-#include "bootimg.h"
-
-static void *load_file(const char *fn, unsigned *_sz)
-{
-    char *data;
-    int sz;
-    int fd;
-
-    data = 0;
-    fd = open(fn, O_RDONLY);
-    if(fd < 0) return 0;
-
-    sz = lseek(fd, 0, SEEK_END);
-    if(sz < 0) goto oops;
-
-    if(lseek(fd, 0, SEEK_SET) != 0) goto oops;
-
-    data = (char*) malloc(sz);
-    if(data == 0) goto oops;
-
-    if(read(fd, data, sz) != sz) goto oops;
-    close(fd);
-
-    if(_sz) *_sz = sz;
-    return data;
-
-oops:
-    close(fd);
-    if(data != 0) free(data);
-    return 0;
-}
-
-int usage(void)
-{
-    fprintf(stderr,"usage: mkbootimg\n"
-            "       --kernel <filename>\n"
-            "       --ramdisk <filename>\n"
-            "       [ --second <2ndbootloader-filename> ]\n"
-            "       [ --cmdline <kernel-commandline> ]\n"
-            "       [ --board <boardname> ]\n"
-            "       [ --base <address> ]\n"
-            "       [ --pagesize <pagesize> ]\n"
-            "       [ --ramdisk_offset <address> ]\n"
-            "       [ --dt_dir <dtb path> ]\n"
-            "       [ --dt <filename> ]\n"
-            "       [ --signature <filename> ]\n"
-            "       -o|--output <filename>\n"
-            );
-    return 1;
-}
-
-
-
-static unsigned char padding[131072] = { 0, };
-
-int write_padding(int fd, unsigned pagesize, unsigned itemsize)
-{
-    unsigned pagemask = pagesize - 1;
-    unsigned count;
-
-    if((itemsize & pagemask) == 0) {
-        return 0;
-    }
-
-    count = pagesize - (itemsize & pagemask);
-
-    if(write(fd, padding, count) != count) {
-        return -1;
-    } else {
-        return 0;
-    }
-}
-
-int main(int argc, char **argv)
-{
-    boot_img_hdr hdr;
-
-    char *kernel_fn = 0;
-    void *kernel_data = 0;
-    char *ramdisk_fn = 0;
-    void *ramdisk_data = 0;
-    char *second_fn = 0;
-    void *second_data = 0;
-    char *cmdline = "";
-    char *bootimg = 0;
-    char *board = "";
-    char *dt_dir = 0;
-    char *dt_fn = 0;
-    void *dt_data = 0;
-    char *sig_fn = 0;
-    void *sig_data = 0;
-    unsigned pagesize = 2048;
-    int fd;
-    SHA_CTX ctx;
-    uint8_t sha[SHA_DIGEST_LENGTH];
-    unsigned base           = 0x10000000;
-    unsigned kernel_offset  = 0x00008000;
-    unsigned ramdisk_offset = 0x01000000;
-    unsigned second_offset  = 0x00f00000;
-    unsigned tags_offset    = 0x00000100;
-
-    argc--;
-    argv++;
-
-    memset(&hdr, 0, sizeof(hdr));
-
-    while(argc > 0){
-        char *arg = argv[0];
-        char *val = argv[1];
-        if(argc < 2) {
-            return usage();
-        }
-        argc -= 2;
-        argv += 2;
-        if(!strcmp(arg, "--output") || !strcmp(arg, "-o")) {
-            bootimg = val;
-        } else if(!strcmp(arg, "--kernel")) {
-            kernel_fn = val;
-        } else if(!strcmp(arg, "--ramdisk")) {
-            ramdisk_fn = val;
-        } else if(!strcmp(arg, "--second")) {
-            second_fn = val;
-        } else if(!strcmp(arg, "--cmdline")) {
-            cmdline = val;
-        } else if(!strcmp(arg, "--base")) {
-            base = strtoul(val, 0, 16);
-        } else if(!strcmp(arg, "--kernel_offset")) {
-            kernel_offset = strtoul(val, 0, 16);
-        } else if(!strcmp(arg, "--ramdisk_offset")) {
-            ramdisk_offset = strtoul(val, 0, 16);
-        } else if(!strcmp(arg, "--second_offset")) {
-            second_offset = strtoul(val, 0, 16);
-        } else if(!strcmp(arg, "--tags_offset")) {
-            tags_offset = strtoul(val, 0, 16);
-        } else if(!strcmp(arg, "--board")) {
-            board = val;
-        } else if(!strcmp(arg,"--pagesize")) {
-            pagesize = strtoul(val, 0, 10);
-            if ((pagesize != 2048) && (pagesize != 4096) && (pagesize != 8192) && (pagesize != 16384) && (pagesize != 32768) && (pagesize != 65536) && (pagesize != 131072)) {
-                fprintf(stderr,"error: unsupported page size %d\n", pagesize);
-                return -1;
-            }
-        } else if (!strcmp(arg, "--dt_dir")) {
-            dt_dir = val;
-        } else if(!strcmp(arg, "--dt")) {
-            dt_fn = val;
-        } else if(!strcmp(arg, "--signature")) {
-            sig_fn = val;
-        } else {
-            return usage();
-        }
-    }
-    hdr.page_size = pagesize;
-
-    hdr.kernel_addr =  base + kernel_offset;
-    hdr.ramdisk_addr = base + ramdisk_offset;
-    hdr.second_addr =  base + second_offset;
-    hdr.tags_addr =    base + tags_offset;
-
-    if (dt_dir && dt_fn) {
-        fprintf(stderr,"error: don't use both --dt_dir and --dt option\n");
-        return usage();
-    }
-
-    if(bootimg == 0) {
-        fprintf(stderr,"error: no output filename specified\n");
-        return usage();
-    }
-
-    if(kernel_fn == 0) {
-        fprintf(stderr,"error: no kernel image specified\n");
-        return usage();
-    }
-
-    if(ramdisk_fn == 0) {
-        fprintf(stderr,"error: no ramdisk image specified\n");
-        return usage();
-    }
-
-    if(strlen(board) >= BOOT_NAME_SIZE) {
-        fprintf(stderr,"error: board name too large\n");
-        return usage();
-    }
-
-    strcpy(hdr.name, board);
-
-    memcpy(hdr.magic, BOOT_MAGIC, BOOT_MAGIC_SIZE);
-
-    if(strlen(cmdline) > (BOOT_ARGS_SIZE - 1)) {
-        fprintf(stderr,"error: kernel commandline too large\n");
-        return 1;
-    }
-    strcpy((char*)hdr.cmdline, cmdline);
-
-    kernel_data = load_file(kernel_fn, &hdr.kernel_size);
-    if(kernel_data == 0) {
-        fprintf(stderr,"error: could not load kernel '%s'\n", kernel_fn);
-        return 1;
-    }
-
-    if(!strcmp(ramdisk_fn,"NONE")) {
-        ramdisk_data = 0;
-        hdr.ramdisk_size = 0;
-    } else {
-        ramdisk_data = load_file(ramdisk_fn, &hdr.ramdisk_size);
-        if(ramdisk_data == 0) {
-            fprintf(stderr,"error: could not load ramdisk '%s'\n", ramdisk_fn);
-            return 1;
-        }
-    }
-
-    if(second_fn) {
-        second_data = load_file(second_fn, &hdr.second_size);
-        if(second_data == 0) {
-            fprintf(stderr,"error: could not load secondstage '%s'\n", second_fn);
-            return 1;
-        }
-    }
-
-    if (dt_dir) {
-        dt_data = load_dtbh_block(dt_dir, pagesize, &hdr.dt_size);
-        if (dt_data == 0) {
-            fprintf(stderr, "error: could not load device tree blobs '%s'\n", dt_dir);
-            return 1;
-        }
-    }
-
-    if(dt_fn) {
-        dt_data = load_file(dt_fn, &hdr.dt_size);
-        if (dt_data == 0) {
-            fprintf(stderr,"error: could not load device tree image '%s'\n", dt_fn);
-            return 1;
-        }
-    }
-
-    if(sig_fn) {
-        sig_data = load_file(sig_fn, 0);
-        if (sig_data == 0) {
-            fprintf(stderr,"error: could not load signature '%s'\n", sig_fn);
-            return 1;
-        }
-    }
-
-    /* put a hash of the contents in the header so boot images can be
-     * differentiated based on their first 2k.
-     */
-    SHA1_Init(&ctx);
-    SHA1_Update(&ctx, kernel_data, hdr.kernel_size);
-    SHA1_Update(&ctx, &hdr.kernel_size, sizeof(hdr.kernel_size));
-    SHA1_Update(&ctx, ramdisk_data, hdr.ramdisk_size);
-    SHA1_Update(&ctx, &hdr.ramdisk_size, sizeof(hdr.ramdisk_size));
-    SHA1_Update(&ctx, second_data, hdr.second_size);
-    SHA1_Update(&ctx, &hdr.second_size, sizeof(hdr.second_size));
-    if(dt_data) {
-        SHA1_Update(&ctx, dt_data, hdr.dt_size);
-        SHA1_Update(&ctx, &hdr.dt_size, sizeof(hdr.dt_size));
-    }
-    SHA1_Final(sha, &ctx);
-    memcpy(hdr.id, sha,
-           SHA_DIGEST_LENGTH > sizeof(hdr.id) ? sizeof(hdr.id) : SHA_DIGEST_LENGTH);
-
-    fd = open(bootimg, O_CREAT | O_TRUNC | O_WRONLY, 0644);
-    if(fd < 0) {
-        fprintf(stderr,"error: could not create '%s'\n", bootimg);
-        return 1;
-    }
-
-    if(write(fd, &hdr, sizeof(hdr)) != sizeof(hdr)) goto fail;
-    if(write_padding(fd, pagesize, sizeof(hdr))) goto fail;
-
-    if(write(fd, kernel_data, hdr.kernel_size) != hdr.kernel_size) goto fail;
-    if(write_padding(fd, pagesize, hdr.kernel_size)) goto fail;
-
-    if(write(fd, ramdisk_data, hdr.ramdisk_size) != hdr.ramdisk_size) goto fail;
-    if(write_padding(fd, pagesize, hdr.ramdisk_size)) goto fail;
-
-    if(second_data) {
-        if(write(fd, second_data, hdr.second_size) != hdr.second_size) goto fail;
-        if(write_padding(fd, pagesize, hdr.ramdisk_size)) goto fail;
-    }
-
-    if(dt_data) {
-        if(write(fd, dt_data, hdr.dt_size) != hdr.dt_size) goto fail;
-        if(write_padding(fd, pagesize, hdr.dt_size)) goto fail;
-    }
-
-    if(sig_data) {
-        if(write(fd, sig_data, 256) != 256) goto fail;
-    }
-
-    return 0;
-
-fail:
-    unlink(bootimg);
-    close(fd);
-    fprintf(stderr,"error: failed writing '%s': %s\n", bootimg,
-            strerror(errno));
-    return 1;
-}

+ 0 - 126
dtbhtool/mkdtbimg.c

@@ -1,126 +0,0 @@
-/* tools/mkbootimg/mkdtbimg.c
-**
-** Copyright 2016-2017, The LineageOS Project
-**
-** Licensed under the Apache License, Version 2.0 (the "License");
-** you may not use this file except in compliance with the License.
-** You may obtain a copy of the License at
-**
-**     http://www.apache.org/licenses/LICENSE-2.0
-**
-** Unless required by applicable law or agreed to in writing, software
-** distributed under the License is distributed on an "AS IS" BASIS,
-** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-** See the License for the specific language governing permissions and
-** limitations under the License.
-**
-** December 2016, Christopher N. Hesse
-** Separate dt creation from mkbootimg program.
-**
-** January 2017, Christopher N. Hesse
-** Adjust to dtbToolCM call syntax.
-*/
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <unistd.h>
-#include <fcntl.h>
-#include <errno.h>
-#include <limits.h>
-
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <arpa/inet.h>
-#include <assert.h>
-#include <dirent.h>
-#include <err.h>
-#include <stdint.h>
-
-#include <dtbimg.h>
-
-int usage(void)
-{
-    fprintf(stderr,"usage: mkdtimg\n"
-            "       --dt_dir <dtb path>\n"
-            "       -o|--output <filename>\n"
-            );
-    return 1;
-}
-
-
-
-int main(int argc, char **argv)
-{
-    char *dtimg = 0;
-    char *dt_dir = 0;
-    void *dt_data = 0;
-    unsigned pagesize = 0;
-    unsigned default_pagesize = 2048;
-    uint32_t dt_size;
-    int fd;
-    struct stat sbuf;
-
-    argc--;
-    argv++;
-
-    while(argc > 0){
-        char *arg = argv[0];
-        char *val = argv[1];
-        if(argc < 1) {
-            return usage();
-        }
-        argc -= 2;
-        argv += 2;
-        if(!strcmp(arg, "--output") || !strcmp(arg, "-o")) {
-            dtimg = val;
-        } else if (!strcmp(arg, "--dt_dir")) {
-            dt_dir = val;
-        } else if (!strcmp(arg, "-p")) {
-            // Ignore this parameter
-        } else if (!strcmp(arg, "-s")) {
-            pagesize = strtol(val, NULL, 10);
-            if (pagesize == 0)
-                pagesize = default_pagesize;
-        } else {
-            // Check if this is the dtb path
-            int err = stat(arg, &sbuf);
-            if (err != 0 || !S_ISDIR(sbuf.st_mode))
-                return usage();
-            dt_dir = arg;
-        }
-    }
-
-    if(dtimg == 0) {
-        fprintf(stderr,"error: no output filename specified\n");
-        return usage();
-    }
-
-    if(dt_dir == 0) {
-        fprintf(stderr,"error: no dtb path specified\n");
-        return usage();
-    }
-
-    dt_data = load_dtbh_block(dt_dir, pagesize, &dt_size);
-    if (dt_data == 0) {
-        fprintf(stderr, "error: could not load device tree blobs '%s'\n", dt_dir);
-        return 1;
-    }
-
-    fd = open(dtimg, O_CREAT | O_TRUNC | O_WRONLY, 0644);
-    if(fd < 0) {
-        fprintf(stderr,"error: could not create '%s'\n", dtimg);
-        return 1;
-    }
-
-    if(write(fd, dt_data, dt_size) != dt_size) goto fail;
-
-    return 0;
-
-fail:
-    unlink(dtimg);
-    close(fd);
-    fprintf(stderr,"error: failed writing '%s': %s\n", dtimg,
-            strerror(errno));
-    return 1;
-}

+ 0 - 37
dtbhtool/samsung_dtbh.h

@@ -1,37 +0,0 @@
-/* tools/mkbootimg/samsung_dtbh.h
-**
-** Copyright 2017, The LineageOS Project
-**
-** Licensed under the Apache License, Version 2.0 (the "License");
-** you may not use this file except in compliance with the License.
-** You may obtain a copy of the License at
-**
-**     http://www.apache.org/licenses/LICENSE-2.0
-**
-** Unless required by applicable law or agreed to in writing, software
-** distributed under the License is distributed on an "AS IS" BASIS,
-** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-** See the License for the specific language governing permissions and
-** limitations under the License.
-*/
-
-#ifndef _SAMSUNG_DTBH_H_
-#define _SAMSUNG_DTBH_H_
-
-#define DTBH_MAGIC         "DTBH"
-#define DTBH_VERSION       2
-#define DTBH_PLATFORM      "android"
-#define DTBH_SUBTYPE       "samsung"
- /* Hardcoded entry */
-#define DTBH_PLATFORM_CODE 0x000050a6
-#define DTBH_SUBTYPE_CODE  0x217584da
-
-/* DTBH_MAGIC + DTBH_VERSION + DTB counts */
-#define DT_HEADER_PHYS_SIZE 12
-
-/*
- * keep the eight uint32_t entries first in this struct so we can memcpy them to the file
- */
-#define DT_ENTRY_PHYS_SIZE (sizeof(uint32_t) * 8)
-
-#endif // _SAMSUNG_DTBH_H_

+ 0 - 222
dtbhtool/unpackbootimg.c

@@ -1,222 +0,0 @@
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <unistd.h>
-#include <fcntl.h>
-#include <errno.h>
-#include <limits.h>
-#include <libgen.h>
-
-#include "bootimg.h"
-
-typedef unsigned char byte;
-
-int read_padding(FILE* f, unsigned itemsize, int pagesize)
-{
-    byte* buf = (byte*)malloc(sizeof(byte) * pagesize);
-    unsigned pagemask = pagesize - 1;
-    unsigned count;
-
-    if((itemsize & pagemask) == 0) {
-        free(buf);
-        return 0;
-    }
-
-    count = pagesize - (itemsize & pagemask);
-
-    fread(buf, count, 1, f);
-    free(buf);
-    return count;
-}
-
-void write_string_to_file(char* file, char* string)
-{
-    FILE* f = fopen(file, "w");
-    fwrite(string, strlen(string), 1, f);
-    fwrite("\n", 1, 1, f);
-    fclose(f);
-}
-
-int usage() {
-    printf("usage: unpackbootimg\n");
-    printf("\t-i|--input boot.img\n");
-    printf("\t[ -o|--output output_directory]\n");
-    printf("\t[ -p|--pagesize <size-in-hexadecimal> ]\n");
-    return 0;
-}
-
-int main(int argc, char** argv)
-{
-    char tmp[PATH_MAX];
-    char* directory = "./";
-    char* filename = NULL;
-    int pagesize = 0;
-
-    argc--;
-    argv++;
-    while(argc > 0){
-        char *arg = argv[0];
-        char *val = argv[1];
-        argc -= 2;
-        argv += 2;
-        if(!strcmp(arg, "--input") || !strcmp(arg, "-i")) {
-            filename = val;
-        } else if(!strcmp(arg, "--output") || !strcmp(arg, "-o")) {
-            directory = val;
-        } else if(!strcmp(arg, "--pagesize") || !strcmp(arg, "-p")) {
-            pagesize = strtoul(val, 0, 16);
-        } else {
-            return usage();
-        }
-    }
-    
-    if (filename == NULL) {
-        return usage();
-    }
-    
-    int total_read = 0;
-    FILE* f = fopen(filename, "rb");
-    boot_img_hdr header;
-
-    //printf("Reading header...\n");
-    int i;
-    for (i = 0; i <= 512; i++) {
-        fseek(f, i, SEEK_SET);
-        fread(tmp, BOOT_MAGIC_SIZE, 1, f);
-        if (memcmp(tmp, BOOT_MAGIC, BOOT_MAGIC_SIZE) == 0)
-            break;
-    }
-    total_read = i;
-    if (i > 512) {
-        printf("Android boot magic not found.\n");
-        return 1;
-    }
-    fseek(f, i, SEEK_SET);
-    printf("Android magic found at: %d\n", i);
-
-    fread(&header, sizeof(header), 1, f);
-    printf("BOARD_KERNEL_CMDLINE %s\n", header.cmdline);
-    printf("BOARD_KERNEL_BASE %08x\n", header.kernel_addr - 0x00008000);
-    printf("BOARD_RAMDISK_OFFSET %08x\n", header.ramdisk_addr - header.kernel_addr + 0x00008000);
-    printf("BOARD_SECOND_OFFSET %08x\n", header.second_addr - header.kernel_addr + 0x00008000);
-    printf("BOARD_TAGS_OFFSET %08x\n",header.tags_addr - header.kernel_addr + 0x00008000);
-    printf("BOARD_PAGE_SIZE %d\n", header.page_size);
-    printf("BOARD_SECOND_SIZE %d\n", header.second_size);
-    printf("BOARD_DT_SIZE %d\n", header.dt_size);
-    
-    if (pagesize == 0) {
-        pagesize = header.page_size;
-    }
-    
-    //printf("cmdline...\n");
-    sprintf(tmp, "%s/%s", directory, basename(filename));
-    strcat(tmp, "-cmdline");
-    write_string_to_file(tmp, header.cmdline);
-    
-    //printf("base...\n");
-    sprintf(tmp, "%s/%s", directory, basename(filename));
-    strcat(tmp, "-base");
-    char basetmp[200];
-    sprintf(basetmp, "%08x", header.kernel_addr - 0x00008000);
-    write_string_to_file(tmp, basetmp);
-
-    //printf("ramdisk_offset...\n");
-    sprintf(tmp, "%s/%s", directory, basename(filename));
-    strcat(tmp, "-ramdisk_offset");
-    char ramdisktmp[200];
-    sprintf(ramdisktmp, "%08x", header.ramdisk_addr - header.kernel_addr + 0x00008000);
-    write_string_to_file(tmp, ramdisktmp);
-
-    //printf("second_offset...\n");
-    sprintf(tmp, "%s/%s", directory, basename(filename));
-    strcat(tmp, "-second_offset");
-    char secondtmp[200];
-    sprintf(secondtmp, "%08x", header.second_addr - header.kernel_addr + 0x00008000);
-    write_string_to_file(tmp, secondtmp);
-
-    //printf("tags_offset...\n");
-    sprintf(tmp, "%s/%s", directory, basename(filename));
-    strcat(tmp, "-tags_offset");
-    char tagstmp[200];
-    sprintf(tagstmp, "%08x", header.tags_addr - header.kernel_addr + 0x00008000);
-    write_string_to_file(tmp, tagstmp);
-
-    //printf("pagesize...\n");
-    sprintf(tmp, "%s/%s", directory, basename(filename));
-    strcat(tmp, "-pagesize");
-    char pagesizetmp[200];
-    sprintf(pagesizetmp, "%d", header.page_size);
-    write_string_to_file(tmp, pagesizetmp);
-    
-    total_read += sizeof(header);
-    //printf("total read: %d\n", total_read);
-    total_read += read_padding(f, sizeof(header), pagesize);
-
-    sprintf(tmp, "%s/%s", directory, basename(filename));
-    strcat(tmp, "-zImage");
-    FILE *k = fopen(tmp, "wb");
-    byte* kernel = (byte*)malloc(header.kernel_size);
-    //printf("Reading kernel...\n");
-    fread(kernel, header.kernel_size, 1, f);
-    total_read += header.kernel_size;
-    fwrite(kernel, header.kernel_size, 1, k);
-    fclose(k);
-
-    //printf("total read: %d\n", header.kernel_size);
-    total_read += read_padding(f, header.kernel_size, pagesize);
-
-
-    byte* ramdisk = (byte*)malloc(header.ramdisk_size);
-    //printf("Reading ramdisk...\n");
-    fread(ramdisk, header.ramdisk_size, 1, f);
-    total_read += header.ramdisk_size;
-    sprintf(tmp, "%s/%s", directory, basename(filename));
-    if(ramdisk[0] == 0x02 && ramdisk[1]== 0x21)
-        strcat(tmp, "-ramdisk.lz4");
-    else
-        strcat(tmp, "-ramdisk.gz");
-    FILE *r = fopen(tmp, "wb");
-    fwrite(ramdisk, header.ramdisk_size, 1, r);
-    fclose(r);
-
-    total_read += read_padding(f, header.ramdisk_size, pagesize);
-
-    sprintf(tmp, "%s/%s", directory, basename(filename));
-    strcat(tmp, "-second");
-    FILE *s = fopen(tmp, "wb");
-    byte* second = (byte*)malloc(header.second_size);
-    //printf("Reading second...\n");
-    fread(second, header.second_size, 1, f);
-    total_read += header.second_size;
-    fwrite(second, header.second_size, 1, r);
-    fclose(s);
-
-    total_read += read_padding(f, header.second_size, pagesize);
-
-    sprintf(tmp, "%s/%s", directory, basename(filename));
-    strcat(tmp, "-dt");
-    FILE *d = fopen(tmp, "wb");
-    byte* dt = (byte*)malloc(header.dt_size);
-    //printf("Reading dt...\n");
-    fread(dt, header.dt_size, 1, f);
-    total_read += header.dt_size;
-    fwrite(dt, header.dt_size, 1, r);
-    fclose(d);
-
-    total_read += read_padding(f, header.dt_size, pagesize);
-
-    sprintf(tmp, "%s/%s", directory, basename(filename));
-    strcat(tmp, "-signature");
-    FILE *fsig = fopen(tmp, "wb");
-    byte* bsig = (byte*)malloc(256);
-    //printf("Reading signature...\n");
-    fread(bsig, 256, 1, f);
-    total_read += 256;
-    fwrite(bsig, 256, 1, r);
-    fclose(fsig);
-
-    fclose(f);
-    
-    //printf("Total Read: %d\n", total_read);
-    return 0;
-}

+ 0 - 185
dtbhtool/unpackdtbhimg.c

@@ -1,185 +0,0 @@
-/*
- * Copyright 2018, The LineageOS Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include <errno.h>
-#include <fcntl.h>
-#include <stdint.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <unistd.h>
-#include <sys/stat.h>
-#include <sys/types.h>
-
-#define DEFAULT_PAGE_SIZE 2048
-#define DT_NAME_LEN 64
-
-struct dt_entry {
-    uint32_t chip;
-    uint32_t platform;
-    uint32_t subtype;
-    uint32_t hw_rev;
-    uint32_t hw_rev_end;
-    uint32_t offset;
-    uint32_t size; /* including padding */
-    uint32_t space;
-};
-
-struct dtbh_header {
-    uint32_t magic;
-    uint32_t version;
-    uint32_t entry_count;
-
-    struct dt_entry entries[];
-};
-
-static void show_dt_entry(struct dt_entry *ent) {
-    printf("chip: %u, platform: 0x%x, subtype: 0x%x, hw_rev: %u, hw_rev_end: %u, offset: %u, "
-            "size: %u, space: %u\n", ent->chip, ent->platform, ent->subtype, ent->hw_rev,
-            ent->hw_rev_end, ent->offset, ent->size, ent->space);
-}
-
-static void dump_dtb(void *buffer, uint32_t size, char *dest)
-{
-    FILE *output;
-    ssize_t len;
-
-    output = fopen(dest, "wb");
-    if (output == NULL) {
-        fprintf(stderr, "error: could not open %s\n", dest);
-        return;
-    }
-
-    len = fwrite(buffer, size, 1, output);
-    fclose(output);
-
-    if (len < 0) {
-        printf("error: failed to write %s (%s)\n", dest, strerror(errno));
-        return;
-    }
-
-    printf("Successfully dumped %s (size=%zu)\n", dest, size);
-}
-
-int usage(void)
-{
-    fprintf(stderr,"usage: unpackdtbhimg\n"
-            "       -i|--input <dtbh image path>\n"
-            "       -o|--output <directory>\n"
-            "       -p|--pagesize <pagesize>\n"
-            );
-    return 1;
-}
-
-int main(int argc, char *argv[]) {
-    char *dtbhimg = 0;
-    char *output_dir = 0;
-    FILE *dtbhimg_fp;
-    ssize_t len;
-    int page_size = DEFAULT_PAGE_SIZE;
-    struct dtbh_header *header;
-    void *dt_blob;
-
-    argc--;
-    argv++;
-
-    while (argc > 0){
-        char *arg = argv[0];
-        char *val = argv[1];
-        if (argc < 1) {
-            return usage();
-        }
-        argc -= 2;
-        argv += 2;
-        if (!strcmp(arg, "--input") || !strcmp(arg, "-i")) {
-            dtbhimg = val;
-        } else if (!strcmp(arg, "--output") || !strcmp(arg, "-o")) {
-            output_dir = val;
-        } else if (!strcmp(arg, "--pagesize") || !strcmp(arg, "-p")) {
-            page_size = atoi(val);
-        }
-    }
-
-    if (dtbhimg == 0) {
-        fprintf(stderr,"error: no input filename specified\n");
-        return usage();
-    }
-
-    if (output_dir == 0) {
-        fprintf(stderr,"error: no output path specified\n");
-        return usage();
-    }
-
-    printf("using page_size: %d\n", page_size);
-
-    dtbhimg_fp = fopen(dtbhimg, "r");
-    if (dtbhimg_fp == NULL) {
-        fprintf(stderr, "error: could not open %s\n", dtbhimg);
-        goto err_open;
-    }
-
-    header = calloc(page_size, 1);
-    if (header == NULL) {
-        goto err_calloc;
-    }
-
-    len = fread(header, page_size, 1, dtbhimg_fp);
-    if (len != 1) {
-        fprintf(stderr, "Failed to read DTBH header: %s\n", strerror(errno));
-        goto err_read;
-    }
-
-    printf("DTBH_MAGIC = '%.4s'\n", &header->magic);
-    printf("DTBH_VERSION = %u\n", header->version);
-    printf("Number of entries: %u\n", header->entry_count);
-
-    for (uint32_t i = 0; i < header->entry_count; i++) {
-        printf("DTB %d: ", i);
-        show_dt_entry(&header->entries[i]);
-        dt_blob = malloc(header->entries[i].size);
-        if (fseek(dtbhimg_fp, header->entries[i].offset, SEEK_SET) != 0) {
-            fprintf(stderr, "failed to set offset to 0x%x: %s\n", header->entries[i].offset,
-                    strerror(errno));
-            goto err_loop;
-        }
-        len = fread(dt_blob, header->entries[i].size, 1, dtbhimg_fp);
-        if (len != 1) {
-            fprintf(stderr, "Failed to read DTB: %s\n", strerror(errno));
-        }
-
-        size_t dest_file_len = DT_NAME_LEN + strlen(output_dir);
-        char dest_file[dest_file_len];
-        snprintf(dest_file, dest_file_len, "%s/chip%u-0x%x-0x%x_rev%u-%u.dtb", output_dir,
-                 header->entries[i].chip, header->entries[i].platform, header->entries[i].subtype,
-                 header->entries[i].hw_rev, header->entries[i].hw_rev_end);
-        dump_dtb(dt_blob, header->entries[i].size, dest_file);
-        free(dt_blob);
-    }
-
-    free(header);
-    fclose(dtbhimg_fp);
-
-    return 0;
-
-err_loop:
-    free(dt_blob);
-err_read:
-    free(header);
-err_calloc:
-    fclose(dtbhimg_fp);
-err_open:
-    return 1;
-}