在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,91精品国产91免费

<abbr id="27omo"></abbr>

<menu id="27omo"><dl id="27omo"></dl></menu>
    • <label id="27omo"><tt id="27omo"></tt></label>

      新聞中心

      EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > uclinux啟動過程詳細分析

      uclinux啟動過程詳細分析

      作者: 時間:2018-08-31 來源:網絡 收藏

      本文引用地址:http://www.biyoush.com/article/201808/388126.htm

      ldr r3, =0x10000 /* 64K Bytes */

      ldr r2, =0xc700000

      ldr r1, =0

      next :

      ldr r0,[r1],#4

      str r0,[r2],#4

      cmp r1,r3

      bne next

      6)跳轉到C代碼執(zhí)行(即Stage2階段)

      這個過程是直接給指令指針賦值于跳轉的C代碼的入口地址,在我們的試驗中該入口地址是Main。

      LDR pc,=Main

      2.4 Stage2階段

      該階段的代碼主要使用C語言來實現的。該階段的工作主要是建立開發(fā)板與宿主機之間的通信,加載內核映像文件和配置內核啟動參數,并且啟動內核。

      嵌入式設備與宿主機的通訊方式有多種,最常用的是使用串口方式進行數據交換。本試驗采用的S3C44B0微處理器提供了兩個UART口,因此我們可以任選其中一個來初始化并且使用它來與宿主機交互。對于串口的初始化主要是波特率、奇偶校驗、停止位、數據位等內容。

      對于串口的波特率和波特因子的計算采用如下公式

      Iubrd =((int(mclk/16 / baud + 0.5) – 1)

      mclk是頻率、baud為波特率

      2.4.1 檢測內存

      該部分的功能主要是檢測系統(tǒng)在進行硬件初始化的時候是否發(fā)生了內存映射錯誤,即是否物理地址是否被映射到不存在的地址空間。通常是使用讀寫方式來檢測的,即以內存頁為單位,在每個頁頭進行讀寫操作,比較讀寫結果。因為S3C44B0處理器并不支持內存映射,因此我們在Stage2過程中并沒有包含該部分功能函數。

      2.4.2 加載內核映像

      該過程其實只是一個從Flash的指定位置(該位置是燒寫的起始地址)拷貝到RAM中指定的地址空間里。在拷貝之前必須要為uClinux的全局變量結構,即啟動參數、內核頁表、RAM的頁目錄等信息預留一定的空間。如果我們將FLASH和RAM看成連在一起的線性地址,則系統(tǒng)的空間分配會如下圖:

      。..。..

      Boot

      初始化代碼

      uClinux

      未用

      中斷向量表

      初始化映像代碼

      啟動參數

      內核映像

      未用

      堆棧

      2.4.3 配置內核啟動參數

      我們采用的uClinux是2.4.x內核版本,該版本的內核支持參數啟動過程。在嵌入式系統(tǒng)中,啟動參數的傳入主要是依靠bootloader程序向標記列表(tagged list)的相關域中填寫相應的值來完成的。

      2.5 uClinux內核引導

      當我們初始化完畢uClinux的啟動參數之后,控制權就可以交給uClinux內核了,uClinux系統(tǒng)調用內核解壓函數(decompress_kernel)來對上一個階段拷貝的uClinux內核在RAM空間里進行解壓(當然如果系統(tǒng)內核在建立的時候沒有配置成壓縮格式,則解壓過程略去)。在解壓完畢后,跳轉到內核調用函數(call_kernel),該函數實際上執(zhí)行的是start_kernel(),這個函數包含了有關處理器初始化、中斷初始化、進程初始化等操作。最后,將控制權完全的交與uClinux操作系統(tǒng)來執(zhí)行。

      偽處理過程如下:

      IF(啟動參數正確)

      CALL decmporess_kernel()

      CALL call_kernel()

      ELSE

      啟動失敗

      decompress_kernel()

      {

      解壓內核映像

      }

      call_kernel()

      {

      。..

      start_kernel()

      。..。

      }

      3 總結

      本文是對S3C44B0的啟動過程進行了一次分析,啟動部分的代碼可以說是嵌入式設備開發(fā)比較重要的部分。而且該部分的處理工作往往又比較麻煩,因此在這里我只是想起到拋磚引玉的作用。因為成文時間比較倉促,難免有錯誤,請大家批評指正。

      ==========================================================

      《ARM7 uClinux開發(fā)實驗與實踐》P130

      Bootloader完成系統(tǒng)初始化工作后,將運行控制權交給uClinux內核。根據內核是否壓縮以及內核是否在本地執(zhí)行,uClinux通常有以下兩種可選的啟動方式:

      (1)Flash本地運行方式。內核中未經壓縮的可執(zhí)行映像固化在Flash中,系統(tǒng)啟動時,內核在Flash中開始逐句執(zhí)行。

      (2)壓縮內核加載方式。內核的壓縮映像固化在Flash上,系統(tǒng)啟動時,由附加在壓縮映像前的解壓復制程序讀取壓縮映像,并在內存中解壓后執(zhí)行。這種方式相對復雜,但是運行速度更快。

      首先介紹內核的Flash本地運行方式。

      本地運行時,內核的啟動包括特定體系結構設置和uClinux系統(tǒng)初始化兩步,內核啟動的入口文件是head-armv.s。


      上一頁 1 2 3 4 5 6 7 8 9 10 11 下一頁

      關鍵詞: uClinux cpu 控制器

      評論


      相關推薦

      技術專區(qū)

      關閉