色婷婷AⅤ一区二区三区|亚洲精品第一国产综合亚AV|久久精品官方网视频|日本28视频香蕉

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > eCos嵌入式操作系統(tǒng)構(gòu)建

          eCos嵌入式操作系統(tǒng)構(gòu)建

          作者: 時(shí)間:2011-05-10 來源:網(wǎng)絡(luò) 收藏

          可配置(Embedded Configureable Operating System)的特點(diǎn)是可配置性、可裁減性、可移植性和實(shí)時(shí)性。它的一個(gè)主要技術(shù)特色就是功能強(qiáng)大的配置系統(tǒng),可以在源碼級實(shí)現(xiàn)對系統(tǒng)的配置和裁減。與Linux的配置和裁減相比,的配置方法更清晰、更方便;且系統(tǒng)層次也比Linux清晰明了,移植和增加驅(qū)動(dòng)模塊更加容易。正是由于這些特性,引起了越來越多的關(guān)注,同時(shí)也吸引越來越多的廠家使用eCos開發(fā)其新一代產(chǎn)品。

          本文引用地址:http://cafeforensic.com/article/150774.htm

            eCos現(xiàn)在由Red Hat維護(hù),可支持的處理器包括:ARM、StrongARM、XScale、SuperH、Intel X86、PowerPC、MIPS、AM3X、Motorola 68/Coldfire、SPARC、Hitachi H8/300H和NEC V850等。

            1 eCos的層次結(jié)構(gòu)

            eCos采用模塊化設(shè)計(jì),由不同的功能組件構(gòu)成,eCos系統(tǒng)的層次結(jié)構(gòu)如圖1所示。

            這種層次結(jié)構(gòu)的最底層是硬件抽象層(Hardware Abstraction Layer),簡稱為HAL,它負(fù)責(zé)對目標(biāo)系統(tǒng)硬件平臺(tái)進(jìn)行操作和控制,包括對中斷和例外的處理,為上層軟件提供硬件操作接口。只需提供新硬件的抽象層,就可以將整個(gè)eCos系統(tǒng)包括基于eCos的應(yīng)用移植到新的硬件平臺(tái)上。

            2 eCos系統(tǒng)

            eCos系統(tǒng)首先要搭建自己的硬件抽象層,然后創(chuàng)建驅(qū)動(dòng)程序,之后就可以編制應(yīng)用程序了。

            3 硬件抽象層的移植

            硬件抽象層分為三個(gè)不同的子模塊:體系結(jié)構(gòu)抽象層(Architecture HAL)、變體抽象層(Variant HAL)和平臺(tái)抽象層(Platform HAL)。

            體系結(jié)構(gòu)抽象層。eCos所支持的不同處理器系列具有不同的體系結(jié)構(gòu),如ARM系列、PowerPC系列、MIPS系列等。體系結(jié)構(gòu)抽象層對CPU的基本結(jié)構(gòu)進(jìn)行抽象和定義,此外它還包括中斷的交付處理、上下文切換、CPU啟動(dòng)以及該類處理器結(jié)構(gòu)的指令系統(tǒng)等。

            變體抽象層指的是處理器在該處理器系列中所具有的特殊性,這些特殊性包括Cache、MMU、FPU等。eCos的變體抽象層就是對這些特殊性進(jìn)行抽象和封裝。

            平臺(tái)抽象層是對當(dāng)前系統(tǒng)的硬件平臺(tái)進(jìn)行抽象,包括平臺(tái)的啟動(dòng)、芯片選擇和配置、定時(shí)設(shè)備、I/O寄存器訪問以及中斷寄存器等。

            硬件抽象層的這三個(gè)子模塊之間沒有明顯的界線。對于不同的目標(biāo)平臺(tái),這種區(qū)分具有一定的模糊性。例如,MMU和Cache可能在某個(gè)平臺(tái)上屬于體系結(jié)構(gòu)抽象層,而在另一個(gè)平臺(tái)上則可能屬于變體抽象層的范圍;再比如,內(nèi)存和中斷控制器可能是一種片內(nèi)設(shè)備而屬于變體抽象層,也可能是片外設(shè)備而屬于平臺(tái)抽象層。

            eCos的移植通過這三個(gè)子模塊來完成,即平臺(tái)抽象層的移植、變體抽象層的移植和體系結(jié)構(gòu)抽象層的移植。對一個(gè)新的體系結(jié)構(gòu)來說,其系統(tǒng)結(jié)構(gòu)抽象層的建立相對來說比較困難。eCos支持大部分當(dāng)前廣泛使用的CPU,已具有了支持各種體系結(jié)構(gòu)的硬件抽象層。因此,eCos的移植很少需要進(jìn)行體系結(jié)構(gòu)抽象層的編寫。

            4 平臺(tái)抽象層的移植

            一般來說,進(jìn)行eCos開發(fā)時(shí),移植的主要工作在于平臺(tái)抽象層,這是由于eCos已實(shí)現(xiàn)了絕大多數(shù)流行嵌入式CPU的體系結(jié)構(gòu)抽象層和變體抽象層。平臺(tái)抽象層主要完成的工作包括:內(nèi)存的布局、平臺(tái)早期初始化、中斷控制器以及簡單串口驅(qū)動(dòng)程序等。

            一個(gè)新的平臺(tái)系統(tǒng),最簡單的方法是利用eCos源碼提供的具有相同體系結(jié)構(gòu)和CPU型號(hào)的參考平臺(tái)硬件抽象層,將其作為模板,復(fù)制并修改所有與新平臺(tái)相關(guān)的文件。若eCos沒有這樣的平臺(tái),則可用另一種體系結(jié)構(gòu)或CPU型號(hào)的類似硬件抽象層作為模板。比如,eCos提供了以三星公司ARM CPU S3C4510b為核心的平臺(tái)SNDS4110,當(dāng)需要移植eCos到ARM CPU S3C44B0上時(shí),這將是一個(gè)很好的起點(diǎn)。

            移植工作最好是從RedBoot開始,實(shí)現(xiàn)的第一個(gè)目標(biāo)是使RedBoot運(yùn)行在新平臺(tái)上。RedBoot是eCos自帶的啟動(dòng)代碼,它比eCos要簡單,沒有使用中斷和線程機(jī)制,但包含了大部分最基本的功能。

            建立目標(biāo)平臺(tái)的RedBoot通常按以下步驟進(jìn)行(以構(gòu)建S3C44b0的新平臺(tái)為例)。

           ?、?復(fù)制eCos源碼中選定的參考平臺(tái),根據(jù)需要對目錄及文件更名。更名的主要內(nèi)容有:新平臺(tái)的目錄名、組件定義文件(CDL)、內(nèi)存布局文件(MLT)、平臺(tái)初始化的源文件和頭文件

           ?、?調(diào)整組件定義文件(CDL)選項(xiàng)。包括選項(xiàng)的名字、實(shí)時(shí)時(shí)鐘/計(jì)數(shù)器、CYGHWR_MEMORY_LAYOUT 變量、串口參數(shù)以及其他的一些選項(xiàng)。

            ③ 在頂層ecos.db文件中加入所需要的包,并增加對目標(biāo)平臺(tái)的描述。在最初,該目標(biāo)平臺(tái)的入口可以只包含硬件抽象層包,其他硬件支持包以后再加入。經(jīng)過修改后,就可在eCos配置程序中選擇新的平臺(tái)進(jìn)行配置。

           ?、?修改include/pkgconf中的內(nèi)存布局(MLT)文件。按照新的硬件平臺(tái)內(nèi)存布局修改MLT文件。MLT文件對應(yīng)每種啟動(dòng)類型有三個(gè)不同后綴的文件:.h文件以及.ldi文件和mlt文件。手工修改時(shí)只需修改.h文件和.ldi文件,并保證兩個(gè)文件同步修改。修改的主要內(nèi)容有ROM的起始地址、ROM的大小、RAM的起始地址和RAM的大小。

           ?、?修改平臺(tái)的io宏定義。在include/plt_io.h文件中完成對平臺(tái)的各種IO宏定義,包括各種CPU的系統(tǒng)配置寄存器、內(nèi)存配置寄存器、串口配置寄存器、LCD配置寄存器、以太網(wǎng)配置寄存器等的I/O地址。

           ?、?修改平臺(tái)的Cache代碼。在include/hal_cache.h文件中修改有關(guān)Cache的宏定義。在開發(fā)初期,最好先將Cache關(guān)閉,等移植穩(wěn)定后再打開。

           ?、?實(shí)現(xiàn)簡單的串口驅(qū)動(dòng)程序。串口的初始化、接收和發(fā)送在src/hal_diag.c文件完成。主要的函數(shù)如下:

            cyg_hal_plf_serial_init_channel(),完成對某個(gè)串口的具體初始化工作;

            cyg_hal_plf_serial_putc(),從串口發(fā)送一個(gè)字符;

            cyg_hal_plf_serial_getc(),從串口接收一個(gè)字符;

            cyg_hal_plf_serial_getc_nonblock(),以無阻塞的方式接收一個(gè)字符,即緩沖區(qū)中無數(shù)據(jù)時(shí)立即返回;

            cyg_hal_plf_serial_isr(),串口中斷服務(wù)程序;

            cyg_hal_plf_serial_init(),調(diào)用cyg_hal_plf_serial_init_channel()函數(shù)初始化各串口,并向內(nèi)核注冊串口中斷服務(wù)程序、串口的讀寫例程和配置例程。

            ⑧ 修改或增加平臺(tái)初始化程序。平臺(tái)初始化在3個(gè)文件文件中完成:src/s3c44b0_misc.c、include/hal_platform_setup.h和include/hal_platform_ints.h。

            hal_platform_ints.h完成系統(tǒng)的中斷宏定義。在不同的平臺(tái)中設(shè)備數(shù)量和類型不同,中斷的譯碼方式也不一致,需要根據(jù)具體情況作出調(diào)整。

            hal_platform_setup.h主要完成系統(tǒng)硬件的初步配置,這里一般要在看門狗和中斷關(guān)閉后,配置系統(tǒng)時(shí)鐘頻率、ROM和RAM的初始化參數(shù)。

            s3c44b0_misc.c文件完成目標(biāo)板的進(jìn)一步初始化、中斷處理、延時(shí)例程和時(shí)鐘設(shè)置。

            經(jīng)過以上修改,底層的平臺(tái)抽象層就基本完成了,這時(shí)可用eCos的配置工具生成RedBoot進(jìn)行測試。

            RedBoot測試成功后,說明平臺(tái)已經(jīng)能正確完成初始化操作,且串口驅(qū)動(dòng)也能正常工作,接著要完成中斷和Cache等測試工作??衫靡恍┒嗑€程的小程序測試,檢測時(shí)鐘配置是否正確,同時(shí)也檢測了中斷能否正常工作。

          linux操作系統(tǒng)文章專題:linux操作系統(tǒng)詳解(linux不再難懂)

          上一頁 1 2 下一頁

          評論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉