Browse Source

io: Open /dev/mem with O_SYNC for uncached access

Only when /dev/mem is opened with O_SYNC the write and *read* is done
uncached. We saw wrong values read out from the hardware without setting
O_SYNC, the busybox devmem tool showed different values, when O_SYNC is
also set for the io tool, it reads out the same values as devmem.
When looking at the drivers/char/mem.c file in the kernel it is behaving
differently based on the O_DSYNC flag.

Signed-off-by: Hauke Mehrtens <hauke.mehrtens@intel.com>
lilik-openwrt-22.03
Hauke Mehrtens 5 years ago
parent
commit
90df0f3e24
2 changed files with 2 additions and 2 deletions
  1. +1
    -1
      utils/io/Makefile
  2. +1
    -1
      utils/io/src/io.c

+ 1
- 1
utils/io/Makefile View File

@ -6,7 +6,7 @@
include $(TOPDIR)/rules.mk include $(TOPDIR)/rules.mk
PKG_NAME:=io PKG_NAME:=io
PKG_RELEASE:=1
PKG_RELEASE:=2
include $(INCLUDE_DIR)/package.mk include $(INCLUDE_DIR)/package.mk


+ 1
- 1
utils/io/src/io.c View File

@ -343,7 +343,7 @@ main (int argc, char **argv)
printf("Attempting to map 0x%lx bytes at address 0x%08lx\n", printf("Attempting to map 0x%lx bytes at address 0x%08lx\n",
real_len, real_addr); real_len, real_addr);
mfd = open("/dev/mem", (memfunc == MEM_READ) ? O_RDONLY : O_RDWR);
mfd = open("/dev/mem", (memfunc == MEM_READ) ? (O_RDONLY | O_SYNC) : (O_RDWR | O_SYNC));
if (mfd == -1) { if (mfd == -1) {
perror("open /dev/mem"); perror("open /dev/mem");
fprintf(stderr, "Is CONFIG_DEVMEM activated?\n"); fprintf(stderr, "Is CONFIG_DEVMEM activated?\n");


Loading…
Cancel
Save