IT博客汇
  • 首页
  • 精华
  • 技术
  • 设计
  • 资讯
  • 扯淡
  • 权利声明
  • 登录 注册

    [原]linux下在用户空间访问I/O端口的ioperm和iopl函数

    mao0514发表于 2017-01-11 18:32:37
    love 0
    1.ioperm函数
         功能描述:
    为调用进程设置I/O端口访问权能。ioperm的使用需要具有超级用户的权限,只有低端的[0-0x3ff] I/O端口可被设置,要想指定更多端口的权能,可使用iopl函数。这一调用只可用于i386平台。

    用法:
    #include  /* for libc5 */
    #include  /* for glibc */
    int ioperm(unsigned long from, unsigned long num,
    int turn_on);
          
    参数:
    from:起始端口地址。
    num:需要修改权能的端口数。
    turn_on:端口的新权能位。1为开启,0为关闭。
    返回说明: 
    成功执行时,返回0。失败返回-1,errno被设为以下的某个值 
    EINVAL:参数无效
    EIO:这一调用不被支持
    EPERM:调用进程权能不足。
       
    2.iopl函数
    功能描述:该调用用于修改当前进程的操作端口的权限。可以用于所有65536个端口的权限。因此,ioperm相当于该调用的子集。和ioperm一样,这一调用仅适用于i386平台。

    用法:
    #include 
       int
    iopl(int level);
    参数:
    level: 端口的权限级别。为3时可以读写端口。默认权能级别为0,用户空间不可读写。
    返回说明:成功执行时,返回0。失败返回-1,errno被设为以下的某个值
    EINVAL:level值大于3
    ENOSYS:未实现该调用
    EPERM:调用进程权能不足。



沪ICP备19023445号-2号
友情链接