曾经写的一篇笔记。偶尔翻出来了,放在这里做个纪念

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编程訪问的更多相关文章

  1. linux 下 poll 编程

    poll 与 select 很类似,都是对描述符进行遍历,查看是否有描述符就绪.如果有就返回就绪文件描述符的个数将.poll 函数如下: #include <poll.h> int pol ...

  2. Linux下Socket编程的端口问题( Bind error: Address already in use )

    Linux下Socket编程的端口问题( Bind error: Address already in use ) 在进行linux网络编程时,每次修改了源代码并再次编译运行时,常遇到下面的地使用错误 ...

  3. linux下socket编程实例

    linux下socket编程实例一.基本socket函数Linux系统是通过提供套接字(socket)来进行网络编程的.网络的socket数据传输是一种特殊的I/O,socket也是一种文件描述符.s ...

  4. Linux 下shell 编程学习脚手架

    linux body { font-family: Helvetica, arial, sans-serif; font-size: 14px; line-height: 1.6; padding-t ...

  5. linux下libnet编程 亲自测试可用

    linux下libnet编程 亲自测试可用 亲自测试  如果build包的时候 只要把类型改了 就能改成相应的协议. 0x0800 ip 0x0806 arp 0x86DD    IPv6 0x86e ...

  6. Linux下socket编程基本知识

    本文档主要讲解了Linux下socket编程的一些基本知识,主要包括套接字和字节序的概念,以及一些常用的结构体和函数. 本文是在网易云课堂学习过程中的记录,这个老师讲得很不错,推荐大家围观. Linu ...

  7. Linux下的编程实战【转】

    一篇比较不错的文章, 降到了 makefile make , gcc编译器,GDB调试器, Linux文件系统,Linux文件API,.C语言库函数(C库函数的文件操作实际上是独立于具体的操作系统平台 ...

  8. linux下socket编程

    相关结构 //下边这两个结构定义在<sys/types.h>里 //一般的地址结构,只能用于覆盖(把其他地址转换为此类型),且只能引用该地址的sa_family字段 struct sock ...

  9. Linux下串口编程【转】

    本文转载自:http://blog.csdn.net/w282529350/article/details/7378388 /************声明:本人只是见到这篇文章对我帮助很大才转载的,但 ...

随机推荐

  1. 转:php+mysql菜单无限级分类(非递归)

    php+mysql无限级分类(非递归) 参考:http://www.chhua.com/web-note3244

  2. dojo 学习笔记

    1  因为Dijit包括了一系列的UI组件,他绑定了4个支持的主题:nihilo, soria, tundra 和claro.每个主题包括了一系列的图片和CSS文件来控制组件的外观.CSS文件必须显示 ...

  3. hdoj 3065 病毒侵袭持续中(AC自动机)

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=3065 思路分析:问题需要模式匹配多个模式串,需要注意的是模式串会包含和重叠,需要对AC自动机的匹配过 ...

  4. 2014年去哪儿网笔试题--有两个文件context.txt和words.conf,请尝试将他们合并成为一段文字,并打印出来。

    有两个文件context.txt和words.conf,请尝试将他们合并成为一段文字,并打印出来. 这两个文件内容如下: context.txt “并不是每个人都需要$(qunar)自己的粮食,$(f ...

  5. UVA - 12230 Crossing Rivers (期望)

    Description You live in a village but work in another village. You decided to follow the straight pa ...

  6. android studio使用的各种问题

    1.添加权限,没有图形界面.添加权限的位置在<application>节点外,如果在节点内添加会报错的 2.查看logcat:要查看logcat的内容,要点一下设备 3.显示行号:在set ...

  7. Hibernate之工具类HibernateUtil

    原创文章,转载请注明:Hibernate之工具类HibernateUtil  By Lucio.Yang 1.最简单的工具类,实现SessionFactory的单例共享,session的管理 pack ...

  8. Oracle语句优化规则(一)

    1. 选用适合的ORACLE优化器     ORACLE的优化器共有3种:    a. RULE (基于规则)   b. COST (基于成本) c. CHOOSE (选择性)     设置缺省的优化 ...

  9. codeforces 464B Restore Cube

    题目链接 给8个点, 判断这8个点能否组成一个正方体, 如果能, 输出这8个点. 同一个点的x, y, z可以交换. 每一个点有6种排列方式, 一个8个点, 暴力枚举出所有排列方式然后判断能否组成正方 ...

  10. Cobbler自动化部署

    一:PXE.Kickstart与Cobbler的概念: PXE(preboot execute environment,预启动执行环境)是由Intel公司开发的技术,需要网卡的硬件支持,工作于C/S的 ...