我正在使用硬件设备,在该设备中必须执行一些GPIO操作。
在程序开始时,我调用iopl(3)
。该可执行文件不是root
拥有的,但是具有功能set-cap_sys_rawio+eip
。虽然这在大多数情况下都有效
有时,该过程失败并显示:
iopl: Operation not permitted
能力不足吗?我无法将程序作为
root
运行。设备正在运行
Ubuntu 14.04.2
。 dmesg
/ syslogs
没有给出任何提示!
更多细节:
我的
main
的开头具有以下内容:if (iopl(3) != 0) {
perror("iopl");
assert(!"Failed to set privilege!");
}
尽管这在大多数情况下都可行,但有时在硬件平台上也可以
(基于Intel Atom),这会失败,并且
perror
打印iopl: Operation not permitted
。 最佳答案
知道您不能以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
关于ubuntu-14.04 - iopl()间歇性失败,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/53312865/