我正在尝试的问题与open()
或mmap()
函数无关,这些函数已正确执行。我在内核中禁用了CONFIG_STRICT_DEVMEM
,因此我可以毫无问题地从/dev/mem
读取。实际上,我可以做到以下几点:
const char *path = "/dev/mem"
int fd = open(path, O_RDWR); /* read and write flags*/
p = mmap(0, SIZE, PROT_READ | PROT_WRITE, MAP_SHARED, fd, BASE_ADDR); /* read and write flags*/
代码不会失败。尽管如此,我正在使用此代码在PCI地址空间中写入。因此,基本上BASE_ADDR
为0xc000000
,大小为256 MiB(0x10000000
,所有PCI地址空间。)
说,当我尝试写这些位置(具有特定偏移量,BDF格式)时,没有写入任何内容;再次代码不会失败,它只是不写任何东西。
如果我的代码错误,我尝试了BusyBox,其中包含以下参数:
[horro@ ~]$ sudo busybox devmem 0xc00b0a8c w 0xffffffff
[horro@ ~]$ sudo busybox devmem 0xc00b0a8c
0x00000000
所以,基本上它没有写任何东西。
答案 0 :(得分:0)
有一个CONFIG_STRICT_DEVMEM内核配置选项。我的理解是,必须在编译时将其设置为CONFIG_STRICT_DEVMEM = n。这是出于安全原因。