<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > 基于A(yíng)RM-μCLinux嵌入式系統啟動(dòng)引導的實(shí)現

基于A(yíng)RM-μCLinux嵌入式系統啟動(dòng)引導的實(shí)現

——
作者:黃克彬 葉梧 馮穗力 時(shí)間:2006-09-11 來(lái)源:CE china 收藏
32位ARM嵌入式處理器具有高性能、低軾耗的特性,已被廣泛應用于消費電子產(chǎn)品、無(wú)線(xiàn)通信和網(wǎng)絡(luò )通信等領(lǐng)域。ΜCLinux是專(zhuān)門(mén)為無(wú)MMU處理器設計的嵌入式操作系統,支持ARM、Motorola等微處理器。目前國內外采用ARM- μCLinux作為非常普遍。而的啟動(dòng)引導技術(shù)是開(kāi)發(fā)的一個(gè)難點(diǎn)。系統啟動(dòng)引導的成功與否決定了應用
程序的運行環(huán)境是否能正確構建,即系統啟動(dòng)成功是應用正確運行的前提。

常用的嵌入式系統啟動(dòng)方法是先通過(guò)JTAG將嵌入式操作系統內核與進(jìn)Flash,再由其帶的引導程序bootloader完成嵌放式系統的啟動(dòng)引導工作。這種方法要借助昂貴的JTAG設備完成操作系統內核的燒寫(xiě)工作,并且不能方便地更新嵌入式系統中的軟件平臺。本文提出一種基于A(yíng)RM-μCLinux嵌入式系統的啟動(dòng)引導方案,不但可以通過(guò)簡(jiǎn)易的串口方便地更新嵌入式系統內的軟件平臺,而且成功解決了這種架構的嵌入式系統的啟動(dòng)、初始化、操作系統內核的固化和引導等問(wèn)題。本文簡(jiǎn)略說(shuō)明ARM- μCLinux嵌入式系統的硬件平臺和軟件平臺;描述系統引導程序bootloader的設計,闡述設計時(shí)考慮的因素和需解決的技術(shù)難點(diǎn),給出一套可行的引導程序流程;針對μCLinux內核的引導程序,說(shuō)明μCLinux內核的加載和初始化過(guò)程。

1 系統組成

典型的ARM嵌入式系統硬件平臺一般包括一個(gè)以ARM為內核的處理器、存儲器和必要的外部接口與設備。在本系統中,采用內嵌ARM7TDMI的Samsung公司的S3C4510處理器,存儲器使用2MB的Flash和16MB的SDRAM,外部接口除了用于下載和通信的串口,還配備了一個(gè)以太網(wǎng)接口,以支持S3C4510的網(wǎng)絡(luò )功能。

軟件平臺由以下部分組成:系統引導程序、嵌入式操作系統內核、文件系統。系統引導程序通常也稱(chēng)為bootloader,代碼量雖少,但是作用非常大,相當于PC上的BIOS,負責將操作系統內核固化到Flash中和系統初始化工作,然后將系統控制權交給操作系統。嵌入式操作系統內核是嵌入式系統加電運行后的管理平臺,負責實(shí)時(shí)性任務(wù)和多任務(wù)的管理。ARM7TDMI是一款沒(méi)有MMU的處理器,因此采用μCLinux作為本系統的操作系統內核。ΜCLinux是Linux是一個(gè)分支,專(zhuān)為無(wú)MMU的處理器設計,它繼承了Linux強大的網(wǎng)絡(luò )功能和多任務(wù)管理功能,并對內存管理和進(jìn)程管理進(jìn)行了改寫(xiě),滿(mǎn)足無(wú)MMU處理器的開(kāi)發(fā)要求。文件系統是嵌入式系統軟件平臺占用存儲量最大的一部分,也是與用戶(hù)開(kāi)發(fā)最相關(guān)的一部分。它存儲了系統配置文件、系統程序、用戶(hù)應用程序和必需的驅動(dòng)程序。

軟件平臺固化在Flash中。通常根據軟件平臺的內容對Flash的地址空間進(jìn)行分區,一般分三個(gè)區,分別豐放bootloader、μCLinux內核和文件系統。分區的方式一般有兩種:一種是根據三個(gè)部分預定的存儲空量,允許bootloader、內核和文件系統擁有自己固定的分區和首地址;另一種就是按照這三部分的實(shí)際分配區間,一個(gè)部分緊跟著(zhù)另一個(gè)部分后存儲,沒(méi)有固定的分區和首地址。通常采用第一種方式,雖然可能會(huì )浪費一部分Flash空間,但是方便內核的加載和文件系統的掛載,同時(shí)也利于系統的調試和開(kāi)發(fā)。而如果充分利用Flash的存儲區間,節約成本,那么可采用第二種方式。

2 系統引導程序的設計

系統引導程序bootloader是嵌入式系統加電后執行的第一個(gè)程序,進(jìn)行功能設計時(shí)首先要考慮以下問(wèn)題:

(1)將μCLinux內核和文件系統固化在Flash中

目地μCLinux內核和文件系統固化在Flash的手段很多。主機可以通過(guò)JTAG口,將內核和文件系統的映像文件燒寫(xiě)到指定的Flash位置上;也可以通過(guò)以太網(wǎng)接口,將映像文件下載到Flash中;另外還可以通過(guò)串口燒寫(xiě)到Flash。前兩種方法的下載速度比后一種方法快得多。在本系統中,采用串口燒寫(xiě)Flash。這是因為一方面配置一個(gè)串口方便且廉價(jià),而JTAG燒寫(xiě)還要配置昂貴的 JTAG仿真器和相關(guān)的驅動(dòng)程序以及協(xié)議轉換程序,網(wǎng)口下載還要有以太網(wǎng)支持;另一方面μCLinux默認通過(guò)串口打印其運行的信息,那么串口不但可以提供燒寫(xiě)Flash的功能,還可作為調試μCLinux內核的通道。

 在本系統中,Flash在剛開(kāi)始時(shí),只存儲了bootloader,還沒(méi)有存儲μCLinux內核和文件系統。因此bootloader在系統加電完成初始化工作后,要初始化一條鏈接主機和目標機的串口通道,并提供串口下載功能。

系統啟動(dòng)引導流程圖


(2)系統初始化

因為系統剛加電時(shí),操作系統的內核還沒(méi)有被加載,系統的初始化工作由bootloader完成。它主要是將系統、初始化存儲系統、配置ARM各種模式下的數據棧、使能屏常中斷、根據需要切換處理器模式和狀態(tài)。

(3)μCLinux內核加載方式

固化在Flash中的μCLinux內核有兩種運行方式:一種方式是直接在Flash中運行μCLinux自帶的引導程序;另一種方式是將固化在Flash中的內核先拷貝到SDRAM的某一段地址區間,再從該段地址區間的首地址運行uCLinux內核。

第一種方式是bootloader進(jìn)行系統初始化工作后,跳到內核固化在Flash中的首地址處,將控制權交給μCLinux,開(kāi)始在Flash中逐句執行內核自帶的引導程序,由該引導程序完成內核的加載工作。這種方式是目前很多嵌入式系統啟動(dòng)內核所采用的方式,也是本系統采用的內核加載方式。

第二種方式是bootloader完成系統初始化工作后,把內核的映像文件由Flash拷貝到SDRAM中,再從SDRAM中執行μCLinux內核的引導程序,加載μCLinux內核。

第二種加載方式在SDRAM中運行程序,因此執行速度比第一種方式快一些,并且可以通過(guò) RAM快速引導技術(shù)實(shí)現這種加載方式。其主要是針對NAND型Flash的情況。與NOR型Flash最大的不同點(diǎn)是:NOR型Flash使用內存隨機讀取技術(shù),與SDRAM一樣,可以直接執行存儲在Flash中的程序;而NAND一樣,可以直接內存隨機讀取技術(shù),它是一次讀取一整塊內存,因此不能直接執行存儲在NAND型Flash中的程序,必須把NAND型Flash中的程序先拷貝到SDRAM,再在SDRAM中執行該程序。但是NAND型Flash 價(jià)格比NOR型Flash廉價(jià),所以很多嵌入式系統還是采用NOR型Flash(幾百K字節)+NAND型Flash(幾兆字節)的存儲模式。其中NOR 型Flash存放可執行的且代碼量小的bootloader和一些必要的數據,而NAND型Flash保存存儲量較大的內核和文件系統。

在本系統中,由于采用NOR型Flash存儲bootloader、內核和文件系統,所以可以直接訪(fǎng)問(wèn)內核所在地址區間的首地址,執行內核自己的引導程序,而且內核自帶的引導程序功能強大,可以方便地內核的加載,向內核傳遞有關(guān)的硬件參數。本系統采用第一種加載方式。

(4)自舉模式和內核啟動(dòng)模式的切換

Bootloader一般要實(shí)現兩種啟動(dòng)模式:自舉模式和內核啟動(dòng)模式。自舉模式也稱(chēng)為 bootstrap模式,該模式的主要作用是目標機通過(guò)串口與主機通信,可以接收主機發(fā)送過(guò)來(lái)的映像文件,例如內核、文件系統和應用程序,并將其固化在 Flash中,也可以將Flash中的映像文件上傳到主機。內核啟動(dòng)模式允許嵌入式系統加電啟動(dòng)后加載μCLinux內核,將系統交由μCLinux操作系統管理。

在本系統中,采用一個(gè)開(kāi)關(guān)實(shí)現兩種模式的切抽象。在系統的Flash中只有 bootloader時(shí),首先將開(kāi)關(guān)拔上去,提示系統進(jìn)入自舉模式,加電啟動(dòng)后,bootloader根據開(kāi)關(guān)的狀態(tài),進(jìn)入自舉模式,接收主機發(fā)送過(guò)來(lái)的內核和文件系統的映像文件。接著(zhù)將開(kāi)關(guān)拔下來(lái),提示系統進(jìn)入內核啟動(dòng)模式,再按鏈,bootloader根據此時(shí)的開(kāi)關(guān)狀態(tài)進(jìn)入內核啟動(dòng)模式,加載內核和文件系統,由操作系統接管系統。以后也可以根據需要,設置開(kāi)關(guān)的狀態(tài),以提示系統進(jìn)入不同的啟動(dòng)模式。

(5)地址映射表的配置和重映射

地址映射表的配置包括設置Flash地址空間、SDRAM地址空間、外部I/O地址范圍和處理器寄存器地址范圍。ARM處理器加電后執行在地址0x0處的代碼,因此在加電啟動(dòng)時(shí),首先將存儲了bootlader的Flash地址空間設置為 0x0-0x200000,將SDRAM的地址空間設置為0x1000000-0x2000000,當內核引導程序將內核拷貝到SDRAM后,再設置 SDRAM的地址空間為0x00x1000000,而Flash的地址空間為0x1800000-0x1A00000。這需要在內核引導程序中對 Flash和SDRAM的地址空間進(jìn)行重映射。本文采用的系統啟動(dòng)引導方案流程圖如圖1。

3 μCLinux內核的加載和初始化

本啟動(dòng)方案中采用μCLinux自帶的引導程序

加載內核。該引導程序代碼在linux / arch / armnommu / boot / compressed目錄,其中Head.s的作用最關(guān)鍵,它完成了加載內核的大部分工作; Misc.c則提供加載內核所需要的子程序,其中解壓內核的子程序是Head.s調用的重要程序,另外內核的加載還必須知道系統必要的硬件信息,該硬件信息在hardware.h中并被Head.s所引用。

當bootloader將控制權交給內核的引導程序時(shí),第一個(gè)執行的程序就是 Head.s。下面基于本系統介紹Head.s加載內核的主要過(guò)程。Head.s首先配置S3C4510的系統寄存器;再初始化S3C4510的ROM、 RAM以及總線(xiàn)等控制寄存器,將Flash和SDRAM的地址范圍分別設置為0x0-0x200000和0x1000000-0x2000000;接著(zhù)將內核的映像文件從Flash拷貝到SDRAM,并將Flash和SDRAM的地址區間分別重映射為0x1800000-0x1A00000和0x0- 0x1000000;然后調用Misc.c中的解壓內核函數(decompress_kernel),對拷貝到SDRAM的內核映像文件進(jìn)行解壓縮;最后跳轉到執行調用內核函數(call_kernel),將控制權交給解壓后的μCLinux系統。

執行Call_kernel函數實(shí)際上是執行linux/init/main.c中的start_kernel函數,中包括處理器結構的初始化、中斷的初始化、進(jìn)程相關(guān)的初始化以及內存初始化等重要工作。

該啟動(dòng)引導方案實(shí)現了自舉模式和內核啟動(dòng)模式以及兩種模式的切換,使得開(kāi)人員既可以采用自舉模式方便地燒寫(xiě)Flash,更新嵌入式系統中的軟件平臺,又能夠切換到內核啟動(dòng)模式,自動(dòng)安全地啟動(dòng)系統;其次,本方案采用簡(jiǎn)易的串口通道作業(yè)主機與目標系統的通信渠道,既可以方便地將操作系統內核、文件系統和其他應用下載到目標系統中,又可以作為調試μCLinux內核和應用程序通道;此外針對 ARM7TDMI的無(wú)MMU特性,采用修改后的μCLinux內核引導程序加載操作系統和初始化操作系統環(huán)境,解決內核加載的地址重映射問(wèn)題和操作系統的內存管理問(wèn)題。



關(guān)鍵詞: 單片機 嵌入式系統

評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>