Linux¤U¥H¤ÓÊI¥dªº¦w装¤Î°t¸m
±z¬O²Ä
199ÓÂsÄýªÌ
Linux¾Þ§@¨t统¥H¨ä独¦³ªº开©ñ©Ê¡B稳©w©Ê¡B°ª®Ä²vµ¥¯S点¡A¨ü¨ì¶V来¶V¦h¦³识¤§¤hªº«C睐¡C随着IT产业¥¨头纷纷«Å¥¬对Linuxªº¤ä«ù¡ALinux¥¿¦b¨³³t扩®i¨ä应¥Î¥«场¡A¯S别¬OªA务¾¹¥«场¡C¦b标ã¤W¡ALinuxÉOPOSIX1003.1Ý®e¡A¦ý¥¦¨ã¦³¤ñ¥H¦íªºUNIX¨t统§ó¦X²zªº内®Ö结ÌÛ¡C¥Ñ¤_¥¦ªº开©ñ©Ê¡A¦UÏú³Q¤H们广ªx应¥ÎªºÊI络协议³£¦b该¨t统¤¤±o¨ì¤F实现¡C¥Ø«e¤H们©Ò¨Ï¥ÎªºLinux¨t统¤@¯ë¬O«ü¥ÑLinux®Ö¤ß¡B¥~壳(SHELL)¤Î¥~围应¥Î软¥óÌÛ¦¨ªº发¦æª©¥»¡CLinux发¦æª©¥»¬O¤£¦Pªº¤½¥q©Î组织将Linux®Ö¤ß¡B¥~壳¡B¦w装¤u¨ã¡B应¥Î软¥ó¦³®Ä®¹绑°_来ªº结ªG¡A©Ò¥HÏú类Ác¦h¡A¦U¦³¦UªºÉ¬¯Ê点¡C¦ý´N¨ä总Ê^¦Ó¨¥¡A这¨Ç发¦æª©¥»¨ã¦³对尽¥i¯à¦hªºÊI¥dªº¤ä«ù¡C¥»¤å仅´NRedHat这个¯S©w发¦æª©¥»¤UªºÊI¥dªº选择¡B¦w装¡B°t¸m进¦æ讨论¡A§Æ±æ对¤_¨ä¥L发¦æª©¥»ªº¦P样问题¦³点É鉴§@¥Î¡C
¡@¡@´N¶HUNIX¡ALinux¤ä«ùªºÊI¥d¥Dn¬O¥H¤ÓÊI¥d¡C¦p3COM¡BACCTON¡BAT&T¡BIBM¡BCRYSTAL¡BD-LINKµ¥众¦h«~µPªº¥H¤ÓÊI¥d¥un¦w装°t¸m¥¿ÚÌ¡A³£¥i¥H±o¨ì§A©Ò´Á±æªº®ÄªG¡C
¡@¡@¤@¡B Linux¤¤ÊI¥dªº¤u§@ì²z
¡@¡@为¤F将这个问题说©úªº§ó²M·¡¤@¨Ç¡A¤£§«¥ý简n¦aåªR¤@¤ULinux¬O¦p¦ó让ÊI¥d¤u§@ªº¡C¤@¯ë来说¡ALinux®Ö¤ß¤w经实现¤FOSI参¦Ò¼Ò«¬ªºÊI络层¤Î§ó¤W层³¡¤À¡CÊI络层ªº实现¨Ì赖¤_数Õu链¸ô层ªº¦³®Ä¤u§@¡CÊI¥dªº驱动µ{§Ç´N¬O数Õu链¸ô层ÉOª«²z层ªº±µ¤f¡C³q过调¥Î驱动µ{§Çªº发°e¨Òµ{¦Vª«²zºÝ¤f发°e数Õu¡A调¥Î驱动µ{§Çªº±µ¦¬¨Òµ{从ª«²zºÝ¤f±µ¦¬数Õu¡C
¡@¡@1.ÊI¥d驱动µ{§Ç
¡@¡@简单¦a说¡An将§A¤â¤¤ªºÊI¥d§Q¥Î°_来¡A§A°ß¤@n°µªº¬O±o¨ì这块ÊI¥dªº驱动µ{§Ç¡C驱动µ{§Ç´£¨Ñ¤F±¦V¾Þ§@¨t统®Ö¤ßªº±µ¤f©M±¦Vª«²z层ªº±µ¤f¡C
¡@¡@驱动µ{§Çªº¾Þ§@¨t统±µ¤f¬O¤@¨Ç¥Î¤_发现ÊI¥d¡B检测ÊI¥d参数¥H¤Î发°e±µ¦¬数Õuªº¨Òµ{¡C当驱动µ{§Ç开©l运§@时¡A¾Þ§@¨t统º¥ý调¥Î检测¨Òµ{¥H发现¨t统¤¤¦w装ªºÊI¥d¡C¦pªG该ÊI¥d¤ä«ù§Y´¡§Y¥Î¡A¨º¤\检测¨Òµ{应该¥i¥H¦Û动发现ÊI¥dªº¦UÏú参数;§_则§A´Nn¦b驱动µ{§Ç运§@«e¡A设¸m¦nÊI¥dªº参数¨Ñ驱动µ{§Ç¨Ï¥Î¡C当®Ö¤ßn发°e数Õu时¡A¥¦调¥Î驱动µ{§Çªº发°e¨Òµ{¡C发°e¨Òµ{将数Õu写¤J¥¿Ú̪ºªÅ间¡AµM¦Z¿E¬¡ª«²z发°e过µ{¡C
¡@¡@驱动µ{§Ç±¦Vª«²z层ªº±µ¤f¬O¤¤断处²z¨Òµ{¡C当ÊI¥d±µ¦¬¨ì数Õu¡B发°e过µ{结§ô¡A©ÎªÌ发现错误时¡AÊI¥d产¥Í¤@个¤¤断¡AµM¦Z®Ö¤ß调¥Î该¤¤断ªº处²z¨Òµ{¡C¤¤断处²z¨Òµ{§P断¤¤断发¥Íªºì¦]¡A¦}进¦æ响应ªº处²z¡C¤ñ¦p当ÊI¥d±µ¦¬¨ì数Õu¦Ó发¥Í¤¤断时¡A¤¤断处²z¨Òµ{调¥Î±µ¦¬¨Òµ{进¦æ±µ¦¬¡C
¡@¡@2.驱动µ{§Ç¤u§@参数
¡@¡@驱动µ{§Çªº¤u§@参数¦]ÊI¥d©Ê质ªº¤£¦P¦Ó¤£¦P¡A¤jP¥]¬AI/OºÝ¤f号¡B¤¤断号¡BDMA³q¹D¡B¦@¨É¦s储区µ¥¡C输¤J输¥XºÝ¤f号¤S³Q称为输¤J输¥X°ò¦a§}¡A当ÊI¥d¤u§@¤_ºÝ¤f输¤J输¥X¼Ò¦¡时³Q¨Ï¥Î¡CºÝ¤f输¤J输¥X¼Ò¦¡»ÝnCPUªº¥þµ{¤z预¡A¦ý©Ò»Ýµw¥ó¤Î¦s储ªÅ间n¨D较§C¡CCPU³q过ºÝ¤f号«ü©wªºªÅ间ÉOÊI¥d¥æ换数Õu¡C¤¤断号¬OÊI¥dªº¤¤断§Ç号¡A¥un¤£ÉO¨ä¥¦设备冲¬ð§Y¥i¡C当ÊI¥d¨Ï¥ÎDMA¤è¦¡时¡A¥¦n¨Ï¥ÎDMA³q¹D§å¶q传输数Õu¦Ó¤£»ÝnCPUªº¤z预¡C
¡@¡@对¤_¤@块¨ãÊ^ªºÊI¥d¡A¦pªGÊI¥d¤ä«ù§¹¥þ¦Û动检测¡A¨º¤\¤@个参数¤]¤£¥Î«ü©w¡A驱动µ{§Çªº检测¨Òµ{会¦Û动设©w©Ò»Ý参数¡C¤@¯ë±¡况¡A§A»Ýn¤H¤u设©w这¨Ç参数ªº¤@³¡¤À¡C¦pªG§AªºÊI¥d¨Ï¥ÎºÝ¤f输¤J输¥X¼Ò¦¡¡A§An设©wºÝ¤f号©M¤¤断号¡C¦pªG§AªºÊI¥d¨Ï¥ÎDMA¼Ò¦¡¡A§An设©wDMA³q¹D©M¤¤断号¡C¦pªG§AªºÊI¥d¨Ï¥Î¦@¨É¦s储区ªº¼Ò¦¡¡A¨º§A´N±o设©w¦@¨É¦s储区ªº¦a§}S围¡C
¡@¡@3.驱动µ{§Çªº¨Ï¥Î¤è¦¡
¡@¡@¦³¤FÊI¥dªº驱动µ{§Ç¦Z¡A§A¥i¥H选择¬O§â驱动µ{§Ç¥[¤J¨ìLinux®Ö¤ß¤§¤¤还¬O§â驱动µ{§Ç¥[¤u¦¨独¥ß¼Ò块¡CLinux¨t统¤@个¤Þ¤H¤JÐ`ªº长处´N¬O¥i¥H©w¨î¨t统ªº®Ö¤ß¡C§â»Ýn频Ác调¥Îªº¥\¯à¥[¤J¨t统®Ö¤ß¡A¥i¥H¤j¤j´£°ª¨t统ªº®Ä²v¡C¦b这Ïú±¡况¤U¨t统启动时¡A¨t统®Ö¤ß¦Û动¥[载ÊI¥dªº驱动µ{§Ç¡C驱动µ{§Çªº参数¥i¥H³q过LILO©R¥O参数¥[¥H«ü©w¡C¨t统启动¦Z驱动µ{§Ç¥Ã¤[驻¯d®Ö¤ß¡A¤£¯à¥Î±`规ªº¤èªk将¨ä¨ø载¡C¦Ü¤_©w¨îªº¨t统®Ö¤ß¡A¬O³q过«·s编译±o¨ìªº;¦p¦ó编译®Ö¤ß将¦b¦Z¤å叙¤Î¡C
¡@¡@¦pªG§â驱动µ{§Ç编译¦¨¥i装载¼Ò块¡A´N¥i¥H¥Î¨t统´£¨Ñªº©R¥O¦b¨t统启动¦Z随时¥[载¡C随时¥[载ªº¦n处¬O减¤Ö内¦s开销¡A©ö¤_ºÞ²z¡A¦ý¦P时¤]牺¬¹¤F¤@点ÊI络传输ªº®Ä²v¡C驱动µ{§Çªº参数¬O¦b©R¥O¦æ¤¤ª½±µ输¤J©Î³q过°t¸m¤å¥ó«ü©w¡C
¡@¡@¤G¡B ÊI¥d¦w装«eªºã备
¡@¡@¦b¦w装ÊI¥d«e¡A务¥²检¬d¬O§_¨ã备¤U¦C条¥ó¡G
¡@¡@1.µw¥ó¤è±
¡@¡@¡´¥H¤ÓÊI¥d
¡@¡@¡´ÊI络连±µ线¤Î连±µ头¡A¦p10base-T¤@¯ë为8ªä双绞线°tRJ-45±µ¤f
¡@¡@2.软¥ó¤è±
¡@¡@¡´Linux¾Þ§@¨t统
¡@¡@¡´ÊI¥d驱动µ{§Ç(¥Ø标码©Î·½¥N码
¡@¡@¡´*ÊI¥d°t¸mµ{§Ç
¡@¡@¡´*软¥ó开发¤u¨ã¡A¦pGNU¤u¨ã¥](¥]¬A编译¾¹gcc¡Bmakeµ¥)
¡@¡@3.¨t统°t¸m«H®§
¡@¡@¡´¥i¥ÎªººÝ¤f¦a§}
¡@¡@¡´¥i¥Îªº¤¤断号
¡@¡@¥H¤W¤£带¬P号标记ªº¬O¥²n条¥ó¡A带¬P号ªº¬O视±¡况¤£¦P¦Ón¨Dªº条¥ó¡C¨ãÊ^±¡况¦b¤U±进¤@¨B说©ú¡C
¤T¡B ÊI¥dªº¦w装¤Î°t¸m
¡@¡@²Ä¤@¨B¡G°t¸m¥H¤ÓÊI¥dªº¤u§@参数
¡@¡@°t¸mÊI¥d´N¬O°t¸mÊI¥dªº¤u§@参数¡A¦pºÝ¤f¦a§}¡B¤¤断号µ¥¡CÊI¥dªº¯Ê¬Ù参数¤@¯ë¦s储¤_ÊI¥d内³¡ªºEEPROM¡A这¬OÊI¥d¥XÉD«e设¸m¦nªº¡C¯Ê¬Ù参数¦b¤j¦h数±¡况¤U¬O¥i¦æªº¡A¦ý¦pªG这¨Ç参数ÉO§Aªº¨t统¦³冲¬ð¦}¥BÊI¥d¤S¤£¤ä«ù软¥ó动态设¸m¡A¨º¤\§A´Nn¨Ï¥ÎÊI¥dªº设¸mµ{§Ç¡C¦}¤£¬O©Ò¦³ªºÊI¥d³£n经过这¤@¨B¡A¦]为¦³¨ÇÊI¥d¤ä«ù³q过驱动软¥ó¤Î¨ä输¤J参数来ÚÌ©wÊI¥dªº¤u§@参数¡C¥i¥H³q过¬d阅ÊI¥d¨Ï¥Î说©ú书来ÚÌ©w这¤@点¡C
¡@¡@ÊI¥dªº设¸mµ{§ÇÉO驱动µ{§Ç¤£¦P¡A设¸mµ{§Ç仅仅¥Î来对ÊI¥dEEPROM¤¤ªº设¸m进¦æ×§ï¡CÊI¥dµ{§Ç¥»¨¥i¯à运¦æ¦b¨ä¥¦¾Þ§@¨t统¤U¡A¦pWINDOWS95/98¡BOS/2¡BDOSµ¥¡C¦pªG¬O«DLinux¥¥x¡A¨º§A´N¥ý¦bÓì¦X设¸mµ{§Ç运¦æªº¨t统¤¤¦w装ÊI¥d¡A«ö设¸mµ{§Ç说©ú设¸mÊI¥d参数¡CµM¦Z¦A¦bLinux¨t统¤U¦w装该ÊI¥d¡C
¡@¡@²Ä¤G¨B¡G¦w装Linux¨t统
¡@¡@°²¦p§A将n¦w装¥H¤ÓÊI¥dªºLinux¨t统¥»¨还¥¼¦w装¡A¨º¤\¥i¥H¥ý试着¦b¦w装Linuxªº¦P时¦w装ÊI¥d¡C这¤@¨B¦¨¥\ªº«e´£¬O§AªºLinux发¦æª©¥»¥]§t将n¦w装ªºÊI¥dªº驱动µ{§Ç¡C
¡@¡@运¦æLinuxªº¦w装µ{§Ç¡A«ö´£¥Ü进¦æ¾Þ§@¡A别§Ñ¤F¦w装®Ö¤ßªºÊI络³¡¤À¡C当进¦æ¨ìLAN°t¸m时¡A¦w装µ{§Ç会¦C¥X¥¦¤ä«ùªº©Ò¦³ÊI¥dªº类«¬¡C¬Ý¬Ý§AªºÊI¥d¬O§_º]¤W¦³¦W¡C随着Linux发¦æª©¥»ªº¤£断¤É级¡A¥Ø«eRedHat 6.0¤w经ÂÐ盖¤F±`¥ÎªºÊI¥d类«¬¡C¦pªG«Ü©¯运¦a§AªºÊI¥d«ê¦n¦b¨ä¤¤¡A¨º¤\¤U¤å讨论ªº«Ü¦h¨B骤³£¥i¥H¤£¥²¦Ò虑¤F¡A¦w装µ{§Ç会¦Û动§¹¦¨ÊI¥dªº¦w装ÉO驱动¡C¦ý¦pªG没§ä¨ìÓì¥Î¤_§AªºÊI¥d类«¬¡A¤]¤£¥²担¤ß¡A继续¤U¤@¨B¡C
¡@¡@²Ä¤T¨B¡G¤â¤u¦w装ÊI¥d
¡@¡@¦w装ÊI¥d¤]´N¬O¦w装ÊI¥dªº驱动µ{§Ç¡CÊI¥dn¤u§@¥²须n¦³驱动µ{§Ç¡A¦}¥B驱动µ{§Ç¶V¦¨¼ô¶V¦n¡C驱动µ{§Ç¤@¯ë¥ÑÊI¥dªº¥Í产©Î¨Ñ应°Ó´£¨Ñ¡C¥Ñ¤_Linux¬O¤@个°_¨B¤£¤[ªº·s兴¾Þ§@¨t统¡AÊI¥dªº¥Í产°Ó¦}¤£¤@©w´£¨ÑLinux环¹Ò¤Uªº驱动µ{§Ç¡C这时Ô§A´N±o从¨ä¥¦³~径·Q办ªk¤F¡A¤ñ¦p¨ìINTERNET¤W专门´£¨Ñµw¥ó驱动µ{§ÇªºÊI¯¸¬d§ä¤@¤U¡A¤]¥i¥H¦b·s闻组¤W贴个¨D§U«H®§¡C总¤§¡A¥u¦³±o¨ìÊI¥dªº驱动µ{§Ç¦Z¡A¤è¥i进¦æ¤U¤@¨B¡C
¡@¡@ÊI¥dªº驱动µ{§Ç¦³两Ïú类«¬¡C¤@¬O¥iª½±µ¨Ï¥Îªº¤G进¨î¥N码;¥t¤@Ïú¬O驱动µ{§Çªº·½¥N码¡C¤G进¨î¥N码¤@¯ë¬O预¥ý编译¦nªº¥i装载¼Ò块¡C·½¥N码¥i¥H编译¦¨¥i装载¼Ò块¡A¤]¥i¥H编译¦¨¨t统®Ö¤ßªº¤@³¡¤À¡C¦p¦ó§â·½¥N码编译¦¨¥i装载¼Ò块¤£¦b¥»¤å讨论¤§¦C¡A¨ãÊ^¥i¥H¬d阅驱动µ{§Çªº说©ú书¡C
¡@¡@1.¥i装载¼Ò块ªº¨Ï¥Î
¡@¡@¨t统´£¨Ñ¤F¤@组©R¥O¥Î¤_将驱动µ{§Ç¼Ò块载¤J内¦s执¦æ¡C这¨Ç©R¥O¥]¬Amodprobe¡Binsmod¡BIsmod¡Brmmod¡Cmodprobe ÉOinsmod©R¥O¥\¯à¬Û¦ü¡A¦ý¬O¤è¦¡¦UÉÝ¡C
¡@¡@¡´modprobe ©R¥O¨Ï¥Î°t¸m¤å¥ó/erc/config.modules来¥[载¥i执¦æ¼Ò块¡Cn¥Î modprobe©R¥O¥[载¥H¤ÓÊI¥dªº驱动µ{§Ç¡A¥i¥H¦b config.modules¤å¥ó¤¤¥[¤J¡G
¡@¡@alias eth0 drivermodule (drivermodule¬O驱动µ{§Ç¼Ò块ªº¦W称
¡@¡@这¦æ°t¸m«H®§§â¥H¤ÓÊI¥dªº设备¦WÉO驱动µ{§Ç¼Ò块联¨t°_来¡Cmodprobe©R¥O¨ÌÕu这条«H®§¡A¦Û动¥[载¦s©ñ¤_ /lib/library/xxxx/net¥Ø录¤U¦W为 drivermodule.oªº¼Ò块¡C¦]¦¹n¨Ï modprobe©R¥O§ä¨ì驱动µ{§Ç¼Ò块¡A¥²须将该¼Ò块©ñ¦b /lib/library/xxxx/net¥Ø录¤U¡C
¡@¡@¨º¤\驱动µ{§Çªº参数¦p¦ó«ü©w©O?还¬O¨Ï¥Îconf.modules¤å¥ó¡C¤èªk¬O¦b±µ着¤Wz°t¸m«H®§ªº¦Z±¥[¤J¤U¦æ«H®§¡G
¡@¡@options drivermodule parml=valuel,parm2=value2,¡K¡K
¡@¡@这¨½parm1 ¬O驱动µ{§Ç¥i¥H±µ¨üªº参数¦W¡Avaluel¬O该参数È;¨Ì¦¸类±À¡C
¡@¡@¤ñ¦poptions cs89x0 io=0x200 irq=0xA media=aui
¡@¡@¡´insmod©R¥Oª½±µ³q过©R¥O¦æ参数将驱动µ{§Ç¼Ò块载¤J内¦s¡A¦}¥i¥H¦b©R¥O¤¤«ü©w驱动µ{§Ç参数¡C¨Ò¦p¡G
¡@¡@insmod drivermodule.o parml=valuel,parm2=value2,¡K¡K
¡@¡@¥H¤W两个©R¥O¤¤¥i¥H¨Ï¥Î驱动µ{§Ç参数n¨ÌÕu¨ãÊ^ªºÊI¥d¤Î¨ä驱动µ{§Ç¦Ó©w¡An¥J细阅读ÊI¥d¤Î驱动µ{§Çªº说©ú书¡C¦³ªºÊI¥d驱动µ{§Ç¥i¥H¥Î这¨Ç参数ÂÐ盖ÊI¥d¥»¨EEPROM¤¤¦s储ªº参数¡C¦³ªº则¥²须¨Ï¥ÎEEPROM¤¤ªº参数¡C¦³ªº¦]为驱动µ{§Ç¤£¦Û动检测ÊI¥d¨Ï¥Îªº参数¡A©Ò¥H还±o§âÊI¥d¨Ï¥ÎªºEEPROM¤¤ªº参数传给驱动µ{§Ç¡C
¡@¡@¨ø载驱动µ{§Ç¼Ò块¨Ï¥Îrmmod©R¥O¡G
¡@¡@rmmod drivermodule.o
2.§â驱动µ{§Ç编译¤J¨t统®Ö¤ß
¡@¡@°£¤F¥H¥i装载¼Ò块ªº§Î¦¡¨Ï¥Î驱动µ{§Ç¡A还¥i¥H§â驱动µ{§Ç编译进Linux®Ö¤ß¡A¥H获¨ú§ó°ªªº®Ä²v¡C这Ïú¤è¦¡»Ýn驱动µ{§Çªº·½¥N码¡BLinux®Ö¤ß·½¥N码¤Î¨ä编译¤u¨ã¡CLinux®Ö¤ßªº编译过µ{¥]¬A°t¸m®Ö¤ß¡B««Ø¨Ì赖关¨t¡B¥Í¦¨®Ö¤ß¥N码µ¥¨B骤¡C°t¸m®Ö¤ßªº过µ{¬O¥Î¨t统´£¨Ñªº°t¸m¤u¨ã(make config ©Îmake menuconfig)«·s¥Í¦¨¥Î来编译®Ö¤ßªº众¦hmake¤å¥óªº过µ{¡C为¤F让®Ö¤ßªº°t¸m¤u¨ã¤F¸Ñ§AªºÊI¥d驱动µ{§Ç¡A§A»Ýn×§ï¤@¨Ç®Ö¤ßªº°t¸m¤å¥ó¡C
¡@¡@(1)×§ï°t¸m¤å¥ó¡G¥Dn×§ï®Ö¤ß·½¥N码¥Ø录¤Uªº¥|个¤å¥ó¡A§Ydrivers/net/CONFIG¤å¥ó¡Bdrivers/net/Config.in¤å¥ó¡Bdrivers/net/Makefile ¤å¥ó©Mdrivers/net/Space.c¤å¥ó¡CCONFIG©MConfig.in¤å¥ó¥Î¤_±±¨î®Ö¤ß°t¸m¤u¨ã(make config ©Îmake menuconfig)ªº运¦æ¡A¥Dn¬O¥[¤J关¤_¬O§_¥]¬A该ÊI¥dªº¤ä«ù´£¥Ü¡CMakefile ©MSpace.c¤å¥ó¥Î¤_编译®Ö¤ß¥N码¦}说©ú±¦V®Ö¤ßªº±µ¤f¡C详细语¥y参见¤U±¨Ò¤l¡C
¡@¡@(2)运¦æ®Ö¤ß°t¸m¤u¨ã¡G¦b®Ö¤ß·½¥N码¥Ø录¤U执¦æmake config©Î make menuconfig©R¥O¡C make config¬O±¦V©R¥O¦æªº¡A³q过³v¥y¦^µª´£问来°t¸m®Ö¤ß¡C¥Ñ¤_¨ä¦b°t¸m过µ{¤¤¤£¥i§ï变©ÎºM®ø¥H«eªº¦^µª¡A¬G¦h¦³¤£«K¡Cmake menuconfig 则¬O³q过µ¡¤fµæ单¤è¦¡¡A¨Ï¥Î°_来«Ü¤è«K¡C´N¥»¤å¦Ó¨¥¡A§A¥un¦b¤W¤@¨B¤¤¥¿ÚÌ×§ï¤F°t¸m¤å¥ó¡A¨º¤\¦bconfig¤¤会¥X现¬O§_»Ýn该ÊI¥d¤ä«ùªº´£问¡A§A选择¡¥y¡¦¡C©ÎªÌ¦bmenuconfig¤¤ªº networkµæ单¤¤¥X现ªí¥Ü该ÊI¥dªºµæ单项¡A§â¥¦选¤W§Y¥i¡C
¡@¡@(3)««Ø¨Ì赖关¨t¡G«Ü简单¡A执¦æmake dep©Mmake clean©R¥O¡C
¡@¡@(4)¥Í¦¨®Ö¤ß¥N码¡G执¦æmake zImage ©R¥O¡C这个©R¥O开©l¯u¥¿编译®Ö¤ß¥N码¡A¦}§â®Ö¤ß¥N码¦s©ñ为arch/i386/boot ¥Ø录¤UªºzImage¡C
¡@¡@(5)为¤F¨Ï¥Î·sªº®Ö¤ß¥N码¡A§A»Ýn¥Î·sªº®Ö¤ß¥N码´À换즳ªº¡C즳ªº®Ö¤ß¥N码¤@¯ë¦s©ñ¦b/boot ¥Ø录¤U¡A¤å¥ó¦W称类¦ü¤_vmlinuz-v.s.r-m (v.s.r-m)ªí¥Ü®Ö¤ßªºª©¥»号
¡C¦pvmlinuz-2.0.34-1¡C执¦æ¤U¦C©R¥O¡G
¡@¡@cp arch/i386/boot/zImage /boot/vmlinuz-v.s.r-m
¡@¡@为¤F¦w¥þ°_见¡A¥i¥H¥ý§â즳ªº®Ö¤ß¥N码°µ个备¥÷¡A¥H«K发¥Í错误时«ìÎ`¡C
¡@¡@¦Ü¦¹¡A§A¥i¥H«·s¤Þ导¨t统¥H¨Ï¥Î·sªº带¦³¥¿ÚÌÊI¥d驱动¤ä«ùªºLinux®Ö¤ß¡C°ß¤@³Ñ¤U¥¼¸Ñ决ªº¬O驱动µ{§Çªº参数问题¡C¦³¨ÇÊI¥d驱动µ{§Ç¦pªG¤£输¤J参数¡A¨º¥¦¤u§@´N会¤£¥¿±`¡A¬Æ¦Ü®Ú¥»¤£¤u§@¡C¥Ñ¤_现¦bÊI¥dªº驱动µ{§Ç¬O¨t统启动时¥Ñ®Ö¤ß载¤J运¦æªº¡A¨t统启动¤§¦Z¥Î户´N«Ü难§ï变这¨Ç参数¤F¡A©Ò¥H§A¥²须¦b¨t统启动时§i诉Linux®Ö¤ßÊI¥d驱动µ{§Ç¨Ï¥Îªº参数¡C¨ãÊ^¤èªk¦³两Ïú¡G
¡@¡@(1)¦b¨t统¤Þ导µ{§ÇLILO¤¤输¤J¡C
¡@¡@¦bLILO开©l¤Þ导¨t统时¡A¥Îether¤l©R¥O设©w¥H¤ÓÊI¥d驱动µ{§Çªº参数¡Cether©R¥Oªº¨Ï¥Î¤è¦¡为¡G
¡@¡@LILO¡Glinu xether=IRO.BASE_ADDR,NAME
¡@¡@这¨½带¤U¦E线ªº¬On输¤Jªº³¡¤À¡AIRQªí¥Ü¤¤断号¡ABASE_ADDRªí¥ÜºÝ¤f号¡ANAMEªí¥ÜÊI¥dªº设备¦W¡C¨Ò¦p¡Glinux ether=15,0x320,eth0
¡@¡@(2)¦bLILO°t¸m¤å¥ó¤¤设©w¡C
¡@¡@¨C¦¸¦b¨t统启动时¦A输¤J驱动µ{§Ç参数¦ü¥G¦³点过¤_³Â烦¡C©¯¦n¨t统´£¨Ñ¤FLILOªº°t¸m¤å¥ó¥i¥H¥Î来¥Ã¤[©Êªº设¸mLinux¨t统启动时ªº¤l©R¥O¡C¤èªk¬O¦b/etc/lilo.conf¤å¥ó¤¤ªºÓì当¦ì¸m¥[¤J¥H¤U¤@¦æ¡G
¡@¡@append=¡§ether=IRQ, BASE_ADDR,NAME¡¨
¡@¡@这¨½带¤U¦E线³¡¤Àªº·N义¦P¤W¡C¥[¤J这¤@¦æ¦Z¡A还»Ýn¥Î/sbin/lilo©R¥O§â这个°t¸m写¤J¤Þ导µ{§Ç¡C
¡@¡@²Ä¥|¨B¡GÊI络°t¸m¤Î测试
¡@¡@¦w装§¹ÊI¥d´N¥i¥H°t¸mÊI络³q«H¤F¡C°t¸mÊI络简单¦a´N¬O¨Ï¥Îifconfig©R¥O¡A
¡@¡@¨Ò¦p¡G
¡@¡@ifconfig eth0 1.2.3.4 netmask 255.0.0.0 up
¡@¡@³Ì¦Zping¤@¤UÊI¤W¨ä¥¦É󾹪ºip¦a§}¡A检¬dÊI络¬O§_连³q¡C
¥|¡B¤@个¥H¤ÓÊI¥d¦w装实¨Ò
¡@¡@¤U±¥HCirrus¤½¥q¥Í产ªºCrystal CS8920¥H¤ÓÊI¥d为¨Ò¡A详细说©ú¤Wz¦w装°t¸m过µ{¡C¥»¨Ò¤¤¡A¦³¨Ç©R¥O参数¡A¦p®Ö¤ß·½¥N码¥Ø录µ¥¡A¬O¥H§Ú¨Ï¥Îªº¨t统环¹Ò为¥X发点¡C¨ãÊ^应¥Î¤¤还n¥[¥H¥»¦a¤Æ¡C为¤F§ó±µªñ实际¡A¨Ò¤l¤¤¤]¥]¬A¤F对¦w装¤¤¸I¨ìªº问题ªº´yz¡C
¡@¡@1.¦¹ÊI¥d¬OIBM PCÉóªº内¸m¦¡ÊI¥d¡AÉó¾¹¥u´£¨Ñ¤FWindows95/98环¹Ò¤Uªº驱动µ{§Ç¡C¥Ñ¤_RedHat 5.0发¦æª©¥»©|¥¼´£¨Ñ对¦¹ÊI¥dªºª½±µ¤ä«ù¡A©Ò¥H从Cirrusªº¯¸点¤W§ä¨ì¦}¤U载¤F该ÊI¥d驱动µ{§ÇªºLinuxª©¥»¡A¬O¤@个¦W为Linux102_tar.gzªº压缩¤å¥ó¡C
¡@¡@2.¤å¥óLinux102_tar.gz¸Ñ压¦Z¥]¬A¤个¤å¥ó¡C¥]¬A·½¥N码¡A仅Óì¥Î¤_Linux 2.0ª©¥»ªº¥Ø标¼Ò块¥H¤Îreadme¤å¥ó¡C
¡@¡@3.¬d阅readme¤å¥ó¦Z¡A¤F¸Ñ¨ì这个驱动µ{§Ç¥u¯à¨Ï¥ÎÊI¥dEEPROM¤¤设©wªººÝ¤f号(I/O°ò¦a§})¡B¤¤断号¡C为¤Fª¾¹DÊI¥dEEPROMªº设¸m¡A¤S从Cirrus¯¸点¤U载¤F该ÊI¥dDOSª©¥»ªº设¸mµ{§Çsetup.exe
¡@¡@4.¦bDOS¤¤运¦æsetup.exe¡A发现ÊI¥dªº°_©lºÝ¤f号为0x360¡A¤¤断号为10¡AÉO别ªº设备¦³冲¬ð¡C选择setup.exeµ{§Çªº¬Û应µæ单¡A§â¤¤断号§ï¦¨5¡C¥t¥~¡A¦¹驱动µ{§Ç¤£¤ä«ùplug and Play¡A¬G¤]¦bsetup.exe¤¤将ÊI¥dªºPnP¥\¯à«Ì½ª±¼¡C
¡@¡@5.§Ú©Ò¨Ï¥ÎªºRedHat 5.0ªºLinux®Ö¤ßª©¥»为2.0.34,©Ò¥H¤£¯à¥Î现¦¨ªº驱动µ{§Ç¥Ø标¼Ò块¡A»Ýn¦Û¤v动¤â编译¡C¦p¤W¤å©Òz¡A¦³两Ïú¤è¦¡¨Ï¥Î¦¹驱动µ{§Ç¡C
¡@¡@6.¦pªGn编译¦¨独¥ß¼Ò块¡A执¦æ¤U¦C©R¥O¡G
¡@¡@gcc -D_KERNEL_-I/usr/src/linux/include -I/usr/src/linux/net/inet-Wall -Wstrictprototypes -02 -fomit-frame-pointer -DMODULE -DCONFIG_MODVERSIONS -ccs89x0.c
¡@¡@编译结ªG¬O¦W为cs89x0.oªº驱动µ{§Ç¥Ø标¼Ò块¡Cn装载¦¹驱动µ{§Ç¡A输¤J¤U¦C©R¥O¡G insmod cs89x0.o io=0x360 irq=10
¡@¡@n¨ø载¦¹驱动µ{§Ç¡A¥Îrmmod©R¥O¡G
¡@¡@rmmod cs89x0.o
¡@¡@7.¦pªGn将驱动µ{§Ç编进¨t统®Ö¤ß¡A
¡@¡@×§ï/usr/src/linux/drivers/net/CONFIG,¥[¤J¡G
¡@¡@CS89x0_OPTS=
¡@¡@×§ï/usr/src/linux/drivers/net/Config.in¡A¥[¤J¡G
¡@¡@tristate¡¥CS8920 Support¡¦CONFIG_CS8920
¡@¡@¥H¤W两¦æ¬O为¤F让make config¦b°t¸m过µ{¤¤询问¬O§_¼W¥[CS8920ÊI¥dªº¤ä«ù¡C×§ï/usr/src/linux/drivers/net/Makefile¥[¤J¡G
¡@¡@ifeq((CONFIG_CS8920),y)
¡@¡@L_OBJS+=cs89x0.o
¡@¡@endif
¡@¡@×§ï/usr/src/linux/drivers/net/Space.c¡A¥[¤J¡G
¡@¡@extern int cs89x0_probe(struct device *dev);
¡@¡@¡K¡K
¡@¡@#ifdef CONFIG_CS8920
¡@¡@&& cs89x0_probe(dev);
¡@¡@#endif
¡@¡@¥H¤W两¬q¬O为¤F编译¦}输¥XÊI¥d驱动µ{§Ç¤Î¨ä¨Òµ{¡C
¡@¡@§â驱动µ{§Ç·½¥N码«þ¨ì/usr/src/linux/drivers/net¥Ø录¤U¡C
¡@¡@¦b/usr/src/linux¥Ø录¤U执¦æ make config©Î make menuconfig¡A选择®Ö¤ßCS8920ÊI¥d¤ä«ù¡C
¡@¡@执¦æmake dep¡Bmake clean©R¥O¡C³Ì¦Z¥Î make zImage 编译Linux®Ö¤ß¡C
¡@¡@¦p¦ó设¸m®Ö¤ß驱动µ{§Ç参数¡A¤W节¤w¦³说©ú¡A¤£¦A赘z¡C
¡@¡@¤¡B结§ô语
¡@¡@ÉO¨ä¥¦¥~设¤@样¡A¥H¤ÓÊI¥dÏú类Ác¦h¡A对¤_·s兴ªº¾Þ§@¨t统Linux来说¡A¬O§_¯à够¦³®Ä¦a¤ä«ù这¨Ç设备¡Aª½±µ关¨t着Linuxªº发®i«e³~¡C¥»¤å叙zªº¥H¤ÓÊI¥d¦w装°t¸m¥u¬O¨ä¤¤ªº¤@¤p³¡¤À¡A¥¼尽¨Æ©y§Æ±æÉO¦³识¤§¥K¦@¦P±´讨¡C
¹ê¥Î¬ÛÃö·j´M: ¨® it o2 sm dc bra