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

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > ARM Linux內(nèi)核啟動流程

          ARM Linux內(nèi)核啟動流程

          作者: 時間:2016-11-21 來源:網(wǎng)絡(luò) 收藏
          操作ARM Linux內(nèi)核主要分為哪幾個步驟,下面杭州碩數(shù)就為大家講解一下這個啟動的流程。

          ARM Linux內(nèi)核綜述
            啟動分兩步,
            首先是硬件相關(guān)部分,入口是arch/arm/kernel/head.S代碼文件中的ENTRY(stext)函數(shù);
            然后是硬件無關(guān)部分,入口函數(shù)是init/main.c代碼文件中的start_kernel函數(shù)。

          本文引用地址:http://www.ex-cimer.com/article/201611/319248.htm

          ARM Linux內(nèi)核硬件相關(guān)部分
            1. 我們平臺是arm,自然硬件相關(guān)部分代碼在arch/arm/里面。
            2. 平臺相關(guān)部分的核心代碼自然在arch/arm/kernel/里面。
            3. 找入口函數(shù),必須從對應(yīng)目錄的Makefile和鏈接腳本*.lds入手!
              # ls arch/arm/kernel/
              得到一個Makefile文件和一個vmlinux.lds文件
              # vim arch/arm/kernel/Makefile
              看到有一句extra-y := $(head-y) init_task.o vmlinux.lds,則說明其使用鏈接腳本為vmlinux.lds
              還有一句head-y := head$(MMUEXT).o
              # vim arch/arm/kernel/vmlinux.lds
              看到有一句ENTRY(stext),則說明入口函數(shù)為stext

           4. 結(jié)合上面3句關(guān)鍵的代碼,可以推測stext函數(shù)在arch/arm/kernel/head*.S或arch/arm/kernel/head*.c
            # ls arch/arm/kernel/head*
            得到arch/arm/kernel/head-common.S arch/arm/kernel/head-nommu.S arch/arm/kernel/head.o arch/arm/kernel/head.S
            再結(jié)合Makefile的默認(rèn)規(guī)則%.o : %.S 或 %.o : %.c
            可以知道arch/arm/kernel/head.o與arch/arm/kernel/head.S對應(yīng)。
            另外,查找arch/arm/kernel/目錄下,有那個文件有“stext”字樣



          關(guān)鍵詞: ARMLinux內(nèi)核啟動流

          評論


          技術(shù)專區(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); })();