科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道Linux操作系统对I/O端口资源的管理 (2)

Linux操作系统对I/O端口资源的管理 (2)

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

start和end:表示资源的起始物理地址和终止物理地址。它们确定了资源的范围,也即是一个闭区间[start,end]。

作者:linuxaid.com  来源:linuxaid.com  2007年10月21日

关键字: 管理 端口 I/O Linux

  • 评论
  • 分享微博
  • 分享邮件

各成员的含义如下:

1. name指针:指向此资源的名称。

2. start和end:表示资源的起始物理地址和终止物理地址。它们确定了资源的范围,也即是一个闭区间[start,end]。

3. flags:描述此资源属性的标志(见下面)。

4. 指针parent、sibling和child:分别为指向父亲、兄弟和子资源的指针。

属性flags是一个unsigned long类型的32位标志值,用以描述资源的属性。比如:资源的类型、是否只读、是否可缓存,以及是否已被占用等。下面是一部分常用属性标志位的定义(ioport.h):

  
  
  /*
  * IO resources have these defined flags.
  */
  #define IORESOURCE_BITS 0x000000ff /* Bus-specific bits */
  
  #define IORESOURCE_IO 0x00000100 /* Resource type */
  #define IORESOURCE_MEM 0x00000200
  #define IORESOURCE_IRQ 0x00000400
  #define IORESOURCE_DMA 0x00000800
  
  #define IORESOURCE_PREFETCH 0x00001000 /* No side effects */
  #define IORESOURCE_READONLY 0x00002000
  #define IORESOURCE_CACHEABLE 0x00004000
  #define IORESOURCE_RANGELENGTH 0x00008000
  #define IORESOURCE_SHADOWABLE 0x00010000
  #define IORESOURCE_BUS_HAS_VGA 0x00080000
  
  #define IORESOURCE_UNSET 0x20000000
  #define IORESOURCE_AUTO 0x40000000
  #define IORESOURCE_BUSY 0x80000000
  /* Driver has marked this resource busy */
  

指针parent、sibling和child的设置是为了以一种树的形式来管理各种I/O资源。

Linux对I/O资源的管理

Linux是以一种倒置的树形结构来管理每一类I/O资源(如:I/O端口、外设内存、DMA和IRQ)的。每一类I/O资源都对应有一颗倒置的资源树,树中的每一个节点都是一个resource结构,而树的根结点root则描述了该类资源的整个资源空间。

基于上述这个思想,Linux在kernel/Resource.c文件中实现了对资源的申请、释放及查找等操作。

    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章