• 易迪拓培训,专注于微波、射频、天线设计工程师的培养
首页 > 电子设计 > PCB设计 > PCB设计 > 如何移植Linux到晶心平台

如何移植Linux到晶心平台

录入:edatop.com    点击:

鉴于越来越多使用者将Linux移植到晶心平台(Andes Embedded™)上(AndesCore™ N12或N10),本文的目的在协助使用者快速、有效率的将Linux 移植到自建的FPGA板子上(CPU是AndesCore™ 的 N12或N10)。笔者曾协助多家公司工程师进行Linux移植到晶心平台的工作,将Linux移植过程容易遭遇的问题与盲点进行实际说明,期望能对使用者有所帮助,也希望读者不吝指教提供您宝贵的意见。

在进行Linux移植时会发现,使用者的晶心平台可能会有各式各样的组合,除了CPU是使用N12或N10外,使用者对于其他的周边(如RAM,ROM,Timer…..)之搭配各有所好,为了有系统性说明Linux移植的要领,将选定一明确的硬件,软件,与开发工具(toolchain)环境做演练说明,除了让读者可以实作明了文中的叙述,当使用者的周边非原设计的硬件(用户自己的IP)时,可以运用移植的基本原则,更改希望移植IP的Linux驱动程序,其他原始码不动,逐一的将使用者的周边驱动程序移植到晶心的平台。

在Linux移植过程中,使用者须建立一基本观念,那就是整个Linux OS可分为两部分,第一部分是与硬件相关的HW dependence code,这部分的程序代码会因对应不同的硬件而造成软件部分需做不同程度的改写;第二部份是与硬件无关的generic code,这部分的程序代码与硬件无关,纯软件运作,不会因平台(Andes, X86, Arm..)的改变而有差别。移植Linux的工程师第一步需要能区分出哪一部分程序代码是 HW dependence code,另外部分的程序代码就是generic code,如果在这阶段对程序代码判断错误(HW dependence code/generic code)会拖延Linux移植的进程并增加调试时的困难。

Linux移植到晶心平台过程中,首先须先做到Linux基础架构移植成功。在调试时,Linux的基础架构组件是CPU,timer,interrupt与UART,当CPU与这3项周边移植成功后,scheduler可以运行了,printk也可以运行了Linux系统已经可以正常的运作了。接下来的工作只需将需移植的驱动程序一个一个移植即可,基础骨架移植完成后,调试也有printk可用,接下来只需将肉 (需要加的device drivers) 填上即可。Linux移植比较困难的地方是Linux基础架构尚未完成之前(Linux移植的初期阶段)的调试,所幸晶心提供的标准调试工具与AndeShape™的调试器AICE,可以一步一步找出问题之所在,让初期移植Linux的调试也变得很简单,具体得作法,后文会详细说明。本文叙述重点是如何在晶心平台上建立Linux基础架构,至于个别Linux 驱动程序的移植,坊间有许多的书在介绍,本文就不多加赘述。

1. 开发环境与程序
使用者开始进行Linux移植到晶心平台,首先须先选定一版晶心的Linux原始码作为基准再进行软件移植,修改原始码以符合使用者的开发平台,经由工具链的compile与link所产生的Linux的映像文件,再放到FPGA板上以验证程序编写的正确与否,依此开发程序:软件编写->FPGA板验证,再回到软件编写程序直到所有周边IP在FPGA板上验证完全,Linux 移植才完成,如图表 1所示,Linux移植过程中,AICE调试可以有效加快Linux移植的速度。

闂傚倸鍊搁崐鎼佸磹閹间礁纾归柟闂寸绾惧綊鏌熼梻瀵割槮缁炬儳缍婇弻鐔兼⒒鐎靛壊妲紒鐐劤缂嶅﹪寮婚悢鍏尖拻閻庨潧澹婂Σ顔剧磼閻愵剙鍔ょ紓宥咃躬瀵鎮㈤崗灏栨嫽闁诲酣娼ф竟濠偽i鍓х<闁绘劦鍓欓崝銈囩磽瀹ュ拑韬€殿喖顭烽幃銏ゅ礂鐏忔牗瀚介梺璇查叄濞佳勭珶婵犲伣锝夘敊閸撗咃紲闂佺粯鍔﹂崜娆撳礉閵堝洨纾界€广儱鎷戦煬顒傗偓娈垮枛椤兘骞冮姀銈呯閻忓繑鐗楃€氫粙姊虹拠鏌ュ弰婵炰匠鍕彾濠电姴浼i敐澶樻晩闁告挆鍜冪床闂備浇顕栭崹搴ㄥ礃閿濆棗鐦遍梻鍌欒兌椤㈠﹤鈻嶉弴銏犵闁搞儺鍓欓悘鎶芥煛閸愩劎澧曠紒鈧崘鈹夸簻闊洤娴烽ˇ锕€霉濠婂牏鐣洪柡灞诲妼閳规垿宕卞▎蹇撴瘓缂傚倷闄嶉崝宀勫Χ閹间礁钃熼柣鏂垮悑閸庡矂鏌涘┑鍕姢鐞氾箓姊绘担鍛婃儓闁活厼顦辩槐鐐寸瑹閳ь剟濡存担鍓叉建闁逞屽墴楠炲啫鈻庨幘宕囶啇濡炪倖鎸鹃崳銉ノ涜濮婂宕掑▎鎴犵崲濠电偘鍖犻崗鐐☉閳诲酣骞嬮悙瀛橆唶闂備礁婀遍崕銈夈€冮幇顔剧闁哄秲鍔庣弧鈧梻鍌氱墛娓氭宕曢幇鐗堢厸闁告侗鍠氶崣鈧梺鍝勬湰缁嬫垿鍩ユ径鎰闁绘劕妯婂ḿ缁樹繆閻愵亜鈧垿宕曢弻銉﹀殞濡わ絽鍟悡姗€鏌熺€电ǹ浠滅紒鐘靛█濮婅櫣绮欓崠鈩冩暰濡炪們鍔屽Λ婵嬬嵁閸儱惟闁冲搫鍊搁埀顒€顭烽弻锕€螣娓氼垱楔闂佹寧绋掔粙鎴﹀煘閹达附鍊烽柡澶嬪灩娴滃爼姊洪悷鎵紞闁稿鍊曢悾鐑藉醇閺囥劍鏅㈡繛杈剧秮閺呰尙绱撻幘鍓佺=闁稿本鐟чˇ锔姐亜閹存繃鍤囬柟顔矫埞鎴犫偓锝庡亜閳ь剙鐏氶妵鍕箻鐠虹儤鐎虹紓浣筋嚙濡繈寮婚弴銏犻唶婵犻潧鐗忛濠囨⒑閸涘﹤绗傞柛妤佸▕瀵鈽夐姀鈥充簽婵炶揪缍侀弲鑼姳閻e瞼纾藉〒姘搐閺嬶附銇勯弴鍡楁搐閻撯€愁熆鐠哄ソ锟犳偄閼姐倗鏉搁梺瑙勫劤婢у孩顨欓梻鍌欐祰濡椼劑鎮為敃鍌氱婵炲棗绻掗弳锕傛煏婵炵偓娅撻柡浣革躬閹绗熼婊冨弗闂佽 鍋撻柕濞у懐锛濋梺绋挎湰閼归箖鍩€椤掑嫷妫戠紒顔肩墛缁楃喖鍩€椤掑嫨鈧線寮介鐐殿槹濡炪倖鐗楃粙鎴濃枔閹达附鈷戦柛娑橈攻鐏忣偊鏌i幒鐐电暤闁挎繄鍋ゅ鎾閿涘嫬骞嶉梻浣侯攰椤宕濋敃鍌氬惞婵炲棙鍨瑰Λ顖炴煙椤栧棗鍟崐顖炴⒑闁稓鈹掗柛鏂跨焸閿濈偛饪伴崼婵嗚€垮┑掳鍊愰崑鎾搭殽閻愬樊鍎旀慨濠呮缁瑥鈻庨幆褍澹夐梻浣告贡閹虫挸煤椤撱垻宓侀柛鎰╁妷閸亪鏌涢銈呮瀻婵炲牏鍠栧娲濞戣鲸肖闂佺ǹ瀵掗崳锝呯暦閹达箑绠婚悹鍥ㄧ叀閺佹粌鈹戞幊閸婃捇鎳楅崼鏇炵煑闁糕剝绋掗埛鎴︽煕濠靛棗顏璺哄閹便劌螣缁嬪灝顫囬悗瑙勬礃缁诲倿顢橀崗鐓庣窞閻庯綆鍓欓獮宥夋⒒娴e憡鍟為柛鏃€岣挎禍绋库枎閹炬潙鈧潡鏌涘☉姗堟敾闁告瑥绻愰埞鎴︽偐閹绘帩浼€闁汇埄鍨遍惄顖炲蓟閻旈鏆嬮柣妤€鐗嗗▓妤呮倵鐟欏嫭纾搁柛鏂跨Ф閹广垹鈹戠€n亞锛滃┑鐐村灦閻熝囧汲椤撱垺鈷掗柛灞捐壘閳ь剙鍢查湁闁搞儜鍛闂佹眹鍨绘灙缂佹劖顨婇弻娑㈠焺閸愵亖妲堢紒鐐劤濞硷繝寮婚悢鐓庣畾闁绘鐗滃Λ鍕磽娴e搫校闁绘搫绻濆濠氬即閿涘嫮鏉搁梺鍝勬川閸庢劙鍩€椤掆偓閺堫剛鎹㈠☉姘辩當闁告繂瀚~鍥⒑閸濆嫯瀚扮紒澶屽厴绡撳〒姘e亾闁哄本鐩獮妯尖偓闈涙啞閸f澘顪冮妶鍐ㄧ仾鐎光偓閹间礁鏋侀柟鐗堟緲楠炪垺绻涢崱妯虹仼婵℃彃娲︾换婵嗏枔閸喗鐏嶉梺鎸庢磵閺呯姴鐣烽姀銈呯闁兼祴鏅╁ú绋库攽閻樿宸ラ柟铏姉婢规洘绺介崨濠勫幗闂侀€涘嵆濞佳勬櫠椤斿浜滈幖娣灮閻﹥銇勯鍕殶闁逞屽墯缁嬫帟鎽梺绋匡攻閸旀鍩€椤掍緡鍟忛柛鐘愁殜閹繝鏁撻悩顔瑰亾娴h倽鏃堝川椤撶媭妲规俊鐐€栭崹鍏兼叏閵堝洠鍋撳顑惧仮婵﹦绮幏鍛村川婵犲懐顢呴梺鍝勵儛娴滄繄鎹㈠☉銏犵妞ゆ洖鎳忛ˉ鏍磽娓氬洤鏋涙い顓犲厴閻涱喖螣鐏忔牕浜鹃梻鍫熺⊕閹插憡銇勯弮鈧ú鐔煎蓟閿濆鍋愰柛娆忣槸瀹稿爼姊洪崨濠佺繁闁告ê銈搁幃锟犲磼閻愮补鎷洪柡澶屽仦婢瑰棝藝閿曞倹鐓熸俊銈傚亾闁挎洏鍎崇划姘綇閵娧呯槇闂佹悶鍎洪悘娑滎樄闁哄本绋戦埥澶愬础閻愬浜繝鐢靛仜閹冲矂宕愬┑鍡╂綎闁惧繐婀遍惌娆愮箾閸℃ê鍔ら柛鎿冨墴濮婃椽宕ㄦ繝鍐ㄩ瀺缂備浇顕х€氫即鐛幋锕€顫呴柣姗嗗亝閺傗偓闂備焦鎮堕崕顕€寮插┑瀣剨闁割偁鍎查埛鎴犵磼鐎n偄顕滄繝鈧幍顔剧<閻庯綆鍋勯悘銉╂煃鐠囪尙效闁轰焦鍔欏畷顏呮媴閻熸壆妲i梻鍌欑窔濞佳囨偋閸℃瑦宕查柟鐑橆殔缁€鍡椕归悡搴f憼闁绘挸绻橀弻娑㈩敃閵堝懏鐎鹃梺绋匡攻閸旀牠銆冮妷鈺傚€烽柟缁樺笚濞堣尙绱撴担绋库偓鍦暜閻愬搫鐒垫い鎺戯功閸掍即鏌h箛鏂垮摵鐎殿喗鐓¢、妤呭焵椤掑嫬鐓橀柟杈鹃檮閸婄兘鏌℃径瀣仼濞寸姵鎮傞弻锕傚礃椤旂粯鍠氶梺璇″枛缂嶅﹤鐣烽崼鏇炵厸濞达綁鏀遍~鏇熺節濞堝灝鏋涢柨鏇樺妼閳诲秹鏁愭径濠勵唵闂佺粯枪椤曆囨倶閹惰姤鐓i煫鍥风到娴滅偛霉濠婂啰鍩f慨濠勭帛閹峰懘鎸婃径濠冨劒闂備線娼荤紞鍥⒔閸曨剛鈹嶅┑鐘叉搐閻愬﹥銇勯幒鍡椾壕缂備胶濮甸悡锟犲蓟閺囷紕鐤€闁哄洨鍊☉銏$厸闁逞屽墯缁傛帞鈧綆鍋勯埀顒傛暬閺屻劌鈹戦崱娆忓毈缂備降鍔嬬划娆撳蓟濞戞瑧绡€闁告洦鍋傚Σ鎰攽椤旂》鏀绘俊鐐舵铻為柛鎰电厑瑜版帒围闁糕剝鐟﹂崚娑㈡倵鐟欏嫭绀冮柨鏇樺灪娣囧﹪骞栨担鑲濄劍銇勯弮鍥棄闁哄濮电换婵嬫偨闂堟刀銉╂煛娴e憡鍟為柟渚垮姂閹粓鎸婃径瀣偓顒勬⒑閸涘﹦鈽夐柨鏇樺劦瀹曪綀绠涘☉娆戝幗闂佺鎻徊楣兯夋径鎰厸閻庯絺鏅濈粣鏃堟煛瀹€鈧崰鏍ь潖閼姐倐鍋撻棃娑橆棌婵″樊鍠氱槐鎺楁倷椤掆偓缁€鍐┿亜椤愩埄妯€濠碉紕鏁诲畷鐔碱敍濮橆剙鏁ゆ俊鐐€栭崝锕€顭块埀顒傜磼椤旇偐鍩f慨濠呮缁辨帒螣閾忓湱鎳嗛梻浣筋嚙缁绘垵鐣濋崨濠佺箚闁汇垻枪缁€瀣亜閺嶃劍鐨戞い鏂匡躬濮婃椽鎮烽幍顔芥喖缂備浇顕х粔鐢电矉閹烘鍤冮柍鍝勫暟閿涙粓姊虹紒妯哄Е闁告挻鐟╁畷婵嬪Χ閸℃劒绨诲銈嗘尵婵挳宕㈢€电硶鍋撳▓鍨灈妞ゎ厾鍏橀獮鍐閵堝棗浜楅柟鑹版彧缂嶅棗危閸洘鐓熼柣鏂挎憸閻﹦绱掔紒妯烘诞鐎殿噮鍋婇、娆戜焊閺嶎煈娼旈梻渚€娼ф蹇曟閺囥垹鍌ㄥù鐘差儐閳锋垿鎮峰▎蹇擃仼闁告柣鍊栭妵鍕即閵娿儱绠归柣鎾卞€濋弻鐔虹磼閵忕姵鐏嶉梺缁樻尰閻燂箓濡甸崟顖氱睄闁稿本绮嶉幉妯衡攽閻愯尙澧涚紒顔芥崌瀵鍩勯崘鈺侇€撻梺鑽ゅ枑濠㈡﹢锝炲澶嬧拺閻犲洠鈧磭浠┑鈽嗗亜閸熸潙鐣风憴鍕╁亝闁告劏鏅涘▓銈咁渻閵堝棗绗傞柣鎺炵畱閳诲秹鏁冮埀顒勫煘閹达附鍋愰柛顭戝亝濮e嫭绻濆▓鍨珮闁告瑥鍟撮悰顔跨疀濞戞ḿ顦ㄥ銈嗘閸嬫劙藝閵娿儺娓婚柕鍫濇噽缁犱即鏌涢悢鍝勵暭闁靛洦鐟╅獮搴ㄦ嚍閵夈垺瀚藉┑鐐存尰閸╁啴宕戦幘缁樼厓鐟滄粓宕滃杈╃煓闁规崘顕ч悡姗€鏌熼悜姗嗘畷闁绘挻娲熼弻锟犲磼濠靛洨銆婇柤鍙夌墵濮婃椽鎮烽幍顔炬殯闂佹悶鍔岀紞濠囧春閻愬搫绠i柣姗嗗亜娴滈箖鏌ㄥ┑鍡欏嚬缂併劏宕电槐鎺楀箛椤撶姭妲堝銈庝簻閸熷瓨淇婇崼鏇炲耿婵☆垳鈷堝Σ顒勬⒒娴g儤鍤€闁哥喕娉曠划鏃堟偡閹殿喗娈惧銈嗗姀閹筹繝寮崼婵嗙獩濡炪倖妫侀~澶屸偓姘虫閳规垿鎮欓懜闈涙锭缂備浇寮撶划娆撶嵁婢舵劖鏅柛鏇ㄥ墮椤忔悂姊虹捄銊ユ灁濠殿喚鏁婚幃鈥斥枎閹惧鍙勯棅顐㈡祫缁茶姤绂嶅┑瀣€堕煫鍥ㄦ礃閺嗩剟鏌$仦鐣屝ユい褌绶氶弻娑㈠箻绾惧顥濆銈庡亝缁诲牊淇婇幖浣规櫆闁兼亽鍎宠ぐ鎸庣節瀵伴攱婢橀埀顒佹崌閹虫宕奸弴鐐靛幋閻庡箍鍎遍幊澶愬绩娴犲鐓熸俊顖氭惈缁狙囨煙閸忕厧濮夌紒杈ㄥ浮閹晠宕归銏$暚闂傚倸娲らˇ鐢稿蓟閵娿儮鏀介柛鈩冪懃椤f椽姊洪柅鐐茶嫰閸樺摜绱掗鐣屾噭濞e洤锕獮鏍ㄦ媴閸濄儱骞愰梻浣呵归張顒傚垝鐏炵瓔鍤曢柟鎯板Г閳锋帒霉閿濆懏鍟為柟顖氱墦閺屾盯鎮㈤崫鍕ㄦ瀰閻庤娲橀崹鍧楃嵁濡偐纾兼俊顖滃帶楠炲牓姊虹涵鍛棈闁规椿浜炲Σ鎰板即閵忊剝娅栭悗骞垮劚濞层劎澹曟總绋跨骇闁割偅纰嶅▍鍛归悩娲摵妞ゃ劊鍎甸幃娆撳级閹寸姷鎳嗛梺鍓х帛閻楁洟婀侀梺鎸庣箓閹冲海鐥閹顫濋銈囩厯濠殿喖锕︾划顖炲箯閸涙潙宸濋梻鍫熺〒缁夎櫣鈧鍠氶弫濠氥€佸Δ鍛妞ゆ巻鍋撳ù鐙€鍙冨娲濞淬儱鐗撳鎻掆槈濮樿京鐒奸梺绋挎湰婢规洟宕戦幘璇茬濠㈣泛锕f竟鏇㈡⒒娴e憡鍟炴繛璇х畵瀹曟粌鈽夐姀鐘插亶闂佹眹鍨归幉锟犲煕閹达附鐓欐い鏍ф鐎氼噣銆呮导瀛樷拺缂佸顑欓崕蹇涙煙閸愭煡鍙勯柟顔藉劤閻o繝骞嶉鑺ョ暦闂備線鈧偛鑻晶鎾煕閳规儳浜炬俊鐐€栫敮鎺楀窗濮橆兗缂氶柟閭﹀幘缁犻箖鏌涘▎蹇fШ闁活厽甯為埀顒侇問閸n噣宕戦崱娑樼闁绘ê妯婇崯鍛亜閺傚灝鎮戞い鎾崇仢閳规垿鎮欏顔兼婵犳鍠楅幐鎶姐€侀弽顓炵疀闁哄瀵ч悗顒勬⒑閹肩偛鍔撮柛鎾村哺閹繝鎮㈤崗鑲╁幍闂備緡鍙忕粻鎴濐嚕妤e啯鐓曢柣鏃堫棑缁犲鏌$仦鍓ф创闁诡喗鐟╁畷褰掝敃閿濆棛妲楀┑鐘愁問閸犳牠鏁冮敂鎯у灊妞ゆ牜鍋涚粻顖炴煕濞戞ḿ鎽犻柛銈呯Ч閺屾洘绔熼娆掝唹闁稿鎸荤换婵嬪炊閵娿垺瀚奸梻鍌氬€搁悧鍐疾濠靛牏鐭撻柛鎾茶兌绾惧ジ鏌eΟ鎸庣彧鐎规洖鐭傞弻锝呪槈閸楃偞鐏曠紓浣哄У缁嬫垿鍩ユ径濞炬瀻闁归偊鍙庢禒褔姊婚崒娆愮グ婵炲娲熷畷鎶芥晝閸屾氨顔嗛梺璺ㄥ櫐閹凤拷...

本文选定一组Linux原始码、工具链、FPGA 板和netlist作为晶心的平台(于1.1,1.2,1.3中所述)进行linux的移植。读者可将自己的平台与晶心的平台做类比,从而有效缩短产品开发进程。

1.1 晶心版Linux原始码

目前晶心最新版本的Linux原始码在AndeSoft™的BSP310中,Linux原始码在BSP310套件中的位置为: BSPv310/source/Linux/linux-2.6.tgz。使用BSP310中的ramdisk ”xc5_glibc_ramdisk.img”作为filesystem。

1.2 工具链
此晶心平台选用的工具链是AndeSoft™的nds32le-linux-glibc-v2。

1.3 FPGA 板子与 netlist
FPGA板子是晶心AndeShape™的 XC5 开发板。Netlist 为晶心AndesCore™的N10 production version.
移植平台是指使用者要移植Linux的平台,也就是移植Linux的目标平台。将移植平台与晶心平台的比较列表如下: (其中所列之软件皆属于BSP310中之套件)。

移植平台
晶心平台
说明
Linux原始码
linux-2.6.tgz
linux-2.6.tgz
使用者应从晶心版原始码进行开发
工具链
nds32le-linux-glibc-v2
nds32le-linux-glibc-v2
使用者如用新版的AndesCore™,可更换新的对应工具链
FPGA板子
使用者设计
XC5
Netlist
使用者生成
N10 production version
移植平台
晶心平台
说明
Linux原始码
linux-2.6.tgz
linux-2.6.tgz
使用者应从晶心版原始码进行开发
工具链
nds32le-linux-glibc-v2
nds32le-linux-glibc-v2
使用者如用新版的AndesCore™,可更换新的对应工具链
FPGA板子
使用者设计
XC5
Netlist
使用者生成
N10 production version
移植平台
晶心平台
说明
Linux原始码
linux-2.6.tgz
linux-2.6.tgz
使用者应从晶心版原始码进行开发
工具链
nds32le-linux-glibc-v2
nds32le-linux-glibc-v2
使用者如用新版的AndesCore™,可更换新的对应工具链
FPGA板子
使用者设计
XC5
Netlist
使用者生成
N10 production version
移植平台
晶心平台
说明
Linux原始码
linux-2.6.tgz
linux-2.6.tgz
使用者应从晶心版原始码进行开发
工具链
nds32le-linux-glibc-v2
nds32le-linux-glibc-v2
使用者如用新版的AndesCore™,可更换新的对应工具链
FPGA板子
使用者设计
XC5
Netlist
使用者生成
N10 production version
[p]

2. Boot loader
如果使用者有自己惯用的boot loader,可以使用惯用的boot loader以加快开发时程,如果没有boot loader的开发经验,可以选用u-boot作为系统的boot loader.。u-boot的source ocde位置在BSPv310/source/Standalone/u-boot/u-boot.tgz。

2.1 U-boot
AndeSoft™的BSP310中u-boot source code是需要EBIOS boot up后再执行的u-boot版本。直接boot up不需要其他软件协助的U-boot版本(ROM版)是比较符合使用者的需要,晶心版的u-boot使用方法请参考BSP310 User Manual。如果要ROM版的u-boot需要在BSP310中的u-boot软件做patch,其指令如下:


# patch -p1 patching file arch/nds32/cpu/n1213/ag101/cpu.c
patching file arch/nds32/cpu/n1213/start.S
patching file arch/nds32/include/asm/u-boot-nds32.h
patching file arch/nds32/lib/board.c
patching file board/AndesTech/adp-ag101p/config.mk
patching file include/configs/adp-ag101p.h

patch 完成的u-boot source code 可以产生ROM版的u-boot image,直接开机后的执行结果如图表3所示。

闂傚倸鍊搁崐鎼佸磹閹间礁纾归柟闂寸绾惧綊鏌熼梻瀵割槮缁炬儳缍婇弻鐔兼⒒鐎靛壊妲紒鐐劤缂嶅﹪寮婚悢鍏尖拻閻庨潧澹婂Σ顔剧磼閻愵剙鍔ょ紓宥咃躬瀵鎮㈤崗灏栨嫽闁诲酣娼ф竟濠偽i鍓х<闁绘劦鍓欓崝銈囩磽瀹ュ拑韬€殿喖顭烽幃銏ゅ礂鐏忔牗瀚介梺璇查叄濞佳勭珶婵犲伣锝夘敊閸撗咃紲闂佺粯鍔﹂崜娆撳礉閵堝洨纾界€广儱鎷戦煬顒傗偓娈垮枛椤兘骞冮姀銈呯閻忓繑鐗楃€氫粙姊虹拠鏌ュ弰婵炰匠鍕彾濠电姴浼i敐澶樻晩闁告挆鍜冪床闂備浇顕栭崹搴ㄥ礃閿濆棗鐦遍梻鍌欒兌椤㈠﹤鈻嶉弴銏犵闁搞儺鍓欓悘鎶芥煛閸愩劎澧曠紒鈧崘鈹夸簻闊洤娴烽ˇ锕€霉濠婂牏鐣洪柡灞诲妼閳规垿宕卞▎蹇撴瘓缂傚倷闄嶉崝宀勫Χ閹间礁钃熼柣鏂垮悑閸庡矂鏌涘┑鍕姢鐞氾箓姊绘担鍛婃儓闁活厼顦辩槐鐐寸瑹閳ь剟濡存担鍓叉建闁逞屽墴楠炲啫鈻庨幘宕囶啇濡炪倖鎸鹃崳銉ノ涜濮婂宕掑▎鎴犵崲濠电偘鍖犻崗鐐☉閳诲酣骞嬮悙瀛橆唶闂備礁婀遍崕銈夈€冮幇顔剧闁哄秲鍔庣弧鈧梻鍌氱墛娓氭宕曢幇鐗堢厸闁告侗鍠氶崣鈧梺鍝勬湰缁嬫垿鍩ユ径鎰闁绘劕妯婂ḿ缁樹繆閻愵亜鈧垿宕曢弻銉﹀殞濡わ絽鍟悡姗€鏌熺€电ǹ浠滅紒鐘靛█濮婅櫣绮欓崠鈩冩暰濡炪們鍔屽Λ婵嬬嵁閸儱惟闁冲搫鍊搁埀顒€顭烽弻锕€螣娓氼垱楔闂佹寧绋掔粙鎴﹀煘閹达附鍊烽柡澶嬪灩娴滃爼姊洪悷鎵紞闁稿鍊曢悾鐑藉醇閺囥劍鏅㈡繛杈剧秮閺呰尙绱撻幘鍓佺=闁稿本鐟чˇ锔姐亜閹存繃鍤囬柟顔矫埞鎴犫偓锝庡亜閳ь剙鐏氶妵鍕箻鐠虹儤鐎虹紓浣筋嚙濡繈寮婚弴銏犻唶婵犻潧鐗忛濠囨⒑閸涘﹤绗傞柛妤佸▕瀵鈽夐姀鈥充簽婵炶揪缍侀弲鑼姳閻e瞼纾藉〒姘搐閺嬶附銇勯弴鍡楁搐閻撯€愁熆鐠哄ソ锟犳偄閼姐倗鏉搁梺瑙勫劤婢у孩顨欓梻鍌欐祰濡椼劑鎮為敃鍌氱婵炲棗绻掗弳锕傛煏婵炵偓娅撻柡浣革躬閹绗熼婊冨弗闂佽 鍋撻柕濞у懐锛濋梺绋挎湰閼归箖鍩€椤掑嫷妫戠紒顔肩墛缁楃喖鍩€椤掑嫨鈧線寮介鐐殿槹濡炪倖鐗楃粙鎴濃枔閹达附鈷戦柛娑橈攻鐏忣偊鏌i幒鐐电暤闁挎繄鍋ゅ鎾閿涘嫬骞嶉梻浣侯攰椤宕濋敃鍌氬惞婵炲棙鍨瑰Λ顖炴煙椤栧棗鍟崐顖炴⒑闁稓鈹掗柛鏂跨焸閿濈偛饪伴崼婵嗚€垮┑掳鍊愰崑鎾搭殽閻愬樊鍎旀慨濠呮缁瑥鈻庨幆褍澹夐梻浣告贡閹虫挸煤椤撱垻宓侀柛鎰╁妷閸亪鏌涢銈呮瀻婵炲牏鍠栧娲濞戣鲸肖闂佺ǹ瀵掗崳锝呯暦閹达箑绠婚悹鍥ㄧ叀閺佹粌鈹戞幊閸婃捇鎳楅崼鏇炵煑闁糕剝绋掗埛鎴︽煕濠靛棗顏璺哄閹便劌螣缁嬪灝顫囬悗瑙勬礃缁诲倿顢橀崗鐓庣窞閻庯綆鍓欓獮宥夋⒒娴e憡鍟為柛鏃€岣挎禍绋库枎閹炬潙鈧潡鏌涘☉姗堟敾闁告瑥绻愰埞鎴︽偐閹绘帩浼€闁汇埄鍨遍惄顖炲蓟閻旈鏆嬮柣妤€鐗嗗▓妤呮倵鐟欏嫭纾搁柛鏂跨Ф閹广垹鈹戠€n亞锛滃┑鐐村灦閻熝囧汲椤撱垺鈷掗柛灞捐壘閳ь剙鍢查湁闁搞儜鍛闂佹眹鍨绘灙缂佹劖顨婇弻娑㈠焺閸愵亖妲堢紒鐐劤濞硷繝寮婚悢鐓庣畾闁绘鐗滃Λ鍕磽娴e搫校闁绘搫绻濆濠氬即閿涘嫮鏉搁梺鍝勬川閸庢劙鍩€椤掆偓閺堫剛鎹㈠☉姘辩當闁告繂瀚~鍥⒑閸濆嫯瀚扮紒澶屽厴绡撳〒姘e亾闁哄本鐩獮妯尖偓闈涙啞閸f澘顪冮妶鍐ㄧ仾鐎光偓閹间礁鏋侀柟鐗堟緲楠炪垺绻涢崱妯虹仼婵℃彃娲︾换婵嗏枔閸喗鐏嶉梺鎸庢磵閺呯姴鐣烽姀銈呯闁兼祴鏅╁ú绋库攽閻樿宸ラ柟铏姉婢规洘绺介崨濠勫幗闂侀€涘嵆濞佳勬櫠椤斿浜滈幖娣灮閻﹥銇勯鍕殶闁逞屽墯缁嬫帟鎽梺绋匡攻閸旀鍩€椤掍緡鍟忛柛鐘愁殜閹繝鏁撻悩顔瑰亾娴h倽鏃堝川椤撶媭妲规俊鐐€栭崹鍏兼叏閵堝洠鍋撳顑惧仮婵﹦绮幏鍛村川婵犲懐顢呴梺鍝勵儛娴滄繄鎹㈠☉銏犵妞ゆ洖鎳忛ˉ鏍磽娓氬洤鏋涙い顓犲厴閻涱喖螣鐏忔牕浜鹃梻鍫熺⊕閹插憡銇勯弮鈧ú鐔煎蓟閿濆鍋愰柛娆忣槸瀹稿爼姊洪崨濠佺繁闁告ê銈搁幃锟犲磼閻愮补鎷洪柡澶屽仦婢瑰棝藝閿曞倹鐓熸俊銈傚亾闁挎洏鍎崇划姘綇閵娧呯槇闂佹悶鍎洪悘娑滎樄闁哄本绋戦埥澶愬础閻愬浜繝鐢靛仜閹冲矂宕愬┑鍡╂綎闁惧繐婀遍惌娆愮箾閸℃ê鍔ら柛鎿冨墴濮婃椽宕ㄦ繝鍐ㄩ瀺缂備浇顕х€氫即鐛幋锕€顫呴柣姗嗗亝閺傗偓闂備焦鎮堕崕顕€寮插┑瀣剨闁割偁鍎查埛鎴犵磼鐎n偄顕滄繝鈧幍顔剧<閻庯綆鍋勯悘銉╂煃鐠囪尙效闁轰焦鍔欏畷顏呮媴閻熸壆妲i梻鍌欑窔濞佳囨偋閸℃瑦宕查柟鐑橆殔缁€鍡椕归悡搴f憼闁绘挸绻橀弻娑㈩敃閵堝懏鐎鹃梺绋匡攻閸旀牠銆冮妷鈺傚€烽柟缁樺笚濞堣尙绱撴担绋库偓鍦暜閻愬搫鐒垫い鎺戯功閸掍即鏌h箛鏂垮摵鐎殿喗鐓¢、妤呭焵椤掑嫬鐓橀柟杈鹃檮閸婄兘鏌℃径瀣仼濞寸姵鎮傞弻锕傚礃椤旂粯鍠氶梺璇″枛缂嶅﹤鐣烽崼鏇炵厸濞达綁鏀遍~鏇熺節濞堝灝鏋涢柨鏇樺妼閳诲秹鏁愭径濠勵唵闂佺粯枪椤曆囨倶閹惰姤鐓i煫鍥风到娴滅偛霉濠婂啰鍩f慨濠勭帛閹峰懘鎸婃径濠冨劒闂備線娼荤紞鍥⒔閸曨剛鈹嶅┑鐘叉搐閻愬﹥銇勯幒鍡椾壕缂備胶濮甸悡锟犲蓟閺囷紕鐤€闁哄洨鍊☉銏$厸闁逞屽墯缁傛帞鈧綆鍋勯埀顒傛暬閺屻劌鈹戦崱娆忓毈缂備降鍔嬬划娆撳蓟濞戞瑧绡€闁告洦鍋傚Σ鎰攽椤旂》鏀绘俊鐐舵铻為柛鎰电厑瑜版帒围闁糕剝鐟﹂崚娑㈡倵鐟欏嫭绀冮柨鏇樺灪娣囧﹪骞栨担鑲濄劍銇勯弮鍥棄闁哄濮电换婵嬫偨闂堟刀銉╂煛娴e憡鍟為柟渚垮姂閹粓鎸婃径瀣偓顒勬⒑閸涘﹦鈽夐柨鏇樺劦瀹曪綀绠涘☉娆戝幗闂佺鎻徊楣兯夋径鎰厸閻庯絺鏅濈粣鏃堟煛瀹€鈧崰鏍ь潖閼姐倐鍋撻棃娑橆棌婵″樊鍠氱槐鎺楁倷椤掆偓缁€鍐┿亜椤愩埄妯€濠碉紕鏁诲畷鐔碱敍濮橆剙鏁ゆ俊鐐€栭崝锕€顭块埀顒傜磼椤旇偐鍩f慨濠呮缁辨帒螣閾忓湱鎳嗛梻浣筋嚙缁绘垵鐣濋崨濠佺箚闁汇垻枪缁€瀣亜閺嶃劍鐨戞い鏂匡躬濮婃椽鎮烽幍顔芥喖缂備浇顕х粔鐢电矉閹烘鍤冮柍鍝勫暟閿涙粓姊虹紒妯哄Е闁告挻鐟╁畷婵嬪Χ閸℃劒绨诲銈嗘尵婵挳宕㈢€电硶鍋撳▓鍨灈妞ゎ厾鍏橀獮鍐閵堝棗浜楅柟鑹版彧缂嶅棗危閸洘鐓熼柣鏂挎憸閻﹦绱掔紒妯烘诞鐎殿噮鍋婇、娆戜焊閺嶎煈娼旈梻渚€娼ф蹇曟閺囥垹鍌ㄥù鐘差儐閳锋垿鎮峰▎蹇擃仼闁告柣鍊栭妵鍕即閵娿儱绠归柣鎾卞€濋弻鐔虹磼閵忕姵鐏嶉梺缁樻尰閻燂箓濡甸崟顖氱睄闁稿本绮嶉幉妯衡攽閻愯尙澧涚紒顔芥崌瀵鍩勯崘鈺侇€撻梺鑽ゅ枑濠㈡﹢锝炲澶嬧拺閻犲洠鈧磭浠┑鈽嗗亜閸熸潙鐣风憴鍕╁亝闁告劏鏅涘▓銈咁渻閵堝棗绗傞柣鎺炵畱閳诲秹鏁冮埀顒勫煘閹达附鍋愰柛顭戝亝濮e嫭绻濆▓鍨珮闁告瑥鍟撮悰顔跨疀濞戞ḿ顦ㄥ銈嗘閸嬫劙藝閵娿儺娓婚柕鍫濇噽缁犱即鏌涢悢鍝勵暭闁靛洦鐟╅獮搴ㄦ嚍閵夈垺瀚藉┑鐐存尰閸╁啴宕戦幘缁樼厓鐟滄粓宕滃杈╃煓闁规崘顕ч悡姗€鏌熼悜姗嗘畷闁绘挻娲熼弻锟犲磼濠靛洨銆婇柤鍙夌墵濮婃椽鎮烽幍顔炬殯闂佹悶鍔岀紞濠囧春閻愬搫绠i柣姗嗗亜娴滈箖鏌ㄥ┑鍡欏嚬缂併劏宕电槐鎺楀箛椤撶姭妲堝銈庝簻閸熷瓨淇婇崼鏇炲耿婵☆垳鈷堝Σ顒勬⒒娴g儤鍤€闁哥喕娉曠划鏃堟偡閹殿喗娈惧銈嗗姀閹筹繝寮崼婵嗙獩濡炪倖妫侀~澶屸偓姘虫閳规垿鎮欓懜闈涙锭缂備浇寮撶划娆撶嵁婢舵劖鏅柛鏇ㄥ墮椤忔悂姊虹捄銊ユ灁濠殿喚鏁婚幃鈥斥枎閹惧鍙勯棅顐㈡祫缁茶姤绂嶅┑瀣€堕煫鍥ㄦ礃閺嗩剟鏌$仦鐣屝ユい褌绶氶弻娑㈠箻绾惧顥濆銈庡亝缁诲牊淇婇幖浣规櫆闁兼亽鍎宠ぐ鎸庣節瀵伴攱婢橀埀顒佹崌閹虫宕奸弴鐐靛幋閻庡箍鍎遍幊澶愬绩娴犲鐓熸俊顖氭惈缁狙囨煙閸忕厧濮夌紒杈ㄥ浮閹晠宕归銏$暚闂傚倸娲らˇ鐢稿蓟閵娿儮鏀介柛鈩冪懃椤f椽姊洪柅鐐茶嫰閸樺摜绱掗鐣屾噭濞e洤锕獮鏍ㄦ媴閸濄儱骞愰梻浣呵归張顒傚垝鐏炵瓔鍤曢柟鎯板Г閳锋帒霉閿濆懏鍟為柟顖氱墦閺屾盯鎮㈤崫鍕ㄦ瀰閻庤娲橀崹鍧楃嵁濡偐纾兼俊顖滃帶楠炲牓姊虹涵鍛棈闁规椿浜炲Σ鎰板即閵忊剝娅栭悗骞垮劚濞层劎澹曟總绋跨骇闁割偅纰嶅▍鍛归悩娲摵妞ゃ劊鍎甸幃娆撳级閹寸姷鎳嗛梺鍓х帛閻楁洟婀侀梺鎸庣箓閹冲海鐥閹顫濋銈囩厯濠殿喖锕︾划顖炲箯閸涙潙宸濋梻鍫熺〒缁夎櫣鈧鍠氶弫濠氥€佸Δ鍛妞ゆ巻鍋撳ù鐙€鍙冨娲濞淬儱鐗撳鎻掆槈濮樿京鐒奸梺绋挎湰婢规洟宕戦幘璇茬濠㈣泛锕f竟鏇㈡⒒娴e憡鍟炴繛璇х畵瀹曟粌鈽夐姀鐘插亶闂佹眹鍨归幉锟犲煕閹达附鐓欐い鏍ф鐎氼噣銆呮导瀛樷拺缂佸顑欓崕蹇涙煙閸愭煡鍙勯柟顔藉劤閻o繝骞嶉鑺ョ暦闂備線鈧偛鑻晶鎾煕閳规儳浜炬俊鐐€栫敮鎺楀窗濮橆兗缂氶柟閭﹀幘缁犻箖鏌涘▎蹇fШ闁活厽甯為埀顒侇問閸n噣宕戦崱娑樼闁绘ê妯婇崯鍛亜閺傚灝鎮戞い鎾崇仢閳规垿鎮欏顔兼婵犳鍠楅幐鎶姐€侀弽顓炵疀闁哄瀵ч悗顒勬⒑閹肩偛鍔撮柛鎾村哺閹繝鎮㈤崗鑲╁幍闂備緡鍙忕粻鎴濐嚕妤e啯鐓曢柣鏃堫棑缁犲鏌$仦鍓ф创闁诡喗鐟╁畷褰掝敃閿濆棛妲楀┑鐘愁問閸犳牠鏁冮敂鎯у灊妞ゆ牜鍋涚粻顖炴煕濞戞ḿ鎽犻柛銈呯Ч閺屾洘绔熼娆掝唹闁稿鎸荤换婵嬪炊閵娿垺瀚奸梻鍌氬€搁悧鍐疾濠靛牏鐭撻柛鎾茶兌绾惧ジ鏌eΟ鎸庣彧鐎规洖鐭傞弻锝呪槈閸楃偞鐏曠紓浣哄У缁嬫垿鍩ユ径濞炬瀻闁归偊鍙庢禒褔姊婚崒娆愮グ婵炲娲熷畷鎶芥晝閸屾氨顔嗛梺璺ㄥ櫐閹凤拷...[p]

3. 调试环境

在移植Linux到晶心平台之前,先架设好调试的环境,尤其对底层Linux原始码的移植,有莫大的帮助,在 printk尚未正常运作前,需依靠AndeShape™的AICE与 AndeSoft™的GDB来进行调试。

3.1设定Linux kernel 调试选项
Linux Kernel 需要设定一些调试选项,才能顺利的运用AndeSoft™的GDB进行调试。晶心平台中Linux kernel 调试选项设定如图表4所示,增加这些选项会增加kernel 映像文件的空间,如果空间占用过大以至于不符合设计需求时,可在调试工作完毕后将调试选项关闭以节约不必要的空间浪费。


3.2 Linux kernel 调试的程序

Build成kernel bootpImage (含kernel debug message如图表四选项) 后,Linux的映像档放到FPGA板子上,PC host 端的AndeSoft™的GDB透过网络(socket)与AICE连接至FPGA板子,进行调试的工作。

3.2.1. 编译链结成映像档
设定好AndeSoft™的 cross-compiler 路径后,利用下列指令经由compiler and linker后可以得到 bootpImage,指令如下:

#CROSS_COMPILE=nds32le-linux- ARCH=nds32 make xc5_defconfig
#CROSS_COMPILE=nds32le-linux- ARCH=nds32 make menuconfig
# CROSS_COMPILE=nds32le-linux- ARCH=nds32 make bootpImage INITRD=xc5_glibc_ramdisk.img

将生成的bootpIamge放到FPGA板子上,将AICE连接到FPGA板子启动ICEman,指令如下:

#C:AndestechAndeSight200MCUice>ICEman.exe --p 1234

PC host端的AndeSoft™的GDB透过网络(socket)与AICE连接至FPGA板子,进行调试的工作,示范指令如下:

#ddd --debugger nds32le-linux-gdb vmlinux
gdb>target remote 10.0.2.164:1234

其中IP值 10.0.2.164是一个应用范例,用户可依环境实际IP值进行设定。环境设定完成后,可以开始进行调试工程。


4. 移植Linux至晶心平台关键点经验传承

4.1 Kernel加载程序调试实作

kernel加载程序目的将kernel主程序进行解压缩并加载正确位置,此程序与kernel主程序是两个不同程序,但会一起包在zImage中只是kernel加载程序会attached在zImage的前面。调试时需 file不同的 ELF file才能进行正确的调试工作,kernel加载程序的位置在arch/nds32/boot/compressed/vmlinux,指令如下所示。


#ddd --debugger nds32le-linux-gdb arch/nds32/boot/compressed/vmlinux

kernel主程序的ELF file “vmlinux”在kernel source code的根目录下指令如下所示。
#ddd --debugger nds32le-linux-gdb vmlinux

4.2 Linux kernel 调试实作

kernel加载程序执行完毕后会跳到kernel主程序执行。进入点是arch/nds32/kernel/head.S的assembly code执行完后会进入 kernel 的主要函数 “start_kernel”。

4.2.1. RAM offset patch

晶心版Linux原始码搭配XC5平台,RAM的起始位置(指的是PA)是0x0,使用者FPGA开发板的RAM起始位置如果不是0x0,必须要修改FPGA板子中RAM的起始位置,做法是在晶心版的Linux原始码中进行RAM address patch,将原始码中RAM位置调整到FPGA开发板中RAM的真实位置。

4.2.2. PA/VA remap table

当FPGA板子IO的PA设定正确后,使用者需要设定PA/VA remap table,作法可参考arch/nds32/include/asm/spec-ag101.h,依照apec-ag101.h中PA/VA对应的关系去增减使用者自己IO device的 PA/VA remap table。[p]

4.2.3. Kernel 解压缩与software breakpoint
在进行kernel 调试时,如果在低地址处,例如:head.S中进行调试,当设定 software breakpoint时,会有breakpoint无法停下来与AICE 断线的情况发生。原因是当使用者设定software breakpoint时,breakpoint处的instruction会修改并加入break instruction。但kernel解压缩时会将调试的程序代码覆盖造成与GDB调试不一致性而产生错误。解决的方法就是原设定software breakpoint改为hardware breakpoint,这样就可以避免因kernel解压缩所造成调试的错误,降低调试时的困难度。

闂傚倸鍊搁崐鎼佸磹閹间礁纾归柟闂寸绾惧綊鏌熼梻瀵割槮缁炬儳缍婇弻鐔兼⒒鐎靛壊妲紒鐐劤缂嶅﹪寮婚悢鍏尖拻閻庨潧澹婂Σ顔剧磼閻愵剙鍔ょ紓宥咃躬瀵鎮㈤崗灏栨嫽闁诲酣娼ф竟濠偽i鍓х<闁绘劦鍓欓崝銈囩磽瀹ュ拑韬€殿喖顭烽幃銏ゅ礂鐏忔牗瀚介梺璇查叄濞佳勭珶婵犲伣锝夘敊閸撗咃紲闂佺粯鍔﹂崜娆撳礉閵堝洨纾界€广儱鎷戦煬顒傗偓娈垮枛椤兘骞冮姀銈呯閻忓繑鐗楃€氫粙姊虹拠鏌ュ弰婵炰匠鍕彾濠电姴浼i敐澶樻晩闁告挆鍜冪床闂備浇顕栭崹搴ㄥ礃閿濆棗鐦遍梻鍌欒兌椤㈠﹤鈻嶉弴銏犵闁搞儺鍓欓悘鎶芥煛閸愩劎澧曠紒鈧崘鈹夸簻闊洤娴烽ˇ锕€霉濠婂牏鐣洪柡灞诲妼閳规垿宕卞▎蹇撴瘓缂傚倷闄嶉崝宀勫Χ閹间礁钃熼柣鏂垮悑閸庡矂鏌涘┑鍕姢鐞氾箓姊绘担鍛婃儓闁活厼顦辩槐鐐寸瑹閳ь剟濡存担鍓叉建闁逞屽墴楠炲啫鈻庨幘宕囶啇濡炪倖鎸鹃崳銉ノ涜濮婂宕掑▎鎴犵崲濠电偘鍖犻崗鐐☉閳诲酣骞嬮悙瀛橆唶闂備礁婀遍崕銈夈€冮幇顔剧闁哄秲鍔庣弧鈧梻鍌氱墛娓氭宕曢幇鐗堢厸闁告侗鍠氶崣鈧梺鍝勬湰缁嬫垿鍩ユ径鎰闁绘劕妯婂ḿ缁樹繆閻愵亜鈧垿宕曢弻銉﹀殞濡わ絽鍟悡姗€鏌熺€电ǹ浠滅紒鐘靛█濮婅櫣绮欓崠鈩冩暰濡炪們鍔屽Λ婵嬬嵁閸儱惟闁冲搫鍊搁埀顒€顭烽弻锕€螣娓氼垱楔闂佹寧绋掔粙鎴﹀煘閹达附鍊烽柡澶嬪灩娴滃爼姊洪悷鎵紞闁稿鍊曢悾鐑藉醇閺囥劍鏅㈡繛杈剧秮閺呰尙绱撻幘鍓佺=闁稿本鐟чˇ锔姐亜閹存繃鍤囬柟顔矫埞鎴犫偓锝庡亜閳ь剙鐏氶妵鍕箻鐠虹儤鐎虹紓浣筋嚙濡繈寮婚弴銏犻唶婵犻潧鐗忛濠囨⒑閸涘﹤绗傞柛妤佸▕瀵鈽夐姀鈥充簽婵炶揪缍侀弲鑼姳閻e瞼纾藉〒姘搐閺嬶附銇勯弴鍡楁搐閻撯€愁熆鐠哄ソ锟犳偄閼姐倗鏉搁梺瑙勫劤婢у孩顨欓梻鍌欐祰濡椼劑鎮為敃鍌氱婵炲棗绻掗弳锕傛煏婵炵偓娅撻柡浣革躬閹绗熼婊冨弗闂佽 鍋撻柕濞у懐锛濋梺绋挎湰閼归箖鍩€椤掑嫷妫戠紒顔肩墛缁楃喖鍩€椤掑嫨鈧線寮介鐐殿槹濡炪倖鐗楃粙鎴濃枔閹达附鈷戦柛娑橈攻鐏忣偊鏌i幒鐐电暤闁挎繄鍋ゅ鎾閿涘嫬骞嶉梻浣侯攰椤宕濋敃鍌氬惞婵炲棙鍨瑰Λ顖炴煙椤栧棗鍟崐顖炴⒑闁稓鈹掗柛鏂跨焸閿濈偛饪伴崼婵嗚€垮┑掳鍊愰崑鎾搭殽閻愬樊鍎旀慨濠呮缁瑥鈻庨幆褍澹夐梻浣告贡閹虫挸煤椤撱垻宓侀柛鎰╁妷閸亪鏌涢銈呮瀻婵炲牏鍠栧娲濞戣鲸肖闂佺ǹ瀵掗崳锝呯暦閹达箑绠婚悹鍥ㄧ叀閺佹粌鈹戞幊閸婃捇鎳楅崼鏇炵煑闁糕剝绋掗埛鎴︽煕濠靛棗顏璺哄閹便劌螣缁嬪灝顫囬悗瑙勬礃缁诲倿顢橀崗鐓庣窞閻庯綆鍓欓獮宥夋⒒娴e憡鍟為柛鏃€岣挎禍绋库枎閹炬潙鈧潡鏌涘☉姗堟敾闁告瑥绻愰埞鎴︽偐閹绘帩浼€闁汇埄鍨遍惄顖炲蓟閻旈鏆嬮柣妤€鐗嗗▓妤呮倵鐟欏嫭纾搁柛鏂跨Ф閹广垹鈹戠€n亞锛滃┑鐐村灦閻熝囧汲椤撱垺鈷掗柛灞捐壘閳ь剙鍢查湁闁搞儜鍛闂佹眹鍨绘灙缂佹劖顨婇弻娑㈠焺閸愵亖妲堢紒鐐劤濞硷繝寮婚悢鐓庣畾闁绘鐗滃Λ鍕磽娴e搫校闁绘搫绻濆濠氬即閿涘嫮鏉搁梺鍝勬川閸庢劙鍩€椤掆偓閺堫剛鎹㈠☉姘辩當闁告繂瀚~鍥⒑閸濆嫯瀚扮紒澶屽厴绡撳〒姘e亾闁哄本鐩獮妯尖偓闈涙啞閸f澘顪冮妶鍐ㄧ仾鐎光偓閹间礁鏋侀柟鐗堟緲楠炪垺绻涢崱妯虹仼婵℃彃娲︾换婵嗏枔閸喗鐏嶉梺鎸庢磵閺呯姴鐣烽姀銈呯闁兼祴鏅╁ú绋库攽閻樿宸ラ柟铏姉婢规洘绺介崨濠勫幗闂侀€涘嵆濞佳勬櫠椤斿浜滈幖娣灮閻﹥銇勯鍕殶闁逞屽墯缁嬫帟鎽梺绋匡攻閸旀鍩€椤掍緡鍟忛柛鐘愁殜閹繝鏁撻悩顔瑰亾娴h倽鏃堝川椤撶媭妲规俊鐐€栭崹鍏兼叏閵堝洠鍋撳顑惧仮婵﹦绮幏鍛村川婵犲懐顢呴梺鍝勵儛娴滄繄鎹㈠☉銏犵妞ゆ洖鎳忛ˉ鏍磽娓氬洤鏋涙い顓犲厴閻涱喖螣鐏忔牕浜鹃梻鍫熺⊕閹插憡銇勯弮鈧ú鐔煎蓟閿濆鍋愰柛娆忣槸瀹稿爼姊洪崨濠佺繁闁告ê銈搁幃锟犲磼閻愮补鎷洪柡澶屽仦婢瑰棝藝閿曞倹鐓熸俊銈傚亾闁挎洏鍎崇划姘綇閵娧呯槇闂佹悶鍎洪悘娑滎樄闁哄本绋戦埥澶愬础閻愬浜繝鐢靛仜閹冲矂宕愬┑鍡╂綎闁惧繐婀遍惌娆愮箾閸℃ê鍔ら柛鎿冨墴濮婃椽宕ㄦ繝鍐ㄩ瀺缂備浇顕х€氫即鐛幋锕€顫呴柣姗嗗亝閺傗偓闂備焦鎮堕崕顕€寮插┑瀣剨闁割偁鍎查埛鎴犵磼鐎n偄顕滄繝鈧幍顔剧<閻庯綆鍋勯悘銉╂煃鐠囪尙效闁轰焦鍔欏畷顏呮媴閻熸壆妲i梻鍌欑窔濞佳囨偋閸℃瑦宕查柟鐑橆殔缁€鍡椕归悡搴f憼闁绘挸绻橀弻娑㈩敃閵堝懏鐎鹃梺绋匡攻閸旀牠銆冮妷鈺傚€烽柟缁樺笚濞堣尙绱撴担绋库偓鍦暜閻愬搫鐒垫い鎺戯功閸掍即鏌h箛鏂垮摵鐎殿喗鐓¢、妤呭焵椤掑嫬鐓橀柟杈鹃檮閸婄兘鏌℃径瀣仼濞寸姵鎮傞弻锕傚礃椤旂粯鍠氶梺璇″枛缂嶅﹤鐣烽崼鏇炵厸濞达綁鏀遍~鏇熺節濞堝灝鏋涢柨鏇樺妼閳诲秹鏁愭径濠勵唵闂佺粯枪椤曆囨倶閹惰姤鐓i煫鍥风到娴滅偛霉濠婂啰鍩f慨濠勭帛閹峰懘鎸婃径濠冨劒闂備線娼荤紞鍥⒔閸曨剛鈹嶅┑鐘叉搐閻愬﹥銇勯幒鍡椾壕缂備胶濮甸悡锟犲蓟閺囷紕鐤€闁哄洨鍊☉銏$厸闁逞屽墯缁傛帞鈧綆鍋勯埀顒傛暬閺屻劌鈹戦崱娆忓毈缂備降鍔嬬划娆撳蓟濞戞瑧绡€闁告洦鍋傚Σ鎰攽椤旂》鏀绘俊鐐舵铻為柛鎰电厑瑜版帒围闁糕剝鐟﹂崚娑㈡倵鐟欏嫭绀冮柨鏇樺灪娣囧﹪骞栨担鑲濄劍銇勯弮鍥棄闁哄濮电换婵嬫偨闂堟刀銉╂煛娴e憡鍟為柟渚垮姂閹粓鎸婃径瀣偓顒勬⒑閸涘﹦鈽夐柨鏇樺劦瀹曪綀绠涘☉娆戝幗闂佺鎻徊楣兯夋径鎰厸閻庯絺鏅濈粣鏃堟煛瀹€鈧崰鏍ь潖閼姐倐鍋撻棃娑橆棌婵″樊鍠氱槐鎺楁倷椤掆偓缁€鍐┿亜椤愩埄妯€濠碉紕鏁诲畷鐔碱敍濮橆剙鏁ゆ俊鐐€栭崝锕€顭块埀顒傜磼椤旇偐鍩f慨濠呮缁辨帒螣閾忓湱鎳嗛梻浣筋嚙缁绘垵鐣濋崨濠佺箚闁汇垻枪缁€瀣亜閺嶃劍鐨戞い鏂匡躬濮婃椽鎮烽幍顔芥喖缂備浇顕х粔鐢电矉閹烘鍤冮柍鍝勫暟閿涙粓姊虹紒妯哄Е闁告挻鐟╁畷婵嬪Χ閸℃劒绨诲銈嗘尵婵挳宕㈢€电硶鍋撳▓鍨灈妞ゎ厾鍏橀獮鍐閵堝棗浜楅柟鑹版彧缂嶅棗危閸洘鐓熼柣鏂挎憸閻﹦绱掔紒妯烘诞鐎殿噮鍋婇、娆戜焊閺嶎煈娼旈梻渚€娼ф蹇曟閺囥垹鍌ㄥù鐘差儐閳锋垿鎮峰▎蹇擃仼闁告柣鍊栭妵鍕即閵娿儱绠归柣鎾卞€濋弻鐔虹磼閵忕姵鐏嶉梺缁樻尰閻燂箓濡甸崟顖氱睄闁稿本绮嶉幉妯衡攽閻愯尙澧涚紒顔芥崌瀵鍩勯崘鈺侇€撻梺鑽ゅ枑濠㈡﹢锝炲澶嬧拺閻犲洠鈧磭浠┑鈽嗗亜閸熸潙鐣风憴鍕╁亝闁告劏鏅涘▓銈咁渻閵堝棗绗傞柣鎺炵畱閳诲秹鏁冮埀顒勫煘閹达附鍋愰柛顭戝亝濮e嫭绻濆▓鍨珮闁告瑥鍟撮悰顔跨疀濞戞ḿ顦ㄥ銈嗘閸嬫劙藝閵娿儺娓婚柕鍫濇噽缁犱即鏌涢悢鍝勵暭闁靛洦鐟╅獮搴ㄦ嚍閵夈垺瀚藉┑鐐存尰閸╁啴宕戦幘缁樼厓鐟滄粓宕滃杈╃煓闁规崘顕ч悡姗€鏌熼悜姗嗘畷闁绘挻娲熼弻锟犲磼濠靛洨銆婇柤鍙夌墵濮婃椽鎮烽幍顔炬殯闂佹悶鍔岀紞濠囧春閻愬搫绠i柣姗嗗亜娴滈箖鏌ㄥ┑鍡欏嚬缂併劏宕电槐鎺楀箛椤撶姭妲堝銈庝簻閸熷瓨淇婇崼鏇炲耿婵☆垳鈷堝Σ顒勬⒒娴g儤鍤€闁哥喕娉曠划鏃堟偡閹殿喗娈惧銈嗗姀閹筹繝寮崼婵嗙獩濡炪倖妫侀~澶屸偓姘虫閳规垿鎮欓懜闈涙锭缂備浇寮撶划娆撶嵁婢舵劖鏅柛鏇ㄥ墮椤忔悂姊虹捄銊ユ灁濠殿喚鏁婚幃鈥斥枎閹惧鍙勯棅顐㈡祫缁茶姤绂嶅┑瀣€堕煫鍥ㄦ礃閺嗩剟鏌$仦鐣屝ユい褌绶氶弻娑㈠箻绾惧顥濆銈庡亝缁诲牊淇婇幖浣规櫆闁兼亽鍎宠ぐ鎸庣節瀵伴攱婢橀埀顒佹崌閹虫宕奸弴鐐靛幋閻庡箍鍎遍幊澶愬绩娴犲鐓熸俊顖氭惈缁狙囨煙閸忕厧濮夌紒杈ㄥ浮閹晠宕归銏$暚闂傚倸娲らˇ鐢稿蓟閵娿儮鏀介柛鈩冪懃椤f椽姊洪柅鐐茶嫰閸樺摜绱掗鐣屾噭濞e洤锕獮鏍ㄦ媴閸濄儱骞愰梻浣呵归張顒傚垝鐏炵瓔鍤曢柟鎯板Г閳锋帒霉閿濆懏鍟為柟顖氱墦閺屾盯鎮㈤崫鍕ㄦ瀰閻庤娲橀崹鍧楃嵁濡偐纾兼俊顖滃帶楠炲牓姊虹涵鍛棈闁规椿浜炲Σ鎰板即閵忊剝娅栭悗骞垮劚濞层劎澹曟總绋跨骇闁割偅纰嶅▍鍛归悩娲摵妞ゃ劊鍎甸幃娆撳级閹寸姷鎳嗛梺鍓х帛閻楁洟婀侀梺鎸庣箓閹冲海鐥閹顫濋銈囩厯濠殿喖锕︾划顖炲箯閸涙潙宸濋梻鍫熺〒缁夎櫣鈧鍠氶弫濠氥€佸Δ鍛妞ゆ巻鍋撳ù鐙€鍙冨娲濞淬儱鐗撳鎻掆槈濮樿京鐒奸梺绋挎湰婢规洟宕戦幘璇茬濠㈣泛锕f竟鏇㈡⒒娴e憡鍟炴繛璇х畵瀹曟粌鈽夐姀鐘插亶闂佹眹鍨归幉锟犲煕閹达附鐓欐い鏍ф鐎氼噣銆呮导瀛樷拺缂佸顑欓崕蹇涙煙閸愭煡鍙勯柟顔藉劤閻o繝骞嶉鑺ョ暦闂備線鈧偛鑻晶鎾煕閳规儳浜炬俊鐐€栫敮鎺楀窗濮橆兗缂氶柟閭﹀幘缁犻箖鏌涘▎蹇fШ闁活厽甯為埀顒侇問閸n噣宕戦崱娑樼闁绘ê妯婇崯鍛亜閺傚灝鎮戞い鎾崇仢閳规垿鎮欏顔兼婵犳鍠楅幐鎶姐€侀弽顓炵疀闁哄瀵ч悗顒勬⒑閹肩偛鍔撮柛鎾村哺閹繝鎮㈤崗鑲╁幍闂備緡鍙忕粻鎴濐嚕妤e啯鐓曢柣鏃堫棑缁犲鏌$仦鍓ф创闁诡喗鐟╁畷褰掝敃閿濆棛妲楀┑鐘愁問閸犳牠鏁冮敂鎯у灊妞ゆ牜鍋涚粻顖炴煕濞戞ḿ鎽犻柛銈呯Ч閺屾洘绔熼娆掝唹闁稿鎸荤换婵嬪炊閵娿垺瀚奸梻鍌氬€搁悧鍐疾濠靛牏鐭撻柛鎾茶兌绾惧ジ鏌eΟ鎸庣彧鐎规洖鐭傞弻锝呪槈閸楃偞鐏曠紓浣哄У缁嬫垿鍩ユ径濞炬瀻闁归偊鍙庢禒褔姊婚崒娆愮グ婵炲娲熷畷鎶芥晝閸屾氨顔嗛梺璺ㄥ櫐閹凤拷...

4.2.4. PA/VA 观念说明与调试要领
在原始码arch/nds32/kernel/head.S中
la $lp, __mmap_switched
mtsr $lp, $IPC
iret

执行完iret后,系统就会从PA转成VA,MMU translation status从translation off转为translation on在此分界处调试规则如下所述,如果观念不清楚及容易产生调试时的错误,请务必牢记。

4.2.4.1. MMU translation off 时期调试

在这个时期调试,VA是不存在的。所有的IO address与memory都是PA没有VA,如果调试地址设成VA,容易hit illegal address 而造成exception。

4.2.4.2. MMU translation on 时期调试
在这个时期调试,PA是不存在的。所有的IO address与memory都是VA没有PA,如果调试地址设成PA,容易hit illegal address 而造成exception.

4.2.5. 移植Linux的基础组件

MMU translation on后,很快就会进入start_kernel 函数,接下来移植的重点就是移植Linux基础组件,那就是interrupt,timer and UART。当这3个device移植成功后,Linux的架构就建立起来了,printk也可以用了,Linux已经可以正常的运作。如果没有意外,可以执行完kernel甚至将filesystem带起来。接下来用户可以将自己的周边组件一个一个的device driver移植入系统。当周边组件移植完成后,Linux系统移植到晶心平台就完成了。

5. 结语

Linux操作系统运作在晶心平台已有多年的时间。各式各样的Linux软件运作在晶心平台不计其数。皆可证明Linux操作系统运作结合晶心平台是一个稳定与成熟的产品,只要能明了熟悉Linux 移植的技巧与重点,使用晶心平台开发Linux的产品将是一件愉快与简单的工作。

射频工程师养成培训教程套装,助您快速成为一名优秀射频工程师...

天线设计工程师培训课程套装,资深专家授课,让天线设计不再难...

上一篇:基于FPGA的HDB3码编码器优化设计与分析
下一篇:synopsys数字前后端设计流程

闂傚倸鍊搁崐鎼佸磹閹间礁纾归柟闂寸绾惧綊鏌熼梻瀵割槮缁炬儳缍婇弻鐔兼⒒鐎靛壊妲紒鐐劤缂嶅﹪寮婚悢鍏尖拻閻庨潧澹婂Σ顔剧磼閻愵剙鍔ょ紓宥咃躬瀵鎮㈤崗灏栨嫽闁诲酣娼ф竟濠偽i鍓х<闁绘劦鍓欓崝銈嗙節閳ь剟鏌嗗鍛姦濡炪倖甯掗崐褰掑吹閳ь剟鏌f惔銏犲毈闁告瑥鍟悾宄扮暦閸パ屾闁诲函绲婚崝瀣уΔ鍛拺闁革富鍘奸崝瀣煕閵娿儳绉虹€规洘鍔欓幃娆忣啅椤旇棄鐦滈梻渚€娼ч悧鍡椢涘Δ鍐當闁圭儤鎸舵禍婊堟煥閺傝法浠㈢€规挸妫涢埀顒侇問閸犳鎮¢敓鐘偓渚€寮崼婵嬪敹闂佺粯妫佸〒褰掓偨缂佹ḿ绡€闁汇垽娼у瓭闂佹寧娲忛崐婵嗙暦椤栫偛绠ユい鏂垮綖缁楀绱撻崒娆戝妽闁挎洍鏅涢埢鎾寸鐎n偆鍘介梺褰掑亰閸樼晫绱為幋锔界厽闊洦姊圭紞鎴︽煃鐟欏嫬鐏存い銏$懇閹攱锛愭担鍓叉闂傚倸鍊搁崐椋庢濮橆兗缂氱憸鏃堝箖瑜斿畷鍗炩槈濡偐鏋冮梻浣筋潐婢瑰棙鏅跺Δ鍛;妞ゅ繐鐗婇悡鍐喐濠婂牆绀堟慨姗嗗幘閳瑰秴鈹戦悩鍙夊闁稿﹪鏀遍妵鍕疀閹炬剚浠遍梺绋款儐閹瑰洤顕f禒瀣р偓鏍敆娴h 濮囬梺鐟板槻閹虫﹢骞婇弽褉鏀介柛銉㈡櫆閸掓盯鎮楃憴鍕闁哥姵鐗犻妴浣肝旀担鐟邦€撶紓浣割儏閻忔繈鐓㈡繝鐢靛Х閺佸憡鎱ㄩ悜钘夋瀬闁告稑锕ラ崣蹇涙煛婢跺娈繛宸簼閺呮繈鏌涚仦鐐殤闁告﹢浜跺娲偡闁箑娈舵繝娈垮枤閺佽鐣锋导鏉戠疀闁绘鐗忛崢钘夆攽鎺抽崐鎰板磻閹剧粯鐓熸俊銈傚亾婵☆偅绋撻崚鎺楊敇閵忕姷顔婇梺鍦仺閸斿酣骞婇幘姹囧亼濞村吋娼欓悞鍨亜閹烘垵顏╃痪顓涘亾闂備浇顫夐崕鐓幬涢崟顖涘珔闁绘柨鎽滅粻楣冩煙鐎涙ḿ鎳冮柣蹇d邯閺屾稓鈧綆鍋勬慨宥夋煛鐏炲墽娲存鐐叉喘椤㈡鍩€椤掑倻妫憸鏃堝箖瑜版帒鐐婇柍杞版濡叉劙姊虹拠鈥虫灍妞ゃ劌鐗撻獮澶愬箻椤旇偐顦板銈嗗笒閸嬪棗危娴煎瓨鈷掑ù锝堫潐閸嬬娀鏌涢弬鑳瀹€锝呮健閺佹捇鎮╅崘韫钵婵$偑鍊栧濠氬煕閸縼缂氶柕濞炬櫆閻撳啰鎲稿⿰鍫濈闁绘柨鍚嬮崑妯汇亜閺囨浜鹃悗瑙勬礀閻栧吋淇婇幖浣规櫇闁逞屽墴椤㈡捇骞樼紒妯锋嫼闂佺厧顫曢崐鏇㈠几閹寸偟绡€闁靛繆妲勯懓璺ㄢ偓瑙勬磸閸ㄤ粙骞冨▎寰濆湱鈧綆鍋呴弶鎼佹⒒娴g懓顕滅紒瀣灩閳ь剚鍑归崜姘辩矉瀹ュ棛闄勯柛娑橈功閸樿鲸绻濋悽闈浶㈤柛鐔哄閺呭爼鎮界喊妯轰壕閻熸瑥瀚粈鍐磼鐠囪尙澧﹂柣娑卞枤閳ь剨缍嗛崰妤呭疾濠靛鐓冪憸婊堝礈閻旈鏆︾憸鐗堝笒绾惧ジ鏌i幇顒夊殶闁告﹢浜跺娲箰鎼淬埄姊垮銈嗘肠閸モ晛绁﹀┑顔姐仜閸嬫捇鏌″畝瀣М妞ゃ垺锕㈤幃娆撴濞戣鲸婢戦梻鍌欑窔濞佳兠洪妶鍥e亾濮橆厽绶叉い鏇秮瀵爼骞婇搹顐n棃闁糕斁鍋撳銈嗗笂閼冲爼銆呴弻銉︾厵妞ゆ牕妫岄崑鎾绘煛閳ь剟鎳為妷锝勭盎闂佸搫鍟崐鍫曞焵椤掆偓椤戝顕i妸褏纾兼俊顖氭贡缁犳岸姊虹紒妯哄闁糕晜鐗犺棢濠㈣埖鍔栭幊姘舵煟閹邦喖鍔嬮柣鎾存礋閺岀喖骞嶉搹顐g彅婵犵绻濋弨杈ㄧ┍婵犲洤绠甸柟鐑樻煥椤も偓缂傚倷鑳剁划顖炴儎椤栨氨鏆﹂柛妤冨€i悢鐓庡嵆闁绘棃顥撴导宀勬煢濡厧鏋涢柡灞诲妼閳规垿宕遍埡鍌傃囨⒑閹惰姤鏁遍悽顖涘浮濠€渚€姊洪幐搴g畵闁瑰啿绻樺畷鐢稿醇閵忊€虫瀾闂佺粯顨呴悧鍡欑箔濮樿埖鐓涢柛娑卞枤缁犵偤鏌$仦鐐鐎规洜鍘ч埞鎴﹀箛椤撳鍨藉娲焻閻愯尪瀚板褍澧界槐鎺楁偐閾忣偄纾冲Δ鐘靛仜閸燁偊銈导鏉戦唶闁绘棁娓归幃锝夋⒑鐠囪尙绠抽柛瀣枛瀵煡顢曢敃鈧洿闂佹寧娲栭崐褰掑煕閹烘嚚褰掓晲閸曨噮鍔呴梺琛″亾濞寸厧鐡ㄩ悡娆愮箾閼奸鍞虹紒銊ф櫕缁辨帡顢欑喊杈╁悑濡ょ姷鍋涢澶愬箖閳哄懏鍋ㄩ柣銏ゆ涧婵悂姊绘担绛嬪殭闁告垹鏅槐鐐哄幢濞戞ḿ锛涙繛杈剧到濠€閬嶃€呴崣澶岀瘈濠电姴鍊绘晶娑㈡煟閹惧鎳囬柡宀嬬秮楠炲鎮樺ú璁抽偗闁诡喗锕㈡俊鐑藉煛閸屾粌甯楅柣鐔哥矋缁挸鐣峰⿰鍐f瀻闁圭虎鍨崑鎾绘晝閸屾稑鈧鏌i敐鍛板缂佷緤闄勭换婵嬫偨闂堟刀銏ゆ煕婵犲嫭鏆€殿喓鍔嶇粋鎺斺偓锝庡亞閸橀亶姊洪幎鑺ユ殰闁稿鎹囬弻锟犲川椤斿墽鐓傞梺閫炲苯澧存繛浣冲洦鍎楅柛灞惧嚬濞兼牗绻涘顔荤凹妞ゃ儱鐗婄换娑㈠箣閻愯泛顥濆銈忕到閹碱偊鍩為幋锕€鐓¢柛鈩冦仦缁ㄨ偐绱撴担鍓插剱閻㈩垪鈧剚鍤曢柡灞诲劚闁卞洭鏌¢崶銉ュ闁哄懌鍨藉铏圭矙閹稿孩鎷辩紓渚囧枛缁夊綊寮鍫㈢杸婵炴垶鐟㈤幏娲⒑閸涘﹦绠撻悗姘槻鍗遍柛蹇氬亹缁犳儳顭跨捄渚剱缂佲偓閳ь剟姊洪悜鈺傤潑闁告瑥鍟~蹇曠磼濡顎撻梺鍛婄缚閸庢煡鎮楅纰辨富闁靛牆妫欓懖鐘绘煕濞戝崬鐏i柣鎾愁儔濮婂搫效閸パ呬患闂佽绻戦懝楣冩偩閻戣棄鐭楀璺虹灱閻﹀牓姊婚崒姘卞濞撴碍顨婂畷鏇$疀濞戞瑧鍘介梺褰掑亰閸撱劑鐓鍕厸閻忕偟鍋撶粈鍐磼缂佹ḿ娲寸€规洖缍婇、娆撳矗閵壯勶紡闂傚倷娴囬褏鈧稈鏅滅粚閬嶅传閸曞孩鐩畷鐔碱敍濮樺崬骞嬮梻浣侯攰閹活亪姊介崟顖氱9闁绘垼濮ら崐鍨箾閹寸儐浠炬い蹇撶墛椤ュ鈧箍鍎遍ˇ浼村煕閹寸姷纾兼い鏍ㄧ⊕缁€鍐╃箾閸涱厽鍤囬柡灞剧洴閹垽宕ㄦ繝鍕枏闂備椒绱徊鍧楀礂濮椻偓閻涱喚鈧綆鍠楅弲婵嬫煃瑜滈崜娑氬垝缂佹ḿ绡€婵﹩鍘奸埀顒傛暬濮婂宕奸悢琛″闂佽褰冮幉锟犲Φ閸曨垰绫嶉柍褜鍓欑叅婵☆垰鍚嬪畷鍙夌箾閹寸偟鎳勭紓宥呮喘閺屾盯骞樺Δ鈧崯顐︽偂閸岀偞鈷掑ù锝呮啞閹叉悂鏌涢悩鏌ュ弰闁诡喗锚閳规垿宕煎┑鍡欐煣闂傚倸鍊烽悞锔锯偓绗涘厾娲冀椤撶偟锛欓梺褰掓?閻掞箓宕戦鍫熺厽闁逛即娼ч崢闈浢瑰⿰鍕煉闁哄瞼鍠栭幃婊兾熼搹閫涙樊婵$偑鍊曞ù姘跺磻婵犲洤钃熸繛鎴炃氶弸搴ㄦ煙闁箑骞栫痪鐐▕濮婃椽宕崟顒佹嫳闂佺儵鏅╅崹杈ㄧ┍婵犲洦鍊婚柤鎭掑劜濞呮粓姊洪崨濠佺繁闁告瑥閰i幃妤呮倻閼恒儮鎷绘繛杈剧到閹芥粓寮搁崘鈺€绻嗘い鎰╁灩椤忣參鎸婂┑瀣厽闁靛繆鎳氳ぐ鎺撳珔闁绘柨鍚嬮悡銉︾節闂堟稒锛嶆俊鎻掓憸缁辨帡鎮╅崘娴嬫灆闂佸搫鐬奸崰鎾诲焵椤掑倹鏆╅弸顏嗕焊韫囨洜纾藉〒姘搐閺嬨倝鏌℃担绛嬪殭妞ゎ偄绻愮叅妞ゅ繐鎷嬪Λ鍐ㄢ攽閻愭潙鐏﹂柣鐕傜畵楠炲啫鈻庨幘瀵稿幗闁瑰吋鐣崹濠氭偂椤栫偞鐓曟俊銈勭閳绘洟鏌熼璇插祮妞ゃ垺宀搁崺鈧い鎺戝瀹撲線鏌熼悜妯烘闁哄啫鐗嗛悞鍨亜閹烘垵鈧粯绋夊澶嬬叆婵犻潧妫欓ˉ鐘电磼閳锯偓閸嬫捇姊绘担绋款棌闁绘挸鐗撳畷鎴﹀礋椤掍礁寮块梺鍛婂姦閸犳鎮″▎鎰╀簻闁哄洨鍋為ˉ鐘电磼婢舵ê鏋熼柟渚垮妽缁绘繈宕熼鐐殿偧闂備胶鎳撻崲鏌ュ箠濮椻偓楠炲﹪鎮欓崫鍕庛劍銇勯弮鍌滄憘婵☆偄瀚板濠氬磼濞嗘埈妲梺纭呭Г缁挸鐣烽弶娆惧悑濠㈣泛锕﹂、鍛存⒑閸涘﹤濮岄悘蹇旂懇瀵娊鏁冮埀顒勬箒闂佺ǹ绻愰崥瀣礊閹达附鐓曢柟鑸妼娴滄儳鈹戦敍鍕杭闁稿﹥鐗犻獮鎰偅閸愩劎锛涢梺缁樓归褏绮诲ú顏呯厸闁搞儯鍎遍悘顏堟煃闁垮鐏撮柡灞剧☉閳规垿宕卞Δ濠佺棯闂備胶枪鐞氼偊宕濋幋锕€钃熸繛鎴欏灩鎯熼梺闈涳紡閸涘懌鍔戝娲传閸曨喖顏銈嗗灥椤︻垶鎮鹃悜钘夐唶闁哄洨鍊i埡鍐╁枑闊洦绋掗崕濠囨煕椤愮姴鍔滈柍閿嬪灴閺屾盯骞橀悷鎵闂佸憡蓱閻╊垶寮诲☉姘e亾閿濆簼绨绘い蹇d邯閺岀喐绗熼崹顔碱潎閻庤娲栭妶鍛婁繆閻戣棄唯闁挎棃鏁崑鎾活敆閸曨兘鎷洪梺鍛婃尰瑜板啯绂嶉弽顓熺厱閹兼番鍨婚崣鈧梺绯曟櫆閻╊垶鐛幒妤€绠犻柕濞垮劤缁夋椽鏌℃担鐟板鐎规洏鍔戦、娆撳礂閼测晜姣夐梻浣藉吹閸犳劗鍒掓惔銏℃珷婵°倕鍟弳婊堟煃閸濆嫭鍣归柡瀣╃窔閺屾盯寮撮妸銉т画闂佺粯鎸诲ú鐔煎蓟閻旂ǹ顕遍悗娑櫳戦柨顓㈡⒑閸濆嫷鍎愮紒瀣尵濡叉劙骞掑Δ鈧悞鍨亜閹哄秶顦︾紒鍓佸仱閹﹢鎮欓惂鏄忣潐缁傚秹鎮欓澶嬵啍闂佺粯鍔樼亸娆愮閵忋倖鐓曢柡鍐e亾缁炬澘绉规俊鐢稿礋椤栨稒娅嗛柣鐘叉穿鐏忔瑦绂掗鐑嗘富闁靛牆鍟悘鈺呮煥閺囥劋绨绘い顐㈢箳缁辨帒螣鐠囧樊鈧捇姊洪崨濠勨槈闁挎洏鍊濆鎶藉醇濠靛啯鏂€闂佺粯鍔欓·鍌炲吹鐎n剛纾奸柣妯挎珪鐏忣參鏌i敐澶樻闁瑰弶鎸冲畷鐔碱敃椤愩垺顔撻梻鍌欑閹碱偊藝娴兼潙鍨傜憸鐗堝吹閸ヮ剙惟闁冲搫鍊甸幏娲⒒娓氬洤浜為柛瀣洴閹崇喖顢涘☉娆愮彿闁诲孩绋掕摫闁告瑥绻愰埞鎴︽偐閹绘帗娈查梺闈涙处缁诲啯绌辨繝鍥舵晝闁靛繒濮靛▓顓㈡⒑鐎圭姵顥夋い锔炬暬閻涱噣骞掑Δ鈧粻锝夋煟閹邦厾銈撮柛瀣崌閺佹劙宕ㄩ鍛澑闂備胶绮摫妞ゆ梹鐗犲鎶筋敍閻愬鍘撻悷婊勭矒瀹曟粌鈹戦崱蹇旂€洪梺鍝勬储閸ㄥ湱绮昏ぐ鎺撶厵闁规鍠栭。濂告煟閹惧啿鏆熺紒杈ㄦ尰閹峰懘鎳栭埄鍐ㄧ仴闁伙綁顥撴禒锔炬喆閿濆棙鏉搁梻浣哄仺閸庤京澹曢銏犳槬闁挎繂娲犻崑鎾舵喆閸曨剛顦ラ悗瑙勬处閸撶喖宕洪姀鈩冨劅闁靛ǹ鍎抽娲⒑缂佹〞鎴﹀礈濮橆兗缂氶柟鍓х帛閳锋帡鏌涚仦鎹愬闁逞屽墴椤ユ挾鍒掗崼鐔虹懝闁逞屽墮閻g兘顢涢悙鏌ユ暅濠德板€撶粈渚€宕滈鐐╂斀闁绘ḿ绮☉褎銇勯幋婵囧櫧濠㈣娲樼换婵嗩潩椤撶姴骞嶉梻浣告啞閹稿棝宕ㄩ鐙€鍋ч梻鍌欒兌缁垶骞愮拠瑁佹椽鎮㈤悡搴ゆ憰闂佽法鍠撴慨鎾倷婵犲洦鐓忓璺虹墕閸旀碍銇勯鈧悧濠勬崲濠靛鐓曢柍褜鍓熷畷銊╊敇瑜庡В澶愭⒒娓氣偓濞佳兠洪妶鍥e亾濮橆偄宓嗙€殿噮鍋婂畷鎺楁倷閹绘帞鈧厼顪冮妶鍡橆梿闁稿鍔欐俊鍫曨敊閻e瞼鐦堝┑鐐茬墕閻忔繈寮稿☉銏$叆闁哄洦锚閸旀碍銇勯鍕殻闁圭ǹ锕ュ鍕沪閻愵剦鍟庡┑锛勫亼閸婃牠宕濊缁骞嬮悩鐢电劶闁诲函缍嗛崑浣圭濠婂牊鐓欓柟瑙勫姈绾墽鈧稒绻冪换婵嗏枔閸喗鐏撻梺鍝勬媼閸嬪棗危閹版澘绠婚悹鍥皺閿涙粌鈹戦鏂や緵闁稿繑锕㈠畷鎴﹀箻鐠囪弓绱堕梺闈涳紡閸涱垰甯梺璇叉唉椤煤閺嶎灐娲晝閸屻倖鏅濋梺鍏间航閸庢煡宕h箛鏂剧箚妞ゆ牗姘ㄦ禒銏ゆ煟閹炬潙濮嶉柡灞剧〒閳ь剨缍嗛崐鏍箣閿曗偓妗呴梺鍛婃处閸ㄦ澘螞濮椻偓閺岀喓绮欓崹顔炬О濠电偛鍚嬪Λ鍐潖閾忓湱纾兼俊顖滃劦閹峰姊洪崨濠庣劶闁告侗鍨抽悞濂告⒑缁嬭法鐏遍柛瀣仱閹繝鎮㈤崗鑲╁幍闂佽鍨庨崘鈺傜槪婵$偑鍊栫敮鍥垂娴犲钃熼柨婵嗘閸庣喐銇勯弮鍌氬付缂侇偄绉撮埞鎴︻敊绾嘲濮涚紓渚囧櫘閸ㄥ爼鐛箛娑樺窛闁哄鍨电粣娑欑節閻㈤潧孝闁稿﹦鎳撻埢鎾澄熼懡銈囩槇闂佹眹鍨藉ḿ褎绂掗埡鍌樹簻闁哄洨鍠撻惌宀€绱掗纰辩吋妤犵偞锚閻g兘宕堕妸锔诲晭闂傚倷绶氬ḿ褎顨ヨ箛鏇炵筏缂備焦岣块々鑼喐閻楀牆绗氶柣鎾寸懇閺岋綁骞嬮悘娲讳邯閹﹢鍩¢崨顔惧幈闂佸搫鍟幐楣冩偩鏉堛劊浜滄い蹇撳閺嗭絽鈹戦垾宕囧煟鐎规洖宕灃闁逞屽墮宀e潡骞嬮敂瑙f嫼缂備礁顑嗛娆撳磿閹扮増鐓欓柣鐔哄閸犳ḿ鈧鍠栭…閿嬩繆閹间礁鐓涘ù锝嚽圭粊顕€姊绘笟鈧ḿ褎鐏欓梺绋匡攻椤ㄥ﹪骞嗛崟顒佸劅闁宠棄妫欑€靛矂姊洪棃娑氬濡ょ姴鎲$粋宥呪堪閸涱垳锛滅紓鍌欑劍閿氬┑顔碱樀閺屾稑鈻庤箛鏂挎濡炪値浜滈崯瀛樹繆閸洖宸濇い鏍ㄧ矤閸炲爼姊绘担鐑樺殌闁哥喕娉曢埀顒佺▓閺呮繄鍒掔€n喖绠虫俊銈咃攻閺咃綁姊洪棃娑氱畾婵$嫏鍥х婵炲樊浜濋埛鎴︽煕濞戞﹫鍔熺紒鐘虫崌閹顫濋鈧Σ濠氬础鏉堚晜鍠愰柣妤€鐗嗙粭姘舵煕婵犲嫭鏆╃紒杈ㄥ笒铻栧ù锝堛€€濡插牓姊虹粙鍖″伐妞ゎ厼鍢查锝嗗閺夋垹锛滃┑鐐村灦濮樸劑鎯侀崼銏㈢<闁绘劦鍓氱欢鍙夈亜閿曚椒鍚瑙勬礋瀹曠ǹ螖娴e搫骞堥梺璇插嚱缂嶅棝宕戦崟顖涘€堕悗鐢电《閸嬫挾鎲撮崟顒傤槰闂佸憡姊归悷銉╊敋閿濆棛顩烽悗锝呯仛閺咃綁姊虹紒妯哄閻忓繑鐟╅崺鈧い鎺戭槸瀵喗鎱ㄦ繝鍌涙儓閺佸牓鏌涢妷鎴濇噸閻ヮ亝绻濋悽闈涗户闁告鍥ㄥ剹闁稿本姘ㄩ弳锕傛煕椤愶絾澶勯柡浣告闇夐柨婵嗩槹濞呮粎绱撻崒娑欏暗缂佽鲸鎹囧畷鎺戔枎閹搭厽袦婵$偑鍊栭崹鐢告偋閹炬眹鈧礁顫濈捄铏诡唴闂佽姤锚閿涘濡搁埡鍌滃帾婵犮垼娉涢敃銈夊汲濞嗘垹纾界€广儱鎷戦煬顒傗偓娈垮櫘閸嬪﹪鐛崶顒€绾ч柛顭戝枤閻涒晜淇婇悙顏勨偓鏍箰閸℃稑绀嬮柛顭戝亽濡挸鈹戦悩鍨毄濠殿喚鍏樺顐﹀箹娴e摜锛涢梺缁樻⒒閳峰牓寮崟顖涚厸闁搞儯鍎遍悘鈺冪磼閳ь剚寰勯幇顓犲幍闁哄鐗嗘晶浠嬫偩闁秵鐓㈤柛鎰典簻閺嬫棃鏌嶈閸撴瑧绮诲澶婄?闂侇剙绉甸崑瀣節婵犲倸鏋ら柣搴$埣閺屾洘绻涢悙顒佺彆闂佹娊鏀遍崹鍧楀蓟濞戞ǚ妲堟慨妤€鐗婇弫楣冩煟韫囨挾绠抽柡浣割煼瀵鈽夐姀鈥充汗閻庤娲栧ú銈夊煕瀹€鍕拺閻犲洠鈧櫕鐏嗛梺鍛婎殕婵炲﹪濡存担鍓叉僵閻犻缚娅i崝锕€顪冮妶鍡楀潑闁稿鎹囬弻锝夋晲閸涱厽些濡炪値鍋呯划鎾诲春閳ь剚銇勯幒鎴濐仴闁逞屽厸缁€渚€鍩㈡惔銊ョ婵犻潧娲ㄩ埀顒佸▕閺屸剝寰勬繝鍕暥闂佸憡鏌ㄥù椋庡垝閺冨牊鐒肩€广儱妫岄幏濠氭⒑缁嬫寧婀伴柣鐔濆懐鐜婚柡鍐e亾缂佺粯绋掗幏鍛村礃閸欏顦╅梺绋款儏椤戝寮诲☉銏犵労闁告劦浜栧Σ鍫㈢磽娴e搫啸濠电偐鍋撳Δ鐘靛仦閻楁岣胯箛娑樼鐟滃酣宕戣濮婅櫣绱掑Ο鑲╃厒缂備緡鍣崹鎶藉箲閵忕姭妲堥柕蹇曞Х椤撴椽姊虹紒妯哄闁诲繑宀稿畷鎶筋敊閸撗咃紳婵炶揪绲藉鍫曨敁閸℃稒鐓曢悗锝庡亝瀹曞本鎱ㄦ繝鍕笡闁瑰嘲鎳樺畷鐑筋敇閻旇鍗抽梻鍌欑劍閹爼宕濊箛鎾愭盯宕熼銈呯闂佸吋鍓氶崹鐓幬f繝姘拺闁绘垟鏅滈~濠囨煕濞嗗繐鏆欐い顐㈢箻閹煎湱鎲撮崟顐ゅ酱闂備礁婀辩划顖滄暜閳哄懎绀夊鑸靛姈閳锋垿鏌涘☉姗堝伐闁诲繈鍎崇槐鎾愁吋閸滃啫浼愰梺浼欑悼閸忔ɑ鎱ㄩ埀顒勬煥濞戞ê顏俊缁㈠枤缁辨挻鎷呴崜鎻掑壍濠电偛顦板ú鐔风暦閵忕妴娲敂閸涱亝瀚奸梻渚€娼荤€靛矂宕㈤崗鑲╊洸闁绘劦鍏涚换鍡涙煟閹邦剙绾ч柛瀣ㄥ劤閳ь剚顔栭崳顕€宕戦崨顖涘床婵犻潧顑呴悙濠囨煏婵炑冨暙缁犵偤姊婚崒娆戭槮婵犫偓闁秴纾婚柟鐐湽閳ь剙鍟村畷銊╁级閹寸媭鍞甸梻浣烘嚀椤曨厽鎱ㄩ悽闈╃稏闁哄洢鍨洪悡娆撴煙椤栨稒绶茬悮姘舵⒑閹惰姤鏁遍悽顖涘浮濠€渚€姊洪幐搴g畵闁瑰啿绻樺畷鐢稿醇閵忊€虫瀾闂佺粯顨呴悧鍡欑箔閹烘鍊垫慨姗嗗墻濡插綊鏌曢崶褍顏鐐村浮楠炲鈹戦幇顏嗘/闂傚倷鐒﹂幃鍫曞磹閺囥垺鍤愭い鏍ㄧ箘娴滄瑩姊绘担鐟邦嚋缂佽鍊块獮濠冩償閵娿儲杈堝┑鐐叉閹稿鎮¢悢鍏肩厵闁绘垶锚閻忊晛霉閻樺磭娲撮柡灞炬礋瀹曟儼顦叉い蹇e幗椤ㄣ儵鎮欓弶鎴炶癁濡ょ姷鍋涢鍛村煘閹达箑绠涙い蹇撴椤︻喗绻濋悽闈浶ユい锝堟鍗遍柛娑欐綑绾惧鏌涘☉娆愮稇闁搞劌鍊块弻娑㈡晜鐠囨彃绠哄銈庡亝濞茬喖寮婚悢鍏煎€绘慨妤€妫欓褰掓⒑鏉炴壆顦﹂柨鏇ㄤ邯瀵濡堕崥銈呮贡閳ь剨缍嗛崑鍛存偟閺傛娓婚柕鍫濆暙閳ь剚鍔欏畷鎴﹀箻閸撲胶锛濋梺绋挎湰閼归箖鍩€椤掑倸鍘撮柟顔惧仱閺佸啴宕掑Ο宄颁壕闁告劦鍠栭柋鍥煏婢跺牆鍔ら柣娑栧劦濮婃椽宕崟顓涙瀱闂佸憡锚閵堢ǹ顕f导鏉懳ㄩ柍鍝勫€婚崢鎾绘偡濠婂嫮鐭掔€规洘绮岄~婵堟崉娴f洩绠撻弻娑㈠即閵娿儳浠╃紓浣哄У婵炲﹪寮婚悢琛″亾濞戞瑡缂氱紒鐘劚闇夐柣妯挎珪鐏忥附鎱ㄦ繝鍐┿仢闁哄苯鎳橀幃娆撴嚑鐠轰警浼冮梻浣告啞閿氶柟鑺ョ矌濡叉劙骞掑Δ浣告疂婵炶揪绲介崯顐λ夊┑鍡╂富闁靛牆妫欑粚璺ㄧ磼閹绘帒鈷旂紒顔碱儔楠炴帡寮崫鍕闂佹寧绻傞幊鎰濞戙垺鐓涢柛婊冨暟缁夘喗鎱ㄦ繝鍛仩缂佽鲸甯掕灒闁告繂瀚峰ḿ鏃€淇婇悙顏勨偓鏍ь潖瑜版帗鍋嬮柣妯垮皺閺嗭箓鏌曟径鍡樻珔鐎瑰憡绻堥幃妤€鈽夊▍杈ㄥ哺楠炲繒绱掑Ο鑲╊啎闁哄鐗嗘晶浠嬪箖婵傚憡鐓欓柧蹇e亝瀹曞本銇勯姀陇澹樻顏冨嵆瀹曠喖顢橀悪鈧崯搴ㄦ⒒娴e憡璐$紒顕呭灣閺侇噣鎮欑€涙ɑ鐝¢梻浣筋嚙濮橈箓锝炴径濞掑搫顫滈埀顒€鐣疯ぐ鎺戦敜婵°倕鍟粊锕€鈹戦濮愪粶闁稿鎸鹃埀顒冾潐濞叉ḿ鍒掑澶婄闁告稑鐡ㄩ崑鏍倵閻㈢櫥鍦姳閵夆晜鈷掗柛灞捐壘閳ь剛鍏橀幊妤呭礈娴gǹ鐏婂銈嗙墱閸嬬偤宕戦敓鐘崇厪闊洤顑呴埀顒佹礈婢规洘绻濆顓犲幍闂佸憡鎸嗛崨顓狀偧闂備胶绮幐璇裁洪悢鐓庤摕闁哄洨鍠撶粻楣冩煕椤垵鏋涘┑顔哄灲濮婅櫣鍖栭弴鐔哥彣缂備焦褰冨ḿ锟犲春閳ь剚銇勯幒宥囪窗闁哥喎绻橀弻娑㈡偐瀹曞洤鈷岄梺鐐藉劵缁犳捇寮婚妸褉鍋撻敐鍌涙珖缂佺姵宀稿楦裤亹閹烘搫绱电紓浣插亾濞撴埃鍋撻柟顔光偓鏂ユ闁靛骏绱曢崢閬嶆煟韫囨洖浠滃褌绮欓幃锟狀敍濠婂懐锛滈梺闈浨归崐妤呮儗濞嗘劖鍙忓┑鐘插鐢盯鏌熷畡鐗堝殗鐎规洏鍔戝Λ鍐ㄢ槈濮樻瘷銊╂倵濞堝灝鏋ら柡浣割煼閵嗕礁螖閸涱厾锛滃┑鐘诧工閹虫劙宕㈤鐐粹拻濞达絼璀﹂弨浼存煙濞茶绨介柍褜鍓熷ḿ褔鎯岄崒姘煎殨妞ゆ劧绠戠壕濂告煟閹邦剦鍤熼柛娆忔濮婅櫣绱掑Ο鑽ゎ槬闂佺ǹ锕ゅ﹢閬嶅焵椤掍胶鍟查柟鍑ゆ嫹 | More...
射频和天线工程师培训课程详情>>

  网站地图