This should be solvable by building with CONFIG_LFS=y - this makes off_t 64-bit and makes all operations on files 64-bit aware.
Can you try that? On Mon, Sep 27, 2021 at 4:06 PM xiechengliang <[email protected]> wrote: > > Subject: [PATCH] devmem: The type of the physical address to be accessed by > > devmem is off_t, when the 32-bit Linux kernel support lpae, the physical > > address can exceed 4G, and accessing or modifying the address exceeding 4G > > will cause truncation. > > > > function old new delta > > do_cmd 127 127 +0 > > > > Signed-off-by: xiechengliang <[email protected]> > > --- > > miscutils/devmem.c | 6 +++--- > > 1 file changed, 3 insertions(+), 3 deletions(-) > > > > diff --git a/miscutils/devmem.c b/miscutils/devmem.c > > index f9f0276bc..594bb440c 100644 > > --- a/miscutils/devmem.c > > +++ b/miscutils/devmem.c > > @@ -30,7 +30,7 @@ int devmem_main(int argc UNUSED_PARAM, char **argv) > > void *map_base, *virt_addr; > > uint64_t read_result; > > uint64_t writeval = writeval; /* for compiler */ > > - off_t target; > > + uint64_t target; > > unsigned page_size, mapped_size, offset_in_page; > > int fd; > > unsigned width = 8 * sizeof(int); > > @@ -82,12 +82,12 @@ int devmem_main(int argc UNUSED_PARAM, char **argv) > > * Must map two pages to make it possible: */ > > mapped_size *= 2; > > } > > - map_base = mmap(NULL, > > + map_base = mmap64(NULL, > > mapped_size, > > argv[3] ? (PROT_READ | PROT_WRITE) : PROT_READ, > > MAP_SHARED, > > fd, > > - target & ~(off_t)(page_size - 1)); > > + target & ~(uint64_t)(page_size - 1)); > > if (map_base == MAP_FAILED) > > bb_simple_perror_msg_and_die("mmap"); > > > > -- > > 2.12.3 > > > > _______________________________________________ > busybox mailing list > [email protected] > http://lists.busybox.net/mailman/listinfo/busybox _______________________________________________ busybox mailing list [email protected] http://lists.busybox.net/mailman/listinfo/busybox
