- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
下载
下载
第22章 Linux I/O 端口编程
本章介绍有关 Linux I/O 端口编程的内容,如在 C语言下使用 I /O端口、硬件中断与 IM 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 的方式引用就够了,不需要附加任何函数库。
因为 gcc以及 egcs 的限制,你在编译任何使用到这些子过程的源代码时必须打开最优化选
项 (gcc -O1 或较高层次的 ) ,或者在做 #include asm/io.h 这个动作前使用 #define extern 将
extern 定义成空白。
为了除错的目的,你编译时可以使用 gcc -g -O ( 至少现在的 gcc 版本是这样 ) ,但是最优化
之后有时可能会让调试器的行为变得有点奇怪。如果这个状况对你而言是个困扰,你可以将所
有使用到 I /O端口的子过程集中放在一个文件里,并只在编译该文件时打开最优化选项。
在你存取任何 I/O 端口之前,你必须让程序有如此做的权限。要完成这个目的,你可以在
程序一开始的地方 (但是,要在任何 I/O 端口存取动作之前 ) 调用 ioperm()这个函数 (该函数在
文件 uni st d. h中,并且被定义在 内核中 ) 。 使用语法是 i operm(f rom,nu m,t urn_on) ,其中
from 是第一个允许存取的 I/O 端口地址, num是接着连续存取 I/O 端口地址的数目。 例如,
ioperm(0x300 ,5,1) 的意思就是说允许存取端口 0x300 到 0x304 (一共五个端口地址 )。
而最后一个参数是一个布尔代数值,用来指定是否给予程序存取 I/O 端口的权限 (true (1))
或者除去存取的权限 (false (0)) 。 你可以多次调用函数 ioperm() 以便使用多个不连续的端口地
址。
你的程序必须拥有 root 权限才能调用函数 ioperm() ; 所以你如果不是以 root 身份执行该程
序,就得将该程序设置成 root 。 当你调用过函数 ioperm() 打开 I/O 端口的存取权限后你便可以
拿掉 root 的权限。在你的程序结束之后并不特别要求你以 ioperm( ...,0) 这个方式拿掉 I/O 端
口的存取权限 ; 因为当你的程序执行完毕之后,这个动作会自动完成。
调用函数 setuid() 将目前执行程序的有效用户识别码 (ID) 设定成非 root的用户,并不影响
其先前以 ioperm() 的方式所取得的 I/O 端口存取权限,但是调用函数 fork() 的方式却会有所影
响 (虽然父进程保有存取权限,但是子进程却无法取得存取权限 ) 。
函数 ioperm() 只能让你取得端口地址 0x000 到 0x3ff 的存取权限 ; 至于较高地址的端口,
你得使用函数 iopl() ( 该函数让你一次可以存取所有的端口地址 ) 。将权限等级参数值设为 3 (例
如, iopl (3)) ,以便你的程序能够存取所有的 I/O 端口 (因此要小心,如果存取到错误的端口地址
将对你的计算机造成各种不可预期的损害。同样地,调用函数 iopl() 你
您可能关注的文档
最近下载
- 学前儿童社会教育活动指导-国家开放大学电大易考通考试题目答案.pdf VIP
- 电动机维护保养表.pdf VIP
- 2026年日历表一页打印.pdf VIP
- 2025年内蒙古自治区高职单招职业技能考试模拟试题及答案解析.docx VIP
- 语文八年级上册古诗文知识点归纳整理总汇.doc VIP
- 新与心,2025大食饮行业消费者心智及决策链路研究白皮书.docx VIP
- 医学科研论文写作指南(临床研究版).docx VIP
- 断路器出厂检验报告模板.docx VIP
- Boss Roland逻兰GX-100 吉他效果处理器[中文] GX-100 参数指南 说明书用户手册.pdf
- 国家开放大学,期末考试参考资料学前儿童社会教育活动指导+学前儿童社会教育.docx VIP
原创力文档


文档评论(0)