×
嵌入式开发 > 详情

Linux下即插即用设备的安装

发布时间:2020-06-18 发布时间:
|
即插即用,在Linux底下?不好办,你还是换老的非即插即用设备吧。这是我初次接触Linux时,那些Linux高手们告诉我的。可是,我觉得总该有办法的。经过不懈的努力,我发现了两种方法。一是先从DOS启动,初始化设备后,再用loadlin加载到Linux中。但这不是我所梦寐以求的,因为每次需要大量时间来启动。我继续不停的寻找,终于有一天,我找到了我需要的东西,一个称为isapnptools的应用程序。

现在,大多数发行套件中都有isapnptools。如果你的套件中有,安装它即可。如果你的发行套件中没有它,解压后把isapnp和pnpdump拷贝到目录/sbin中即可。

下面就是实战阶段了。需要准备的就是把你所有要装的即插即用设备全部装好,以ROOT身份登陆。然后运行以下命令/sbin/pnpdump>/etc/isapnp.conf,这会把你机器上所有的即插即用设备信息写入文件/etc/isapnp.conf中,下面是我的机器上的/etc/isapnp.conf文件的一部分:

#$Id:plugnplay.html,v1.1.1.11998/12/2604:41:14jackExp$

#Thisisfreesoftware,seethesourcesfordetails.

#ThissoftwarehasNOWARRANTY,useatyourOWNRISK

#

#Fordetailsofthisfileformat,seeisapnp.conf(5)

#

#Forlatestinformationonisapnpandpnpdumpsee:

#/zixunimg/eepwimg/www.roestock.demon.co.uk/isapnptools/

#

#Compilerflags:-DREALTIME-DNEEDSETSCHEDULER

#

#Tryingportaddress0203

#Board1hasserialidentifierc5c07f530501220507

#Board2hasserialidentifier5a808600012000a865

#Board3hasserialidentifiere84646464690307256


#(DEBUG)

(READPORT0x0203)

(ISOLATEPRESERVE)

(IDENTIFY*)

(VERBOSITY2)

(CONFLICT(IOFATAL)(IRQFATAL)(DMAFATAL)(MEMFATAL))#orWARNING


#Card1:(serialidentifierc5c07f530501220507)

#VendorIdAXE2201,SerialNumber3229569797,checksum0xC5.

#Version1.0,Vendorversion0.0

#ANSIstring-->EthernetPnPISACard/S--

#

#LogicaldeviceidAXE2201

#DevicesupportI/Orangecheckregister

#

#Edittheentriesbelowtouncommentouttheconfigurationrequired.

#Notethatonlythefirstvalueofanyrangeisgiven,thismaybe

#changedifrequired

#Don'tforgettouncommenttheactivate(ACTY)whenhappy


(CONFIGUREAXE2201/3229569797(LD0

#CompatibledeviceidPNP80d6

#Logicaldevicedecodes10bitIOaddresslines

#MinimumIObaseaddress0x0240

#MaximumIObaseaddress0x0380

#IObasealignment32bytes

#NumberofIOaddressesrequired:32

#(IO0(SIZE32)(BASE0x0240))

#IRQ3,5,9,10,11,12or15.

#Hightrue,edgesensitiveinterrupt

#(INT0(IRQ3(MODE+E)))

#(ACTY)

))

#Endtag...Checksum0x00(OK)

#略去声卡部分

#略去modem卡部分


#ReturnsallcardstotheWaitforKeystate

(WAITFORKEY)


我的系统中共有三个即插即用设备,分别是NE2000兼容网卡,YamahaOPL~SA2声卡和一个USR56Kmodem。由于文件太长,我略去了声卡和modem部分。

接下来就是为每个设备分配所需资源。有许多方法可以实现。第一种,也是最简单的方法就是,如果你在同一台机器上也装了WIN95或WIN98,通过控制面板的系统的属性页,可以看到在WINDOWS系统下各即插即用设备的资源,记下用到Linux即可。如果你的机器中没有其它的操作系统,采用第二种方法。即手动分配资源,只要各设备资源不发生冲突就行。手动分配资源以前,最好先看一下已经使用的中断列表、I/O列列表,它们分别位于/proc/interrupts、/proc/ioports、/proc/dma。一旦你确定了各设备使用的资源,就可以分配了。

选择分配给每个设备的资源非常简单。你只要去掉你的设备所需资源前的注释号即可。描述资源的行很容易找到,因为它们总是以INT,IO或DMA开头。在这些行之前是你所能使用资源的描述。你可以选一组,因为象下面这样的一行说明它们有优先权的区别。

#Startdependentfunctions:prioritypreferred

在去掉所需资源的注释号后,你还必须去掉(ACTY)行上的注释号来告诉ISAPNP激活该设备。

下面是我的/etc/isapnp.conf经过编辑并去掉注释行后的样本:

READPORT0x0203)

(ISOLATEPRESERVE)

(IDENTIFY*)

(VERBOSITY2)

(CONFLICT(IOFATAL)(IRQFATAL)(DMAFATAL)(MEMFATAL))#orWARNING


(CONFIGUREAXE2201/3229569797(LD0

(IO0(SIZE32)(BASE0x0240))

(INT0(IRQ3(MODE+E)))

(ACTY)

))


(CONFIGUREYMH0020/2156265473(LD0

(IO0(SIZE16)(BASE0x0220))

(IO1(SIZE8)(BASE0x0530))

(IO2(SIZE4)(BASE0x0388))

(IO3(SIZE2)(BASE0x0330))

(IO4(SIZE2)(BASE0x0370))

(INT0(IRQ5(MODE+E)))

(DMA0(CHANNEL0))

(DMA1(CHANNEL1))

(ACTY)

))


(CONFIGUREYMH0020/2156265473(LD1

(IO0(SIZE1)(BASE0x0201))

(NAMEYMH0020/2156265473[1]{OPL3-SA2SoundChip})

(ACTY)

))


(CONFIGUREUSR3090/1179010630(LD0

(IO0(SIZE8)(BASE0x02f8))

(INT0(IRQ3(MODE+E)))

(NAMEUSR3090/1179010630[0]{U.S.Robotics56KVoiceINT})

(ACTY)

))


(WAITFORKEY)


如果喜欢,留着其余的注释也行。下一步就是测试你的配置是否正确。使用以下命令/sbin/isapnp/etc/isapnp.conf,屏幕会出现一些信息,样本如下:

Board1hasIdentityc5c07f530501220507:AXE2201

SerialNo3229569797[checksumc5]

Board2hasIdentity5a808600012000a865:YMH0020

SerialNo2156265473[checksum5a]

Board3hasIdentitye84646464690307256:USR3090

SerialNo1179010630[checksume8]

如果你的配置文件有问题或发生资源冲突,它就会告诉你。发生问题不要着急,从头慢慢查找原因,一步一步再来。如果一切平安无事,你还必须保证你的即插即用设备在启动时能进行认证。不幸的是许多发行套件的初始脚本执行方式不同。如果你的发行套件中有isapnptools的话,可能你已经有正确的初始脚本。如果没有,仿照/etc/rc.d/init.d中的格式,自己写一个。

最后一步是让你的内核支持即插即用设备。目前,内核支持isapnp设置的即插即用设备的唯一方法是把它们编译为模块。所以,对每一个被认为是即插即用的设备,确信把它编译为内核支持的模块。

好了,不用再为你的新的设备不能被Linux接受而烦恼了,去尽情享受Linux带给你的乐趣吧。


『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
现场总线系统的功能安全评价