嵌入式的基礎知識

來源:互聯網
上載者:User

1.嵌入式作業系統結構

一般情況下分為硬體子系統和軟體子系統;

硬體子系統主要包括:CPU小系統,電源模組,調試模組,時鐘模組,介面模組,複位和配置模組;

軟體子系統主要包括:驅動層,中介層,應用程式層

 

2.即時作業系統

即時的本質是任務的處理是可預測的,也就說在確定的時間內完成任務的處理;即時作業系統是指在規定的時間內完成任務的處理。

即時作業系統分為兩類:硬即時和軟即時:通常是從精度上講,軟即時一般大於千分之一秒;硬即時一般都是微秒級的。

 

3.嵌入式處理器分類

主要分為MCU(C51,AVR),MPU(ARM,MIPS,PPC,X86),SOC,DSP。

 

4.嵌入式作業系統

按照即時性來分,強即時的有Vxworks,uc/OS, OSE;弱即時的有WinCE,Linux。

 

5.make

主要作用是讀入所有的makefile檔案,初始設定變數,推匯出變數的隱晦規則,並分析規則,為所有的檔案產生依賴關係鏈,根據依賴關係和檔案修改情況,決定什麼檔案重建,然後執行產生命令。

 

6.makefle的作用

在通常的IDEIntegration Environment中,不需要makefile,只需要建立好工程就可以了,因此IDE環境簡單一些;開發中使用makefile的很大程度上是指定編譯連結規則, 實現自動化編譯,由於makefile在開發中需要自己指定,所以相對於IDE要靈活。

 

7.GCC開發工具

由於Linux下是沒有圖形介面的,因此提供了相應的開發工具;

  • GCC:編譯工具,主要參數如下:
  • -v:查看編譯器的版本;
  • -c:只編譯不連結;
  • -o:連結,適合c檔案;
  • -g:編譯時間產生調試資訊;
  • -gdwarf-2:附帶宏調試資訊;
  • -fomit-frame-pointer:
  • -o1/2/3:編譯最佳化選項;
  • -l:指定標頭檔目錄; 
  • ld:與makefile結合使用連結目標檔案;
  • objdump:反組譯碼;
  • strip:剝離符號資訊,減少目標或lib的大小;
  • gdb:命令列方式調試,-g參數編譯elf可執行檔
  • ddd:圖形介面

 

8.交叉編譯

什麼是交叉編譯?在一個平台上編譯出來可在另一個平台上啟動並執行可執行代碼,這個過程叫做交叉編譯,這個過程要關注一下平台使用的硬體架構和作業系統。

為什麼要使用交叉編譯?主要原因有兩點:1.當我們的目標機尚未建立起來,必須藉助交叉編譯產生需要的bootloader和核心;2.目標機上有限的資源,主要表現在CPU的低效能和非常小的記憶體空間,對於編譯來說,不可能在目標機上構建編譯環境(只工具鏈就會佔用很大的空間),因此,就在我們的PC上建立交叉編譯的環境,以產生在目標機上可執行檔。

我們經常在windows下面利用VC++編譯和調試C代碼,最終產生可以在windows下可執行檔程式;同樣的道理,我們也可以在PC上(不論是windows還是linux)編譯可在目標機上啟動並執行可執行程式,唯一不同的是我們需要安裝相對應的交叉編譯工具鏈(cross complication tool chain)。舉例如下:

  • 在Windows PC上,利用ADS(ARM 開發環境),使用armcc編譯器,則可編譯出針對ARM CPU的可執行代碼。
  • 在Linux PC上,利用arm-linux-gcc編譯器,可編譯出針對Linux ARM平台的可執行代碼。
  • 在Windows PC上,利用cygwin環境,運行arm-elf-gcc編譯器,可編譯出針對ARM CPU的可執行代碼。

交叉開發環境可以自己建立,也可以採用廠家封裝好的整合式開發環境,比較典型的整合交叉開發環境如下:

  • ARM ADS or SDT
  • MS E-VC or Windows Mobile
  • WindRiver Tornado,用於Vxworks
  • TI的CSS,用於DSP;
  • Freescale的Codewarrior,用於PPC;
  • GCC用於Linux的開發;

這裡注意,建立交叉編譯器的時候要注意版本匹配問題,特別是Linux,要注意軟體包、Kernel、編譯器三者版本要match;設定交叉環境時,要把Tools和代碼路徑、makefile相關項目都設定正確。

 

如何建立交叉開發環境呢?

1.開啟目標板上的NFS,要求核心支援NFS,開啟相應選項;

2.建立Gdb和Gdb Server;

基於GDB進行APP的調試,調試命令主要有: 

  • File:載入elf檔案;
  • Run:啟動運行;
  • List:顯示當前的程式和函數;
  • Break:設定斷點;
  • Delete b:刪除斷點;
  • Next,step:單步運行;
  • Continue:斷點停止後繼續執行;
  • Bt,backtrace,顯示調用棧;
  • Print,查看變數;
  • Display:動態監視變數;

 

 

9.模組編程

什麼是模組?模組可以動態改變核心的功能,這樣做可以提高靈活性,主要用於前期調試代碼時添加的調試模組;

工具主要有:1. insmod

2.lsmod

3.rmmod

模組的組成主要包括:核心標頭檔,模組載入和卸載的方法,裝置的節點,File操作資料結構,open/close/write/read的方法,makefie

 

10.Bootloader

含義,boot是與硬體強相關的,主要是初始化硬體,為kernel的運行創造條件;loader是把kernel拷貝到記憶體中,並且跳轉到相應地址開始運行;bootloader由於和硬體是強相關的,因此不同的CPU架構對應著不同類型的bootloader,主要有以下幾種不同的bootloader,如下所示:

Bootloader                          CPU                           OS

Grub                                    X86                           linux,windows

Lilo                                      X86                           Linux

U-boot                                ARM,PPC,MIPS       Linux,Vxworks,PSOS

Redboot                              ARM                           eCos

Vivi                                     三星ARM                      Linux

Bootrom                             PPC                            Vxworks

Blob                                   Intel PXA系列               Linux

 

與主機通訊協定:1.串口:kermit,xmodem,ymodem,速率較慢,適用於網口未初始化,相關工具主要有SecureCRT,putty;

2.網口:TFTP,NFS,速度很快;

 

不管是什麼樣的架構,bootloader遵循“stage1+stage2”原則:

  • 與體系架構強相關,與體系架構無關;
  • Flash+RAM;
  • 彙編+C;

Stage1:通常使用彙編,初始化CPU的核心寄存器,RAM檢查和初始化,拷貝代碼到RAM中,設定堆棧,跳轉到C入口處執行;

Stage2:通常是C語言,初始化CPU非核心寄存器,初始化相關外設,等待使用者輸入,如果使用者在設定時間內無輸入就拷貝核心和檔案系統到記憶體中,然後跳轉到核心入口;

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.