WEB开发网      濠电姷鏁告慨鐑藉极閸涘﹥鍙忛柣鎴f閺嬩線鏌涘☉姗堟敾闁告瑥绻橀弻锝夊箣閿濆棭妫勯梺鍝勵儎缁舵岸寮诲☉妯锋婵鐗婇弫楣冩⒑閸涘﹦鎳冪紒缁橈耿瀵鏁愭径濠勵吅闂佹寧绻傚Λ顓炍涢崟顖涒拺闁告繂瀚烽崕搴g磼閼搁潧鍝虹€殿喛顕ч埥澶娢熼柨瀣垫綌婵犳鍠楅〃鍛存偋閸℃ɑ鍙忔繛鎴炴皑绾捐棄霉閿濆懏鎯堥柍璇茬墢缁辨帡鎮╁畷鍥р拰閻庢鍠涢褔顢樻總绋块唶妞ゆ劧缍嗛埀顒€娲缁樻媴閸涘﹤鏆堥梺瑙勭摃椤曆囷綖濠靛惟闁宠桨鑳堕澶愭⒑闂堟稓绠冲┑顕呭幖鍗遍柛顐ゅ枔缁犻箖鏌涢埄鍏狀亝鎱ㄩ崶銊d簻閹兼番鍨哄畷灞炬叏婵犲啯銇濈€规洏鍔嶇换婵嬪磼濮樺吋缍嬮梺璇插椤旀牠宕伴弽顓熷亯濠靛倸鎽滃畵渚€鏌″搴″箹缂佺姵绋掗妵鍕籍閸屾矮澹曢梺鎸庣☉缁绘ê顫忓ú顏勫窛濠电姴鍟惁鐑芥⒑閸涘﹥澶勯柛瀣嚇閹箖顢楅崟顑芥嫽婵炶揪绲介幗婊堝几閸愨斂浜滄い鎰╁焺濡偓閻庤娲栫紞濠傜暦缁嬭鏃堝焵椤掑倻涓嶉柡宥庡幗閻撳啴鏌涘┑鍡楊仼闁哄棗锕弻娑氣偓锝庡亝瀹曞瞼鈧娲滈崗姗€銆佸鈧幃娆撳箛閳轰胶浠鹃梺闈涙搐鐎氱増淇婇悜鑺ユ櫆闁告挆鍛緰濠电姵顔栭崰鏍晝閵堝绠规い鎰剁稻濞呭繘姊绘担瑙勫仩闁稿孩绮撻崺鈧い鎺戝绾惧鏌熼悙顒傜獮闁哄啫鐗嗗婵囥亜閹捐泛顎撶紒閬嶄憾濮婄粯鎷呯粵瀣秷閻庤娲橀敃銏ゃ€佸鎰佹Ъ濡炪們鍨归敃顏勵潖缂佹ɑ濯撮柛娑橈工閺嗗牆鈹戦悙棰濆殝缂佺姵鎸搁悾鐤亹閹烘垹顓煎銈嗘煥瑜扮偟绮径濞炬斀闁绘劖娼欓悘鐔兼煕閵婏附銇濋柟顕嗙節瀵挳鎮㈢紙鐘电泿闂備浇顫夊妯绘櫠鎼达絿鐭欓柤濮愬€楃壕濂告煃瑜滈崜鐔风暦濮椻偓閸╃偞寰勯崫銉ф晨闂備胶顢婃竟鍫ュ箵椤忓棙顫曢柡鍥╁枑濞呭繐鈹戦悩鎰佸晱闁哥姵鐗犻弫鍐Ω閵夈垺鐎洪梺鎸庣箓濞层倝宕瑰┑鍥╃闁糕剝顨堢粻姘舵煛鐎n亪鍙勯柡宀€鍠栭、娑㈠幢濡も偓閺嗘瑦銇勯妷锕€濮嶆慨濠傤煼瀹曟帒鈻庨幋顓熜滈梻浣侯攰婵倗鍒掑澶婄疄闁靛ň鏅滈崑銊х磼鐎n厽纭舵い锔诲枛閳规垿鎮欓崣澶樻!闂佸憡姊圭敮鐐哄箲閵忋倕骞㈡繛鎴炵懅閸樹粙姊洪棃娑氱畾闁硅櫕宀稿畷鐑筋敇閻樼數鍔堕梺璇插嚱缂嶅棝宕戞担鍦洸婵犲﹤鐗婇悡娑氣偓骞垮劚閸燁偅鎱ㄩ埀顒佺節閵忥綆娼愰柨鏇樺灲瀵鈽夐姀鈥斥偓閿嬨亜韫囨挸顏╂い顐㈡搐閳规垿顢欑涵閿嬫暰濠碉紕鍋犲Λ鍕亱闂佸憡鍔﹂悡浣姐亹閹烘嚦褔鏌涢埄鍐喛濠殿喖娲娲偡閺夋寧些闂佺娅曢敃銏ゆ偘椤曗偓楠炴ḿ鎷犻懠顒夊敽闁诲骸绠嶉崕閬嶅箯鐎n€稑饪伴崼鐔叉嫽闂佺ǹ鏈悷褔藝閿旂晫绡€闁逞屽墴閺屽棗顓奸崨顖ょ吹闂備線娼ч悧鍡浰囬銏犵劦妞ゆ巻鍋撻柛鐔告綑閻g兘宕¢悙鈺傤潔濠碘槅鍨抽崢褔鐛崼銉︹拻濞达絽鎲$拹锟犳煕鎼存稑鈧繈濡撮崘顔煎耿婵炴垶鐟ユ禍妤呮⒑閸濆嫭鍌ㄩ柛銊︽そ閹€斥槈閵忥紕鍘遍梺闈涱檧缁蹭粙宕濆顑芥斀闁挎稑瀚敮鍫曟婢跺绡€濠电姴鍊搁顐︽煟椤撶儐鍎旈柡灞炬礋瀹曟儼顦叉い蹇e墰缁辨帡鎮╁畷鍥ㄥ垱闂佽桨鐒﹂崝娆忕暦閵娾晩鏁囬柣妯虹仛缂嶄線姊婚崒姘偓椋庣矆娓氣偓楠炴牠顢曢敐鍛獮闂佹悶鍎洪崜娆撴倿閸偁浜滈柟鍝勬娴滃墽绱掗崜褑妾搁柛娆忓暙椤曪綁骞庨挊澶婅€垮┑鐐村灦閻熴儵鍩€椤掑倹鏆柡灞诲妼閳规垿宕卞☉鎵佸亾濡も偓椤儻顦遍柛妤佸▕瀵鏁撻悩鎻掕€垮┑鐐叉缁诲棝寮搁崨瀛樷拺闁告繂瀚ḿ銈夋煕閺囥劌浜介柛銈冨€曢埞鎴︽倷閸欏妫¢梺鎼炲妿閺佽鐣烽崫鍕殕闁告洦鍏橀幏娲⒒閸屾氨澧涚紒瀣浮钘熼柣鎰劋閸嬨劍銇勯弽銊р槈婵炴惌鍣i弻銊モ攽閸繀绮堕梺瀹狀潐閸ㄥ綊鍩€椤掑﹦绉甸柛瀣缁傚秴螖閸涱喚鍘甸梺鐓庢贡婢ф銇愯缁辨帡骞撻幒瀣划闂佽鍠曠划娆撳箠閿熺姴围闁搞儮鏅槐鍐测攽閻愯埖褰х紓宥佸亾濡炪倖娲橀悧鏇㈠煝閹捐鍗抽柕蹇ョ磿閸橀亶姊洪棃娴ㄥ綊宕曢搹顐ゎ浄闁靛緵棰佺盎濡炪倖鍔戦崹鑽ょ不瀹曞洨纾奸弶鍫涘妼缁楁帡鎽堕敐澶嬪仯闁搞儜鍕ㄦ灆闂侀€炲苯澧柟绋垮⒔濡叉劙骞樼€涙ê顎撻梺闈╁瘜閸樼ǹ危閸繍娓婚柕鍫濇閻忋儵鏌熼崘鏌ュ弰闁糕斂鍨介獮妯好虹紒妯绘珝闂備胶绮崝蹇涘疾濠婂牆妫橀柍褜鍓氭穱濠囨倷椤忓嫧鍋撻弽褜娼栫憸鐗堝笒閸戠姴鈹戦悩瀹犲缂佲偓閸屾稏浜滈柟鐑樺灥閳ь剝宕垫竟鏇熺附閸涘﹦鍘藉┑鈽嗗灡鐎笛囨偟椤忓棌鍋撶憴鍕闁活厼鍊垮濠氬即閵忕姴鑰块梺鍝勬川婵厼危椤旂⒈娓婚柕鍫濋娴滄繄绱掔拠鑼ⅵ闁绘侗鍣e畷鍫曞Ω閿曗偓椤庢捇姊虹粙璺ㄧ妞わ缚鍗抽幃妤呭川婵犲嫮鐦堥梺姹囧灲濞佳冩毄闂備浇妗ㄧ粈渚€骞夐敓鐘茬疄闁靛ň鏅╅弫鍥煏韫囨洖啸闁挎稒鐩铏规喆閸曨偆顦ㄧ紓浣割樈閸犳盯濡甸幇鏉跨闁规儳鐡ㄩ悵鎶芥⒒娴h鍋犻柛搴櫍瀵剟宕掗悙鑼姦濡炪倖宸婚崑鎾绘煥閺囥劋閭€殿喖顭烽弫鎾绘偐閼碱剙濮︽俊鐐€栫敮濠囨嚄閸洏鈧懘鎮滈懞銉モ偓鐢告煥濠靛棝顎楀ù婊呭仱閺屾稑螣閹稿寒妫勯梺瀹狀潐閸ㄥ潡宕洪妷鈺佸耿婵°倕鍟╅悽缁樹繆閻愵亜鈧牠宕归崼鏇熷仭闁宠桨鑳堕弳锕傛煟閵忋埄鏆柛瀣崌閺佹劖鎯旈垾鍐茬闂備胶枪椤戝棝骞愭ィ鍐ㄧ疅闁圭虎鍠栫粈瀣亜閹哄棗浜炬繛瀵稿Л閺呯姴顫忛搹鍦煓闁圭ǹ楠搁弨顓犵磽娓氬洤娅嶇紒鐘崇墵楠炲啫顫滈埀顒€鐣峰鈧、娆戞喆閿濆棗顏圭紓鍌氬€搁崐鐑芥倿閿曞倸鐓熼柕鍫濐樈閺佸倿鏌涢弴銏℃锭婵炲牄鍔戝娲礈閹绘帊绨煎┑鐐插级閻楃娀骞冮崸妤婃晪闁逞屽墴瀵鏁愭径濠勭杸濡炪倖妫佹慨銈呅掗崟顓犵<闁绘劦鍓欓崝銈夋煏閸喐鍊愮€殿喛顕ч埥澶婎潩椤愶絽濯伴梻浣虹帛閸旓箓宕滃☉妯锋灁闁靛牆顦伴悡娑樏归敐鍛喐濠⒀嶇畵閺岀喖顢欑粵瀣暭闂佺懓寮堕幐鍐茬暦閻旂⒈鏁嗛柛灞诲€栬ⅷ缂傚倸鍊搁崐椋庢閿熺姴绐楅柡宥庡亝瀹曞弶淇婇娑橆嚋妞ゃ儯鍊濆铏规嫚閺屻儱寮板┑鐐板尃閸パ咁啈濠电姴锕ら崥妯衡槈閵忊晜鏅梺缁樺姇椤曨參宕㈤棃娑辨富闁靛牆妫涙晶顏呬繆椤愶絾鈷掔紒顔肩墛閹峰懘宕烽褎绁俊鐐€栧ú宥夊磻閹剧粯鐓欐い鏃傜摂濞堟棃鏌嶇紒妯诲磳鐎规洖缍婇、娆撴偩鐏炲ジ鍋楅梻鍌氬€烽懗鍓佸垝椤栫偞鍋嬫繝濠傜墕閸屻劎鎲搁弮鍫濈畺濡わ絽鍟崐濠氭煠閹帒鍔氬ù婊勵殜閺岀喖鎮℃惔锝嗘喖闁藉啳椴搁妵鍕敃閵忊懣銏ゆ煃鐟欏嫬鐏撮柛鈹垮劦瀹曞崬螖閸愌勫煕闂備浇宕垫慨顓㈠磻閹剧粯鐓ラ柡鍥╁仜閳ь剙缍婂畷鎰版偨绾版ê浜鹃悷娆忓缁€鈧┑鐐茬湴閸斿孩绔熼弴鐔侯浄閻庯綆鍋嗛崢閬嶆煟韫囨洖浠滃褌绮欓獮濠囧川鐎涙ḿ鍘遍梺鍝勫€藉▔鏇熺墡闂備線娼уú銈団偓姘卞娣囧﹪骞栨担鑲濄劑鏌ㄩ弮鍌滃笡妞ゃ儻缍佸缁樻媴妞嬪簼瑕嗙紓浣瑰絻婢т粙骞戦姀銈呴唶闁靛/鍐偊闂備礁鎼粔鏌ュ礉瀹ュ棗鍨旈悗娑櫳戦崣蹇旂節闂堟稒顥炴繝鈧导瀛樼厵闂婎偒鍘煎畵鍡樻叏婵犲嫮甯涢柟宄版嚇閹煎綊鎮烽幍顕呭仹濠电姷顣藉Σ鍛村磻閸曨垰鐤痪鎯ь儐閿涘倿姊绘担绛嬫綈鐎规洘锕㈤、姘愁槻閺佸牓鏌$仦璇插姕闁稿﹦鏁婚弻銊モ攽閸℃侗鈧鏌$€n剙鏋涢柡宀嬬秮楠炴ḿ鎹勯悜妯尖偓鐐箾閿濆懏鎼愰柨鏇ㄤ簼娣囧﹪宕奸弴鐐碉紲濠殿喗锕╅崑鍕夊鑸碘拻闁稿本鐟ㄩ崗宀€绱掗鍛仸闁靛棗鍟村畷銊╊敇閸ャ劎鈽夐摶鏍煕濞戝崬骞橀柛妯绘そ濮婃椽宕烽鐐板缂備礁澧庨崑銈咁嚕椤曗偓瀹曠厧鈹戦崱娆戝春濠碉紕鍋戦崐鏍涙笟鈧敐鐐村緞鐏炵ǹ浜炬慨姗嗗厵閸嬨垺鎱ㄦ繝鍐┿仢闁圭绻濇俊鍫曞川閸涱偄鐏紒缁樼洴閹崇娀顢楅埀顒勫煝閸儲鐓曢柍瑙勫劤娴滅偓淇婇悙顏勨偓鏍暜閹烘鐤い鏍仦閸嬬喐銇勮箛鎾跺闁绘挾鍠栭悡顐﹀炊瑜濆銉ッ瑰⿰鍫㈢暫婵﹤顭峰畷鎺戭潩椤戣棄浜惧瀣捣閻棗銆掑锝呬壕濡ょ姷鍋為悧鐘汇€侀弴銏℃櫇闁逞屽墰缁鎮╃紒妯煎幍闂備緡鍙忕粻鎴︾嵁濡ゅ懏鐓曟繛鍡楃箳缁犲鏌″畝鈧崰鎾舵閹烘顫呴柣妯虹-娴滃爼姊绘担鍛靛綊顢栭崒鐐茬柧闁绘ǹ顕ч拑鐔兼煥濠靛棭妲搁崶鎾煙閼圭増褰х紒杈ㄦ礃缁傛帒饪伴崟顓狀啎闁诲孩绋掑玻鍧楁儗婵犲嫮纾界€广儱鎷戦煬顒傗偓娈垮枛椤兘骞冮姀銈呯闁绘挸绨堕崑鎾剁磼濡湱绠氬銈嗙墬缁诲倹绂嶈ぐ鎺撶厽闁挎繂妫欓妵婵囨叏婵犲啯銇濈€规洦鍋婂畷鐔碱敆閳ь剙鈻嶉妶鍥╃=濞达絿鐡旈崵娆撴煟濡も偓濡繈鏁愰悙鍓佺杸闁瑰彞鐒﹀浠嬨€侀弮鍫濇そ濞达綀顕栧Λ鍐ㄢ攽閻樺灚鏆╅柛瀣仱瀹曞綊宕奸弴鐔锋疄婵°倧绲介崯銊╁焵椤掆偓閸婂灝鐣烽锕€绀嬮柕濠忛檮閺夋悂姊绘担鍝ユ瀮婵☆偄瀚灋婵°倓鑳堕々鍙夌節闂堟侗鍎愰柣鎾跺枛閺岋綁寮崹顔鹃獓濠电偛鎳庨敃顏堝蓟閺囥垹骞㈤柡鍥╁濡差噣姊虹€圭媭鍤欓梺甯秮閻涱噣骞掑Δ鈧猾宥夋煕鐏炲墽鈯曠紒棰濆亰濮婂宕掑▎鎴М闂佸湱鈷堥崑濠傜暦椤栫儐鏁冮柨鏇楀亾缁惧墽鎳撻埞鎴︽偐瀹曞浂鏆¢梺绋块閿曨亪寮诲☉銏╂晝闁绘ɑ褰冩慨鏇㈡⒑閹惰姤鏁遍柛銊ョ埣楠炲牓濡搁埡鍌氫画闂佺粯顨呴悧濠囧箖濞嗘挻鈷戦悹鍥皺缁犳壆鈧鍠栨晶搴ㄥ箲閵忕姭妲堟繛鍡樺姇椤庢捇姊洪崨濠傚鐟滄澘鍟撮、鏃堫敃閿濆啩绨婚梺鍐叉惈閸燁偊宕㈤幘顔界厸閻忕偠顕ф慨鍌溾偓娈垮枟閹告娊骞冨▎寰濆湱鈧綆浜欐竟鏇㈡偡濠婂懎顣奸悽顖涱殜瀹曟垿宕掗悙瀵稿幐闂佹悶鍎崕閬嶆倶椤忓牊鐓熼柟鎯х-缁犱即鏌嶇憴鍕伌闁诡喗鐟╅幊鐘活敄閼愁垱顎楅梻鍌欑閹诧繝寮婚敐澶婄9婵犻潧顑呴拑鐔哥箾閹存瑥鐏╅柣鎾寸洴閹鏁愭惔鈥愁潾闁藉啳椴告穱濠囨倷椤忓嫧鍋撻幋锕€绀夊┑鐘叉搐绾惧潡鏌i姀鈶跺湱绮婚弽銊х闁糕剝蓱鐏忣厾绱掗悪娆忔处閻撴瑩鎮楀☉娆嬬細缂佺姰鍎茬换娑㈠礂閼测晩鏆℃繛锝呮搐閿曨亝淇婇崼鏇炵倞妞ゎ剦鍠撻崕鐢稿蓟濞戞埃鍋撻敐搴″濞寸娀浜堕弻鈩冩媴缁嬫寧娈绘繝娈垮枓閸嬫捇姊洪棃娑氬闁哥喓濞€瀹曟垿骞樼€涙ê顎撶紓渚囧灡濞叉﹢鎮楁繝姘拺闁革富鍘兼禍鐐箾閸忚偐鎳冮柍缁樻崌楠炲洭鎮ч崼姘闂備礁鎲¢崝鏇烆嚕閸洖绠氶柛顐ゅ枂娴滄粓鏌熺€涙ḿ绠栭柛鐘筹耿閺岋絽鈽夐崡鐐寸彎婵犳鍠掗崑鎾绘⒑闂堟稓澧曟俊顐㈢焸楠炲繑绻濆顓涙嫼缂備礁顑嗙€笛冿耿娴煎瓨鐓熼柣鏇炲€搁々顒傜磼椤旂》韬柟顔ㄥ洤閱囨繛鎴烆殘閻╁孩淇婇悙顏勨偓鏍礉閹达箑鏄ラ柛鏇ㄥ€犻敐澶婄濞达絽婀遍崢浠嬫⒑閹稿海绠撻柟鍐查鍗卞┑鐘崇閹虫岸鏌ㄥ┑鍡╂Ч闁绘挾濮电换娑㈠级閹搭厼鍓卞┑鐐叉噹濞差參寮婚敐澶婄闁归绀侀崜鏉款渻閵堝簼绨婚柛鐔风摠娣囧﹪宕奸弴鐐茶€垮┑顔筋殔濡瑩鍩涢弽顓熲拻濞达綀濮ょ涵鍫曟煕閻樺弶顥㈢€规洘娲熼幊鐘活敆閸屾粎鍔归柣搴$畭閸庨亶鎮ч崟顒傤洸鐟滅増甯楅悡娆撴煟閹寸倖鎴犱焊閻㈠憡鐓曟俊顖氬悑閺嗩剚鎱ㄦ繝鍛仩缂佽鲸甯掕灒闁惧繘鈧稒顢橀梻浣芥閸熷瓨绂嶉崼鏇炵畺婵☆垵娉曢悿鈧梺鎸庣箓閹冲海绮昏ぐ鎺撯拻闁搞儜灞拘х紓浣虹帛缁诲啰鎹㈠┑瀣<婵﹩鍘介宥囩磽閸屾瑧顦︽い锕備憾瀹曟洟濡舵径濠勭杽闂侀潧饪垫俊鍥╁姬閳ь剟姊洪崨濠佺繁闁革綆鍠楃粋鎺楀煛閸愵亞锛濇繛杈剧导缁瑩宕ú顏呭仺妞ゆ牗绋戠粭鈺呮煟韫囨柨娴慨濠冩そ楠炲棜顦寸紒鐘差煼閺屽秷顧侀柛鎾存皑缁瑩骞掑灏栧亾娴e壊娼ㄩ柍褜鍓欓~蹇旂節濮橆剛锛滃┑鐐叉閸ㄥ灚淇婃禒瀣厽閹艰揪绲块幊妤呮煕韫囨洖孝闁圭⒈鍋婇、姗€宕楅悡搴g獮婵犵數濮寸€氼參鎮¢敐鍡欑瘈闁汇垽娼ф禒锕傛煕閵娿儱顣抽柛鎺撳笚閹棃濮€閵忊晜閿ら梻鍌欑贰閸撴瑧绮旈悽绋跨厱闁圭儤鍤氳ぐ鎺撴櫜闁告侗鍠栭弳鍫ユ⒑閸濄儱鏋旈柛瀣仧閹广垹鈽夊顓炵彴閻熸粌绻橀幃楣冩偨绾版ê浜鹃悷娆忓缁€鈧紓鍌氱Т閿曨亜顕f繝姘耿婵°倕锕ら幃鎴︽⒑閸涘﹣绶遍柛銊ゅ嵆閻涱噣宕奸妷锔规嫽婵炶揪绲肩拃锕傚绩娴煎瓨鐓欐繛鑼额唺闁垱鎱ㄦ繝浣虹煓鐎规洜鍠栭、娑樷槈濡湱鏆楀┑鐘垫暩閸嬫稑螞濞嗘挸绠板┑鐘崇閸嬪倿鏌eΟ铏癸紞缂佺娀绠栭弻鈩冨緞鐎n亞鍔搁梺绋垮閸旀牜鎹㈠☉銏犲窛妞ゆ挾鍠庡▍锝夋⒒閸パ屾█闁哄矉绲借灒闁惧繒娅㈢槐鐐烘⒑濞茶骞栭柨鏇ㄤ邯瀵顓奸崶銊ユ瀭闂佸憡娲﹂崑鍡樺瀹€鍕拺闁硅偐鍋涙慨鍌滅磼閻樺磭澧垫鐐插暙閳诲酣骞橀弶鎴犳濠电姰鍨煎▔娑⑺囬鐐插瀭婵犻潧顑嗛埛鎺楁煕鐏炲墽鎳勭紒浣哄閵囧嫰寮撮悢鍝勨拰閻庤娲樺妯跨亙闂佸憡渚楅崑鈧柛瀣崌瀹曟﹢顢欓悡搴g崺闂備礁鎼ˇ浼村垂瑜版帒鐭楅柍褜鍓欓埞鎴︽偐椤旇偐浼囬梺绯曟櫆閻楃姴鐣峰┑瀣嵆闁绘ê鍚€缁楀姊虹憴鍕姸濠殿喓鍊濋幃鈥斥枎閹惧鍘靛銈嗙墪濡鎳熼姘f灁闁割偅娲橀崑鈩冪節婵犲倸顏紒璺哄级缁绘稓浠﹂崒姘瀷濠碘€冲级閸旀瑩鐛Ο鍏煎珰闁肩⒈鍓ㄧ槐鍙夌節閻㈤潧浠滄俊顐g懇瀹曞綊鎳栭埡鍐箵濠德板€曢幊蹇涘煕閹达附鐓曟繝闈涘閸旀岸寮介敓鐘斥拺缂備焦锕╁▓妯衡攽閻愨晛浜鹃梻渚€娼уΛ鏃傛濮橆剦鍤曞ù鐘差儛閺佸洭鏌i幇顖氱毢闁绘稈鏅犲缁樻媴閸涘﹨纭€闂佸啿鍢查悧鎾崇暦閵忥紕顩烽悗锝庝簽閺屟囨⒑閹稿海绠撴い锔垮嵆閸╂盯骞嬮悩鐢碉紲闁诲函缍嗛崢鐣屾兜閸撲胶纾奸柣妯哄暱閳绘洟鏌$仦鍓р槈閾伙綁鏌eΟ鍝勭骇闁革絿鍎ら妵鍕箛椤忓棛鐓撻梺鍝勭焿缂嶄線鐛崶顒夋晩闁告挆鍛潓缂傚倸鍊峰ù鍥敋瑜嶈灋婵炲棙鎸告闂佸憡娲﹂崹浼村礃閳ь剟姊洪棃娴ゆ盯宕ㄩ姘瑩闂傚倷鐒﹂惇褰掑春閸曨垰鍨傞弶鍫氭櫇閻瑩鏌熼悜妯烩拹鐎规洖寮剁换娑㈠箣濞嗗繒浠奸悗鐟版啞缁诲啴濡甸崟顖氱閻犺櫣鍎ら悗濠氭⒑閸濆嫷鍎戝┑顔芥尦閸╃偤骞嬮敂缁樻櫓缂佺虎鍘奸崲鍙夋叏濞戞氨纾藉〒姘搐濞呮﹢鏌涢妸銉у煟闁绘侗鍠涚粻娑樷槈濡櫣鐛╅梺璇插缁嬫帡鏁嬫繛瀵稿閸欏啫顫忕紒妯肩懝闁搞儜鍐х礋缂傚倷鑳舵慨鐢稿垂閻㈢ǹ鐓濋柟鐐灱閺€浠嬫煕椤愮姴鐏柨娑欑箞濮婅櫣绮欓幐搴㈡嫳闂佽崵鍣︽俊鍥╁垝婵犲洦鍋嬮柛顐g◥缁ㄥ姊洪崫鍕悙婵☆偅顨呯叅闁靛牆娲らˉ姘辨喐閻楀牆绗氶柣鎾存礃閵囧嫰顢橀悢椋庝淮濠电偛鎳忛敃銏ゅ蓟濞戙垹围闁糕剝岣块ˇ顓犵磽娴d粙鍝洪柟绋款煼楠炲繘宕ㄩ娑橆伕濡炪倖鐗楃划搴g玻濡ゅ啰纾介柛灞剧懆椤斿淇婇悪娆忔搐绾惧鏌熼崜褏甯涢柍閿嬪笒闇夐柨婵嗙墱濞兼劙鏌涚€n剙鈻堥柡灞剧⊕閹棃顢欓懖鈺€妗撻柣搴ゎ潐濞叉ḿ鎹㈤崒鐑嗘晣濠靛倻枪瀹告繃銇勮箛鎾村櫧闁逞屽墯濡炶棄顫忓ú顏勭闁绘劖褰冩慨鍫曟⒑閸涘﹥灏扮€光偓閹间礁鏄ユ繛鎴欏灩缁狅綁鏌eΟ鍏兼毄闁挎稒绮撻弻锝嗘償椤栨粎校闂佺ǹ顑呯€氫即銆佸顑藉牚闁告洦鍘鹃惁鍫ユ⒑闁偛鑻晶瀛橆殽閻愯尙效妞ゃ垺鐟╁畷婊嗩檪缂佽鲸鐓″铏规嫚閹绘帒姣愮紓鍌氱Т濡繂鐣烽幋锕€宸濇い鎾跺У濞堥箖鎮楅崗澶婁壕闂侀€炲苯澧撮柛鈹惧亾濡炪倖甯掗崰姘缚閹邦厾绠鹃柟缁樺笧缁犺崵鈧娲濋~澶岀矉閹烘柡鍋撻敐搴濈敖闁伙絿鍎ょ换娑氣偓鐢登瑰瓭濡炪倖鍨甸幊搴敊韫囨挴鏀介柛鈥崇箲閺傗偓闂備胶绮摫鐟滄澘鍟撮、鏃堝煛閸屻倖顔旈梺缁樺姈閹苯鈻撳⿰鍕弿濠电姴鍟妵婵嬫煙椤旀儳鍘寸€殿喖鐖奸獮鎰償閳锯偓閸嬫捇顢涢悙绮规嫼婵炴潙鍚嬮悷褏绮旈棃娴㈢懓饪版惔婵堢泿闂佷紮缍侀ˉ鎾诲箟閹绢喖绀嬫い鎾跺Х濡插洦绻濆▓鍨灍闁挎洍鏅犲畷婊冣槈閵忕姴鍋嶉梺瑙勫婢ф鍩涢幋锔界厱婵犻潧妫楅顏堟煕鐏炶濮傞柡灞剧洴婵℃悂鏁傛慨鎰檸闂備浇顕栭崳顖滄崲濠靛洣绻嗛柣鎴eГ閺呮粓鏌﹀Ο渚Ц濞寸厧瀛╃换婵堝枈濡椿娼戦梺鎼炲妺閸楁娊骞冨Ο琛℃斀閻庯綆鍋勬禍妤呮⒑鐟欏嫬顥嬪褎顨婇幃锟犳偄閸忚偐鍘甸梺纭咁潐閸旀牜娑垫ィ鍐╃厸閻庯綆鍋嗗ú鎾煛瀹€瀣М妤犵偞鐟╁畷姗€濡搁妶鍛€抽梺璇叉唉椤煤閺嶎厽鍋夐柛蹇涙?缁诲棝鏌i幋锝嗩棄閸烆垶姊洪棃娑辨Ф闁稿孩鐩獮瀣偐閻㈢绱抽梻浣呵归張顒勬偡瑜旇棟闁挎柨顫曟禍婊堟煙鐎涙ḿ绠樺褎娲熼弻锝夋晲閸パ冨箣闂佽鍠曠划娆忕暦瑜版帩鏁冩い鎰剁悼缁嬫劙姊婚崒娆戭槮婵犫偓闁秴纾块柕鍫濇媼濞兼牠鏌ゆ慨鎰偓鏇⑺夊鑸电厱闊洦绋掗敍鐔虹磼鐠囧弶顥為柕鍥у瀵粙濡歌閻e灚绻涚€涙ḿ鐭婄紓宥咃躬瀵鏁愭径瀣珳闂佸壊鍋嗛崳銉︾閳哄啰纾藉ù锝勭矙閸濇椽鏌熺粙娆剧吋妤犵偛绻樺畷銊р偓娑櫳戦崕顏堟⒑閼姐倕鏋戝鐟版椤㈡洟鎳栭埡鍐紳闂佺ǹ鏈悷锔剧矈閻楀牄浜滈柡鍥ф濞诧箓宕戠€n喗鐓曢柍鈺佸暟閳洟鏌涚€Q勬珖闁逞屽墰閹虫挾鈧矮鍗冲畷鎴炵節閸屾牜绱伴梺闈浥堥弲婊堟偂閸愵亝鍠愭繝濠傜墕缁€鍫熸叏濮楀棗骞橀柍鐟扮Т閳规垿鎮╅幓鎺嶇敖濠电偛鍚嬫竟鍡涘焵椤掆偓閸樻粓宕戦幘鏂ユ斀闁绘ɑ褰冮弫顏堟煏婵炑冩噽閿涙繈姊虹粙鎸庢拱闁荤噦濡囩划濠囧级濞嗙偓瀵岄梺鍝勵槹閸ㄥ爼骞夐幖浣圭厵妤犵偛鐏濋悘鑼偓瑙勬礈閸樠囧煘閹达箑绠涙い鎾跺Х閳诲绱撻崒姘偓鎼佸磹閻戣姤鍊块柨鏇氱劍閹冲苯鈹戦悩鎰佸晱闁搞劋鍗抽、姘额敇閻樻剚娼熼梺鍦劋閸ㄧ喎危閸喐鍙忔俊銈傚亾婵☆偅顨婂畷婊堝级鎼存挻鏂€闂佺粯鍔樼亸娆愭櫠濞戙垺鐓曢柡鍐e亾闁荤喆鍎甸敐鐐剁疀閹句焦妞介、鏃堝礋椤撗冩櫍闂傚倷鑳剁划顖炲礉閺嶎兙浜归柛鎰靛枓閳ь剚鐗犲畷鍗炩槈濞嗗本瀚奸梻浣告啞缁嬫垿銈弶鎴旀灁闁哄啫鐗婇悡鏇㈡煟閺冨牊鏁遍柛瀣ㄥ劦閺岀喖顢氶埀顒傜不閺嶎厼绠栨繝濠傛噽妞规娊鎮楅敐搴′簼婵炲懏鐗犲缁樻媴閾忕懓绗¢梺鍛婃⒐宀f寧绂嶇粙搴撴瀻闁规澘鐏氶鏃堟⒑閹肩偛鍔撮柛鎾村哺閸╂盯骞嬮敂鐣屽幗闂佺粯姊婚崢褎绂嶆导瀛樼厱闁靛牆娲ら弸搴ㄦ煃鐟欏嫬鐏存い銏″哺閸┾偓妞ゆ巻鍋撳畝锝堝劵椤﹀綊鏌涢埞鍨伈妤犵偞锚鑿愭い鎺嗗亾濞存粍绻堝娲川婵犲倸顫呴梺鍝勫€风欢姘剁嵁韫囨稒鎯為柛锔诲幘閿涙繈姊虹粙鎸庢拱闁荤啙鍥х鐎广儱顦扮€氬懘姊洪鈧粔鐢告偂閸愵喗鈷戦柛顭戝櫘閸庡繑绻涢幖顓炴珝闁哄矉绱曟禒锕傛偩鐏炴縿鍨介弻锝夋晲韫囨洜鐦堝Δ鐘靛仜缁夊綊銆佸▎鎴滅剨闁哄诞鍐榾闂傚倷娴囬褏鈧稈鏅犻、娆撳冀椤撶偤妫峰銈嗘磵閸嬫挾鈧娲橀崹鍓佹崲濠靛纾兼繝濠傚椤旀洟姊绘担鍛婅础闁稿簺鍊濋妴鍐幢濞戞ḿ锛欓梺缁樺灱婵倝宕愰悽鍛婄厽闁靛繈鍨洪銏㈡喐閻楀牆绗х€规挷绶氶弻娑㈩敃閻樻彃濮曢梺鎶芥敱鐢帡婀侀梺鎸庣箓濞诧箓宕甸埀顒勬⒑瀹曞洨甯涙繛鑼枛瀵鍩勯崘顏嗘嚌闂佹悶鍎滈崟顓炵秵闂佽姘﹂~澶娒哄鈧畷褰掑锤濡ゅ啫绁﹀┑鈽嗗灥閸嬫劗澹曢崗闂寸箚妞ゆ牗绮岀敮鑸殿殽閻愭潙濮嶆慨濠勭帛閹峰懘宕ㄦ繝鍌涙畼濠电偞鎸荤喊宥夈€冩繝鍌滄殾闁哄顑欏ḿ鈺呮偣妤︽寧顏犻柣銈呮喘濮婃椽宕ㄦ繝浣虹箒闂佸摜濮靛ú婊堝箲閵忋倕骞㈡繛鎴炵懅閸樺崬鈹戦悙鍙夘棞婵炲瓨鑹惧嵄缂佸绨遍弨鑺ャ亜閺傚灝鎮戦柛鐘筹耿閺岀喖鎸婃径灞界厽闂佽桨鐒﹂崝鏍ь嚗閸曨厸鍋撻敐搴濈胺闁告繃顨嗙换婵嬫偨闂堟稐娌梺鎼炲妼婢у酣寮鈧獮鎺楀箻鐎涙ḿ褰块梻浣告惈鐞氼偊宕曢弻銉﹀亗婵炴垯鍨洪悡鏇㈡倶閻愪絻妾告繛鍫熸煥闇夋繝濠傜墢閻g儤鎱ㄦ繝鍌ょ吋鐎规洘甯掗~婵嬵敄閽樺澹曢梺缁樺灱婵倝宕甸崟顖涚厱闁规崘灏欓ˇ锕傛煕閵婏妇绠栭柕鍥у瀵粙顢曢~顓犳崟缂傚倷璁查崑鎾愁熆閼搁潧濮堥柣鎾寸洴閺屾盯濡烽姀鈩冪彅闂侀€炲苯澧剧紓宥勭窔楠炲啴濮€閵堝懍绱堕梺闈涳紡閸涱噮娼撻梻鍌氬€烽悞锕傚箖閸洖纾挎繝濠傜墕缁€鍐煃鏉炴壆顦﹀┑顔煎暣濮婂宕掑顑藉亾閻戣姤鍤勯柛鎾茬閸ㄦ繃銇勯弽顐粶闁藉啰鍠栭弻鏇熺箾閻愵剚鐝曢梺绋块缁夌數鎹㈠┑瀣棃婵炴垵宕崜鎵磽閸屾瑨顔夐柡鍛█瀵濡舵径濠勭暢闂佸湱鍎ら崹鍨叏鐏炲墽绠鹃悗娑欋缚閻绱掗鑺ュ磳鐎殿喖顭烽弫鎾绘偐閼碱剦妲伴梻渚€娼чオ鐢电不閹次诲洭鍩℃笟鍥ㄥ瘜闂侀潧鐗嗛崯顐﹀礉濮橆厹浜滈柨鏃傚亾閺嗩剛鈧鍠涢褔鍩ユ径鎰潊闁绘ɑ鍓氬Λ鐔兼⒑閼姐倕孝婵炶濡囩划濠囧箻椤旇偐锛涢梺鍦亾閺嬪ジ寮ㄦ禒瀣€甸柨婵嗙凹缁ㄨ姤銇勯弮鈧崹鍨潖濞差亜绀堥柟缁樺笂缁ㄧ厧鈹戦悙鎻掔骇闁挎洏鍨归悾鐑藉箛閻楀牆鈧鏌ら幁鎺戝姢闁告ü绮欏娲偡闁箑娈堕梺绋款儏缁夊墎妲愰幘鎰佹僵闁煎摜鏁搁崢鍗炩攽椤斿浠滈柛瀣尭闇夋繝濠傛绾偓銇勯銏㈢閻撱倖銇勮箛鎾愁仹缂佸崬鐖煎娲川婵犲啫顦╅梺鍛婃尰閻熲晛鐣烽幋婵愬悑濠㈣泛顑傞幏娲⒑閸涘﹦鈽夐柨鏇樺劦閹繝濡烽埡鍌滃幐闂佸壊鍋掗崑鍕櫠鐎电硶鍋撳▓鍨灍闁绘挴鈧磭鏆﹀┑鍌溓归崡鎶芥煏婵犲繘妾繛鍛墵濮婄粯鎷呴搹鐟扮闂佸憡姊瑰ú鐔笺€佸棰濇晣闁靛繒濮撮崑宥夋⒑閸涘⿴娈橀柛瀣姍瀵劍绂掔€n偆鍘介梺褰掑亰閸撴瑧鐥閵囧嫰濡烽敂鍓х厒缂備浇椴哥敮鐐垫閹烘嚦鐔兼惞鐠団€冲壃缂傚倸鍊风欢锟犲窗濮樺崬鍨濇い鏍ㄧ矋瀹曞弶绻濋棃娑欙紞婵炲皷鏅滈妵鍕箻鐠虹洅銏☆殽閻愭潙濮嶆慨濠呮閹风娀鎳犻鍌ゅ敽闂備胶枪椤戝洭宕伴弽褜鍤曢柡灞诲労閺佸啴鏌ㄥ┑鍡橆棡闁绘繐绻濆缁樻媴缁涘娈┑顔斤公缁犳捇鏁愰悙鏉戠窞濠电偞甯楀浠嬪极閸愵喖纾兼慨妯诲敾缁卞崬鈹戦悩鍨毄濠殿喗鎸冲畷鎰節濮橆剚杈堥梺鎸庢礀閸婂綊鎮¢悢鍏肩厸闁告劑鍔岄埀顒傛暬楠炲繘鏁撻悩宕囧幐婵炶揪绲介幉锟犓夐姀銈嗙厸閻忕偟鏅暩濡炪伇鍌滅獢闁哄本鐩獮妯尖偓闈涙啞閸d即姊虹化鏇熸澓闁搞劌缍婇、姗€宕楅悡搴g獮闁诲函缍嗛崑鍛存偟閹惰姤鈷掑ù锝堫潐閸嬬娀鏌涙惔顔兼珝鐎殿喗褰冮埞鎴犫偓锝庡亝濞呮牕鈹戦悩缁樻锭婵炲眰鍔庣划缁樸偅閸愩劎楠囬梺鍓插亝缁诲倿鍩涢弮鍌滅<閻庯綆鍘奸崥褰掓煙閸欏鍊愮€殿喖鐖煎畷褰掝敊閼恒儺鍞圭紓鍌氬€风粈渚€宕愰崫銉х煋鐟滅増甯掔粻鏍ㄧ箾閸℃ɑ鎯勯柡浣告閺屾稓浠﹂崜褏鐓傚┑鈩冨絻濞差厼顫忕紒妯肩懝闁逞屽墮宀h儻顦虫い銊e劥缁犳盯寮撮悙鐢电摌闂備礁鎲¢幐鍡涘礋椤愩垹绠查梻鍌欒兌缁垶宕濋敃鍌氱婵炲棙鍔楅々鍙夌節婵犲倻澧涢柣鎾寸懇閹鈽夊▎瀣窗缂備胶濮甸悧婊堝焵椤掑倹鍤€闁硅绱曢幑銏ゅ礋椤撶噥娼熼梺鍦劋椤ㄥ繘寮繝鍥ㄧ厱闁圭偓顨呴崯浼搭敃婵傚憡鈷掑〒姘e亾婵炰匠鍥ㄥ亱闁绘劗鏁哥粈濠偯归敐鍛喐闁哄棴闄勯幈銊ヮ渻鐠囪弓澹曢梻浣虹《閺咁亞鎹㈠┑鍡欐殾婵せ鍋撳┑鈩冩倐婵$柉顧侀柛姘儔濮婂宕掑顑藉亾瀹勬噴褰掑炊椤掑鏅悷婊冪箻閸┾偓妞ゆ帊鑳堕埢鎾绘煛閸涱喚绠橀柛鎺撳笒閳诲酣骞樺畷鍥跺敽闂備胶鎳撻顓熸叏鐎靛摜涓嶉柣銏犳啞閻撶喖鏌eΟ鍝勫笭闁煎壊浜弻娑㈠棘閸噮鍔夌紓浣割儏椤︻垶顢樻總绋垮耿婵☆垰鎼导搴㈢節绾板纾块柛瀣█椤㈡俺顦崇紒鍌氱У閵堬綁宕橀埞鐐闂備礁鎲$换鍌溾偓姘煎灦閿濈偤鏁冮崒娑氬幈闂佸搫鍊藉▔鏇㈡倿閹间焦鐓曢柍鐟扮仢閸旀粎鈧灚婢樼€氼厾鎹㈠☉銏狀潊闁靛繒濮甸悗楣冩倵閸偅绶查悗姘嵆楠炲棝宕掗悙韫炊闂侀潧顦介悘鏍箣閿旇В鎷洪梻鍌氱墛缁嬫帡骞栭幇鐗堝€垫慨妯哄船椤g厧菐閸パ嶈含妤犵偞鐗楅幏鍛喆閸曨剛褰搁梻鍌欑閹测剝绗熷Δ鍛偍闁煎綊鍋婇弶娲⒒閸屾艾鈧悂宕愬畡鎳婂綊宕堕澶嬫櫔闂佸搫绋侀崢鑲╃玻濡や椒绻嗛柕鍫濇噺閸f椽鏌涚€e墎绡€闁哄苯绉瑰畷顐﹀礋椤掆偓濞咃繝姊洪柅鐐茶嫰閸樺摜绱掗懜浣冨妞ゆ洩缍侀、姘跺焵椤掆偓閻g兘鎮℃惔妯绘杸闂佸壊鍋掗崑鍛櫏濠电姷顣槐鏇㈠磻閹达箑纾归柡宥庡幖缁犱即鏌ゆ慨鎰偓鏍х暦閺屻儲鐓曢柡鍥ュ妼楠炴﹢鏌i鐐搭棦闁哄本鐩鎾Ω閵壯傜敾闂備焦濞婇弨杈╂暜閿熺姴钃熸繛鎴炵煯濞岊亪鏌涢幘妤€瀚▍妤冪磽閸屾瑦顦烽柤瀹犲煐閺呰泛螖閸涱厙锕傛煕閺囥劌鐏犻柛妤佸▕閺岋綁寮幐搴㈠創闂佸啿鍢查惌鍌炲箖濡ゅ啯鍠嗛柛鏇ㄥ墰閿涙盯姊洪崨濠庢當闁哥喎娼¢、姘舵晲閸℃瑯娴勯柣搴到閻忔岸寮插┑瀣拺闂傚牊绋撴晶鏇熺箾閺夋垵鈧ǹ宓勭紓浣割儏缁ㄩ亶寮ㄦ禒瀣厽婵☆垵娅f禒娑㈡煛閸″繑娅呴柍瑙勫灴椤㈡瑩鎳為妷銉ユ敪闁诲氦顫夊ú姗€宕濋弽顐e床婵犻潧妫ḿ鈺傘亜閹哄秵绁扮紒韬插灲濮婄粯鎷呴悷閭﹀殝濠电偛寮堕悧鐘茬暦閹邦垬浜归柟鐑樻尭娴滄鈹戦悙鍙夘棡闁告梹鍨剁粋宥呪堪閸喓鍘搁悗骞垮劚妤犲憡绂嶅⿰鍏犲綊鎮╁畷鍥╃厐闂傚洤顦扮换婵囩節閸屾稑娅e銈忕悼閸樠嗗絹闂佹悶鍎滃鍫濇儓闂備胶鎳撶壕顓熸叏閻㈠憡鏅柟閭﹀厴閺€浠嬫煕閳╁喛渚涢柛鐐寸叀濮婂宕掑▎鎴М闂佹眹鍊曞ú顓㈡晲閻愭潙绶為柟閭﹀墮閻庮參姊虹粔鍡楀濞堟棃鏌¢崟鈺佸姦闁哄本鐩鎾Ω閵壯傚摋缂傚倷璁查崑鎾绘煕閹伴潧鏋熼柣鎾崇箰閳规垿鎮欓幋婵嗘殲闁革絿鍏橀弻娑氣偓锛扁偓閸嬫捇寮妷锔芥澑闂備焦瀵х粙鎴犫偓姘煎墯缁傚秵绺介崨濠勫幈婵犵數鍋涢悘婵嬪焵椤掍胶绠撻柣锝囧厴婵偓閹烘娊宕戦崨瀛樼厱闁规壋鏅涙俊鎸庛亜锜婚崘锝嗘杸闂佸疇妫勫Λ妤呮倶閻斿吋鍋i柍褜鍓熼弫鍐磼濮橆剚鍎梻浣告惈濞层垽宕瑰ú顏勭;闁挎繂顦伴悡鏇㈡煏婢舵稓鍒板┑鈥虫健閺屾洟宕煎┑鍫熸喖婵烇絽娲ら敃顏堢嵁閹捐绠抽柡鍌氱氨閸欐椽姊绘担鍛婃儓闁哄牜鍓欑叅婵犻潧鐗忔稉宥嗙箾閹存瑥鐏╅柛妤佸▕閺岋綁骞嬪┑鍥舵!缂傚倸绉撮惌鍌氼潖缂佹ɑ濯寸紒瀣濮f劙姊洪崷顓涙嫛闁稿锕悰顔界節閸涱垳鏉稿┑鐐村灦閻熴儲绂嶅Δ鍛棅妞ゆ劑鍨烘径鍕煙鐏忔牗娅婇柟顔哄灲瀹曞崬鈽夊▎蹇庡寲濠德板€ч梽鍕偓绗涘浂鏁傞柣妯烘▕閻斿棛鎲告惔鈭舵椽鎮㈤悡搴ゆ憰濠电偞鍨崹鍦尵瀹ュ鐓冪憸婊堝礈閻旇偐宓侀柟鐗堟緲缁狀噣鏌﹀Ο渚Ъ闁硅姤娲栭埞鎴︽倷閺夋垹浠ч梺鎼炲妿閹虫捁鐏嬪┑鈽嗗灥瀹曠數绮绘ィ鍐╃厱闁斥晛鍟伴幊鍐瑰⿰鍕姢閾绘牠鏌¢崘銊モ偓鑽ゅ娴犲鐓曢悘鐐插⒔閹冲嫮绱掓担瑙勭凡妞ゎ亜鍟伴埀顒佺⊕钃遍柛濠冨姈椤ㄣ儵鎮欓弶鎴濐潔缂備胶绮换鍌烇綖濠靛鏁嗛柛灞诲€曢弫鎼佹⒒閸屾瑧顦﹂柟娴嬪墲缁楃喎螖閸涱厼鐎梺瑙勫劶婵倝宕曞Δ浣虹闁糕剝蓱鐏忣厾绱掗悩鑼Ш闁诡喗顨呴埥澶娾枍閾忣偄鐏╁ù婊勬倐椤㈡﹢鎮橀懡銈嗗殌妤楊亙鍗冲畷濂稿閵忊剝鐦掗梻鍌欑閹碱偊寮甸鍌滅煓闁硅揪绠戦悡姗€鏌熸潏鍓х暠缂佲偓鐎n偁浜滈柟鎵虫櫅閻忊晝鎮鈧濠氬磼濞嗘垵濡藉┑锛勫仜濞尖€崇暦閵忥紕顩烽悗锝庝簽椤斿洦淇婇妶蹇曞埌闁哥噥鍋嗙划濠氭偄閸忚偐鍘甸梻鍌氬€搁顓㈠礉瀹ュ鐓曢悗锝庝憾閸庢棃鏌$仦鍓ф创妞ゃ垺娲熼弫鎰板炊閳哄啯姣夐梻鍌欐祰瀹曠敻宕伴崱娑樼闁瑰瓨绻嶅ḿ鏍ㄧ箾瀹割喕绨诲ù鑲╁█閺屾盯寮撮姀鈩冮敪闂佸憡鎼╅崰姘辨閹惧瓨濯撮柦妯侯槺閸橆偊鎮楅崗澶婁壕缂備礁顑嗛娆撳吹閺囩偐鏀介柣妯虹-椤f煡鏌涚€n亜顏柡宀嬬秮楠炴﹢鎼归锝呴棷婵$偑鍊х€靛矂宕i崘顔肩畺鐎瑰嫭澹嬮崼顏堟煕閹板吀绨芥い鏂匡躬濮婄儤娼幍顔跨獥闂佸摜濮甸悧鐘诲春閵夛箑绶為柟閭﹀墻濞煎﹪姊洪幐搴b槈閻庢凹鍓熼悰顕€骞囬悧鍫氭嫽婵炶揪绲介幉锟犲疮閻愬眰鈧帒顫濋褎鐤侀悗瑙勬礃濠㈡ǹ鐏冮梺鍛婁緱閸橀箖鏁嶅▎鎾粹拺閻熸瑥瀚ˉ瀣熆瑜庨〃濠囧箖閳ユ枼妲堥柕蹇娾偓鏂ュ亾閸洘鐓熼柟浼村亰閺夋椽鏌涢妶鍡欐噧闁宠鍨块、娆撴偂鎼存ê浜鹃柛褎顨呴拑鐔兼煟閺冨倵鎷¢柡浣革躬閺屾稑鈹戦崱妤婁槐闂佺ǹ顑嗛幐鎼佸煘閹达箑骞㈡繛鍡樺姈椤旀洟姊绘担鍛婅础闁稿簺鍊濆畷褰掓偄閼茬尨缍佸畷濂告偄缁嬪灝浼庢繝寰锋澘鈧劙宕戦幘缈犵箚妞ゆ劧绲鹃埛鎺撲繆閸欏濮嶉柡浣规崌閺佹捇鏁撻敓锟� ---闂傚倸鍊搁崐鎼佸磹閹间礁纾归柟闂寸绾惧綊鏌熼梻瀵割槮缁炬儳缍婇弻鐔兼⒒鐎靛壊妲紒鐐劤缂嶅﹪寮婚悢鍏尖拻閻庨潧澹婂Σ顔剧磼閻愵剙鍔ょ紓宥咃躬瀵鎮㈤崗灏栨嫽闁诲酣娼ф竟濠偽i鍓х<闁绘劦鍓欓崝銈囩磽瀹ュ拑韬€殿喖顭烽弫鎰緞婵犲嫷鍚呴梻浣瑰缁诲倿骞夊☉銏犵缂備焦岣块崢杈ㄧ節閻㈤潧孝闁稿﹤缍婂畷鎴﹀Ψ閳哄倻鍘搁柣蹇曞仩椤曆勬叏閸屾壕鍋撳▓鍨珮闁革綇绲介悾閿嬬附閸涘﹤浜滈梺鍛婄☉楗挳宕崼鏇熲拻闁稿本鐟ㄩ崗宀勫几椤忓懌浜滈柟瀛樼箖椤ャ垺顨ラ悙鏉戝鐎规洘绮忛ˇ鏌ユ煕閵婏妇绠栭柕鍥у楠炴ḿ鎹勬潪鐗堢潖婵犵鍓濊ぐ鍐偋婵犲啰鈹嶅┑鐘叉祩閺佸秵鎱ㄥ鍡楀箺闁稿孩鎸剧槐鎾存媴閸濆嫅顒併亜閺囧棗娲ら悡姗€鏌熸潏楣冩闁稿﹦鍏橀弻娑樷枎韫囷絾孝闂佸搫顑嗛悷锔炬崲濞戞埃鍋撳☉娆嬬細闁活厼顑囩槐鎺楊敊閼恒儱纾冲Δ鐘靛仜閸熸挳宕规ィ鍐ㄦ闁靛瀵屽ḿ鏃堟⒒娓氣偓濞佳勵殽韫囨洘顫曢柡鍥ュ灩閸屻劑鏌涘Δ鍐ㄤ汗闁衡偓娴犲鐓熼柟閭﹀幗缂嶆垿鏌h箛瀣姢闁逞屽墲椤煤閿曞倸绀堥柣鏂垮悑閸嬫ɑ銇勯弬鎸庮潔闁绘梹鍝鸿瀹曞爼鏁傞崜褎鏅ㄩ梻鍌氬€风粈渚€骞栭锕€纾归柛锔诲幐閸嬫挾绮☉妯荤〗濠㈣埖鍔曢~鍛存煃閳轰礁鏆欑€殿喗瀵х换婵嬫偨闂堟刀銏ゆ煙閸愯尙绠绘い銏℃閹晝绱掑Ο鐓庡箥闂備浇宕甸崰鎰熆濮椻偓椤㈡棃顢橀悙鈺傛杸闂佹枼鏅涢崯顖炲磹閹邦兘鏀介柨娑樺閸樻挳鏌℃担绋库偓鍧楃嵁閸℃凹妲剧紓浣割儏閻楁挸顫忔繝姘<婵﹩鍏橀崑鎾绘倻閼恒儱娈戦梺鍓插亝濞叉牜绮婚悩缁樼厵闁硅鍔﹂崵娆撴煕濮橆剛绉洪柡灞糕偓鎰佸悑閹肩补鈧磭顔愮紓鍌欒兌婵參宕归崼鏇炶摕闁靛ň鏅滈崑鍡涙煕鐏炲墽鈽夋い蹇ユ嫹
开发学院软件开发C++ 设备驱动 阅读

设备驱动

 2008-03-08 21:58:52 来源:WEB开发网 闂傚倸鍊搁崐鎼佸磹閹间礁纾归柟闂寸绾惧綊鏌熼梻瀵割槮缁炬儳缍婇弻鐔兼⒒鐎靛壊妲紒鐐劤缂嶅﹪寮婚悢鍏尖拻閻庨潧澹婂Σ顔剧磼閻愵剙鍔ょ紓宥咃躬瀵鎮㈤崗灏栨嫽闁诲酣娼ф竟濠偽i鍓х<闁诡垎鍐f寖闂佺娅曢幑鍥灳閺冨牆绀冩い蹇庣娴滈箖鏌ㄥ┑鍡欏嚬缂併劎绮妵鍕箳鐎n亞浠鹃梺闈涙搐鐎氫即鐛崶顒夋晬婵絾瀵ч幑鍥蓟閻斿摜鐟归柛顭戝枛椤牆顪冮妶搴′簼缂侇喗鎸搁悾鐑藉础閻愬秵妫冮崺鈧い鎺戝瀹撲礁鈹戦悩鎻掝伀缁惧彞绮欓弻娑氫沪閹规劕顥濋梺閫炲苯澧伴柟铏崌閿濈偛鈹戠€n€晠鏌嶆潪鎷屽厡闁汇倕鎳愮槐鎾存媴閸撴彃鍓卞銈嗗灦閻熲晛鐣烽妷褉鍋撻敐搴℃灍闁绘挻娲橀妵鍕箛闂堟稐绨肩紓浣藉煐濮樸劎妲愰幘璇茬闁冲搫鍊婚ˇ鏉库攽椤旂》宸ユい顓炲槻閻g兘骞掗幋鏃€鐎婚梺瑙勬儗閸樺€熲叺婵犵數濮烽弫鍛婃叏椤撱垹纾婚柟鍓х帛閳锋垶銇勯幒鍡椾壕缂備礁顦遍弫濠氱嵁閸℃稒鍊烽柛婵嗗椤旀劕鈹戦悜鍥╃У闁告挻鐟︽穱濠囨嚃閳哄啰锛滈梺褰掑亰閸欏骸鈻撳⿰鍫熺厸閻忕偟纭堕崑鎾诲箛娴e憡鍊梺纭呭亹鐞涖儵鍩€椤掑啫鐨洪柡浣圭墪閳规垿鎮欓弶鎴犱桓闂佸湱枪閹芥粎鍒掗弮鍫熷仺缂佸顕抽敃鍌涚厱闁哄洢鍔岄悘鐘绘煕閹般劌浜惧┑锛勫亼閸婃牠宕濋敃鈧…鍧楀焵椤掍胶绠剧€光偓婵犱線鍋楀┑顔硷龚濞咃絿妲愰幒鎳崇喓鎷犻懠鑸垫毐闂傚倷鑳舵灙婵炲鍏樺顐ゆ嫚瀹割喖娈ㄦ繝鐢靛У绾板秹寮查幓鎺濈唵閻犺櫣灏ㄥ銉р偓瑙勬尭濡繂顫忛搹鍦<婵☆垰鎼~宥囩磽娴i鍔嶉柟绋垮暱閻g兘骞嬮敃鈧粻濠氭偣閸パ冪骇鐎规挸绉撮—鍐Χ閸℃ê闉嶇紓浣割儐閸ㄥ墎绮嬪澶嬪€锋い鎺嶇瀵灝鈹戦埥鍡楃仯闁告鍕洸濡わ絽鍟崐鍨叏濡厧浜鹃悗姘炬嫹闂傚倸鍊搁崐鎼佸磹閹间礁纾归柟闂寸绾惧綊鏌熼梻瀵割槮缁炬儳缍婇弻鐔兼⒒鐎靛壊妲紒鐐劤缂嶅﹪寮婚悢鍏尖拻閻庨潧澹婂Σ顔剧磼閻愵剙鍔ょ紓宥咃躬瀵鎮㈤崗灏栨嫽闁诲酣娼ф竟濠偽i鍓х<闁诡垎鍐f寖闂佺娅曢幑鍥灳閺冨牆绀冩い蹇庣娴滈箖鏌ㄥ┑鍡欏嚬缂併劌銈搁弻鐔兼儌閸濄儳袦闂佸搫鐭夌紞渚€銆佸鈧幃娆撳箹椤撶噥妫ч梻鍌欑窔濞佳兾涘▎鎴炴殰闁圭儤顨愮紞鏍ㄧ節闂堟侗鍎愰柡鍛叀閺屾稑鈽夐崡鐐差潻濡炪們鍎查懝楣冨煘閹寸偛绠犻梺绋匡攻椤ㄥ棝骞堥妸鈺傚€婚柦妯侯槺閿涙稑鈹戦悙鏉戠亶闁瑰磭鍋ゅ畷鍫曨敆娴i晲缂撶紓鍌欑椤戝棛鈧瑳鍥ㄥ€垫い鎺戝閳锋垿鏌i悢鍛婄凡闁抽攱姊荤槐鎺楊敋閸涱厾浠搁悗瑙勬礃閸ㄥ潡鐛崶顒佸亱闁割偁鍨归獮宥囩磽閸屾艾鈧兘鎮為敃鍌涙櫔缂傚倷鐒﹂妵鍡涘炊閵娧冨笚闁荤喐绮嶇划鎾崇暦濠婂牊鏅濋柛灞炬皑閻撴垿姊洪崨濠傚Е闁绘挸鐗嗗玻鍧楀冀椤撶喓鍘卞┑鐘绘涧濡鎮甸弮鍌涘枑闁哄倽娉曢弳锕傛煙椤栫偛浜版俊鑼亾缁绘稓鈧數枪瀛濋梺闈涚墢鏋い顐㈢箻閹煎湱鎲撮崟顐ゅ酱闂備浇鍋愰埛鍫ュ礈濞戙埄鏁婂鑸靛姈閳锋垿鏌i幘铏崳缂佸娅g槐鎺楁偐瀹曞洤鈷屽Δ鐘靛仜閸燁垶濡堕敐澶婄闁宠桨璁查崑鎾寸節濮橆厾鍙冨┑鈽嗗灟鐠€锕€危婵傚憡鐓欓柤鎭掑劜缁€瀣叏婵犲啯銇濇俊顐㈠暙閳藉娼忛…鎴斿亾閸℃ḿ绡€缁剧増菤閸嬫捇鎼归銏$亷闁诲氦顫夊ú蹇涘垂娴犲绠栧ù鐘差儏瀹告繂鈹戦悙闈涗壕閻庢艾銈稿娲嚒閵堝懏鐎鹃梺鑽ゅ枂閸庢娊鍩€椤掍焦鐨戦柛蹇斆悾鐑筋敍濠靛牏鏉稿┑鐐村灦閻熝囧储闁秵鈷戠紓浣光棨椤忓棗顥氭い鎾跺枑濞呯娀鏌i姀鐘冲暈闁绘挸绻橀弻娑㈠焺閸愮偓鐣堕梺閫炲苯澧繝鈧潏鈺冪=闁规儳顕々鐑芥倵閿濆簼绨荤紒鎰⊕缁绘繈鎮介棃娴躲垽鎮楀鐓庡⒋闁绘侗鍣e畷濂稿Ψ閿旇瀚肩紓浣鸿檸閸樺ジ骞婃惔銊嬪顓兼径瀣幍濠电偠灏濠勮姳閼恒儰绻嗛柛娆忣槸婵秶鈧鍠楅幐鎶藉箖閵忋倕浼犻柛鏇樺妼瑜板繘姊婚崒姘偓鎼佸磹閹间礁纾瑰瀣椤愯姤鎱ㄥ鍡楀幊缂傚倹姘ㄩ幉绋款吋閸パ冪柧闂傚倷绶氬ḿ褔鎮ч崱妞曟椽鎮╃拠鑼紱闂佸湱鍋撻崜姘缚閳哄倶浜滈柟鎵虫櫅閻忊晝绱掓笟鍥ф珝婵﹨娅g槐鎺懳熼崷顓犵畳闂備線娼荤紞鍥╃礊娓氣偓閹即顢氶埀顒勭嵁閹烘绠犻柧蹇e亝椤ュ牓鏌涢埞鎯т壕婵$偑鍊栫敮鎺楀磹缂佹ḿ鈻旂€广儱顦伴悡銉︾節闂堟稒顥炴い銉уХ缁辨帡鍩﹂埀顒勫磻閹剧粯鈷掗柛灞捐壘閳ь剚鎮傞幃褎绻濋崟顓犵厯闂佺鎻粻鎴澬ч崣澶岀闁糕剝顨堢拹鈺呮煟閻旂ǹ顥愰柛顐邯閺屾盯顢曢悩鑼紕闂佸搫妫崑濠傤潖濞差亜浼犻柛鏇ㄥ幘閸斿湱绱撻崒姘毙¢柣鎺炵畵楠炲牓濡搁埡浣哄姦濡炪倖甯掔€氼參鎮¢崘顔界厵妞ゆ牗绮岄。鑲╃棯椤撶姴浜剧紒缁樼箞閸┾偓妞ゆ帊鐒︾紞鍥煏婵炑冩噹妤犲嫰姊绘担鍛婃儓婵炲眰鍔戝畷浼村箻鐠哄搫袣闂侀€炲苯澧柍瑙勫灴椤㈡瑩寮妶鍕繑闂備礁鎲¢敃銏㈢不閺嵮呮殾闁靛繈鍊栭崑銊╂煕濞戞☉鍫ュ箯閾忓湱纾介柛灞剧懅閸斿秹鏌ㄥ顑芥斀妞ゆ洖妫涢悾鐢告煛鐏炲墽娲存鐐达耿瀵爼骞嬪┑鍥ㄥ殘闂傚倷娴囬鏍窗濡ゅ嫭鎳屾繝鐢靛仧閸樠呮崲濡绻嗛柟闂寸鍥撮梺鎼炲劗閺呮繈寮虫导瀛樷拻闁稿本鐟чˇ锔界節閳ь剚娼忛埡浣哥亰濡炪倖鐗楃划宥夊汲濠婂牊鐓熼柟閭﹀墰閹界姵绻涢崨顖毿g紒缁樼洴楠炲鎮欑€靛憡顓荤紓浣哄亾瀹曟﹢宕戦幇顔筋潟闁规儳鐡ㄦ刊鎾偣閹伴潧鐏g紒杈ㄦ緲閳规垿鎮欓弶鎴犵シ濡炪倖娲﹂崣鍐春閳ь剚銇勯幒鎴濇灓婵炲吋鍔栫换娑㈠矗婢跺苯鈪归梺浼欑悼閸忔﹢銆佸Δ鍛妞ゅ繐鍟伴懗娲⒒閸屾艾鈧绮堟笟鈧獮澶愭晸閻樿尙顦梺鍝勬储閸ㄥ綊鎮块鈧弻锝呂熷▎鎯ф缂備讲鍋撻柛顐ゅ枔缁♀偓闂傚倸鐗婄粙鎾存櫠濞戞埃鍋撶憴鍕鐎殿喖澧庨幑銏犫槈閵忕姷顓洪梺缁樺姂閸斿海妲愭导瀛樷拺闁告繂瀚ˉ婊勪繆椤愶綆娈滈柛鈺冨仱楠炲鏁傞挊澶夋睏闂佸搫顦悧婊堝磻閸曨垰鍌ㄩ柨鐔哄У閳锋垿寮堕悙鏉戭棆闁告柨绉归弻锝呂旀担铏圭厒濠碘€冲级閸旀瑩鐛Ο灏栧亾濞戞顏堫敁閹惧绠鹃悗鐢登瑰瓭濡炪倖鍨甸幊姗€鐛Δ鍛仺闁告稑艌閹锋椽姊洪棃鈺佺槣闁告ü绮欏畷鐢稿焵椤掆偓閳规垿鎮欓懠顒佸嬀闂佺ǹ锕ョ换鍫ョ嵁閸愨斂鍋呴柛鎰ㄦ櫅閳ь剙顭烽弻锕€螣娓氼垱楔濡炪倖鏌ㄩ敃顏勵潖閾忚鍠嗛柛鏇ㄥ墮閸撳綊姊洪崨濞掕偐鍒掑▎蹇曟殾闁瑰墽绮崑銊╂煕濞戞☉鍫ュ箯濞差亝鈷戦柤濮愬€曢弸鎴炵節閵忊槄鑰挎鐐插暞缁楃喖鍩€椤掑嫬钃熼柨婵嗩槸缁犳娊鏌i幇顔芥毄闁哄棎鍊濆铏规嫚閳ヨ櫕鐏嶅銈冨妼閿曨亪鎮伴鈧浠嬪Ω閿曗偓椤庢捇姊虹粙璺ㄧ妞わ附澹嗛埀顒佷亢濡嫰鍩為幋锔藉€烽柤鎼佹涧濞懷呯磽娴g懓绲绘繛灏栤偓宕囨殾闁哄洢鍨瑰洿婵犮垼娉涢敃銈夊箚閻愮儤鈷戦梺顐ゅ仜閼活垱鏅剁€涙ɑ鍙忓┑鐘插暞閵囨繃顨ラ悙瀵稿⒌闁诡喗鐟ラ湁閻庯綆浜欐竟鏇㈡⒑閸濆嫮鈻夐柛妯圭矙瀹曟垹鈧綆鍠楅悡鐔镐繆椤栨氨浠㈤柛姘贡閳ь剝顫夐幐椋庢濮樿埖鍋傛い鎰剁畱閻愬﹪鏌曟繛褉鍋撳┑顔兼喘濮婃椽宕崟顒€娅ら梺璇″枛閸婂灝顕f繝姘╅柍鍝勫€告禍鐐烘⒑缁嬫寧婀扮紒瀣灴椤㈡棃鏁撻敓锟�濠电姷鏁告慨鐑藉极閸涘﹥鍙忛柣鎴f閺嬩線鏌涘☉姗堟敾闁告瑥绻橀弻锝夊箣閿濆棭妫勯梺鍝勵儎缁舵岸寮诲☉妯锋婵鐗婇弫楣冩⒑閸涘﹦鎳冪紒缁橈耿瀵鏁愭径濠勵吅闂佹寧绻傚Λ顓炍涢崟顖涒拺闁告繂瀚烽崕搴g磼閼搁潧鍝虹€殿喛顕ч埥澶娢熼柨瀣垫綌婵犳鍠楅〃鍛存偋婵犲洤鏋佸Δ锝呭暞閳锋垿鏌涘☉姗堝姛闁瑰啿鍟扮槐鎺旂磼濡櫣浼屾繝纰夌磿閺佽鐣烽悢纰辨晬婵﹢纭搁崯瀣⒒娴e憡鍟炴い銊ョ墦瀹曟垿鎮㈤崫銉祫闂佸吋绁撮弲婵堝閽樺褰掓晲閸涱喗鍎撳銈呴閻倿寮诲☉銏犖╅柕澹啰鍘介柣搴㈩問閸犳盯顢氳閸┿儲寰勯幇顒夋綂闂佺粯岣块弫鎼佸级閹间焦鈷掗柛灞捐壘閳ь剚鎮傞幃褎绻濋崟顓犵厯闂佸湱鍎ら〃鍡涘磹閸洘鐓曟い鎰Т閸旀粓鏌涙繝鍕毈闁哄矉缍侀幃銏ゅ传閸曞灚姣夐梻浣告憸閸犳捇宕戦悢鐑橆潟闁圭儤姊圭€氭岸鏌熺紒妯虹瑲婵炲牏绮换婵堝枈婢跺瞼锛熼梺杞版祰椤曆囨偩閻戣姤鍋勭痪鎷岄哺閺咁剙鈹戦鏂よ€跨痪顓熸倐瀹曨垳鈧綆鍠楅埛鎴︽偣閸ャ劎鍙€闁告瑥瀚换娑欐媴閸愬弶鎼愮紒鐘靛劋缁绘繃绻濋崒婊冾杸闂佺ǹ顑傞弲娑㈠煘閹达箑纾兼慨姗嗗幖閺嗗牓姊洪幎鑺ユ暠闁搞劌缍婇幆鈧い蹇撶墱閺佸洭鏌i幇顓熺稇妞ゅ孩绋戦埞鎴︽倷閹绘帗鍊梺鍛婃⒐閻楁粓骞戦姀鐘闁靛繆鈧櫕顓绘俊鐐€栧濠氬磻閹剧粯鐓涢悗锝庝簻椤掋垽鏌曢崶褍顏い銏℃礋婵偓闁靛繈鍩勯崬铏圭磽閸屾瑦绁板鏉戞憸閺侇噣骞掗弴鐘辫埅闂傚倷绀侀崥瀣矈閹绢喖鐤炬繝濠傜墕閸氬湱鈧厜鍋撻柛鏇ㄥ厴閹风粯绻涢幘鏉戠劰闁稿鎹囬弻宥堫檨闁告挻鐩畷鎴濃槈閵忊€虫濡炪倖鐗楃粙鎺戔枍閻樼偨浜滈柡鍐ㄦ搐娴滃綊鏌¢崱妤侇棦闁哄被鍔岄埞鎴﹀幢濞嗗浚鏆梻浣告啞閺屻劑鎮樺璺何﹂柛鏇ㄥ灡閺呮粓鏌i敐鍛板鐎殿喓鍔戝铏规嫚閳ヨ櫕鐝紓浣虹帛缁诲啯绌辨繝鍥ㄥ殝闂傚牊绋撶粣鐐烘煟鎼搭垳绉甸柛鎾寸懅閺侇喗銈i崘鈹炬嫽婵炶揪绲挎灙妞ゃ儱绻橀弻娑氣偓锝庝簼閸d粙鏌熼獮鍨伈鐎规洘锕㈤、娆撴嚃閳哄骞㈠┑锛勫亼閸婃洜鎹㈤幇鏉跨疇闁归偊鍠氭稉宥夋煕閹炬せ鍋撻柛瀣崌閹兘寮跺▎鐐棏闂備礁鎽滄慨闈浢哄⿰鍫熷殟閺夊牄鍔庣弧鈧┑顔斤供閸撴盯鎮炬ィ鍐┾拺缂備焦蓱閻撱儵鏌涘顒夊剶闁糕晜鐩獮瀣晜閽樺鍋撻悽鍛婄厱闁挎棁顕ч獮鏍冀閿熺姵鈷戦梻鍫熺⊕椤ユ粓鏌涢悢鍛婂唉鐎殿喖顭锋俊鑸靛緞婵犲嫷妲伴梻浣藉亹閳峰牓宕滃▎鎾村亗闁绘柨鍚嬮崐鐢告偡濞嗗繐顏紒鈧崘顏嗙<閻犲洩灏欐晶锔锯偓娈垮櫘閸嬪﹤鐣峰鈧、娆撴嚃閳轰礁袝濠碉紕鍋戦崐鏍暜閹烘柡鍋撳鈧崶褏鍔﹀銈嗗笂閻掞箓藟閸懇鍋撶憴鍕闁挎洏鍨介妴浣糕枎閹惧啿绨ユ繝銏n嚃閸ㄦ澘煤閿曞倹鍋傞柡鍥ュ灪閻撳啴鏌嶆潪鎵槮闁哄鍊栫换娑㈠醇閻曞倽鈧潡鏌″畝瀣М闁诡喓鍨荤划娆撳垂椤曞懏缍掑┑鐘愁問閸犳牠鏁冮妷銉富濞寸姴顑呯粻鏍煃閳轰礁鏆為柛搴e枛閺屽秹鍩℃担鍛婃闂佷紮璁g紞浣割潖缂佹ɑ濯撮柧蹇曟嚀缁楋繝姊虹紒姗嗘畷婵炶尙鍠愭穱濠囧礈娴h櫣鐓撻柣鐘充航閸斿秴鈻撴ィ鍐┾拺缂備焦锚閻忥箑鐣濋敐鍫熺《鐎殿啫鍥х劦妞ゆ帒瀚埛鎴︽煙閼测晛浠滈柛鏂哄亾闂備礁鎲¢崝鎴﹀礉鎼淬劌围妞ゆ洍鍋撴慨濠傤煼瀹曟帒鈻庨幋鐘靛床婵犵數鍋橀崠鐘诲礋閸偒鍟嶉梻濠庡亜濞诧箑煤濮椻偓閿濈偤寮撮姀锛勫幐闂佹悶鍎崕閬嶆倶閳哄懏鐓曢悘鐐额嚙婵′粙鏌曢崶褍顏紒鐘崇洴楠炴ḿ鎹勬笟顖涙緫闂傚倷鐒︽繛濠囧绩闁秴鍨傞柛褎顨呴拑鐔兼煟閺傚灝鎮戦柛銈呭暣閺屽秵娼悧鍫▊缂備緡鍠栭悥鐓庮潖濞差亜宸濆┑鐘插暊閹风懓顪冮妶鍐ㄥ闁挎洦浜滈锝嗙節濮橆厽娅㈤梺缁樕戣ぐ鍐玻濞戞﹩娓婚柕鍫濇椤ュ牓鏌℃笟鍥ф灍闁逛究鍔戝畷鍫曞煛閸愵亷绱冲┑鐐舵彧缁叉寧鐏欓梺閫炲苯澧繝鈧柆宥呮瀬妞ゆ洍鍋撻柟顔哄灪娣囧﹪骞橀搹顐㈢獩闂侀€炲苯澧存繛浣冲洤绠烘繝濠傛噹椤ユ艾鈹戦崒婧撳湱鐥閺屾盯顢曢敐鍥f婵犲痉銈呬汗缂佽鲸甯掕灃濞达絼璀﹂弳锛勭磽娴h櫣甯涢柣鈺婂灦楠炲啴鍩勯崘鈺佸妳闂佹寧绻傚ù鍌炲疮鐎n喗鈷掑ù锝堟閵嗗﹪鏌¢崒娆戠獢鐎规洘绮岄埞鎴犫偓锝庝簽椤斿棝姊洪崨濠勨槈闁宦板姂閹繝濡烽埡鍌氣偓鐢告煥濠靛棙鍣藉ù鐘崇〒缁辨挸顓奸崱鈺傜杹濠殿喖锕ら…宄扮暦閹烘埈娼╂い鎴f娴滃墽鈧懓瀚崳纾嬨亹閹烘垹鍊為悷婊勭矊闇夐柡宥庡幗閻撳繐鈹戦悙闈涗壕婵炲懎妫濋弻娑欑節閸屾稑浠撮梺鍝勮閸旀垵顕i幘顔藉€锋繛鏉戭儏娴滈箖鏌涘┑鍕姢濞戞挸绉归弻锛勪沪鐠囨彃濮曢梺缁樻尰濞茬喖寮婚弴鐔风窞婵☆垳鍎ら悘鍫熺節閳封偓鐏炶姤鐝濋梺鍝勭焿缁辨洟鍩€椤掑﹦宀涢柡鍛箘缁綁寮崼鐔哄幐閻庡厜鍋撻柍褜鍓熷畷浼村冀瑜忛弳锔界節婵犲倹锛嶆俊鏌ョ畺閺岋綁濮€閳轰胶浠梺鐑╂櫓閸ㄨ泛顕f繝姘櫢闁绘ɑ褰冪粣娑橆渻閵堝棙顥嗘俊顐㈠閸┾偓妞ゆ帊绀佹慨宥夋煛瀹€瀣?濞寸媴濡囬幏鐘诲箵閹烘繃缍嗛梻鍌欐祰椤曟牠宕伴幘璇茬9婵犻潧妫涢弳锕傛煙閻戞ê鐏嶆俊鎻掔墛閹便劌螖閳ь剙螞閺冨倹顫曢柨鐕傛嫹闂傚倸鍊搁崐鎼佸磹閹间礁纾归柟闂寸绾惧綊鏌熼梻瀵割槮缁炬儳缍婇弻鐔兼⒒鐎靛壊妲紒鐐劤缂嶅﹪寮婚悢鍏尖拻閻庨潧澹婂Σ顔剧磼閻愵剙鍔ょ紓宥咃躬瀵鎮㈤崗灏栨嫽闁诲酣娼ф竟濠偽i鍓х<闁诡垎鍐f寖闂佺娅曢幑鍥灳閺冨牆绀冩い蹇庣娴滈箖鏌ㄥ┑鍡欏嚬缂併劎绮妵鍕箳鐎n亞浠鹃梺闈涙搐鐎氫即鐛崶顒夋晬婵絾瀵ч幑鍥蓟閻斿摜鐟归柛顭戝枛椤牆顪冮妶搴′簼缂侇喗鎸搁悾鐑藉础閻愬秵妫冮崺鈧い鎺戝瀹撲礁鈹戦悩鎻掝伀缁惧彞绮欓弻娑氫沪閹规劕顥濋梺閫炲苯澧伴柟铏崌閿濈偛鈹戠€n€晠鏌嶆潪鎷屽厡闁汇倕鎳愮槐鎾存媴閸撴彃鍓卞銈嗗灦閻熲晛鐣烽妷褉鍋撻敐搴℃灍闁绘挻娲橀妵鍕箛闂堟稐绨肩紓浣藉煐濮樸劎妲愰幘璇茬闁冲搫鍊婚ˇ鏉库攽椤旂》宸ユい顓炲槻閻g兘骞掗幋鏃€鐎婚梺瑙勬儗閸樺€熲叺婵犵數濮烽弫鍛婃叏椤撱垹纾婚柟鍓х帛閳锋垶銇勯幒鍡椾壕缂備礁顦遍弫濠氱嵁閸℃稒鍊烽柛婵嗗椤旀劕鈹戦悜鍥╃У闁告挻鐟︽穱濠囨嚃閳哄啰锛滈梺褰掑亰閸欏骸鈻撳⿰鍫熺厸閻忕偟纭堕崑鎾诲箛娴e憡鍊梺纭呭亹鐞涖儵鍩€椤掑啫鐨洪柡浣圭墪閳规垿鎮欓弶鎴犱桓闂佸湱枪閹芥粎鍒掗弮鍫熷仺缂佸顕抽敃鍌涚厱闁哄洢鍔岄悘鐘绘煕閹般劌浜惧┑锛勫亼閸婃牠宕濋敃鈧…鍧楀焵椤掍胶绠剧€光偓婵犱線鍋楀┑顔硷龚濞咃絿妲愰幒鎳崇喓鎷犻懠鑸垫毐闂傚倷鑳舵灙婵炲鍏樺顐ゆ嫚瀹割喖娈ㄦ繝鐢靛У绾板秹寮查幓鎺濈唵閻犺櫣灏ㄥ銉р偓瑙勬尭濡繂顫忛搹鍦<婵☆垰鎼~宥囩磽娴i鍔嶉柟绋垮暱閻g兘骞嬮敃鈧粻濠氭偣閸パ冪骇鐎规挸绉撮—鍐Χ閸℃ê闉嶇紓浣割儐閸ㄥ墎绮嬪澶嬪€锋い鎺嶇瀵灝鈹戦埥鍡楃仯闁告鍕洸濡わ絽鍟崐鍨叏濡厧浜鹃悗姘炬嫹  闂傚倸鍊搁崐鎼佸磹閹间礁纾归柟闂寸绾惧綊鏌熼梻瀵割槮缁炬儳缍婇弻鐔兼⒒鐎靛壊妲紒鐐劤缂嶅﹪寮婚悢鍏尖拻閻庨潧澹婂Σ顔剧磼閻愵剙鍔ょ紓宥咃躬瀵鎮㈤崗灏栨嫽闁诲酣娼ф竟濠偽i鍓х<闁绘劦鍓欓崝銈囩磽瀹ュ拑韬€殿喖顭烽弫鎰緞婵犲嫷鍚呴梻浣瑰缁诲倿骞夊☉銏犵缂備焦岣块崢閬嶆⒑闂堟稓澧曢柟鍐查叄椤㈡棃顢橀姀锛勫幐闁诲繒鍋犻褔鍩€椤掍胶绠撻柣锝囧厴椤㈡洟鏁冮埀顒€鏁梻浣瑰濡焦鎱ㄩ妶澶嬪剨閹肩补妾ч弨浠嬫煟閹邦剚鈻曢柛銈囧枎閳规垿顢氶埀顒€岣胯閿濈偛鈹戠€n€晝鎲告惔顭掔稏闁哄洢鍨洪悡娆撴煙鐟欏嫬濮﹂柛銈嗙懅閻ヮ亪骞嗚閹垹绱掔紒妯兼创鐎规洖宕灒闁惧繐婀遍幊鍡涙⒒娴e憡鍟為柨鏇ㄥ亞濡叉劙寮撮悩鎰佹綗闂佽鍎抽顓㈡偡瑜版帗鐓曢柕澶嬪灥鐎氼喛銇愰鐐粹拻濞达綀顫夐崑鐘绘煕閺傝法鐒搁柟顔哄劦瀹曟姊荤€靛摜鐣鹃梻浣告贡閾忓酣宕伴弽顐ょ焼闁告劏鏂傛禍婊堟煛閸愩劌鈧摜鏁崜浣虹<闁归偊鍘惧ú瀛樻叏婵犲啯銇濈€规洦鍋婂畷鐔煎垂椤愬诞鍥ㄢ拺闁硅偐鍋涙俊鑲╃磽瀹ュ拑宸ラ柣锝囧厴婵偓闁绘ê妫欏浠嬨€侀弮鍫濆窛妞ゆ挻绋戞禍楣冩煕椤垵浜芥繛鍫滅矙閺岋綁骞囬姘辨婵炲濮伴崹浠嬪蓟濞戙垹绫嶉柍褜鍓涢崰濠傤吋婢跺á锕傛煕閺囥劌鐏¢柡鍛矒閹綊宕堕鍕婵炲濮甸幃鍌炲箖濡ゅ啯鍠嗛柛鏇ㄥ墰閳规稓绱撴担铏瑰笡缂佽鐗撻幃浼搭敊閼恒儱鍔呴梺闈涒康缁犳垵鈻撻悢鍏尖拺闂傚牊鍐荤槐锟犳煕閹扳晛濡兼い鈺婂墴濮婂宕掑顑藉亾閹间降鍋戦柟缁㈠枛绾惧鏌涢弴銊モ偓瀣洪鍛珖闂侀€炲苯澧伴柛娆忔嚇濮婃椽宕崟顓夌娀鏌涢弬鍨劉闁哄懎鐖奸弫鎾绘偐閺傘儲瀚介梻浣呵归張顒勬偡閿斿墽鐭堥柣妤€鐗勬禍婊堟煛閸パ勵棞闁瑰啿顦靛畷鎴﹀箻鐠囨彃鐎銈嗗姂閸ㄨ櫣鎷犻悙鐑樺€甸悷娆忓缁€鍐磼椤旇姤宕屾鐐插暣婵偓闁挎稑瀚板顔界節閵忥絾纭炬い鎴濇川缁瑦绗熼埀顒€顫忕紒妯诲闁荤喐婢樻慨銏㈢磽娴h櫣甯涢柛鏃€娲熼弫鍐閳╁啰绉堕梺瀹犳〃缁垛€澄涘⿰鍫熲拺缂佸娉曠粻缁樹繆椤愩儲纭堕柟骞垮灲瀹曞崬螣闂€鎰泿闂備礁鎼粔鏌ュ礉鎼淬劊鈧倿寮婚妷锔惧幍濡炪倖鐗楀銊︽櫠濞戙垺鐓忛柛銉戝喚浼冨銈冨灪濞茬喐鎱ㄩ埀顒勬煏韫囧鐏╁┑顔块哺缁绘繂鈻撻崹顔界亪闂佹寧娲忛崝宀勫煝瀹ュ鏅插璺猴功椤斿棝姊虹紒妯剁細缂侇噮鍨跺畷鐢稿箣閻愵亙绨婚梺鍦劋閸ㄥ灚绂嶉悙鐑樼厱闁绘劙顤傚ḿ鎰磼缂佹ḿ绠撻柍缁樻崌瀹曞綊顢欓悾灞兼喚闂備胶鍘ч悘鏇㈠炊閵娧冨箞闂備礁鎼崯鐘诲磻閹剧粯鐓曢柕濞垮劤娴犮垽鏌i敐鍛Щ閻撱倖銇勮箛鎾愁伀闁告棑绠戦—鍐Χ閸℃鐟愰梻鍌氬缁夌數绮嬪鍛牚闁割偆鍠撻崢鐢告⒑閸涘﹦绠撻悗姘煎枦閸婂瓨淇婇悙顏勨偓褏鎷嬮敐鍥╀笉闁规崘顕ч拑鐔哥箾閹存瑥鐏╅崶鎾煙閼测晞藟闁逞屽墯閺嬪ジ骞忛锔解拻濞达絽鎲¢幆鍫ユ煛閸偄澧撮柟顖氬椤㈡盯鎮欓棃娑氥偊婵犵妲呴崹浼村触鐎n亞鏆﹀鑸靛姈閻撶喖鏌熺€电ǹ浜剁紓鍌涘哺閺屽秷顧侀柛鎾寸箞椤㈡俺顦归柍銉︽瀹曟﹢顢欓崲澹洤绠圭紒顔煎帨閸嬫捇鎳犻鍌涙櫒缂傚倸鍊搁崐鐑芥嚄閸撲礁鍨濇い鏍仜缁€澶嬩繆閵堝懏鍣归柣顓燁殜閺屾稑鈽夐崡鐐插濠电偞鎸搁…鐑藉蓟閺囥垹閱囨繝闈涙搐濞呇呯磽娴e搫小闁告濞婇獮鍐ㄎ旈埀顒勶綖濠靛鍋傞幖绮规閹奉偊姊绘担绛嬪殐闁哥姵顨婇妴鍐╃節閸ャ儮鍋撴担鍓叉建闁逞屽墴楠炲啫饪伴崼婵嗚€垮┑鈽嗗灥濞咃絽危閿濆鈷掗柛灞剧懅缁愭梹绻涙担鍐叉处閸嬪鏌涢埄鍐︿簵婵炴垶菤閺嬪酣鏌熺€电ǹ啸闁绘帒銈稿娲焻閻愯尪瀚板褍鐡ㄩ幈銊︾節閸愨斂浠㈤梺璇″枤閸忔ê顕i崼鏇炵閹兼番鍨诲Σ顏堟⒒閸屾艾鈧绮堟担瑙勫劅婵犲﹤鎳庣欢銈吤归悩宸剱闁稿鏅濋埀顒傛嚀鐎氼厽绔熺€n喖閱囨い蹇撶墛閻撴洟鏌¢崶銉ュ濞存粈绮欓弻娑㈠Χ閸愩劉鍋撳┑瀣摕闁挎繂妫欓崕鐔兼煏韫囧﹥鍣板┑顔兼喘閺屻倗鎲楅妶鍛亾濠靛钃熼柣鏂垮悑閻撱儵鎮楅敐搴′簴濞寸姰鍨归埞鎴︻敊绾嘲濮涚紓渚囧櫘閸ㄥ磭鍒掗銏″亜闁绘挸娴烽崐鐐烘偡濠婂啰鐏遍柤楦块哺缁傛帞鈧綆鍋€閹疯櫣绱撴担鍓插剱妞ゆ垶鐟╁畷鏇㈠箛閻楀牏鍘介梺鍐叉惈閿曘倝鎮橀敂绛嬫闁绘劘顕滈煬顒勬煙椤斿搫鐏柛鐘诧攻濞煎繘濡搁敂鐣屽建婵犵數濮烽弫鎼佸磻閻愬搫鍨傞柛顐f礃閸嬶繝鏌ㄩ弴鐐测偓褰掑磻閻旇 鍋撻悷鏉款伃闁稿锕ら妴鎺撶節濮橆厾鍘梺鍓插亝缁诲啴藟閻愮儤鐓熼柟鎯у船閸旀碍銇勯鈥冲姷妞わ附鎸抽弻锟犲椽娴i晲绨肩紓浣规⒒閸犳牕顕i幘顔碱潊闁炽儱鍘栫花鐢告⒑閻熸澘鎮戦柟顖氱焸瀹曟澘顫濈捄楦垮煘闂佹眹鍨归幉锟犳偂閻斿吋鐓熸俊顖滃帶閸斿銇勮箛鏇炩枅闁诡喗枪缁犳稓鈧綆浜滈~鍥倵鐟欏嫭绀冪紒璇茬墦楠炲啴濮€閵堝棙鍎梺闈╁瘜閸欏繒妲愰幓鎺嗘斀闁绘﹩鍠栭悘杈ㄧ箾婢跺銆掗柍褜鍓氱粙鍫ュ疾閻樻眹鈧線寮崼鐔蜂汗缂傚倷鐒﹀玻鍧楀储閹剧粯鍋℃繝濠傚閻帞鈧娲樼划宀勶綖濠靛浄绱f繝闈涙处濞呮捇姊绘担鍛婃儓缂佸绶氬畷銏ゆ嚃閳哄啰骞撳┑掳鍊曢幊蹇涙偂濞戞埃鍋撻獮鍨姎濡ょ姵鎮傞悰顕€骞囬悧鍫㈠帗閻熸粍绮撳畷婊堝Ω瑜忔稉宥夋煙閹规劦鍤欓柦鍐枛閺屾洘绻涜閸嬫捇鏌涚€n偅宕岄柡浣瑰姍瀹曟帒鈽夊▎鎴濈悼缂傚倸鍊烽懗鑸垫叏閻㈠憡鍤屽Δ锝呭暙閻撴﹢鏌熸潏鎯х槣闁轰礁锕弻锝夋晲閸涱垳浼囬梺浼欑悼閺佽顫忛崫鍔借櫣鎷犻幓鎺旑啇闂備胶绮〃鍛涘Δ鈧悾鐢稿礋椤栨稈鎷虹紓鍌欑劍閿氶柣蹇撳船閳规垿顢欓崫鍕ㄥ亾濠靛鏄ユ繛鎴欏灩缁狅綁鏌eΟ鍏兼毄闁挎稒绮撻弻锝嗘償椤栨粎校闂佺ǹ顑嗙敮鈥崇暦閺囥垹唯闁冲搫鍊婚崢閬嶆煙閸忚偐鏆橀柛銊潐閹便劌顓兼径瀣幐閻庡厜鍋撻柍褜鍓熷畷浼村冀椤撶偟鐣洪梺缁樺灱婵倝宕戠€n喗鐓曟い鎰╁€曢弸鎴︽煕婵犲嫬鍘存慨濠冩そ楠炴垿骞囬鈧幆鐐烘⒑缁嬫鍎嶉柛濠冪箓椤曪絿鎷犲ù瀣潔闂侀潧绻掓慨鐑芥偪閳ь剟姊绘担鍝ユ瀮婵℃ぜ鍔庣划鍫熸媴閸涘﹥娈板┑鐘垫暩婵兘銆傛禒瀣婵犻潧枪娴滃綊鏌涢幇闈涙灍闁稿顑呴埞鎴︽偐閹绘帩浠鹃悗瑙勬礀瀵墎鎹㈠☉銏犵婵炲棗绻掓禒鐓幬旈悩闈涗杭闁搞劎鍎ょ粚杈ㄧ節閸ヮ灛褔鏌涘☉鍗炲箺婵炲牐娉涢—鍐Χ閸℃ḿ鍙嗗銈忓瘜閸ㄥ爼宕洪悙鍝勭闁挎棁妫勯埀顒傚厴閺屻倗鍠婇崡鐐差潻濡炪們鍊愰崑鎾绘⒒閸屾瑧鍔嶉悗绗涘厾楦跨疀濞戞ê鐎悷婊呭鐢亞绱為弽顓犲彄闁搞儯鍔嶇粈鍫㈢棯閹冩倯濞e洤锕、娑樷攽閹邦剚顔勬俊鐐€曠€涒晠骞愮紒妯尖攳濠电姴娲﹂崐椋庘偓鐟板閸犳牠宕滈幍顔剧=濞达綁娼ф慨鈧梺绋款儐閸旀瑩鐛径瀣嚤闁哄鍨甸懓鍨攽閻愬弶顥為柛銊ョ秺閺佸秴鈹戠€n偀鎷虹紓浣割儐鐎笛冿耿閻楀牊鍙忔俊顖溓规慨鈧梺鎰佷簽閺佽顫忕紒妯诲闁告盯娼х紞濠囥€侀弽顓炲耿婵炴垶岣块鍥⒑閻撳寒娼熼柛濠冪墪閻g兘宕f径宀€顔曢梺鐟邦嚟閸嬫盯鎮炶ぐ鎺撶厱閻庯綆鍋呯亸顓㈡煃閽樺妲搁柍璇叉捣閳ь剨缍嗛崜娑氱玻濡ゅ懏鈷掑ù锝堫潐閵囩喖鏌涘Ο铏圭Ш鐎规洘鍔曢埞鎴犫偓锝庝海閹芥洖鈹戦悙鏉戠仧闁搞劌婀辩划缁樼節濮橆厼浠梺鎯х箳閹虫捇宕濈€n喗鐓熼煫鍥ㄦ尵婢э箓鏌熼绛嬫畼闁瑰弶鎸冲畷鐔碱敆閸屻倖袨濠电姷顣槐鏇㈠磻濡厧鍨濇繛鍡楃箳閺嗭附绻涘顔荤盎闁绘帒鐏氶妵鍕箳瀹ュ顎栨繛瀛樼矋缁捇寮婚悢鐓庝紶闁告洦鍘滆娣囧﹪骞嗚濡插妫佹径瀣瘈濠电姴鍊搁顐︽煟椤撶喎娴柡灞糕偓宕囨殕闁逞屽墴瀹曚即寮介鐐电暫濠电姴锕ら崥姗€鎮㈤崗鍏煎劒闂備緡鍋呯粙鎺懳熸繝鍥ㄢ拻闁稿本鐟х粣鏃堟煃瑜滈崜娑㈠磻濞戙垺鍤愭い鏍ㄧ⊕濞呯姵銇勯弬鍨挃缁惧墽鏅埀顒€绠嶉崕閬嶅箯閹存繍鍟呴柕澶涜礋娴滄粓鏌¢崶鏈电敖缂佸鍠楅〃銉╂倷閸欏宕崇紓渚囧枤閺佹悂鍩€椤掑﹦绉甸柛瀣噹閳诲秴鐣濋崟顑芥嫽婵炶揪绲介幉锟犲疮閻愬绠鹃悹鍥囧懐鏆ら悗瑙勬礃缁矂鍩ユ径鎰潊闁绘ɑ褰冩禍鍫曟⒒閸屾瑧璐伴柛鎾寸懅缁棃鎮介崨濠備簵闂佺粯姊婚崢褏绮昏ぐ鎺撶厵缁炬澘宕獮鏍煟韫囥儳鎮肩紒杈ㄥ笚瀵板嫰骞囬鐔兼暘闂傚倸娲らˇ鎵崲濠靛洨绡€闁稿本绋戝▍锝夋⒑閸涘鎴﹀箰閹惰棄钃熼柨婵嗩槸缁犲ジ鏌涢幇鈺佸闁冲嘲顑呴—鍐Χ閸愩劎浠惧銈冨妼閿曘倝鎮鹃悜钘夌闁瑰疇娅曞Λ鍐春閳ь剚銇勯幒宥堝厡妞も晜褰冭灃闁挎繂鎳庨弳鐐烘煕鐎Q冨⒉缂佺粯鐩畷鍗炍旈崘顏嶅敹婵$偑鍊曞ù姘閻愮儤鍎夋い蹇撶墕缁犳氨鎲稿⿰鍫熷亗濠靛倸鎲¢悡娑㈡倶閻愭彃鈷旈柍钘夘樀閹藉爼寮介鐔哄帗閻熸粍绮撳畷婊堟偄妞嬪孩娈惧銈嗙墱閸嬫盯鏌ㄩ妶鍡曠箚闁靛牆鎷戦弨濠氭煛閸滀椒閭慨濠冩そ楠炴劖鎯旈敐鍥╂殼婵$偑鍊х€靛矂宕归搹顐ょ彾闁哄毝棰佹睏闂佸湱鍎ら幐楣冨储娴犲鈷戦柛婵嗗婢跺嫭鎱ㄥΟ绋垮鐎规洘绻傞鍏煎緞鐎e灚顥夐梺璇插嚱缂嶅棝宕板Δ鍛厱闁圭儤顨嗛悡鏇㈡倶閻愭彃鈷旈柟鍐叉噺閵囧嫰鏁傞懖鈺冩殼闂佸搫鐬奸崰鎾诲窗婵犲洤纭€闁绘劖澹嗛惄搴ㄦ⒑閹规劕鍚归柛瀣ㄥ€濋獮鍐ㄎ旈崨顕呮濠电偞鍨堕悷锕傚窗閹邦厾绠鹃柟瀵稿仦鐏忣厾绱掓径濠勭Ш鐎殿喖顭烽幃銏ゆ偂鎼达綆鍞归梻渚€鈧稑宓嗘繛浣冲啠鏋旀い鎾卞灪閳锋垿鏌﹀Ο渚Ц闁哄棛鍠栭弻娑㈡偐瀹曞洤鈷岄悗娈垮枛椤嘲顕i幘顔藉亜闁惧繗顕栭崯搴ㄦ⒒娴h櫣甯涢柛鏃撶畵瀹曟粌顫濋懜闈涗户闂佸搫娲㈤崹娲煕閹寸姷纾奸悗锝庡亽閸庛儵鏌涙惔锛勭濞e洤锕、鏇㈡晲閸モ晝鏉介柣搴㈩問閸犳盯顢氳閸┿儲寰勬繝搴㈠兊濡炪倖鍔х徊鑺ュ垔娴煎瓨鈷掑ù锝呮啞閸熺偤鏌熺粙鎸庮棦闁糕斁鍋撳銈嗗坊閸嬫捇宕¢柆宥嗙厱妞ゆ劧绲跨粻銉︾箾閹炬剚鐓奸柡灞炬礋瀹曠厧鈹戦崶褎鐣婚梻浣虹帛缁嬫帞鍒掗幘璇茶摕闁绘梻鍘х粈鍕煏閸繃顥滄い蹇ユ嫹
核心提示:概述一. linux设备概述在概念上一般把设备分为字符设备、块设备,字符设备是指设备发送和接收数据以字符形式的进行;而块设备则以整个数据缓冲区的形式进行,设备驱动,但是,由于网络设备等有其非凡性,我想再有一段时间应该能够完成,到时候一定交给李老师看一下,实际上系统对它们单独处理,系统用主设备号(MAJOR)加次设备(M

  概述

一. linux设备概述
在概念上一般把设备分为字符设备、块设备。字符设备是指设备发送和接收数据以字符形式的进行;而块设备则以整个数据缓冲区的形式进行。但是,由于网络设备等有其非凡性,实际上系统对它们单独处理。

系统用主设备号(MAJOR)加次设备(MINOR)号来唯一标识一个设备。相同主设备号表示同一类设备,例如都是硬盘;次设备号标识同类设备的个数。所有设备在适当的目录(通常在/dev目录下)下必须有相应的文件,这样字符设备和块设备都可以通过文件操作的系统调用了完成。不同的是,块设备操作经常要和缓冲区打交道,更加复杂一点。



[目录]

--------------------------------------------------------------------------------


数据结构

二. 主要数据结构
与设备治理有关的主要数据结构如下:
1、登记设备治理
系统对已登记设备的治理是由chrdevs和blkdevs这两张列表来完成的:
/*srcfsdevices.c*/
strUCt device_struct {
const char * name; //指向设备名称
struct file_Operations * fops; //指向设备的访问操作函数集,file_operati
ons定义在
include/linux/fs.h中
};
static struct device_struct chrdevs[MAX_CHRDEV] = {
{ NULL, NULL },
}; //所有系统登记的字符设备列表
static struct device_struct blkdevs[MAX_BLKDEV] = {
{ NULL, NULL },
} //所有系统登记的块设备列表

实际上这两张列表的结构是一样的,但在登记时每个结构元素的值会不同(见初始化部分)。linux对设备的进行访问时,访问文件系统中相应的文件,通过文件系统和文件的属性描述块,系统可以找到该文件系统或文件对应设备的设备号。在实际访问列表时,以chrdevs[MAJOR][MINOR]或blkdevs[MAJOR][MINOR]形式访问,相同主设备号(MAJOR)的元素中fops的内容相同。

文件系统中相关的的数据结构如下:
struct super_block {
kdev_t s_dev; //该文件系统所在设备的设备标志符

} //每个文件系统对应一个super_block
struct inode {
kdev_t i_dev; //该文件所在设备的设备标志符通过它可以找到在设备列表中
… 相应设备
} //每个文件对应一个inode

2、I/O请求治理

系统会把一部分系统内存作为块设备驱动程序与文件系统接口之间的一层缓冲区,每个缓冲区与某台块设备中的特定区域相联系,文件系统首先试图存在相应的缓冲区,如未找到就向该设备发出I/O读写请求,由设备驱动程序对这些请求进行处理。因此,需要有相应的数据结构进行治理。

/*srcincludelinuxlkdev.h*/
struct blk_dev_struct {
void (*request_fn)(void); //指向请求处理函数的指针,请求处理函数是写设备驱动程序的重要一环,设备驱动程序在此函数中通过outb向位于I/O空间中的设备命令寄存器发出命令

struct request * current_request; //指向当前正在处理的请求,它和plug共同维护了该设备的请求队列
struct request plug; //这是LINUX2.0版本与以前版本的一个不同之处,plug主要被用于异步提前读写操作,在这种情况下,由于没有非凡的请求,为了提高系统性能,需要等发送完所有的提前读写请求才开始进行请求处理,即unplug_device。
struct tq_struct plug_tq; //设备对应的任务队列
};
/*srcdriverslockll_rw_blk.c*/
struct blk_dev_struct blk_dev[MAX_BLKDEV];
其中每个请求以request的类型的结构进行传递,定义如下:
/*srcincludelinuxlk_dev.h*/
struct request {
volatile int rq_status; //表示请求的状态
kdev_t rq_dev; //是该请求对应的设备号,kdev_t是unsigned s
hort类型,高8位是主设备号,低8位是从设备号,每一请求都针对一个设备发出的;
int cmd; //表示该请求对应的命令,取READ或WRITE;
int errors;
unsigned long sector; //每一扇区的字节数
unsigned long nr_sectors; //每一扇区的扇区数
unsigned long current_nr_sectors; //当前的扇区数;

char * buffer; //存放buffer_head.b_data值,表示发出请求的
数据存取地址;
struct semaphore * sem; //一个信号量,用来保证设备读写的原语操作,

sem=0时才能处理该请求;
struct buffer_head * bh; //读写缓冲区的头指针
struct buffer_head * bhtail; //读写缓冲区的尾指针
struct request * next; //指向下一个请求
};

对不同块设备的所有请求都放在请求数组all_requests中,该数组实际上是一个请求缓冲池,请求的释放与获取都是针对这个缓冲池进行;同时各个设备的请求用next指针联结起来,形成各自的请求队列。定义如下:

/*srcdriverslokcll_rw_blk.c*/
static struct request all_requests[NR_REQUEST];

3、中断请求

设备进行实际的输入/输出操作时,假如时间过长而始终被占用CPU,就会影响系统的效率,必须有一种机制来克服这个问题而又不引起其他问题。中断是最理想的方法。和中断有关的数据结构是;

struct irqaction {
void (*handler)(int, void *, struct pt_regs *); //指向设备的中断响应函数,它在系统初始化时被置入。当中断发生时,系统自动调用该函数
unsigned long flags; //指示了中断类型,如正常中断、快速中断等
unsigned long mask; //中断的屏蔽字
const char *name; //设备名
void *dev_id; //与设备相关的数据类型,中断响应函数可以根

据需要将它转化所需的数据指针,从而达到访问系统数据的功能
struct irqaction *next; //指向下一个irqaction
};

由于中断数目有限,且很少更新,所以系统在初始化时,从系统堆中分配内存给每一个irq_action指针,通过next指针将它们连成一个队列。

4、高速缓冲区

为了加速对物理设备的访问速度,linux将块缓冲区放在Cache内,块缓冲区是由buffer_head连成的链表结构。buffer_head的数据结构如下:
/*includelinuxfs.h*/
struct buffer_head {
unsigned long b_blocknr; /* block number */
kdev_t b_dev; /* device (B_FREE = free) */
kdev_t b_rdev; /* Real device */
unsigned long b_rsector; /* Real buffer location on disk */
struct buffer_head * b_next; /* Hash queue list */
struct buffer_head * b_this_page; /* circular list of buffers in one page *
/
unsigned long b_state; /* buffer state bitmap (see above) */
struct buffer_head * b_next_free;
unsigned int b_count; /* users using this block */
unsigned long b_size; /* block size */
char * b_data; /* pointer to data block (1024 bytes) */
unsigned int b_list; /* List that this buffer appears */
unsigned long b_flushtime; /* Time when this (dirty) buffer should be
written */
unsigned long b_lru_time; /* Time when this buffer was last used. */
struct wait_queue * b_wait;
struct buffer_head * b_PRev; /* doubly linked list of hash-queue */
struct buffer_head * b_prev_free; /* doubly linked list of buffers */
struct buffer_head * b_reqnext; /* request queue */
};

块缓冲区主要由链表组成。空闲的buffer_head组成的链表是按块大小的不同分类组成,linux目前支持块大小为512、1024、2048、4096和8192字节;第二部分是正在用的块,块以Hash_table的形式组织,具有相同hash索引的缓冲块连在一起,hash索引根据设备标志符和该数据块的块号得到;同时将同一状态的缓冲区块用LRU算法连在一起。对缓冲区的各个链表定义如下:
/* fsuffer.c*/
static struct buffer_head ** hash_table;
static struct buffer_head * lru_list[NR_LIST] = {NULL, };
static struct buffer_head * free_list[NR_SIZES] = {NULL, };
static struct buffer_head * unused_list = NULL;
static struct buffer_head * reuse_list = NULL;





[目录]

--------------------------------------------------------------------------------


初始化

三. 设备的初始化
LINUX启动时,完成了实模式下的系统初始化(arch/i386/boot/setup.S)与保护模式下的核心初始化包括初始化寄存器和数据区(arch/i386/boot/compressed/head.S)、核心代码解压缩、页表初始化(arch/i386/kernel/head.S)、初始化idt、gdt和ldt等工作
后,系统转入了核心。调用函数start_kernel启动核心(init/main.c)后,将继续各方面的初始化工作,其中start_kernel最后将调用kernel_thread (init, NULL, 0),创建init进程进行系统配置(其中包括所有设备的初始化工作)。
static int init(void * unused)
{
…………
/* 创建后台进程bdflush,以不断循环写出文件系统缓冲区中"脏"的内容 */
kernel_thread(bdflush, NULL, 0);
/* 创建后台进程kswapd,专门处理页面换出工作 */
kswapd_setup();
kernel_thread(kswapd, NULL, 0);
…………
setup();
…………
在setup函数中,调用系统调用sys_setup()。sys_setup()的定义如下:
//fs/filesystems.c
asmlinkage int sys_setup(void)
{
static int callable = 1;
… …
if (!callable)
return -1;
callable = 0;
… …
device_setup();
… …
在该系统调用中,静态变量callable保证只被调用实际只一次,再次调用时后面的初始化程序不执行。在该调用开始就先进行设备的初始化:device_setup()。
//dirvers/block/genhd.c
void device_setup(void)
{
extern void console_map_init(void);
… …
chr_dev_init();
blk_dev_init();
… …
可以看到device_setup()将依次执行chr_dev_init()、blk_dev_init()等各类设备的初始化程序。每个具体的init函数的内容和具体设备就有关了,但是它们都有一些必须完成的任务:
1、 告诉内核这一驱动程序使用的主设备号,同时提供指向file_operation的指针,以完成对chrdevs和blkdevs的初始化。
2、 对块设备,需要将输入/输出处理程序的入口地址告诉内核。
3、 对块设备,需要告诉缓冲区设备存取的数据块的大小。





[目录]

--------------------------------------------------------------------------------


治理流程

四. 设备治理的流程
下面我们介绍一下整个设备治理的流程。我们以块设备为例,字符设备的流程也和块设备类似,只是没有请求队列治理。
首先,文件系统通过调用ll_rw_block发出块读写命令,读写请求治理层接到命令后,向系统申请一块读写请求缓冲区,在填写完请求信息后,请求进入设备的读写请求队列等候处理。假如队列是空的,则请求立即得到处理,否则由系统负责任务调度,唤醒请求处理。在请求处理过程中,系统向I/O空间发出读写指令返回。当读写完毕后,通过中断通知系统,同时调用与设备相应的读写中断响应函数。





[目录]

--------------------------------------------------------------------------------


添加字符设备

五. 添加一个字符设备
作为对linux设备治理的分析的总结,我们介绍一下如何添加一个设备,首先介绍如何添加一个字符设备。在后面的文章中,我们将新添加的设备称为新设备,说明以我们实现的虚拟的字符设备为例,步骤基本如下:
1. 确定设备的设备名称和主设备号:
我们必须找一个还没有被使用的主设备号,分配给自己的字符设备。假设主设备号为30(在2.0.34的内核中还没有以30作为主设备号的字符设备)。

2. 确定编写需要的file_operations中的操作函数,包括:
static int my_open(struct inode * inode,struct file * file)
//通过宏指令MINOR()提取inode参数的I_rdev字段,确定辅助设备号,然后检查相应的读写忙标志,看新设备是否已经打开。假如是,返回错误信息;
否则置读写忙标志为true,阻止再次打开新设备。
static void my_release(struct inode * inode,struct file * file)
//同my_open类似,只是置读写忙标志为false,答应再次打开新设备。
static int my _write(struct inode * inode,struct file * file,const char * bu
ffer,int count)

//用于对该设备的写
static int my _read(struct inode * inode , struct file * file,char * buffer,
int count)
//用于对该设备的读
static int my_ioctl(struct inode * inode, struct file * file,
unsigned int cmd, unsigned long arg)
//用于传送非凡的控制信息给设备驱动程序,或者长设备驱动程序取得状态信息,在我们实现的虚拟字符设备中,这个函数的功能是用来打开和关闭跟踪功能。

3. 确定编写需要的初始化函数:
void my_init(void)
//首先需要将上述的file_operations中的操作函数的地址赋给某个file_operations的结构变量my_fops中的相应域;然后调用标准内核函数登记该设备:register_chrdev(30,"mychd",&my_fops);最后对必要的变量(例如读写忙标志、跟踪标志等)赋初值。

4. 在drivers/char/mem.c中添加相应语句;
在chr_dev_init函数之前添加drgn_init的原型说明:
void my_init (void);
在chr_dev_init函数的return语句之前添加以下语句:
my_init (); //用于在字符设备初始化时初始化新设备

5. 修改drivers/char/Makefile;
假设我们把所以必要的函数写mychd.c中,则找到"L_OBJS := tty_io.o n_tty.o con
sole.o "行,将"mychd.o"加到其中。
6. 将该设备私有的*.c,*.h复制到目录drivers/char下。
7. 用命令:make clean;make dep;make zImage重新编译内核。
8. 用mknod命令在目录/dev下建立相应主设备号的用于读写的非凡文件。
完成了上述步骤,你在linux环境下编程时就可以使用新设备了。





[目录]

--------------------------------------------------------------------------------


添加块设备

六. 添加一个块设备
接下来我们将介绍如何添加一个块设备。在后面的文章中,我们将新添加的块设备称为新设备,块设备的添加过程和字符设备有相似之处,我们将主要介绍其不同点,步骤基本如下:
1. 确定设备的设备名称和主设备号
我们必须找一个还没有被使用的主设备号,分配给自己的新设备。假设主设备号为30(在2.0.34的内核中还没有以30作为主设备号的块设备),则需要在include/linux/major.h中加入如下句:
#define MY_MAJOR 30
这样我们可以通过MY_MAJOR来确定设备为新设备,保证通用性。

2. 确定编写需要的file_operations中的操作函数:
static int my_open(struct inode * inode,struct file * file)
static void my_release(struct inode * inode,struct file * file)
static int my_ioctl(struct inode * inode, struct file * file,
unsigned int cmd, unsigned long arg)
由于使用了高速缓存,块设备驱动程序就不需要包含自己的read()、write()和fsync()函数,但必须使用自己的open()、 release()和 ioctl()函数,这些函数的作用和字符设备的相应函数类似。

3. 确定编写需要的输入/输出函数:
static int my _read(void) //正确处理时返回值为1,错误时返回值为0
static int my _write(void) //正确处理时返回值为1,错误时返回值为0
值得注重的是这两个函数和字符设备中的my read()、mywrite()函数不同:

参数不同:字符设备中的函数是带参数的,用于对其工作空间(也可以看成是简单的缓冲区)中的一定长度(长度也是参数传递的)的字符进行读写;而块设备的函数是没有参数的,它通过当前请求中的信息访问高速缓存中的相应的块,因此不需要参数输入。
调用形式不同:字符设备中的函数地址是存放在file_operations中的,在对字符设备进行读写时就调用了;而块设备的读写函数是在需要进行实际I/O时在request中调用。这在后面可以看到。

4. 确定编写需要的请求处理函数:
static void my_request(void)
在块设备驱动程序中,不带中断服务子程序的请求处理函数是简单的,典型的格式如下

static void my_request(void)
{
loop:
INIT_REQUEST;

if (MINOR(CURRENT->dev)>MY_MINOR_MAX)
{
end_request(0);
goto loop;
}

if (CURRENT ->cmd==READ)
//CUREENT是指向请求队列头的request结构指针
{
end_request(my_read()); //my_read()在前面已经定义
goto loop;
}


if (CURRENT ->cmd==WRITE)
{
end_request(my_write()); //my_write()在前面已经定义
goto loop;
}

end_request(0);
goto loop;
}
实际上,一个真正的块设备一般不可能没有中断服务子程序,另外设备驱动程序是在系统调用中被调用的,这时由内核程序控制CPU,因此不能抢占,只能自愿放弃;因此驱动程序必须调用sleep_on()函数,释放对CPU的占用;在中断服务子程序将所需的数据复制到内核内存后,再由它来发出wake_up()调用,

5. 假如需要,编写中断服务子程序
实际上,一个真正的块设备一般不可能没有中断服务子程序,另外设备驱动程序是在系统调用中被调用的,这时由内核程序控制CPU,因此不能抢占,只能自愿放弃;因此驱动程序必须调用sleep_on()函数,释放对CPU的占用;在中断服务子程序将所需的数据复制到内核内存后,再由它来发出wake_up()调用。
另外两段中断服务子程序都要访问和修改特定的内核数据结构时,必须要仔细协调,以防止出现灾难性的后果。

首先,在必要时可以禁止中断,这可以通过sti()和cli()来答应和禁止中断请求。
其次,修改特定的内核数据结构的程序段要尽可能的短,使中断不至于延时过长。含有中断服务子程序的块设备驱动程序的编写相对比较复杂,我们还没有完全实现,主要问题是在中断处理之间的协调。因为这些程序是要加入内核的,系统默认为你是完全正确的,假如引起循环或者中断长时间不响应,结果非常严重。我们正在努力实现这一程序。

6. 确定编写需要的初始化函数:
void my_init(void)
需要将的file_operations中的操作函数的地址赋给某个file_operations的结构变量my_fops中的相应域;一个典型的形式是:
struct file_operations my_fops=
{
0,
block_read,
block_write,
0,
0,
my_ioctl,
0,
my_open,
my_release,
block_fsync,
0,
0,
0,
}
my_init中需要作的工作有:

首先调用标准内核函数登记该设备:
register_chrdev(MY_MOJOR,"my--bdev",&my_fops);
将request()函数的地址告诉内核:
blk_dev[MY_MAJOR].request_fn=DEVICE_REQUEST;
DEVICE_REQUEST是请求处理函数的地址,它的定义将在稍后可以看到。
告诉新设备的高速缓存的数据块的块大小:
my_block_size=512; //也可以是1024等等
blksize_size[MY_MAJOR]=& my_block_size;
为了系统在初始化时能够对新设备进行初始化,需要在blk_dev_init()中添加一行代码,可以插在blk_dev_init()中return 0的前面,格式为:
my_init();

7. 在include/linux/blk.h中添加相应语句;
到目前为止,除了DEVICE_REQUEST符合外,还没有告诉内核到那里去找你的request()函数,为此需要将一些宏定义加到blk.h中。在blk.h中找到类似的一行:
#endif /*MAJOR_NR==whatever */
在这行前面加入如下宏定义:
#elif (MAJOR_NR==whatever)

static void my_request(void);
#define DEVICE_NAME "MY_BLK_DEV" //驱动程序名称
#define DEVICE_REQUEST my_request //request()函数指针
#define DEVIEC_NR(device) (MINOR(device)) //计算实际设备号
#define DEVIEC_ON(device) //用于需要打开的设备
#define DEVIEC_OFF(device) //用于需要关闭的设备
8. 修改drivers/block/Makefile;
假设我们把所以必要的函数写mybd.c中,则找到"L_OBJS := tty_io.o n_tty.o cons
ole.o "行,将"mybd.o"加到其中。
9. 将该设备私有的*.c,*.h复制到目录drivers/block下。
10. 用命令:make clean;make dep;make zImage重新编译内核。
11. 用mknod命令在目录/dev下建立相应主设备号的用于读写的非凡文件。
完成了上述步骤,你在linux环境下编程时就可以使用新设备了。





[目录]

--------------------------------------------------------------------------------


一个虚拟的字符设备驱动程序

七. 一个虚拟的字符设备驱动程序
以下是一个虚拟的字符设备驱动程序,该程序是我和潘刚同学的试验结果,本来我们还打算写一个虚拟的块设备驱动程序,由于时间关系,没有能够完全明白中断中断服务子程序的编写方法,因此没有没有能够实现一个可以所有的虚拟的块设备,非常遗憾。不过主要步骤已经在上文中进行了介绍,我想再有一段时间应该能够完成,到时候一定交给李老师看一下。
虚拟的字符设备驱动程序如下,在潘刚同学的试验报告中也有介绍:
/* drgn.h */
#ifdef KERNEL
#define TRACE_TXT(text) {if(drgn_trace) {console_print(text);console_print("


");}}
#define TRACE_CHR(chr) {if(drgn_trace) console_print(chr);}
#define DRGN_READ 1
#define DRGN_WRITE 0
#endif
#define FALSE 0
#define TRUE 1
#define MAX_BUF 120
#define DRGN_TRON (('M' << icon_cool.gif0x01)
#define DRGN_TROFF (('M' << icon_cool.gif0x02)
struct drgn_buf
{
int buf_size;
char buffer[MAX_BUF];
struct drgn_buf *link;
};
/* drgn.c */
#define KERNEL
#include <linux/kernel.h>
#include <linux/sched.h>
#include <linux/tty.h>
#include <linux/signal.h>
#include <linux/errno.h>
#include <linux/malloc.h>
#include <linux/mm.h>
#include <asm/io.h>
#include <asm/segment.h>
#include <asm/system.h>
#include <asm/irq.h>
#include "drgn.h"
static int drgn_trace;
static int write_busy;
static int read_busy;
static struct drgn_buf * qhead;
static struct drgn_buf * qtail;
static int drgn_read(struct inode * , struct file * , char * , int );
static int drgn_write(struct inode * , struct file * , const char *, int );
static int drgn_ioctl(struct inode * , struct file * , unsigned int , unsig
ned long );
static int drgn_open(struct inode *,struct file *);
static void drgn_release(struct inode *,struct file *);
/* extern void console_print(char *);*/
struct file_operations drgn_fops=
{
NULL,
drgn_read,
drgn_write,
NULL,
NULL,
drgn_ioctl,
NULL,
drgn_open,
drgn_release,
NULL,
NULL,
NULL,
NULL
};
void drgn_init(void)
{
drgn_trace=TRUE;
if(register_chrdev(30,"drgn",&drgn_fops))
TRACE_TXT("Cannot register drgn driver as major device 30.")
else
TRACE_TXT("Tiny devie driver registered successfully.")
qhead=0;
write_busy=FALSE;
read_busy=FALSE;
/* drgn_trace=FALSE;*/
return;
}
static int drgn_open(struct inode * inode,struct file * file)
{
TRACE_TXT("drgn_open")
switch (MINOR(inode->i_rdev))
{
case DRGN_WRITE:
if(write_busy)
return -EBUSY;
else{
write_busy=TRUE;
return 0;
}
case DRGN_READ:
if(read_busy)
return -EBUSY;
else{
read_busy=TRUE;
return 0;
}
default:
return -ENXIO;
}
}
static void drgn_release(struct inode * inode,struct file * file)
{
TRACE_TXT("drgn_release")
switch (MINOR(inode->i_rdev))
{
case DRGN_WRITE:
write_busy=FALSE;
return;
case DRGN_READ:
read_busy=FALSE;
return;
}
}
static int drgn_write(struct inode * inode,struct file * file,

const char * buffer,int count)
{
int i,len;
struct drgn_buf * ptr;
TRACE_TXT("drgn_write")
if (MINOR(inode->i_rdev)!=DRGN_WRITE)
return -EINVAL;
if ((ptr=kmalloc(sizeof(struct drgn_buf),GFP_KERNEL))==0)
return -ENOMEM;
len=count < MAX_BUF?count:MAX_BUF;
if (verify_area(VERIFY_READ,buffer,len))
return -EFAULT;
for(i=0;i < count && i<MAX_BUF;++i)
{
ptr->buffer[i]=(char) get_user((char*)(buffer+i));
TRACE_CHR("w")
}
ptr->link=0;
if(qhead==0)
qhead=ptr;
else
qtail->link=ptr;
qtail=ptr;
TRACE_CHR("
")
ptr->buf_size=i;
return i;
}
static int drgn_read(struct inode * inode , struct file * file,
char * buffer, int count)
{
int i,len;
struct drgn_buf * ptr;
TRACE_TXT("drgn_read")
if(MINOR(inode->i_rdev)!=DRGN_READ)
return -EINVAL;
if (qhead==0)
return -ENODATA;
ptr=qhead;
qhead=qhead->link;
len=count < ptr->buf_size?count:ptr->buf_size;
if (verify_area(VERIFY_WRITE,buffer,len))
return -EFAULT;
for (i=0; i<count && i<ptr->buf_size; ++i)
{
put_user((char) ptr->buffer[i],(char *)(buffer+i));
TRACE_CHR("r")
}
TRACE_CHR("
")
kfree_s(ptr,sizeof(struct drgn_buf));
return i;
}
static int drgn_ioctl(struct inode * inode, struct file * file,
unsigned int cmd, unsigned long arg)
{
TRACE_TXT("drgn_ioctl")
/* if (cmd==DRGN_TRON){
drgn_trace=TRUE;
return 0;
}
else
if (cmd==DRGN_TROFF){
drgn_trace=FALSE;
return 0;
}
else
return -EINVAL;*/
switch(cmd)
{
case DRGN_TRON:
drgn_trace=TRUE;
return 0;
case DRGN_TROFF:
drgn_trace=FALSE;
return 0;
default:
return -EINVAL;
}
}

Tags:设备驱动

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接