无法写入/ dev / mem

时间:2017-10-04 15:08:44

标签: c linux linux-kernel linux-device-driver

我正在尝试的问题与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_ADDR0xc000000,大小为256 MiB(0x10000000,所有PCI地址空间。)

说,当我尝试写这些位置(具有特定偏移量,BDF格式)时,没有写入任何内容;再次代码不会失败,它只是不写任何东西。

如果我的代码错误,我尝试了BusyBox,其中包含以下参数:

[horro@ ~]$ sudo busybox devmem 0xc00b0a8c w 0xffffffff
[horro@ ~]$ sudo busybox devmem 0xc00b0a8c             
0x00000000

所以,基本上它没有写任何东西。

1 个答案:

答案 0 :(得分:0)

有一个CONFIG_STRICT_DEVMEM内核配置选项。我的理解是,必须在编译时将其设置为CONFIG_STRICT_DEVMEM = n。这是出于安全原因。