aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--arch/x86/lib/zimage.c33
1 files changed, 30 insertions, 3 deletions
diff --git a/arch/x86/lib/zimage.c b/arch/x86/lib/zimage.c
index 6973e0b08a..b30df08f07 100644
--- a/arch/x86/lib/zimage.c
+++ b/arch/x86/lib/zimage.c
@@ -350,6 +350,33 @@ int do_zboot(struct cmd_tbl *cmdtp, int flag, int argc, char *const argv[])
}
#ifdef CONFIG_ANDROID_BOOT_IMAGE
+static char hex_to_char(uint8_t nibble) {
+ if (nibble < 10) {
+ return '0' + nibble;
+ } else {
+ return 'a' + nibble - 10;
+ }
+}
+// Helper function to convert 32bit int to a hex string
+static void hex_to_str(char* str, ulong input) {
+ str[0] = '0'; str[1] = 'x';
+ size_t str_idx = 2;
+ uint32_t byte_extracted;
+ uint8_t nibble;
+ // Assume that this is on a little endian system.
+ for(int byte_idx = 3; byte_idx >= 0; byte_idx--) {
+ byte_extracted = ((0xFF << (byte_idx*8)) & input) >> (byte_idx*8);
+ nibble = byte_extracted & 0xF0;
+ nibble = nibble >> 4;
+ nibble = nibble & 0xF;
+ str[str_idx] = hex_to_char(nibble);
+ str_idx++;
+ nibble = byte_extracted & 0xF;
+ str[str_idx] = hex_to_char(nibble);
+ str_idx++;
+ }
+ str[str_idx] = 0;
+}
int android_bootloader_boot_kernel(const struct andr_boot_info *boot_info)
{
ulong kernel_address;
@@ -364,9 +391,9 @@ int android_bootloader_boot_kernel(const struct andr_boot_info *boot_info)
return -1;
kernel_address = android_image_get_kload(boot_info);
- sprintf(kernel_addr_str, "0x%lx", kernel_address);
- sprintf(ramdisk_addr_str, "0x%lx", ramdisk_address);
- sprintf(ramdisk_len_str, "0x%lx", ramdisk_len);
+ hex_to_str(kernel_addr_str, kernel_address);
+ hex_to_str(ramdisk_addr_str, ramdisk_address);
+ hex_to_str(ramdisk_len_str , ramdisk_len);
printf("Booting kernel at %s with fdt at %s ramdisk %s (%s bytes)...\n\n\n",
kernel_addr_str, env_get("fdtaddr"), ramdisk_addr_str, ramdisk_len_str);