Linux 下IOport编程訪问
曾经写的一篇笔记。偶尔翻出来了,放在这里做个纪念
Linux 下IOport编程訪问
这里记录的方法是在用户态訪问IOport,不涉及驱动程序的编写。
首先要包括头文件 /usr/include/asm/io.h
ioperm()
在 unistd.h 中声明。
用来打开对IOport的訪问权限,要求程序运行时必须有root 权限。仅仅能够打开0x00到0x3ff 这一地址段的IOport。
ioperm( from, num, turn_on)
比方:
#include<asm/io.h>
#include<unistd.h>
ioperm( 0x300, 5, 1);
表示从0x300 地址起的连续5个IO地址的訪问权限被打开。
iopl()
假设须要訪问比0x3ff更高的地址段。须要用iopl() 函数。
iopl(3) 表示打开对所有IOport的訪问权限。
IO 读写操作
inb(port);
inw(port);
outb(value, port);
outw(value, port);
对IO端口的读写大约用时1us。须要注意的是outb 函数与 turbo C 中的 outportb 函数的參数的顺序是反的,不要搞错。
inb_p(port);
inw_p(port);
outb_p(value, port);
outw_p(value, port);
这四个函数和上面四个函数的功能基本类似,可是在訪问完IOport后会添加一个1us左右的延时。
假设定义了REALLY_SLOW_IO这个宏。则延时约4us。
#define REALLY_SLOW_IO 1
#include<asm/io.h>
inb_p(port);
/dev/port
第二种訪问IO端口的方法是通过对/dev/port 设备文件来訪问。
这样的方法不须要有root 权限,仅仅有有对/dev/port的訪问权限即可。
訪问起来就像普通的文件訪问一样。 先 lseek(), 然后read()、 write() 函数。
可是不能使用 select() 函数和 poll() 函数。由于IOport不支持这些功能。
开关 中断
iopl(3) 打开訪问权限后能够通过插入汇编语句的方式开关中断。
asm(“cli”); //关中断
asm(“sti”); //开中断
Linux 下IOport编程訪问的更多相关文章
- linux 下 poll 编程
poll 与 select 很类似,都是对描述符进行遍历,查看是否有描述符就绪.如果有就返回就绪文件描述符的个数将.poll 函数如下: #include <poll.h> int pol ...
- Linux下Socket编程的端口问题( Bind error: Address already in use )
Linux下Socket编程的端口问题( Bind error: Address already in use ) 在进行linux网络编程时,每次修改了源代码并再次编译运行时,常遇到下面的地使用错误 ...
- linux下socket编程实例
linux下socket编程实例一.基本socket函数Linux系统是通过提供套接字(socket)来进行网络编程的.网络的socket数据传输是一种特殊的I/O,socket也是一种文件描述符.s ...
- Linux 下shell 编程学习脚手架
linux body { font-family: Helvetica, arial, sans-serif; font-size: 14px; line-height: 1.6; padding-t ...
- linux下libnet编程 亲自测试可用
linux下libnet编程 亲自测试可用 亲自测试 如果build包的时候 只要把类型改了 就能改成相应的协议. 0x0800 ip 0x0806 arp 0x86DD IPv6 0x86e ...
- Linux下socket编程基本知识
本文档主要讲解了Linux下socket编程的一些基本知识,主要包括套接字和字节序的概念,以及一些常用的结构体和函数. 本文是在网易云课堂学习过程中的记录,这个老师讲得很不错,推荐大家围观. Linu ...
- Linux下的编程实战【转】
一篇比较不错的文章, 降到了 makefile make , gcc编译器,GDB调试器, Linux文件系统,Linux文件API,.C语言库函数(C库函数的文件操作实际上是独立于具体的操作系统平台 ...
- linux下socket编程
相关结构 //下边这两个结构定义在<sys/types.h>里 //一般的地址结构,只能用于覆盖(把其他地址转换为此类型),且只能引用该地址的sa_family字段 struct sock ...
- Linux下串口编程【转】
本文转载自:http://blog.csdn.net/w282529350/article/details/7378388 /************声明:本人只是见到这篇文章对我帮助很大才转载的,但 ...
随机推荐
- BZOJ 1062
program candy bzoj1062; ; maxm=; maxn=; var n,len,m,i,p,t,l,r,c,d,q:longint; s:..,..maxn,..maxm] of ...
- UVA 12230 - Crossing Rivers(概率)
UVA 12230 - Crossing Rivers 题目链接 题意:给定几条河,每条河上有来回开的船,某一天出门,船位置随机,如今要求从A到B,所须要的期望时间 思路:每条河的期望,最坏就是船刚开 ...
- Servlet、SPringMVC、Struts等防止表单反复提交的多种处理方法
第一种处理方法(非拦截器): 眼下这样的方法不建议,由于JSP规范不建议写JAVA代码.这样的能够方便另外一种处理方法的理解,另外一种方法引入拦截器的思想,原理基本一样,模仿Struts的Token机 ...
- iOS 项目中的NSNotification简单使用
iOS中NSNotification的简单使用 好久没有写过博客了,总是遇到问题查一下,今天查的又是一个老问题,想了想,还是记录一下!今天在项目开发中遇到一个配置及时性处理的问题,想了想之后决定用通知 ...
- Java学习01
Java学习01 第一章 1.JRE与JDK JDK(JAVA Develop Kit,JAVA开发工具包)提供了Java的开发环境和运行环境,主要用于开发JAVA程序,面向Java程序的开发者; J ...
- 查询sql语句耗时的方法!
declare @times datetimeset @times=getdate()--要查询的sql语句select [注册数花费时间(毫秒)]=datediff(ms,@times,getdat ...
- Qt 技巧:设置在 debug 路径下直接运行可执行文件
Qt 编译的时候默认会使用影子构建,这时在工作路径下会生成一个目录:xxx-build-desktop-xxx. 如果编译通过,在该目录下会生成一个可执行文件,双击之,但不能运行,提示是缺少某个动态库 ...
- Ruby学习: 类的定义和实例变量
ruby是完全面向对象的,所有的数据都是对象,没有独立在类外的方法,所有的方法都在类中定义的. 一.类的定义语法 类的定义以 class 关键字开头,后面跟类名,以 end标识符结尾. 类中的方法以 ...
- STL string 模拟
下面的代码来自c++ primer plus第5版第12章,书中代码写的非常好: // string1.h -- fixed and augmented string class definition ...
- 爬虫框架Scrapy
前面十章爬虫笔记陆陆续续记录了一些简单的Python爬虫知识, 用来解决简单的贴吧下载,绩点运算自然不在话下. 不过要想批量下载大量的内容,比如知乎的所有的问答,那便显得游刃不有余了点. 于是乎,爬虫 ...