加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Linux > 正文

linux I/O 端口分配

发布时间:2020-12-13 23:12:23 所属栏目:Linux 来源:网络整理
导读:如同你可能希望的,你不应当离开并开始抨击 I/O 端口而没有首先确认你对这些端口有 唯一的权限. 内核提供了一个注册接口以允许你的驱动来声明它需要的端口. 这个接口中 的核心的函数是 request_region: ? #include linux/ioport.h struct resource *request_r

如同你可能希望的,你不应当离开并开始抨击 I/O 端口而没有首先确认你对这些端口有 唯一的权限. 内核提供了一个注册接口以允许你的驱动来声明它需要的端口. 这个接口中 的核心的函数是 request_region:

?

#include <linux/ioport.h>

struct resource *request_region(unsigned long first,unsigned long n,const char *name);

?

这个函数告诉内核,你要使用 n 个端口,从 first 开始. name 参数应当是你的设备的 名子. 如果分配成功返回值是非 NULL. 如果你从 request_region 得到 NULL,你将无法 使用需要的端口.

?

所有的的端口分配显示在 /proc/ioports 中. 如果你不能分配一个需要的端口组,这是 地方来看看谁先到那里了.

?

当你用完一组 I/O 端口(在模块卸载时,也许),应当返回它们给系统,使用: void release_region(unsigned long start,unsigned long n); 还有一个函数以允许你的驱动来检查是否一个给定的 I/O 端口组可用:

int check_region(unsigned long first,unsigned long n);

?

这里,如果给定的端口不可用,返回值是一个负错误码. 这个函数是不推荐的,因为它的 返回值不保证是否一个分配会成功; 检查和后来的分配不是一个原子的操作. 我们列在这 里因为几个驱动仍然在使用它,但是你调用一直使用 request_region,它进行要求的加 锁来保证分配以一个安全的原子的方式完成.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读