iopl和outb函数
iopl
是linux系统函数,调用的头文件为 #include <sys/io.h>
函数主要功能介绍:
int iopl(int level);
iopl()更改调用进程的I/O特权级别,由级别中两个最不重要的位指定。
为了允许兼容8514的X服务器在Linux下运行,这个调用是必要的。由于这些X服务器需要访问所有65536 I/O端口,因此ioperm(2)调用是不够的。
除了授予不受限制的I/O端口访问权之外,在更高的I/O特权级别上运行还允许进程禁用中断。这很可能会导致系统崩溃,并且无法修复。
权限由fork(2)和execve(2)继承
正常进程的I/O特权级别为0。
这个调用主要针对i386架构。在许多其他体系结构上,它不存在,或者总是返回一个错误。
值得注意的是**: i386是32位版,x86-64是64位版,PPC是苹果电脑版**
返回值类型说明:
成功时,返回零。错误时,返回-1。
EINVAL 水平大于3
ENOSYS 此调用未实现
EPERM 调用进程没有足够的权限调用iopl();需要CAP_SYS_RAWIO功能将I/O特权级别提升到当前值之上。
注意:
iopl()是特定于linux的,不能移植到其他程序中去使用。
Libc5将其视为一个系统调用,并在<unistd.h>中有一个原型。Glibc1没有原型。Glibc2在<sys/io中有一个原型。和<sys/perm.h>。只能在i386上使用。
outb函数介绍
outb
系统调用中罗列函数有一下信息。
outb, outw, outl, outsb, outsw, outsl, inb, inw, inl, insb, insw, insl, outb_p, outw_p, outl_p, inb_p, inw_p, inl_p - port I/O
调用的函数头文件和参数信息如下:
void outb(unsigned char value, unsigned short int port);
*void insb(unsigned short int port, void addr, unsigned long int count);
insb主要是对称查看一下。
主要说明这一函数。
描述信息:
在申请了I/O端口区域之后,就可以放心地访问,Linux使用inb(p)、inw§、insb(p,d,l)、insw(p,d,l)、outb(v,p)、outw(v,p)、outl(v,p)、outsb(p,d,l)、outsl(p,d,l)等宏来访问I/O端口,他们在include/asm/io.h中进行定义。
宏中in表示从端口输入,out表示从输出到端口。
b表示访问字节,w表示访问字,l表示访问长整数,s表示流数据,如outw表示输出一个字。
参数p表示要访问的I/O端口号,v表示要输出的数值,d表示内存缓存起始地址,l表示输出输入的量。
它们主要是为内核使用而设计的,但是可以从用户空间使用。
你必须使用-O或-O2或类似的语言进行编译。这些函数被定义为内联宏,在没有启用优化的情况下不会被替换,这会在链接时导致未解析的引用。
你可以使用ioperm(2)或iopl(2)告诉内核允许用户空间应用程序访问相关的I/O端口。如果不这样做,应用程序将收到一个 seg‐mentation 的错。
outb()和friends是特定于硬件的。首先传递value参数,然后传递port参数,这与大多数DOS实现的顺序相反。
示例:
intb(p)表示从端口p输入一个字节。
outsw(p,d,l)表示输出从内存地址d开始的l个字到端口p
iopl和outb函数相关推荐
- linux怎么调用inb函数,outb()函数 Unix/Linux
outb, outw, outl, outsb, outsw, outsl, inb, inw, inl, insb, insw, insl, outb_p, outw_p, outl_p, inb_ ...
- linux outb函数,outb_p()函数 Unix/Linux
outb, outw, outl, outsb, outsw, outsl, inb, inw, inl, insb, insw, insl, outb_p, outw_p, outl_p, inb_ ...
- cmos 和 bios中断大全
1,cmos简介. cmos是主板上一块可读写的RAM芯片.用途:主要用来保存当前系统的硬件配置和操作人员对某些参数的设定.cmos芯片是由一块纽扣电池供电.因此在关机状态内部信息也不会丢失. ...
- 操作系统真象还原实验记录之实验二十三:硬盘分区,并编写硬盘驱动程序
操作系统真象还原实验记录之实验二十三:编写硬盘驱动程序 1.硬盘分区 1.1 创建Seven80.img硬盘 ./bximage -mode=create -imgmode=flat -hd=80 - ...
- outb,inb等I/Oport操作函数
功能: 如 i386 .在差别 I/O 空间和内存空间的进程的 I/O 空间写入数据. outb() I/O 上写入 8 位数据 ( 1 字节 ). outw() I/O 上写入 16 位数据 ( ...
- outb, outw, outl函数
功能: 如 i386 ,在区别 I/O 空间和内存空间的进程的 I/O 空间写入数据. outb() I/O 上写入 8 位数据 ( 1 字节 ): outw() I/O 上写入 16 位数据 ( ...
- Linux系统中的函数
Linux系统中的函数: 一.进程控制 fork 创建一个新进程 clone 按指定条件创建子进程 execve 运行可执行文件 exit 中止进程 _exit 立即中止当前进程 getdtables ...
- 【linux开发】IO端口和IO内存的区别及分别使用的函数接口
IO端口和IO内存的区别及分别使用的函数接口 每个外设都是通过读写其寄存器来控制的.外设寄存器也称为I/O端口,通常包括:控制寄存器.状态寄存器和数据寄存器三大类.根据访问外设寄存器的不同方式,可以把 ...
- 怎么设置linux端口权限,Linux下设置端口权限的系统调用—ioperm和iopl
Linux 下设置端口权限的系统调用有两个: ioperm 和 iopl . 一. ioperm 和 iopl 介绍. 1.ioperm 该系统调用的介绍参考了以下链接中的内容: http://blo ...
最新文章
- 转载,大佬关于虚拟内存与物理内存关系讲解。
- 乐刷科技-Java工程师社招面试
- 数值选择器(NumberPicker)的功能与用法
- DOM下的节点属性和操作小结
- mysql为datetime类型的字段设置默认值current_timestamp,引发 Invalid default value for 错误...
- MySQL之架构与历史(二)
- SAP C4C - the entity BO node XXXX is unknown
- xxd命令转换二进制十六进制文件
- jvm 调优 2020.09.07
- SKSpriteNode对象初始化在iPhone 6 plus中显示不正确的分析及解决
- 智能型电话远程遥控器
- 无痕模式后如何找到历史_新高考“3+1+2”模式下,物理与历史如何选择更好
- App开发难吗?主要的难点在哪?
- ALGO-986 藏匿的刺客 C++
- 如何将自适应设计理论及韧性结构体系技术应用于穿越活动断裂带的隧道建设
- 用Cadence Virtuoso IC617仿真V-I特性曲线
- 八进制、十进制、操作符(day04)
- Vue中 前端实现生成 PDF 并下载
- 华兴资本公布发行区间 蚂蚁金服与雪湖资本各认购5000万美元
- Linux下LED设备驱动开发(LED灯实现闪烁)
热门文章
- 线路负载及故障检测装置《我搜集的资料》
- 少说话多写代码之Python学习048——类的成员(supper函数)
- 【java】java编写 if 时不带 else
- python 图片识别服装_基于树莓派的服装识别系统及方法与流程
- Sentinel 为 RocketMQ 服务保驾护航
- [年终总结]愿你永远清澈明朗,眼里有光
- 安卓系统管理软件_安卓平板电脑用户,你的微信又要变了!
- 基于51单片机的数字电压表c语言程序,基于单片机的数字电压表(全文完整版)...
- Arduino实验九——感光灯实验
- 【ZZULIOJ】 Python 1016: 银行利率