即使以 root 身份也无法打开 /dev/mem 甚至 /dev/port!

即使以 root 身份也无法打开 /dev/mem 甚至 /dev/port!

我编写了一个程序,尝试在 /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 设置中禁用安全启动。

相关内容