Often during debugging session it's very interesting to see
what data we were dealing with. For example what we write or read
to/from memory or peripherals.
This change introduces functions that allow to dump binary
data with one simple function invocation like:
--->8
print_hex_dump_bytes("", DUMP_PREFIX_OFFSET, buf, len);
--->8
which gives us the following:
--->8
: f2 b7 c9 88 62 61 75 64 72 61 74 65 3d 31 31 35 baudrate=115
0010: 32 30 30 00 62 6f 6f 74 61 72 67 73 3d 63 6f 6e 200.bootargs=con
0020: 73 6f 6c 65 3d 74 74 79 53 33 2c 31 31 35 32 30 sole=ttyS3,11520
0030: 30 6e 38 00 62 6f 6f 74 64 65 6c 61 79 3d 33 00 0n8.bootdelay=3.
0040: 62 6f 6f 74 66 69 6c 65 3d 75 49 6d 61 67 65 00 bootfile=uImage.
0050: 66 64 74 63 6f 6e 74 72 6f 6c 61 64 64 72 3d 39 fdtcontroladdr=9
0060: 66 66 62 31 62 61 30 00 6c 6f 61 64 61 64 64 72 ffb1ba0.loadaddr
0070: 3d 30 78 38 32 30 30 30 30 30 30 00 73 74 64 65 =0x8200.stde
0080: 72 72 3d 73 65 72 69 61 6c 30 40 65 30 30 32 32 rr=serial0@e0022
0090: 30 30 30 00 73 74 64 69 6e 3d 73 65 72 69 61 6c 000.stdin=serial
00a0: 30 40 65 30 30 32 32 30 30 30 00 73 74 64 6f 75 0@e0022000.stdou
00b0: 74 3d 73 65 72 69 61 6c 30 40 65 30 30 32 32 30 t=serial0@e00220
00c0: 30 30 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00..
...
--->8
Source of hexdump.c was copied from Linux kernel v4.7-rc2.
Signed-off-by: Alexey Brodkin
Cc: Anatolij Gustschin
Cc: Mario Six
Cc: Simon Glass
Cc: Tom Rini
Cc: Stefan Roese
---
Build-tested by Travis CI, see https://travis-ci.org/abrodkin/u-boot.
Changes v2 -> v3:
* Remove hexdump.h from common.h
* Drop verbose level argument from print_hex_dump()
* Update users of print_hex_dump() accordingly
Changes v1 -> v2:
* Move hexdump definitions to a separate header.
* Move helper funcions to the header so they might be used even if
CONFIG_HEXDUMP is not enabled and if not used they will not occupy
extra bytes of memory being "static inline" ones.
* While at it replace its own hex_asc[], hex_asc_{lo|hi}() and
pack_hex_byte() in lib/vsprintf.c with generic ones from hexdump.
* In print_hex_dump() revert back first parametr for debug level,
otherwise existing users of the function will be broken.
drivers/mtd/ubi/attach.c| 2 +-
drivers/mtd/ubi/debug.c | 7 +-
drivers/mtd/ubi/debug.h | 6 +-
drivers/mtd/ubi/io.c| 7 +-
drivers/usb/gadget/f_mass_storage.c | 1 +
drivers/usb/gadget/storage_common.c | 4 +-
examples/api/Makefile | 1 +
fs/ubifs/debug.c| 6 +-
fs/ubifs/scan.c | 3 +-
include/hexdump.h | 91 +++
include/linux/compat.h | 1 -
lib/Kconfig | 5 +
lib/Makefile| 1 +
lib/hexdump.c | 245
lib/vsprintf.c | 18 +-
15 files changed, 369 insertions(+), 29 deletions(-)
create mode 100644 include/hexdump.h
create mode 100644 lib/hexdump.c
diff --git a/drivers/mtd/ubi/attach.c b/drivers/mtd/ubi/attach.c
index ba40e58e5133..b4ba339c804c 100644
--- a/drivers/mtd/ubi/attach.c
+++ b/drivers/mtd/ubi/attach.c
@@ -789,7 +789,7 @@ static int check_corruption(struct ubi_device *ubi, struct
ubi_vid_hdr *vid_hdr,
ubi_dump_vid_hdr(vid_hdr);
pr_err("hexdump of PEB %d offset %d, length %d",
pnum, ubi->leb_start, ubi->leb_size);
- ubi_dbg_print_hex_dump(KERN_DEBUG, "", DUMP_PREFIX_OFFSET, 32, 1,
+ ubi_dbg_print_hex_dump("", DUMP_PREFIX_OFFSET, 32, 1,
ubi->peb_buf, ubi->leb_size, 1);
err = 1;
diff --git a/drivers/mtd/ubi/debug.c b/drivers/mtd/ubi/debug.c
index 412ea9f6f5a6..0a7427522cd5 100644
--- a/drivers/mtd/ubi/debug.c
+++ b/drivers/mtd/ubi/debug.c
@@ -5,6 +5,7 @@
* Author: Artem Bityutskiy (Битюцкий Артём)
*/
+#include
#include
#include "ubi.h"
#ifndef __UBOOT__
@@ -39,7 +40,7 @@ void ubi_dump_flash(struct ubi_device *ubi, int pnum, int
offset, int len)
ubi_msg(ubi, "dumping %d bytes of data from PEB %d, offset %d",
len, pnum, offset);
- print_hex_dump(KERN_DEBUG, "", DUMP_PREFIX_OFFSET, 32, 1, buf, len, 1);
+ print_hex_dump("", DUMP_PREFIX_OFFSET, 32, 1, buf, len, 1);
out:
vfree(buf);
return;
@@ -60,7 +61,7 @@ void ubi_dump_ec_hdr(const struct ubi_ec_hdr *ec_hdr)
pr_err("\timage_seq %d\n", be32_to_cpu(ec_hdr->image_seq));
pr_err("\thdr_crc%#08x\n", be32_to_cpu(ec_hdr->hdr_crc));
pr_err("erase counter header hexdump:\n");
- print_hex_dump(KERN_DEBUG, "", DUMP_PREFIX_OFFSET, 32, 1,
+ print_hex_dump("", DUMP_PREFIX_OFFSET, 32, 1,