|
 |
À¸Ä¿µ¼À¸ |
|
| |
|
|
|
|
 |
×ÊÁÏËÑË÷ |
|
| |
|
|
|
|
 |
ÈÈÃÅÎÄÕÂ |
|
| |
|
|
|
|
 |
×îÐÂÎÄÕ |
|
| |
|
|
|
| |
| |
|
|
|
[ ×÷Õß: LinuxÁªÃËÊÕ¼¯ ¼ÓÈëʱ¼ä:2006-06-14 00:46:28 À´×Ô:LinuxÁªÃËÊÕ¼¯
] | |
|
£ 9wMLinuxÁªÃË 1.probe È·ÈÏioÉ豸 9wMLinuxÁªÃË 2.attach ÉèÖÃdevice driverÄÚ²¿µÄÊý¾Ý½á¹¹£¬Ê¹ËüÄܹ»¶ÔioÉ豸 9wMLinuxÁªÃË ½øÐвÙ×÷¡£µÇ¼ÇÖжÏ×Ó³ÌÐò¡£ 9wMLinuxÁªÃË ÔÚdevice driverÖеĴ¦Àí¹ý³ÌÓУº 9wMLinuxÁªÃË 1.i/oµØÖ· 9wMLinuxÁªÃË i/oÃüÁîʹÓõĵØÖ·£¬Ê¹ioÉ豸µÄ¿ØÖÆÓ²¼þºÍÊý¾Ý½»»»¡£ 9wMLinuxÁªÃË 2.ÖжϺŠ9wMLinuxÁªÃË ioÉ豸µÄ״̬±ä»¯µÄʱºò£¬Ïòcpu·¢³ö֪ͨ¡£ 9wMLinuxÁªÃË 3.¹²ÓÐÄÚ´æµØÖ· 9wMLinuxÁªÃË ¸ù¾ÝÉ豸µÄ²»Í¬£¬Ê¹ÓÃÒ»²¿·ÖÄÚ´æ¿Õ¼ä½øÐÐcpuºÍÊý¾ÝµÄ½»»»¡£ 9wMLinuxÁªÃË 4.DMAͨµÀ 9wMLinuxÁªÃË ²»ÓÃͨ¹ýcpu×öÖн飬É豸ºÍÄÚ´æÖ±½Ó½»»»Êý¾Ýʱºò²ÉÓõÄͨµÀµÄʶ±ðºÅ¡£ 9wMLinuxÁªÃË cpu¿ÉÒÔÔÚÊý¾Ý´«Ë͵ÄʱºòͬʱִÐÐËüµÄ»úÆ÷ÓïÑÔ¡£ 9wMLinuxÁªÃË Ç°Á½ÖÖÊDZØÐëÓеġ£É豸¸ù¾ÝËûÁ¬½ÓµÄ×ÜÏßÉ豸²»Ò»Ñù£¬´¦Àí¹ý³ÌÒ²¾Í²»Í¬¡£ 9wMLinuxÁªÃË Õâ¸öÔÚºËÐĵÄconfigureÖз´Ó³³öÀ´¡£ 9wMLinuxÁªÃË 9wMLinuxÁªÃË ¸÷ÖÖ×ÜÏßÉ豸µÄdevice driverµÄ³õʼ»¯ 9wMLinuxÁªÃË Çý¶¯³ÌÐòµÄ³õʼ»¯ÔÚmain()³õʼ»¯µÄ¹ý³ÌÖе÷ÓÃconfigure() 9wMLinuxÁªÃË (@i386/i386autoconf.c). 9wMLinuxÁªÃË 9wMLinuxÁªÃË EISA bus 9wMLinuxÁªÃË Á¬½ÓEISA busµÄioÉ豸ÓõÄdevice driverµÄ³õʼ»¯ÔÚeisa_configure() 9wMLinuxÁªÃË (@i386/eisa/eisaconf.c)¡£¸÷¸ödevice driverÔÚmoduleÀï¶Ôstruct eisa_driver 9wMLinuxÁªÃË XXX(@i386/eisa/eisaconf.h)½øÐÐprobe,attachµÈµÄÉèÖã¬×¼±¸ÔÚºêDATA_SET 9wMLinuxÁªÃË (eisadriver_set,XXX)½øÐеǼǡ£ 9wMLinuxÁªÃË eisa_configure()(@i386/eisa/eisaconf.c)¶ÔÁ¬½ÓEISA busµÄÈ«²¿ioÉ豸 9wMLinuxÁªÃË ±êÖ¾ºÍi/oµØÖ·½øÐмì²â¡£Ö®ºó±ãµ÷ÓõǼǵÄprobe×Ó³ÌÐò¡£ÔÚprobe×Ó³ÌÐòÖУ¬Í¨¹ý 9wMLinuxÁªÃË eisa_match_dev()(@i386/eisa/eisaconf.c)¶Ô×ÔÉí¼ì²â£¬²éÕÒioÉ豸£¬¼ì²âi/oÖÐ¶Ï 9wMLinuxÁªÃË ºÅ£¬È»ºó½øÐÐʹÓÃÔ¤¶¨£¬Ö®ºóÓÃeisa_registerdev()(@i386/eisa/eisaconf.c)ÔÚ 9wMLinuxÁªÃË struct eisa_driver XXX¶ÔÕâ¸öÉ豸²Ù×÷£¬×÷Ϊdevice driverµÇ¼Ç¡£È«²¿µÄioÉ豸 9wMLinuxÁªÃË µÄ¿ØÖÆdevice driverµÇ¼ÇÍê±Ïºó£¬eisa_configure()¾Íµ÷ÓÃdevice driverµÄattach 9wMLinuxÁªÃË ×Ó³ÌÐò¡£attach×Ó³ÌÐòÔò½øÐÐÖжϴ¦Àí³ÌÐòµÄµÇ¼ÇºÍdevice driverµÄÊý¾ÝµÄ³õʼ»¯¡£ 9wMLinuxÁªÃË 9wMLinuxÁªÃË ºËÐĵÄconfigureÎļþµÇ¼ÇÁËÒÔϵÄһЩdevice driver: 9wMLinuxÁªÃË -------------------------------------------------------------------------- 9wMLinuxÁªÃË device device driverµÄÇ鱨 source ²Î¿¼ 9wMLinuxÁªÃË -------------------------------------------------------------------------- 9wMLinuxÁªÃË mainboard_drv i386/eisa/eisaconf.c 9wMLinuxÁªÃË ahb ahb_eisa_driver i386/eisa/aha1742.c scsi adapt 9wMLinuxÁªÃË ahc ahc_eisa_driver i386/eisa/aic7770.c scsi adapt 9wMLinuxÁªÃË bt bt_eisa_driver i386/eisa/bt74x.c scsi adapt 9wMLinuxÁªÃË ep ep_eisa_driver i386/eisa/3c5x9.c network interface 9wMLinuxÁªÃË fea pdq_eisa_driver i386/eisa/if_fea.c network interface 9wMLinuxÁªÃË vx vx_eisa_driver i386/eida/if_vx_eisa.c network interface 9wMLinuxÁªÃË -------------------------------------------------------------------------- 9wMLinuxÁªÃË 9wMLinuxÁªÃË PCI bus 9wMLinuxÁªÃË Á¬½Ópci busµÄÉ豸µÄ³õʼ»¯ÔÚpci_configure()(@pci/pci.c)½øÐС£¸÷¸ö 9wMLinuxÁªÃË device driverÔÚmoduleÄÚµÄstruct pci_device XXX(@pci/pcivar.h)ÉèÖÃprobeºÍ 9wMLinuxÁªÃË attach£¬ÔÚͨ¹ýºêDATA_SET(pcidevice_est,XXX)½øÐеǼǡ£ 9wMLinuxÁªÃË DATA_SET(pcibus_set,i386pci)(@i386/isa/pcibus.c)µÇ¼ÇµÄ×Ó³ÌÐò¿ÉÒÔ 9wMLinuxÁªÃË µÃµ½ÓйØpci busµÄһЩÐÅÏ¢¡£Ö®ºóºÍeisa bus´¦Àí¹ý³ÌÒ»Ñù½øÐи÷ÖÖ¸÷ÑùµÄµ÷Óᣠ9wMLinuxÁªÃË ºËÐĵÄconfigureÎļþµÇ¼ÇÁËÒÔϵÄһЩdevice driver: 9wMLinuxÁªÃË -------------------------------------------------------------------------- 9wMLinuxÁªÃË device device driverµÄÇ鱨 source ²Î¿¼ 9wMLinuxÁªÃË -------------------------------------------------------------------------- 9wMLinuxÁªÃË ahc ahc_pci_driver pci/aic7870.c scsi adapt 9wMLinuxÁªÃË bt bt_pci_driver pci/bt9xx.c scsi adapt 9wMLinuxÁªÃË ncr ncr_device pci/ncr.c scsi adapt 9wMLinuxÁªÃË amd trmamd_device pci/tek390.c scsi adapt 9wMLinuxÁªÃË cy cy_device pci/cy_pci.c serial port 9wMLinuxÁªÃË meteor met_device pci/meteor.c meteorͨµÀ 9wMLinuxÁªÃË stl stlpcidriver i386/isa/stallion.c serial port 9wMLinuxÁªÃË wdc wdc_pci_driver pci/wdc_p.c ide control 9wMLinuxÁªÃË de dedevice pci/if_de.c network interface 9wMLinuxÁªÃË ed ed_pci_driver pci/if_ed_p.c network interface 9wMLinuxÁªÃË fpa pfadevice pci/if_pfa.c network interface 9wMLinuxÁªÃË fxp fxp_device pci/if_pxp.c network interface 9wMLinuxÁªÃË lnc lnc_pci_driver pci/if_lnc_p.c network interface 9wMLinuxÁªÃË sr sr_pci_driver pci/if_sr_p.c network interface 9wMLinuxÁªÃË vx vxdevice pci/if_vx_pci.c network interface 9wMLinuxÁªÃË ------------------------------------------------------------------------- 9wMLinuxÁªÃË 9wMLinuxÁªÃË ISA bus 9wMLinuxÁªÃË Á¬½ÓISA busµÄioÉ豸µÄdevice driverµÄ³õʼ»¯ÔÚisa_configure()(@i386/ 9wMLinuxÁªÃË isa/isa.c)½øÐС£ºÍEISA,PCIºÜ´óµÄÒ»¸öÇø±ð¾ÍÊÇ£¬ÔÚºËÐĵÄÅäÖÃÎļþÖУ¬ÒªÖ¸¶¨Ëù 9wMLinuxÁªÃË ÓеÄioµØÖ·µÈ¡£ 9wMLinuxÁªÃË configureÎļþÖУ¬ÓÐÏóÈçϵļǼ 9wMLinuxÁªÃË controller ¿ØÖÆÉ豸Ãû at isa?... 9wMLinuxÁªÃË device deviceÃû at isa?... 9wMLinuxÁªÃË ÕâЩÄÚÈÝÔÚ±àÒëºËÐĵÄĿ¼ÏÂ×÷Ϊioconf.cµÄstruct isa_device 9wMLinuxÁªÃË isa_devtab_XXX[]µÄ³õʼֵÓÉconfigÃüÁîд½øÈ¥¡£ÔÚstruct isa_device(@i386/isa 9wMLinuxÁªÃË /isa_device.h)µÄÉÏ£¬Æä´ÎµÄ³ÉÔ±±äÁ¿ÓÉconfigureÎļþµÄ¼Ç¼ÄÚÈݽøÐÐÉ趨¡£µ«ÊÇ 9wMLinuxÁªÃË £¬¡°Ãû×Ö¡±ÊÇ¿ØÖÆÉ豸Ãû/deviceÃûµÄÊý×Ö³ýÍâµÄ²¿·Ö¡£ 9wMLinuxÁªÃË ------------------------------------------------------------------------- 9wMLinuxÁªÃË memberÃû configureµÄ¼ÇÊöÄÚÈÝ 9wMLinuxÁªÃË ------------------------------------------------------------------------- 9wMLinuxÁªÃË id_driver Ãû×Ödrvier 9wMLinuxÁªÃË id_iobase prot I/O address 9wMLinuxÁªÃË id_irq irqºÅ 9wMLinuxÁªÃË id_drq drq DMAͨµÀºÅ 9wMLinuxÁªÃË id_maddr iomem¹²ÓÐmemory address 9wMLinuxÁªÃË id_msize iosiz¹²ÓÐmemory³¤¶È 9wMLinuxÁªÃË id_intr vector device driverµÄÖжϴ¦Àí³ÌÐòÃû 9wMLinuxÁªÃË id_unit Ãû×ֵĺóµÄÊý×Ö(?) 9wMLinuxÁªÃË id_flags flags 9wMLinuxÁªÃË ------------------------------------------------------------------------- 9wMLinuxÁªÃË 9wMLinuxÁªÃË µ«ÊÇ,ºÍ¿ØÖÆÉ豸/deviceÃûÓйصÄһЩ¶«Î÷Èçbio,net,tty³öÏֵij¡ºÏ£¬Õâ 9wMLinuxÁªÃË Ð©Ò»°ã³ÉΪisa_devtab_bio[],isa_devtab_net[],isa_devtab_tty[]Êý×éµÄ³õʼֵ¡£ 9wMLinuxÁªÃË Ã»ÓеÄÇé¿ö£¬Ôò³ÉΪisa_tab_null[]µÄ³õʼֵ¡£»¹ÓÐÒ»¸ö¾ÍÊÇÃû×Ödriver£¬ËüÊǸ÷¸ö 9wMLinuxÁªÃË device driverµÄmoduleÄÚ²¿µÄstruct isa_driver(@i386/isa/isa_device.h)Ò»¸ö¶« 9wMLinuxÁªÃË Î÷¡£¶Ôisa busÉ豸µÄdevice driver£¬Õâ¸öÊÇÒ»¸ö¹Ì¶¨Öµ¡£ 9wMLinuxÁªÃË ÏóÕâÑùµÄ¼Ç¼£º 9wMLinuxÁªÃË ------------------------------------------------------------ 9wMLinuxÁªÃË disk deviceÃû at ¿ØÖÆÉ豸Ãû driver Êý×Ö 9wMLinuxÁªÃË tape deviceÃû at ¿ØÖÆÉ豸Ãû driver Êý×Ö 9wMLinuxÁªÃË ------------------------------------------------------------ 9wMLinuxÁªÃË Ã¿¸öÊý×Ö³ýÍâ¿ØÖÆÉ豸Ãû(wdc»òÕßfdc)£¬×ܽáÆðÀ´¾ÍÊÇд½øÒ»¸ö½Ð×ö 9wMLinuxÁªÃË isa_biotab_¿ØÖÆÉ豸Ãû[]µÄÊý×éµÄij¸öÔªËØµÄ³õʼÉ趨ֵ¡£µ«¶Ôunit³ÉÔ±ÌîÈëÊý×Ö 9wMLinuxÁªÃË Í⣬ÆäËûµÄÒ²¾ÍºÍisa_devtab_bio[]µÄÄÚÈÝÒ»Ñù¡£ 9wMLinuxÁªÃË isa_configure()ÒÀÕÕisa_devtab_bio[],isa_devtab_net[], 9wMLinuxÁªÃË isa_devtab_tty[]µÄÉ趨ֵµ÷ÓÃprobe×Ó³ÌÐò¶ÔÉ豸µÄÓÐÎÞ½øÐÐÈ·ÈÏ¡£Óеϰ¾Í¼ÌÐø 9wMLinuxÁªÃË µ÷ÓÃattach×Ó³ÌÐò¡£ 9wMLinuxÁªÃË probe×Ó³ÌÐò¶ÔÉ豸½øÐÐÈ·ÈÏ£¬²»Í¬µÄprobe×Ó³ÌÐòÒ²ÓпÉÄܶÔͬÑùµÄioµØÖ· 9wMLinuxÁªÃË ½øÐвÙ×÷¡£ËùÒÔΪÁË·ÀÖ¹Õâ¸öÎÊÌ⣬isa_configure()¶ÔÒѾȷÈϹýµÄµÄioµØÖ·²»ÔÙ 9wMLinuxÁªÃË ¸ø±ðµÄprobe½øÐж¯×÷¡£ 9wMLinuxÁªÃË Í¬Ñù£¬´íÈϵĿÉÄÜÐÔÒ²Óеġ£±ØÒªµÄʱºòûÁ¬½ÓµÄÉ豸µÄprobeÒª½ûֹʹÓ㬠9wMLinuxÁªÃË £¨ÔÚbootµÄ²ÎÊýµÄʱºò£©¡£
LinuxÁªÃËÊÕ¼¯ÕûÀí ,תÌùÇë±êÃ÷ÔʼÁ´½Ó,ÈçÓÐÈκÎÒÉÎÊ»¶ÓÀ´±¾Õ¾LinuxÂÛ̳ÌÖÂÛ |
|
|
|
|
|