iopl()间歇性失败

时间:2018-11-15 05:16:38

标签: ubuntu-14.04 system-calls

我在硬件设备上工作,我必须在其中执行一些GPIO操作。 在程序开始时,我调用iopl(3)。可执行文件不是root所拥有,但具有功能集-cap_sys_rawio+eip。虽然这在大多数情况下都有效 有时该过程失败,并显示以下信息:

iopl: Operation not permitted

能力不足吗?我无法以root的身份运行该程序。 设备正在运行Ubuntu 14.04.2dmesg / syslogs没有给予 任何提示!

更多详细信息:

我的main的开头是这样的:

if (iopl(3) != 0) {
    perror("iopl");
    assert(!"Failed to set privilege!");
}

尽管大多数情况下都可以使用,但有时在硬件平台上也可以 (基于Intel Atom),此操作将失败,perror打印iopl: Operation not permitted

1 个答案:

答案 0 :(得分:0)

知道您不能以root用户身份运行程序,我想您是否尝试过:

 chmod u+s /usr/bin/xinit

,或者如果您具有root用户访问权限,

sudo chmod u+s /usr/bin/xinit

如果未设置setuid(考虑在没有sudo的情况下运行-因为您已经具有root访问权限)

sudo chown root $prefix/Xorg

sudo chmod u+s $prefix/Xorg