基於ARM CLinux嵌入式系統

2021-06-10 01:51:53 字數 4047 閱讀 8456

32位arm嵌入式處理器具有高效能、低軾耗的特性,已被廣泛應用於消費電子產品、無線通訊和網路通訊等領域。μclinux是專門為無mmu處理器設計的嵌入式作業系統,支援arm、motorola等微處理器。目前國內外採用arm-μclinux作為嵌入式系統非常普遍。而嵌入式系統的啟動引導技術是嵌入式系統開發的乙個難點。系統啟動引導的成功與否決定了應用程式的執行環境是否能正確構建,即系統啟動成功是應用正確執行的前提。

常用的嵌入式系統啟動方法是先通過jtag將嵌入式作業系統核心與進flash,再由其帶的引導程式bootloader完成嵌放式系統的啟動引導工作。這種方法要借助昂貴的jtag裝置完成作業系統核心 的燒寫工作,並且不能方便地更新嵌入式系統中的軟體平台。本文提出一種基於arm-μclinux嵌入式系統的啟動引導方案,不但可以通過簡易的串列埠方便地更新嵌入式系統內的軟體平台,而且成功解決了這種架構的嵌入式系統的啟動、初始化、作業系統核心的固化和引導等問題。本文簡略說明arm-μclinux嵌入式系統的硬體平台和軟體平台;描述系統引導程式bootloader的設計,闡述設計時考慮的因素和需解決的技術難點,給出一套可行的引導程式流程;針對μclinux核心的引導程式,說明μclinux核心的載入和初始化過程。

1 系統組成

軟體平台由以下部分組成:系統引導程式、嵌入式作業系統核心、檔案系統。系統引導程式通常也稱為bootloader,**量雖少,但是作用非常大,相當於pc上的bios,負責將作業系統核心固化到flash中和系統初始化工作,然後將系統控制權交給作業系統。嵌入式作業系統核心是嵌入式系統加電執行後的管理平台,負責實時性任務和多工的管理。arm7tdmi是一款沒有mmu的處理器,因此採用μclinux作為本系統的作業系統核心。μclinux是linux是乙個分支,專為無mmu的處理器設計,它繼承了linux強大的網路功能和多工管理功能,並對記憶體管理和程序管理進行了改寫,滿足無mmu處理器的開發要求。檔案系統是嵌入式系統軟體平台占用儲存量最大的一部分,也是與使用者開發最相關的一部分。它儲存了系統配置檔案、系統程式、使用者應用程式和必需的驅動程式。

軟體平台固化在flash中。通常根據軟體平台的內容 對flash的位址空間進行分割槽,一般分三個區,分別豐放bootloader、μclinux核心和檔案系統。分割槽的方式一般有兩種:一種是根據三個部分預定的儲存空量,允許bootloader、核心和檔案系統擁有自己固定的分割槽和首位址;另一種就是按照這三部分的實際分配區間,乙個部分緊跟著另乙個部分後儲存,沒有固定的分割槽和首位址。通常採用第一種方式,雖然可能會浪費一部分flash空間,但是方便核心的載入和檔案系統的掛載,同時也利於系統的除錯和開發。而如果充分利用flash的儲存區間,節約成本,那麼可採用第二種方式。

2 系統引導程式的設計

系統引導程式bootloader是嵌入式系統加電後執行的第乙個程式,進行功能設計時首先要考慮以下問題:

(1)將μclinux核心和檔案系統固化在flash中

(2)系統初始化

因為系統剛加電時,作業系統的核心還沒有被載入,系統的初始化工作由bootloader完成。它主要是將系統、初始化儲存系統、配置arm各種模式下的資料棧、使能屏常中斷、根據需要切換處理器模式和狀態。

(3)μclinux核心載入方式

固化在flash中的μclinux核心有兩種執行方式:一種方式是直接在flash中執行μclinux自帶的引導程式;另一種方式是將固化在flash中的核心先拷貝到sdram的某一段位址區間,再從該段位址區間的首位址執行uclinux核心。

第一種方式是bootloader進行系統初始化工作後,跳到核心固化在flash中的首位址處,將控制權交給μclinux,開始在flash中逐句執行核心自帶的引導程式,由該引導程式完成核心的載入工作。這種方式是目前很多嵌入式系統啟動核心所採用的方式,也是本系統採用的核心載入方式。

第二種方式是bootloader完成系統初始化工作後,把核心的映像檔案由flash拷貝到sdram中,再從sdram中執行μclinux核心的引導程式,載入μclinux核心。

第二種載入方式在sdram中執行程式,因此執行速度比第一種方式快一些,並且可以通過ram快速引導技術實現這種載入方式。其主要是針對nand型flash的情況。與nor型flash最大的不同點是:nor型flash使用記憶體隨機讀取技術,與sdram一樣,可以直接執行儲存在flash中的程式;而nand一樣,可以直接記憶體隨機讀取技術,它是一次讀取一整塊記憶體,因此不能直接執行儲存在nand型flash中的程式,必須把nand型flash中的程式先拷貝到sdram,再在sdram中執行該程式。但是nand型flash**比nor型flash廉價,所以很多嵌入式系統還是採用nor型flash(幾百k位元組)+nand型flash(幾兆位元組)的儲存模式。其中nor型flash存放可執行的且**量小的bootloader和一些必要的資料,而nand型flash儲存儲存量較大的核心和檔案系統。

在本系統中,由於採用nor型flash儲存bootloader、核心和檔案系統,所以可以直接訪問核心所在位址區間的首位址,執行核心自己的引導程式,而且核心自帶的引導程式功能強大,可以方便地核心的載入,向核心傳遞有關的硬體引數。本系統採用第一種載入方式。

(4)自舉模式和核心啟動模式的切換

bootloader一般要實現兩種啟動模式:自舉模式和核心啟動模式。自舉模式也稱為bootstrap模式,該模式的主要作用是目標機通過串列埠與主機通訊,可以接收主機傳送過來的映像檔案,例如核心、檔案系統和應用程式,並將其固化在flash中,也可以將flash中的映像檔案上傳到主機。核心啟動模式允許嵌入式系統加電啟動後載入μclinux核心,將系統交由μclinux作業系統管理。

在本系統中,採用乙個開關實現兩種模式的切抽象。在系統的flash中只有bootloader時,首先將開關拔上去,提示系統進入自舉模式,加電啟動後,bootloader根據開關的狀態,進入自舉模式,接收主機傳送過來的核心和檔案系統的映像檔案。接著將開關拔下來,提示系統進入核心啟動模式,再按鏈,bootloader根據此時的開關狀態進入核心啟動模式,載入核心和檔案系統,由作業系統接管系統。以後也可以根據需要,設定開關的狀態,以提示系統進入不同的啟動模式。

(5)位址對映表的配置和重對映

位址對映表的配置包括設定flash位址空間、sdram位址空間、外部i/o位址範圍和處理器暫存器位址範圍。arm處理器加電後執行在位址0x0處的**,因此在加電啟動時,首先將儲存了bootlader的flash位址空間設定為0x0-0x200000,將sdram的位址空間設定為0x1000000-0x2000000,當核心引導程式將核心拷貝到sdram後,再設定sdram的位址空間為0x00x1000000,而flash的位址空間為0x1800000-0x1a00000。這需要在核心引導程式中對flash和sdram的位址空間進行重對映。

3 μclinux核心的載入和初始化

本啟動方案中採用μclinux自帶的引導程式載入核心。該引導程式**在linux/arch/armnommu/boot/compressed目錄,其中head.s的作用最關鍵,它完成了載入核心的大部分工作;misc.c則提供載入核心所需要的子程式,其中解壓核心的子程式是head.s呼叫的重要程式,另外核心的載入還必須知道系統必要的硬體資訊,該硬體資訊在hardware.h中並被head.s所引用。

當bootloader將控制權交給核心的引導程式時,第乙個執行的程式就是head.s。下面基於本系統介紹head.s載入核心的主要過程。head.s首先配置s3c4510的系統暫存器;再初始化s3c4510的rom、ram以及匯流排等控制暫存器,將flash和sdram的位址範圍分別設定為0x0-0x200000和0x1000000-0x2000000;接著將核心的映像檔案從flash拷貝到sdram,並將flash和sdram的位址區間分別重對映為0x1800000-0x1a00000和0x0-0x1000000;然後呼叫misc.c中的解壓核心函式(decompress_kernel),對拷貝到sdram的核心映像檔案進行解壓縮;最後跳轉到執行呼叫核心函式(call_kernel),將控制權交給解壓後的μclinux系統。

執行call_kernel函式實際上是執行linux/init/main.c中的start_kernel函式,中包括處理器結構的初始化、中斷的初始化、程序相關的初始化以及記憶體初始化等重要工作。

基於NOR FLASH儲存器的嵌入式檔案系統的設計

引言 在便攜電子裝置中,隨著系統複雜性的增加,儲存容量的擴大,嵌入檔案系統成為一種必然趨勢。而flash儲存器由於具有儲存容量大 掉電資料不丟 失 何種小以及可多次擦寫等許多優點,正逐步取代其他半導體儲存器件而廣泛應用於便攜電子產品中。在flash儲存器中使用檔案系統,可將儲存空間當作直 觀的命名空...

微型嵌入式系統mysql 微型嵌入式作業系統對比

gpl general public license 即gnu通用公共許可證 1 ucos ii ucos ii 商業和gpl雙許可。c os ii是一種可移植的,可植入rom的,可裁剪的,搶占式的,實時多工作業系統核心。是實現乙個基於優先順序排程的搶占式的實時核心,並在這個核心之上提供最基本的系統...

基於TinyXml的嵌入式Linux

引 言 用自動化抄表代替人工抄表是實現智慧型樓宇的重要手段。傳統的ic卡預付費方式雖然實施方便,但會有卡槽汙染 卡易磨損以及安全性差等缺點,同時也無法實時地監控使用者的用電情況 廉價方便的雙向電力線載波抄表方式由於受電網汙染的影響,難以大面積推廣 專用有線網路實現遠端抄表方式,則會帶來投資規模大 施...