首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

如何在LINUX下实现硬件的自动检测-ISAPNP设备的自动检测

如何在LINUX下实现硬件的自动检测-ISAPNP设备的自动检测

ISAPNP设备的自动检测3.1 ISAPNP设备简介在每个ISAPNP设备加电启动之后,都会进行一个自动配置过程,它的主要步骤如下:
  • 设置所有的isapnp卡为配置模式
  • 每次隔离一个isapnp卡
  • 指定一个句柄并读取卡的资源数据结构
  • 在所有的卡的资源需求和兼容性被决定之后,使用句柄指派每个卡无冲突的资源
  • 激活所有的isapnp卡并使其离开配置模式          pnp软件使用一系列规范定义的命令标识和配置设备,这些命令由三个8位端口发出(不支持16位的配置端口)。写到这些端口中任何一个的打开系统中pnp逻辑的数据序列对所有卡生效。这个数据序列被称作初始键。
    所有卡响应同样的I/O端口寻址,因此为了一次只寻址一个卡pnp软件需要一种隔离机制。隔离协议使用独一无二的标号一次区别一个卡。在隔离之后,pnp软件对每个卡指定一个句柄,由它对应确定的pnp卡。
    每个卡上支持可读的资源数据结构,用以描述卡上支持的和功能请求的资源。此结构允许每个ISA卡有多个功能,每个功能作为一个逻辑设备来定义。每个逻辑设备提供pnp资源信息,pnp标准寄存器独立配置每个逻辑设备。
    隔离操作之后,pnp软件读取每个卡的资源数据结构。在所有的资源的能力和需求已知之后,系统发出一个资源仲裁来裁决每个卡的资源分配并使用命令寄存器指定每个资源类型。
    在资源被指派之后,I/O冲突检测机制执行。命令集也包括激活/禁止卡的功能的命令集。在配置之后,pnp卡离开配置模式。如果向卡重新发出初始化键值,则可以重新使能配置模式(防止配置信息被故意删除)。
    对于isapnp设备有三个八位端口被用于存取isapnp卡的配置空间。配置空间由一系列8位寄存器组成。这些寄存器被用于发送命令,检测状态,存取资源数据信息和配置pnp硬件。
    Port NameLocationTypeADDRESS0x0279 (Printer status port)Write-onlyWRITE_DATA0x0A79 (Printer status port + 0x0800)Write-onlyREAD_DATARelocatable in range 0x0203 to 0x03FFRead-only
    Table 1.             自动配置端口
  • 地址端口(ADDRESS Port)          在访问pnp寄存器之前,首先写寄存器地址到地址端口,紧接着从READ_DATA端口读或者从WRITE_DATA端口写。地址端口也是初始键的写目标。
    隔离机制的关键是每个卡都有一个独一无二的编号(serialidentifier)。serialidentifier是一个72位独一无二、非0的数字,由两个32位域和一个8位校验位组成。头32位是制造商标识,另32位可以是任何值。只要不存在任何两块编号相同的卡。

    Figure 1. Shifting of Serial Identifier
在隔离过程结束时,当前控制的卡被指定一个句柄,称为Card SelectNumber(CSN),用于以后检索此卡。在卡响应其他的命令之前,此卡必须被指定一个CSN。
CSN是一个8位寄存器,加电使所有卡的此寄存器置为0x0。一旦卡的隔离操作结束,此卡的CSN寄存器被指定一个独一无二的值,以使pnp软件能区别所用的卡。isapnp状态如下:
  • Wait for Key
    在加电重设之后或在响应重设与等待命令之后所有卡进入此状态。在此状态下没有命令被激活直到初始键被检测。          Wait forKey在正常系统操作过程中是pnp卡的缺省状态。在配置和激活操作之后,软件应设置所有的卡到此状态。
  • Sleep
    在此状态,pnp卡等待Wake[CSN]命令。此命令会由CSN值设置一个或多个卡进入Isolation或Config状态。在Wake[CSN]命令的写数据位[7:0]的值与卡的CSN匹配时,卡离开Sleep状态。若Wake[CSN]命令写数据为0,所有的没有指定CSN的卡会进入Isolation状态。若Wake[CSN]命令写数据为非0,Wake[CSN]命令的CSN参数与卡上分派的CSN匹配的卡会进入Config状态。
  • Isolation
    在此状态,pnp卡响应对隔离寄存器的读请求。一旦卡被隔离,独一无二的CSN被指定,CSN作为卡的唯一标识用于在Wake[CSN]命令中选择此卡。一旦写入CSN,卡过渡到Config状态。
  • Config
    在此状态的卡会响应所有的配置命令,包括读卡的资源配置信息以及编程卡的资源选择。
关于ISAPNP设备的详细的硬件信息,您可以参考
3.2Linux系统下ISAPNP设备的自动检测ISA设备的自动检测是指对支持Plug and PlayISA规范1.0的ISA设备的检测,对不支持此规范的ISA设备,此检测过程是无法工作的。这时的硬件检测和配置是完全要根据用户的个人经验进行。在进行下述检测过程之前,对于基于2.2.X内核的Linux系统,需要用户安装包isapnptools。对于2.4.x内核,则用户只需在编译内核时加入        ISA Plug and Playsupport即可。在检测开始之前,必须由用户手动插入模块(modprobe)isapnp.o或者isa-pnp.o(由内核版本决定)。在用户插入上述模块之后,内核会自动生成/proc下对应的描述文件。这些描述文件包括/proc/isapnp,/proc/bus/isapnp/devices,/proc/bus/isapnp/        csn。      
例如,在系统中存在OPL3-SA3类型的声卡时,未挂接设备驱动程序的情况下,/proc/isapnp文件内容如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
Card 1 'YMH0020:OPL3-SA3 Sound Board' PnP version 1.0
  Logical device 0 'YMH0021:Unknown'
    Device is not active
    Active DMA 0,0
    Resources 0
      Priority preferred
      Port 0x220-0x220, align 0xf, size 0x10, 16-bit address decoding
      Port 0x530-0x530, align 0x7, size 0x8, 16-bit address decoding
      Port 0x388-0x388, align 0x7, size 0x8, 16-bit address decoding
      Port 0x330-0x330, align 0x1, size 0x2, 16-bit address decoding
      Port 0x370-0x370, align 0x1, size 0x2, 16-bit address decoding
      IRQ 5 High-Edge
      DMA 0 8-bit byte-count type-A
      DMA 1 8-bit byte-count type-A
      Alternate resources 0:1
        Priority acceptable
        Port 0x240-0x240, align 0xf, size 0x10, 16-bit address decoding
        Port 0xe80-0xe80, align 0x7, size 0x8, 16-bit address decoding
        Port 0x388-0x388, align 0x7, size 0x8, 16-bit address decoding
        Port 0x300-0x300, align 0x1, size 0x2, 16-bit address decoding
        Port 0x100-0xffe, align 0x1, size 0x2, 16-bit address decoding
        IRQ 5,7,2/9,10,11 High-Edge
        DMA 0,1,3 8-bit byte-count type-A
        DMA 0,1,3 8-bit byte-count type-A
      Alternate resources 0:2
        Priority functional
        Port 0x220-0x280, align 0xf, size 0x10, 16-bit address decoding
        Port 0x530-0xf48, align 0x7, size 0x8, 16-bit address decoding
        Port 0x388-0x3f8, align 0x7, size 0x8, 16-bit address decoding
        Port 0x300-0x334, align 0x1, size 0x2, 16-bit address decoding
        Port 0x100-0xffe, align 0x1, size 0x2, 16-bit address decoding
        IRQ 3,5,7,2/9,10,11 High-Edge
        DMA 0,1,3 8-bit byte-count type-A
        DMA 0,1,3 8-bit byte-count type-A
  Logical device 1 'YMH0022:Unknown'
    Compatible device PNPb02f
    Device is not active
    Active DMA 0,0
    Resources 0
      Priority preferred
      Port 0x201-0x201, align 0x0, size 0x1, 16-bit address decoding
      Alternate resources 0:1
        Priority functional
        Port 0x201-0x211, align 0xf, size 0x1, 16-bit address decoding




上述信息的第一行表示此ISA设备的板卡数,其后的YMH0020表示板卡标识。以"LogicalDevice"为行首的小节代表不同的逻辑设备(一块isapnp卡上可以存在多个逻辑设备)。"Device is not active"表示此设备的驱动程序未加载,在设备的驱动程序加载后此处显示" Deviceis active"。在装入设备对应的驱动程序后,其后的字段以"Active"开始表示设备所占用的资源。例如
1
2
3
Active port 0x240,0xe80,0x388,0x300,0x100(占用的端口号)
Active IRQ 5 [0x2] (占用的中断号)
Active DMA 1,3    (占用的DMA)




此文件再往下的部分列出的是此卡可以占用的地址空间,一般是一组资源配置方案,上面的例子就包含三组可选的资源配置方案,分别是缺省方案、可选配置方案1(Alternateresources 0:1)和可选配置方案2(Alternate resources 0:2)。
返回列表