【发布时间】:2019-04-18 04:00:19
【问题描述】:
我正在开发一个硬件设备,我必须在其中执行一些 GPIO 操作。
在我的程序开始时,我调用iopl(3)。可执行文件不是 root 拥有的,但具有功能集 - 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 失败。
【问题讨论】:
-
愿意提供重现问题的代码吗?另外,您正在运行什么架构?
-
我的程序主要有:
if (iopl(3) != 0) { perror("iopl"); }。我无法随意重现该问题! :( 它有时会发生,我不知道为什么iopl失败了。这是英特尔 Atom (Intel(R) Atom(TM) CPU C2558 @ 2.40GHz) CPU。如果您需要更多详细信息,请告诉我。 -
将架构和代码添加到您的问题中,包括
main()和包含,以使问题更完整。还要考虑一下strace。捕获其输出并将错误情况与非错误情况进行比较。特别是在iopl()-call 之前是否有症状。除此之外,我也很茫然。 -
@UlrichEckhardt 当然,如果再次发生这种情况,
strace它会