- 5
- 0
- 约 7页
- 2017-06-13 发布于北京
- 举报
下载
下载
第22章 Linux I/O端口编程
本章介绍有关Linux I/O端口编程的内容,如在C语言下使用I / O端口、硬件中断与I M A存取
等方面的内容。
22.1 如何在 C 语言下使用I/O端口
22.1.1 一般的方法
用来存取 I/O 端口的子过程都放在文件 /usr/include/asm/io.h 里(或放在内核源代码程序的
linux/include/asm-i386/io.h 文件里) 。这些子过程是以嵌入宏的方式写成的,所以使用时只要以
#includeasm/io.h 的方式引用就够了,不需要附加任何函数库。
因为 g c c 以及 e g c s 的限制,你在编译任何使用到这些子过程的源代码时必须打开最优化选
项 (gcc -O1或较高层次的) ,或者在做 #include asm/io.h 这个动作前使用 #define extern 将
extern 定义成空白。
为了除错的目的,你编译时可以使用 gcc -g -O (至少现在的 gcc 版本是这样) ,但是最优化
之后有时可能会让调试器的行为变得有点奇怪。如果这个状况对你而言是个困扰,你可以将所
有使用到 I / O端口的子过程集中放在一个文件里,并只在编译该文件时打开最优化选项。
在你存取任何 I/O 端口之前,你必须让程序有如此做的权限。要完成这个目的,你可以在
程序一开始的地方 (但是,要在任何 I/O 端口存取动作之前) 调用 i o p e r m ( )这个函数 (该函数在
文件 u n i s t d . h 中,并且被定义在 内核中) 。 使用语法是 i o p e r m ( f r o m ,n u m ,t u r n _ o n ) ,其中
from 是第一个允许存取的 I/O 端口地址,n u m 是接着连续存取 I/O 端口地址的数目。 例如,
i o p e r m ( 0 x 3 0 0 ,5,1 )的意思就是说允许存取端口 0x300 到 0x304 ( 一共五个端口地址) 。
而最后一个参数是一个布尔代数值,用来指定是否给予程序存取 I/O 端口的权限 (true (1))
或者除去存取的权限 (false (0)) 。 你可以多次调用函数 i o p e r m ( ) 以便使用多个不连续的端口地
址。
你的程序必须拥有 root 权限才能调用函数 ioperm() ; 所以你如果不是以 r o o t身份执行该程
序,就得将该程序设置成 r o o t 。 当你调用过函数 ioperm() 打开I/O 端口的存取权限后你便可以
拿掉 root 的权限。在你的程序结束之后并不特别要求你以 i o p e r m ( . . . ,0) 这个方式拿掉 I/O 端
口的存取权限; 因为当你的程序执行完毕之后,这个动作会自动完成。
调用函数 setuid() 将目前执行程序的有效用户识别码 (ID) 设定成非 r o o t 的用户,并不影响
其先前以 ioperm() 的方式所取得的 I/O 端口存取权限,但是调用函数fork() 的方式却会有所影
响 (虽然父进程保有存取权限,但是子进程却无法取得存取权限 ) 。
函数 ioperm() 只能让你取得端口地址 0x000 到 0 x 3 ff 的存取权限; 至于较高地址的端口,
你得使用函数 iopl() (该函数让你一次可以存取所有的端口地址) 。将权限等级参数值设为 3 (例
如,i o p l ( 3 ) ) ,以便你的程序能够存取所有的I/O 端口(因此要小心,如果存取到错误的端口地址
将对你的计算机造成各种不可预期的损害。同样地,调用函数 iopl() 你得拥有 root 的权限。
接着,我们来实际地存取 I/O 端口。要从某个端口地址输入一个字节 ( 8位) 的信息,你得调
用函数 inb(port) ,该函数会传回所取得的一个字节的信息。要输出一个字节的信息,你得调
第22章计Linux I/O 端口编程计计241
下载
用函数 o u t b ( v a l u e ,port) ( 请记住参数的次序) 。要从某两
您可能关注的文档
最近下载
- 2025年半导体封装材料行业市场规模预测报告.docx VIP
- 新高考数学一轮复习讲义 第19讲 三角恒等变换(原卷版).doc VIP
- 【中职语文】中职高考语文文学常识.pdf VIP
- 2025广东广州市南沙区教育局直属事业单位引进少年宫主任1人考试参考试题及答案解析.docx VIP
- 2025年度医院党委领导班子民主生活会“五个带头”对照检查材料.docx VIP
- 医疗美容私密项目综合运营方案.pptx
- 医疗美容私密品相设计方法.pptx
- 水库白蚁防治施工方案.docx VIP
- 2025年中考语文总复习第三部分现实之思专题二非连续性文本读写(核心考点突破).pptx VIP
- 2026年民主生活会在带头强化政治忠诚、提高政治能力、敬畏人民、敬畏组织、敬畏法纪等“五个带头”方面对照检查发言材料(4篇文)供参考.docx VIP
原创力文档

文档评论(0)