linux I/O 端口分配
如同你可能希望的,你不应当离开并开始抨击 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,它进行要求的加 锁来保证分配以一个安全的原子的方式完成. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |