我正在尝试编写一个可以读取msr寄存器的简单应用程序,并正在从用户空间运行此应用程序。

我已经加载了msr模块,并向每个人授予了对/ dev / cpu / * / msr的读取权限。但是,用户仍然无法访问这些文件,但root用户可以。

权限如下所示:

crw-r--r-- 1 root root 202, 0 sep  6 17:55 /dev/cpu/0/msr

crw-r--r-- 1 root root 202, 1 sep  6 17:55 /dev/cpu/1/msr

crw-r--r-- 1 root root 202, 2 sep  6 17:55 /dev/cpu/2/msr

crw-r--r-- 1 root root 202, 3 sep  6 17:55 /dev/cpu/3/msr


当我尝试从用户空间读取这些文件时,我一直收到“不允许操作”错误消息,但是当root尝试访问它们时,它运行正常。我究竟做错了什么?我在内核版本为3.11.0的Ubuntu 13.04上。

最佳答案

从3.7左右开始,对主线Linux内核的更改现在要求可执行文件具有CAP_SYS_RAWIO功能,以打开MSR设备文件[2]。除了加载MSR内核模块并在msr设备文件上设置适当的文件许可权外,还必须使用以下命令将CAP_SYS_RAWIO功能授予需要访问MSR驱动程序的任何用户可执行文件:

sudo setcap cap_sys_rawio=ep <user_executable>

09-04 19:39