我编写了一个程序,尝试在 /dev/mem 上执行映射,但失败了:
无法打开 /dev/mem:操作不允许
我也尝试使用 od 来测试我的代码是否不好:
od:/dev/mem:操作不允许
od:/dev/port:操作不允许
我也运行 Kubuntu 22.04 LTS
需要澄清的是,我从未对 /dev/port 进行过 mmap。
我怎样才能使这些文件可打开?
答案1
这是一个名为的内核参数CONFIG_STRICT_DEVMEM
。默认情况下,从内核 2.6.26 开始,它被禁用,因此不允许访问它。
找出你将其设置为何:
$ ll /proc/ | grep conf
$ ll /boot/ | grep conf
-rw-r--r-- 1 root root 261604 Apr 19 14:01 config-5.15.0-1033-gcp
-rw-r--r-- 1 root root 234065 Apr 10 2020 config-5.4.0-1009-gcp
$ cd /boot/
$ more config-5.15.0-1033-gcp | grep CONFIG_STRICT_DEVMEM
CONFIG_STRICT_DEVMEM=y
man 4 mem
在命令行上查看。摘录:
从 Linux 2.6.26 开始,根据架构的不同,
CONFIG_STRICT_DEVMEM
内核配置选项会限制通过此文件可以访问的区域。例如:在 x86 上,不允许访问 RAM,但可以访问内存映射的 PCI 区域。它通常由以下人员创建:
mknod -m 660 /dev/mem c 1 1 chown root:kmem /dev/mem
因此您需要禁用它CONFIG_STRICT_DEVMEM
,这将需要重新编译内核。有 2 个链接介绍它(但有点超出“Ubuntu”的范围):
答案2
对我来说,它是 BIOS 中的安全启动;运行systemctl reboot --firmware-setup
然后在 BIOS 设置中禁用安全启动。