讀書筆記《Building embedded linux systems》Chapter 2

來源:互聯網
上載者:User

  繼續努力,開始學習第二章:基本概念。
  對於嵌入Linux,需要先熟悉Linux系統,有很多,也將有更多的Linux系統,因此不要限制與某個單一的類型。目前最大的三個是Red
Hat,Novell(SLES)和ubuntu。如果我們選擇流行的Linux版本作為開發平台(可以選擇windows或者Unix作為workstation),一般基於Eclipse的映像開發環境。
   有三種setup:Linked
setup;可插拔存貯setup,standalone
setup。Target需要開發環境,bootloader,kernel,Root,檔案系統。在Linked
setup的時候,有些向我們以前在調測vxWorks板子上的程式,通過網線或者RS232,將host和target聯絡起來,通常用於開發的調測,
其中kernel可以通過TFTP來獲得,檔案系統可以通過NFS來mount,避免在開發中大量copy。Removable
Storage
Setup方式常用於初始化,bootloader在target上,其他在可插拔的存貯介質中。前兩種方式,開發環境都在host上,對於
standalone
setup方式,和我們的PC機開發沒有什麼區別,直接在機器上進行開發,都有的東西都在target上面,就如我們之前在linux
kernel上開發的voip監控儀錶。Linked和standalone是可以結合在一起使用的。
  調測(Debug)setup有三種方式:串口、網路和特定的debug硬體。串口收到傳輸速率的限制,以及串連一個terminal的限制,但是適合
進行kernel調測。串口和網路會使用到target上的一些基本的I/O軟體,對於某些新的板塊,調測kernel的時候,這些軟體還不存在,因此需
要特別的debug硬體,例如用於CPU的JTAG和BDM
pin,這些都是比較昂貴的編譯器,並且可能需要和CPU廠家建立良好的夥伴關係,簽注NDA。

  Linux作業系統的結構。
  在底層硬體包括至少32-bit的CPU(包含MMU:memory management
unit),RAM,I/O能力(允許進行debug調測)以及root filesystem(可以是本地的也可以是網路的)。
  Kernel,就是真正意義上的linux,底層的介面通過硬體獨立的API來控制硬體資源,例如memory
pages,處理特定CPU的操作,特定架構memory的操作,以及device的基本介面,想高層提供抽象的代碼,包括標頭檔、宏、封裝的函數。高層
的單位提供對所有基於unix系統通用的抽象表達,包括進程、檔案、socket、訊號等等。kernel的底層介面是不同已經平台所通用的,高層抽象幾
乎是一樣的。『這裡有一個BSP,BSP應該是硬體根據linux核心底層介面給出的控制硬體的板卡支援包』。
  在這兩層之間,kernel需要解析元件來互動資料,這就是檔案系統和網路通訊協定。在嵌入式系統中,經常使用flash作為存貯介質。不同的存貯格式通
過不同的引擎,通過linux的虛擬檔案系統(VFS)提供統一的API給上層使用。FAT和EXT3都是VFS。現在存貯裝置廠家提供更高level的
抽象,linux使用這種發展,使用ext的檔案系統。在檔案系統中,至少有一個root
filesystem,用於load第一個在系統中run的app,通常還包括轉載module,給進程提供一個工作目錄。根檔案系統可以是一個真實的硬
件存貯裝置,也可以是系統啟動是價值到RAM中,一般是第一種方式。
  直接在kernel上面部署我們通常所謂的app是不太合適的,需要lib的支援。常見的是GNU
C。對於動態連結,沒有將相關的lib作為app的二進位代碼,可以多個app一起share。C
lib在RAM中載入一起,就可以分享。但是有些嵌入式作業系統的應用選擇靜態連結,這樣不需要線上系統存貯整個lib。
  系統啟動設計三個部分:bootloader、核心、init進程。bootloader和底層硬體有關,先對底層硬體進行初始化後,進入kernel的startup
code。核心的啟動代碼在起來一個C代碼運行環境前不同平台由很大的差異,啟動C環境後,運行start_kernel(),這初始化核心高層功能,mount根檔案系統,並且啟動初始進程。
  CPU的第一個指令由生產廠家指定的一個地址獲得,這個地址通常是一個固定存貯器件,ROM或者flash晶片,這上面的軟體是用於
bootstrap的。很多linux嵌入系統都是使用固體存貯期間的方式,這裡包括初始的bootloader,相關配置(boot
parameters),核心和root
filesystem。bootloader可能防止固態存貯的地址低位,也可能在地址高位,因此很多flash裝置同時提供對高位地址和低位地址的配
置,並通常對bootboader地區提供保護機制。雖然說分為四個部分,但是boot參數可以防止子bootlader中,kernel也可以防止在
root filesystem中,在Linux2.6,如果需要可以很方便將kernel和根檔案系統打包為一個img。Boot
storage介質可以使用devie
programmer進行初始編程。出來固態存貯器件外,還有磁碟(disk)和網路兩種方式。對於磁碟,最初的bootloader或者從disk中
load一個更大更多功能的第二bootloader,或者直接從disk獲得kernel。使用網路方式,可能將根檔案系統或者將跟檔案系
統+kernel放置在網路,他哦通過TFTP來訪問kernel,通過NFS來mount根檔案系統,這種方式在適合早期的調測。
  系統存貯的物理地址和kernel的虛擬位址(在X86系統中成為邏輯地址)有很大的差異,很多硬體外設可以通過物理地址來擷取,但限制或者不能通過
虛擬位址來擷取。因此如果我們需要設定kernel或者開發自己的driver,我們需要瞭解這些物理地址。在啟動的時候,bootloader將
kernel讀至RAM,並跳到核心的start
routines,後續的系統啟動將由linux來執行。當linux運行是,程式使用虛擬位址,這是虛擬位址將對kernel的配置和裝置driver
有個,driver有些資訊放置在kernel空間,有些放置在使用者空間,有些操作兩者之間需要互動資料。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.