嵌入式開發基礎 2

2021-08-23 11:53:49 字數 3518 閱讀 4244

嵌入式開發基礎(2)

一、目標板

在開發機(執行桌面linux系統)和目標板(嵌入式開發板)之間:

首先通過rs-232串列埠線進行連線,其次通過乙太網連線線進行連線。

通過rs-232串列埠線進行連線,使用串列埠通訊工具,最常用的是minicom工具,它對於所有的桌面linux發布包都有效。

目標板的啟動:

1)目標板電源啟動,bootloader立即得到處理器的控制。

執行底層硬體初始化,包括:處理器和記憶體設定、串列埠uart控制初始化、乙太網控制器初始化等。

u-boot載入

2)引導核心

u-boot初始化硬體、串列埠乙太網介面,然後u-boot載入和引導linux核心。

所有的bootloader都有乙個載入和執行作業系統映像的命令。如:

tftpboot 200000 uimage-440ep

tftpboot命令指示u-boot使用tftp協議、通過網路載入核心映像uimage-440ep。此情況下,核心映像一般是儲存在開發主機上。

3)bootm命令的使用

bootm命令指示u-boot引導核心。假定核心正確配置,則引導linux核心的結果是在目標板上提示控制台命令。如:

amcc login: <<< this is a linux kernel console command prompt

要注意:bootm命令是u-boot的「喪鐘」,使用此命令後,linux核心將獲得控制權,bootloader停止並退出。bootloader要獲得控制權的方法是重新啟動目標板。

餘下的引導資訊將由linux核心產生。u-boot停止,linux核心映像接管控制。

4)核心初始化

linux核心開始執行時,它輸出大量的狀態資訊。比如:

--------------------------------------

...looking up port of rpc 100003/2 on 192.168.0.9

looking up port of rpc 100005/1 on 192.168.0.9

vfs: mounted root (nfs filesystem).

freeing init memory: 232k

init: version 2.78 booting

...coyote login:

--------------------------------------

這些資訊一般不低於100行。

根檔案系統包括應用程式、系統庫、建立gnu/linux系統的工具。

5)第乙個使用者空間的程序:init

二、嵌入式儲存器

大多數linux嵌入式系統的儲存需求為4mb~256mb,但目前有增加到g的趨勢。

flash儲存器可通過軟體控制寫入和擦寫,且flash的寫入和擦寫速度在不斷提高。

典型的flash儲存晶元,資料以0或1按位寫入,但是擦寫則按塊整塊擦寫。故塊經常被稱為擦寫塊。

典型的flash儲存器裝置包含許多擦寫塊,例如4mb的flash晶元可包含64個擦寫快,每個塊為64kb。

要修改儲存在flash記憶體的資料,被修改資料所在的整塊都將被擦寫,即使只修改1個位元組,整塊先被擦寫,再重寫。

與硬碟的扇區相比,flash的塊尺寸相對要大很多。比如說,典型的高效能硬碟的扇區大小一般為512或1024位元組。

flash儲存器的寫速度比硬碟慢了很多,通常更新資料的時間是硬碟的很多倍。

flash儲存器的另乙個限制是flash儲存器單元的寫使用期限。儘管flash的寫使用期限次數相當大,每個塊100k次,但是乙個糟糕的演算法可能很快就產生乙個壞塊。

nand flash裝置通過提供更小的塊尺寸,改進了傳統nor flash的侷限性,使得寫速度更快,flash陣列的使用更富有效率。

nor flash裝置與微處理器的介面與許多微處理器外設相似,即它們通過乙個並行資料和位址匯流排直接連線到微處理器的資料/位址匯流排。flash陣列的每個位元組或字都可以隨機方式單獨定址。

nand與之相反,nand裝置通過複雜的介面連續訪問,nand裝置操作模式類似於傳統硬體驅動和相應控制器的模式。

總的來說,微處理器可直接訪問nor flash儲存器,**在nor flash外執行。

flash的使用

嵌入式系統設計者有多種方式安排和使用flash儲存器。最簡單的系統,原始的二進位制資料(通常是壓縮的)被儲存到flash裝置,當引導時,flash儲存的檔案系統映像被讀入到linux的記憶體裝置,作為對映並只在記憶體訪問。

這是很好的設計選擇,flash資料很少需要更新。

flash儲存器安排的例子:

在flash儲存器陣列的頂部或底部時bootloader和配置,緊接著bootloader的是linux核心映像,以及ramdisk檔案系統映像(它儲存根檔案系統)。代表性地是linux核心和ramdisk檔案系統映像都是壓縮的,bootloader在引導週期處理解壓縮任務。

目前最流行的flash檔案系統是使用jffs2,它是在快閃儲存器上使用非常廣泛的讀/寫檔案系統。jffs2有幾個重要特徵,目標是改進整體效能,增加flash的使用壽命,減少因電源故障產生的資料丟失問題。

最新的jffs2檔案系統的重要改進包括改進的磨損平衡,壓縮和解壓縮資料到指定尺寸的flash儲存器,支援linux硬連線等。

三、記憶體空間

所有嵌入式作業系統都把系統記憶體看作是單一的、扁平的位址空間,並以此進行管理。即微處理器的位址空間的範圍從0到最大實體地址。

ffff_ffff~ff00_0000 flash儲存器(16mb)

f000_0000 外設基位址

8000_0000 pci匯流排位址

03ff_ffff~0000_0000 dram(64mb的記憶體)

高效能微處理器包含了複雜的硬體引擎,稱為mmu(儲存管理單元)。mmu的目標是是作業系統能夠高度管理和控制它分配的位址空間。此控制有兩種基本形式:訪問許可權(access right)和記憶體轉換(memory translation)。

訪問許可權:允許os為指定任務對指定記憶體的訪問許可權進行分配。

嵌入式風格的hello world

#include

int bss_var; /*未初始化的全域性變數*/

int data_var=1; /*初始化的全域性變數*/

int main(int argc, char **argv)

----------------

輸出結果:

root@amcc:~# ./hello

hello, world! main is executing at 0x10000418

this address (0x7ff8ebb0) is in our stack frame

this address (0x10010a1c) is in our bss section

this address (0x10010a18) is in our data section

root@amcc:~#

嵌入式開發基礎3

一 嵌入式linux發布包 linux核心啟動 查詢和mount根檔案系統 啟動指令碼可執行程式和工具 大多數linux應用程式依賴1個或多個系統庫,其它的程式則需要配置檔案和日誌檔案。總的來說,即使是嵌入式linux系統,也需要依賴很多根檔案系統下適當目錄下的檔案。完整linux桌面系統,其根檔案...

嵌入式開發

經常會有人說嵌入式開發,嵌入式開發千差萬別,我總體上分為4個等級 微電子開發 rtos開發 指令碼開發 富應用開發 這一類產品行為比較固定,比如說電視遙控器,遙控汽車,電飯煲,恆溫燒水壺,溫濕度感測器,智慧型門鎖等。這些裝置行為都比較簡單,通過按鈕可以設定系統功能和行為。量不大,經常會選用flash...

初識嵌入式 嵌入式開發概述

1 什麼是嵌入式技術 1 嵌入式軟體與非嵌入式軟體的區別?答 嵌入式軟體是結合作業系統之上做的開發 非嵌入式軟體是做的裸機開發。裸機 沒有作業系統 2 嵌入式開發與微控制器開發的區別?答 區別 是否有作業系統。拓展 答 優點 解決了軟體的移植性 解決了開發人員的能力的劃分問題。提供了豐富的網路協議 ...