[Pdbg] [PATCH 02/13] libpdbg: Map external device trees read-write by default

Amitay Isaacs amitay at ozlabs.org
Wed Jan 15 16:18:50 AEDT 2020


Signed-off-by: Amitay Isaacs <amitay at ozlabs.org>
---
 libpdbg/dtb.c | 16 +++++++++++-----
 1 file changed, 11 insertions(+), 5 deletions(-)

diff --git a/libpdbg/dtb.c b/libpdbg/dtb.c
index 53f4393..18b5a6f 100644
--- a/libpdbg/dtb.c
+++ b/libpdbg/dtb.c
@@ -220,13 +220,16 @@ static void bmc_target(struct pdbg_dtb *dtb)
 }
 
 /* Opens a dtb at the given path */
-static void *mmap_dtb(char *file)
+static void *mmap_dtb(char *file, bool readonly)
 {
 	int fd;
 	void *dtb;
 	struct stat statbuf;
 
-	fd = open(file, O_RDONLY);
+	if (readonly)
+		fd = open(file, O_RDONLY);
+	else
+		fd = open(file, O_RDWR);
 	if (fd < 0) {
 		pdbg_log(PDBG_ERROR, "Unable to open dtb file '%s'\n", file);
 		return NULL;
@@ -237,7 +240,10 @@ static void *mmap_dtb(char *file)
 		goto fail;
 	}
 
-	dtb = mmap(NULL, statbuf.st_size, PROT_READ, MAP_PRIVATE, fd, 0);
+	if (readonly)
+		dtb = mmap(NULL, statbuf.st_size, PROT_READ, MAP_PRIVATE, fd, 0);
+	else
+		dtb = mmap(NULL, statbuf.st_size, PROT_READ|PROT_WRITE, MAP_SHARED, fd, 0);
 	if (dtb == MAP_FAILED) {
 		pdbg_log(PDBG_ERROR, "Failed top mmap file '%s'\n", file);
 		goto fail;
@@ -281,11 +287,11 @@ void pdbg_default_dtb(struct pdbg_dtb *dtb, void *system_fdt)
 
 	fdt = getenv("PDBG_BACKEND_DTB");
 	if (fdt)
-		dtb->backend = mmap_dtb(fdt);
+		dtb->backend = mmap_dtb(fdt, false);
 
 	fdt = getenv("PDBG_DTB");
 	if (fdt)
-		dtb->system = mmap_dtb(fdt);
+		dtb->system = mmap_dtb(fdt, false);
 
 	if (dtb->backend && dtb->system)
 		return;
-- 
2.21.1



More information about the Pdbg mailing list