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

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. 移动服务和 Azure Active Directory 中基于角色的访问控制

    编辑人员注释:本文章由 Matthew Henderson撰写 去年 11月,我们发布了 Azure Active Directory (AAD) 预览版作为移动服务身份提供程序.此举旨在为企业开 ...

  2. PhoneGap 3.0 安装

    PhoneGap 3.0  已经出来有一段时间了.3.0 提供了使用Node.js 安装,使用命令行创建.编译.运行项目.也就是可以抛弃eclipse,完全使用命令.记事本开发phonegap 项目了 ...

  3. Opencv 学习资料集合(更新中。。。)

    基础学习笔记之opencv(24):imwrite函数的使用 tornadomeet 2012-12-26 16:36 阅读:13258 评论:9 基础学习笔记之opencv(23):OpenCV坐标 ...

  4. android 中文 api (71) —— BluetoothServerSocket[蓝牙]

    前言 本章内容是  android.bluetooth.BluetoothServerSocket,为Android蓝牙部分的章节翻译.服务器通讯套接字,与TCP ServerSocket类似.版本为 ...

  5. BI商业智能项目中的若干风险要素

    BI商业智能项目应在 “业务驱动,总体规划,统一设计,分期实施” 的总体设计原则下分期实施,采取Agile BI方法论迭代开展,先确保核心功能满足客户需求,在总体规划下不断完善整个系统,以提高可交付性 ...

  6. nopcommerce插件使用

    nopcommerce是国外用.net开发的电商b2c开源项目,主要涉及技术包括了ef+mvc. 今天主要分析nop的插件机制. 什么是插件?插件是预先开发好的可以独立运行的功能模块,把单独的功能模块 ...

  7. WPF自学笔记

    WPF使用哪几种元素作为顶级元素: 1. Window元素 2. Page元素(与Window元素类似,用于可导航的应用程序) 3. Application元素(定义应用程序资源和启动设置) PS:在 ...

  8. 玩2k16

    2k是我最喜欢的游戏啦,平时无聊了都会搞两盘.现在到2k16了,玩游戏时碰到一些麻烦,记录便查. 我哥一直说他的电脑玩2K16非常卡,根本玩不了,但是他的电脑配置可比我的高啊,我玩起溜溜地,喊他把配置 ...

  9. 让正则表达式变简单(PythonVerbalExpressions)

    一.安装pip install VerbalExpressions二.导入from verbalexpressions import VerEx三.示例 使用案例一: 测试URL是否有效 from v ...

  10. 利用Adapter对象将数据填充到DataTable(或DataSet)的例子

    前: <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="DataAdapter ...