diff options
author | Vladimir Serbinenko <phcoder@gmail.com> | 2017-05-08 21:19:59 +0200 |
---|---|---|
committer | Vladimir Serbinenko <phcoder@gmail.com> | 2017-05-08 21:19:59 +0200 |
commit | fcbb723d4b1f7ad4687191562621dd0eb25f4d9e (patch) | |
tree | a11e3d7d7d799daf7c465ded9e058416f74a2879 /util/mkimage.c | |
parent | 24e37a885269bdec9b27babf1da0bba3692d55c0 (diff) |
Add support for device-tree-based drivers.
Diffstat (limited to 'util/mkimage.c')
-rw-r--r-- | util/mkimage.c | 24 |
1 files changed, 21 insertions, 3 deletions
diff --git a/util/mkimage.c b/util/mkimage.c index 6aa77ed73..e22d82afa 100644 --- a/util/mkimage.c +++ b/util/mkimage.c @@ -777,13 +777,12 @@ grub_install_generate_image (const char *dir, const char *prefix, char *memdisk_path, char **pubkey_paths, size_t npubkeys, char *config_path, const struct grub_install_image_target_desc *image_target, - int note, - grub_compression_t comp) + int note, grub_compression_t comp, const char *dtb_path) { char *kernel_img, *core_img; size_t total_module_size, core_size; size_t memdisk_size = 0, config_size = 0; - size_t prefix_size = 0; + size_t prefix_size = 0, dtb_size = 0; char *kernel_path; size_t offset; struct grub_util_path_list *path_list, *p; @@ -828,6 +827,12 @@ grub_install_generate_image (const char *dir, const char *prefix, total_module_size += memdisk_size + sizeof (struct grub_module_header); } + if (dtb_path) + { + dtb_size = ALIGN_UP(grub_util_get_image_size (dtb_path), 4); + total_module_size += dtb_size + sizeof (struct grub_module_header); + } + if (config_path) { config_size = ALIGN_ADDR (grub_util_get_image_size (config_path) + 1); @@ -950,6 +955,19 @@ grub_install_generate_image (const char *dir, const char *prefix, offset += memdisk_size; } + if (dtb_path) + { + struct grub_module_header *header; + + header = (struct grub_module_header *) (kernel_img + offset); + header->type = grub_host_to_target32 (OBJ_TYPE_DTB); + header->size = grub_host_to_target32 (dtb_size + sizeof (*header)); + offset += sizeof (*header); + + grub_util_load_image (dtb_path, kernel_img + offset); + offset += dtb_size; + } + if (config_path) { struct grub_module_header *header; |