Board logo

标题: 如何在LINUX下实现硬件的自动检测 - PCMCIA设备自动检测 [打印本页]

作者: look_w    时间: 2018-4-15 19:56     标题: 如何在LINUX下实现硬件的自动检测 - PCMCIA设备自动检测

因为PCMCIA设备主要用于笔记本电脑,所以在您使用普通的台式电脑时,您无需安装包pcmcia-cs。在笔记本电脑上安装了pcmcia-cs包之后,为了实现PCMCIA设备的自动检测,您可以先查找系统中是否存在/proc/bus/pccard目录,如果不存在此目录则尝试插入pcmcia_core。
在成功插入了此模块之后,/proc/bus/pccard目录就生成了。此后,您就可以检查pci的系统设备,找到系统桥接器,根据桥接器类型获得您需要插入的桥接器模块。例如,在我的系统上,桥接器为TexasInstrumentsPCI1251,则它的桥接器为i82365。在Linux系统下,适用的桥接器模块一般只有i82365或tcic两种。若无法获得准确的桥接器驱动程序,您可以尝试着插入两种模块,直到成功时为止。
然后为了能够实时的配置您的pccard,您需要启动服务pcmcia,        
/etc/rc.d/init.d/pcmcia start
并由此服务启动程序cardmgr。cardmgr监视pcmcia槽上,卡的插入和弹出操作。在卡插入之后,cardmgr查询卡的配置数据库。若发现卡能够被标识,相应的设备驱动程序则会自动加载。在弹出卡之后,卡的驱动程序会自动的关闭并卸载。当卡插入之后,每个槽上的卡信息和设备信息都被记录在/var/lib/pcmcia/stab文件中。
7.1 /proc/bus/pccard目录结构/proc/bus/pccard/{irq,ioport,memory}        
包含资源分配表      
/proc/bus/pccard/drivers        
这会列出所有当前加载的pcmcia客户驱动程序,包括静态连接到内核的模块      
/proc/bus/pccard/*/info        
对于每个socket,描述socket主控制器和它的性能,*为对应的socket编号      
/proc/bus/pccard/*/exca        
Intel i82365sl兼容的寄存器集的ExCA控制器的转储      
/proc/bus/pccard/*/{pci,cardbus}        
对于cardbus桥,桥的pci配置空间的转储和桥的cardbus配置寄存器的转储      
7.2 pcmcia配置文件/etc/pcmcia/config实际上是一个针对pcmcia设备的配置数据库,它的内容主要是指定卡驱动程序加载时所需的模块。例如        
device "serial_cs"
class "serial" module "misc/serial", "serial_cs"
表示在插入serial_cs时,需要先插入模块misc/serial和serial_cs。      
pcmcia主机控制器的主要类型为
当前pcmcia设备包括5种IO设备类型包括network,SCSI,cdrom,fixed disk,和serial以及2种内存设备类型memory和FTL。对于每一种类型,在/etc/pcmcia/目录下存在两个配置脚本,例如,对于scsi设备都存在一个主配置脚本(/etc/pcmcia/scsi)和选项配置脚本(/etc/pcmcia/scsi.opts)。
7.3pcmcia启动脚本(/etc/sysconfig/pcmcia)PCMCIA
为yes表示启动PCMCIA支持      
PCIC
标识PCCard接口控制驱动模块。一般有两种类型:tcic或i82365,缺省是i82365。      
PCIC_OPTS
PCIC模块的选项      
例如:PCIC_OPTS="irq_list=5,9,10"、"do_scan=0"完全禁止中断检测
CORE_OPTS
pcmcia_core模块的选项。见man pcmcia_core。      
CARDMGR_OPTS
cardmgr守护程序的选项。见man cardmgr。      
SCHEME
设置pccard的配置方案。      
cardmgr处理/etc/pcmcia/config.opts中的io端口范围。但在极少的情况下,从设备读可以阻碍系统功能而导致死锁。在CORE_OPTS中加入probe_io=0,可以禁止此操作。使用i82365或tcic驱动程序时,irq_list选项可用于限制测试的中断。cs_irq用于明确设置中断以检测卡状态改变。若不能使用中断,可以使用poll_interval=100(100表示轮询间隔为1秒)设置轮询。这些选项应置入/etc/rc.d/rc.pcmcia或/etc/sysconfig/pcmcia的"PCIC_OPTS="行。
7.4 cardmgr和cardctl的使用cardmgr基于/etc/pcmcia/config中的信息来配置卡。cardmgr为每个socket记录设备信息,此信息存于/var/lib/pcmcia/stab中。例如:
1
2
3
4
5
Socket 0: Adaptec APA-1460 SlimSCSI
    0       scsi    aha152x_cs      0       sda     8       0
    0       scsi    aha152x_cs      1       scd0    11      0
Socket 1: Serial or Modem Card
    1       serial  serial_cs       0       ttyS1   5       65




第一个域表示socket,第二个是设备类型,第三个是设备名,第四个用于关联多个设备和一个驱动程序时的设备编号。第五个是设备名。最后两个域标是设备的主、次设备号。        
cardctl可用于监视和控制当前pcmcia socket的状态。        
cardctl config,显示socket配置,包括电源,中断,I/O配置。例如:      
1
2
3
4
5
6
7
8
9
10
11
12
Socket 0:
      not configured
    Socket 1:
      Vcc = 5.0, Vpp1 = 0.0, Vpp2 = 0.0
      Card type is memory and I/O
      IRQ 3 is dynamic shared, level mode, enabled
      Speaker output is enabled
      Function 0:
        Config register base = 0x0800
          Option = 0x63, status = 0x08
        I/O window 1: 0x0280 to 0x02bf, auto sized
        I/O window 2: 0x02f8 to 0x02ff, 8 bit




cardctlindent,得到卡的标识信息,包括产品标识信息,制造商标识代码,功能标识代码:
1
2
3
4
5
6
Socket 0:
      no product info available
    Socket 1:
      product info: "LINKSYS", "PCMLM336", "A", "0040052D6400"
      manfid: 0x0143, 0xc0ab
      function: 0 (multifunction)




cardctl suspend和cardctlresume用于无需卸载相关驱动程序的情况下关闭卡。cardctlreset用于尝试重设和重新配置卡。cardctl insert和cardctleject用于仿真卡的物理的插入和删除动作。推荐在退出卡之前,执行cardctleject命令。/etc/rc.d/rc.pcmcia stop会卸载所有的pcmcia包。




欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/) Powered by Discuz! 7.0.0