<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 基于S3C44B0芯片的uClinux內(nèi)核引導(dǎo)過(guò)程分析

          基于S3C44B0芯片的uClinux內(nèi)核引導(dǎo)過(guò)程分析

          作者: 時(shí)間:2012-04-20 來(lái)源:網(wǎng)絡(luò) 收藏

          加載鏡像

          加載工作實(shí)際上是完成將Flash中代碼拷貝到RAM指定地址單元的工作,在拷貝前必須在第二階段RAM啟動(dòng)代碼和該部分代碼之間預(yù)留一定的空間,用來(lái)存放uClinux的全局結(jié)構(gòu)變量,如: 啟動(dòng)參數(shù)、內(nèi)核頁(yè)表、ARM的頁(yè)目錄等信息。全地址空間的分配情況可參看本開(kāi)發(fā)板地址空間分配示意圖1。

          45.jpg
          圖1 地址空間分配示意圖

          配置內(nèi)核啟動(dòng)參數(shù)

          uClinux 內(nèi)核啟動(dòng)中,支持參數(shù)傳入。在嵌入式系統(tǒng)中,啟動(dòng)參數(shù)的傳入主要靠bootloader程序向標(biāo)記列表( tagged list)的相關(guān)域中填寫(xiě)對(duì)應(yīng)的值來(lái)完成,常見(jiàn)的參數(shù)如有ATAG_CORE、ATAG_MEM、ATAG_CMDL INE、ATAG_RAMD ISK、ATAG_ IN ITRD等。

          uClinux內(nèi)核

          在初始化階段完成uClinux啟動(dòng)參數(shù)設(shè)置后,控制權(quán)交由uClinux內(nèi)核接管,并調(diào)用解壓內(nèi)核函數(shù)( decomp ress_kernel) ,對(duì)拷貝到SDRAM的內(nèi)核映像文件進(jìn)行解壓縮,然后跳轉(zhuǎn)到內(nèi)核調(diào)用函數(shù)( call_ kernel) ,該函數(shù)實(shí)際上是執(zhí)行start_kernel ( ) ,其中包括了處理器結(jié)構(gòu)的初始化、中斷的初始化、進(jìn)程相關(guān)的初始化以及內(nèi)存初始化等重要工作。最后,將控制權(quán)交給解壓后的uClinux系統(tǒng),進(jìn)而完成整個(gè)uClinux內(nèi)核,參看以下偽碼: If (啟動(dòng)參數(shù)配置正確)調(diào)用decomp ress_kernel ( )調(diào)用call_kernel ( )else提示啟動(dòng)失敗decomp ress_kernel( ){解壓內(nèi)核鏡像文件}call_kernel ( ){ start_kernel( ) ;}

          小 結(jié)

          對(duì)于嵌入式系統(tǒng)開(kāi)發(fā)人員來(lái)說(shuō),針對(duì)某一特定的嵌入式硬件平臺(tái),移植開(kāi)發(fā)uClinux操作系統(tǒng)的應(yīng)用產(chǎn)品時(shí),往往需要自己動(dòng)手編寫(xiě)或修改已有的啟動(dòng)代碼,而為uClinux內(nèi)核啟動(dòng)準(zhǔn)備合適的工作環(huán)境,占據(jù)了大部分工作量。至于uClinux,在設(shè)置好啟動(dòng)參數(shù)后則是由編譯好的內(nèi)核鏡像自動(dòng)完成,對(duì)于系統(tǒng)開(kāi)發(fā)人員來(lái)說(shuō)基本上是透明的。


          上一頁(yè) 1 2 3 下一頁(yè)

          評(píng)論


          相關(guān)推薦

          技術(shù)專(zhuān)區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();