## 1 申请I/O 端⼝:
在驱动还没独占设备之前,不应对端⼝进⾏操作。内核提供了⼀个注册接⼝,以允许驱动声明其需要的端⼝:
1
2
3
4/* request_region告诉内核:要使⽤first开始的n个端⼝。参数name为设备名。
如果分配成功返回值是⾮NULL;否则无法使用需要的端口(/proc/ioports包含了系统当前所有端口的分配信息,
若request_region分配失败时,可以查看该文件,看谁先用了你要的端口) */
struct resource *request_region(unsigned long first, unsigned long n, const char *name);1
2
3
4
5
6
7
8
9
10/* inb/outb:读/写字节端⼝(8位宽)。有些体系将port参数定义为unsigned long;
⽽有些平台则将它定义为unsigned short。inb的返回类型也是依赖体系的 */
unsigned inb(unsigned port);
void outb(unsigned char byte, unsigned port);
/* inw/outw:读/写字端⼝(16位宽) */
unsigned inw(unsigned port);
void outw(unsigned short word, unsigned port);
/* inl/outl:读/写32位端⼝。longword也是依赖体系的,有的体系为unsigned long;⽽有的为unsigned int */
unsigned inl(unsigned port);
void outl(unsigned longword, unsigned port);1
2
3/* ⽤完I/O端⼝后(可能在模块卸载时),应当调⽤release_region将I/O端⼝返还给系统。
参数start和n应与之前传递给request_region⼀致 */
void release_region(unsigned long start, unsigned long n);
Linux驱动开发杂记(0x07) - I/O端口
-------------本文结束感谢您的阅读-------------
本文标题:Linux驱动开发杂记(0x07) - I/O端口
文章作者:Vinx
发布时间:2018年11月12日 - 10:06
最后更新:2023年09月18日 - 11:12
原始链接:https://blog.vinkvin.com/post/7/
许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。