如何在LINUX下实现硬件的自动检测 - PCMCIA设备自动检测
- UID
- 1066743
|
如何在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主机控制器的主要类型为
- Databook TCIC-2
- Intel i82365SL-compatible
当前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包。 |
|
|
|
|
|