www.久久久久|狼友网站av天堂|精品国产无码a片|一级av色欲av|91在线播放视频|亚洲无码主播在线|国产精品草久在线|明星AV网站在线|污污内射久久一区|婷婷综合视频网站

當前位置:首頁 > 嵌入式 > 嵌入式軟件
[導讀]開發(fā)RTEMS實時系統(tǒng)的板級支持包

   一個優(yōu)秀的RTOS(Real-Time Operating system)不但要擁有一個高可靠、多任務的實時內(nèi)核,還應具有可剪裁和可移植的能力。RTEMS(the Real - Time Executivefor Multiprocessor Systems)[1]就是這樣的系統(tǒng),它提供的環(huán)境可以滿足高性能的嵌入式多任務實時應用。目前,RTEMS支持的CPU系列有:A29k、ARM、H8300、1386、1960、M68k、MIPS、PPC和SPARC等。
    板級支持包BSP(Board Support Package)是嵌入式實時系統(tǒng)的基礎部分,也是實現(xiàn)系統(tǒng)可移植性的關鍵。它負責上電時的硬件初始化、啟動嵌入式操作系統(tǒng)或應用程序模塊、提供底層硬件驅動,為上層軟件提供訪問底層硬件的手段。BSP針對目標板設計,其結構和功能隨目標板的不同而呈現(xiàn)較大的差異。在將嵌入式系統(tǒng)移植到一種新的CPU時,必須提供相應的板級支持包。
    本文參考SPARC微處理器ERC32的BSP,主要討論RTEMS的BSP開發(fā)過程。


1 RTEMS體系結構
    RTEMS采用微內(nèi)核基礎上的層次化結構,如圖l所示。這種結構只把那些絕對必需的系統(tǒng)功能置于內(nèi)核之中(如中斷管理、上下文切換、內(nèi)存訪問管理、時間管理、線程及線程間的通信與同步管理等),而把那些并非必需的系統(tǒng)功能(如文件系統(tǒng)、網(wǎng)絡、遠程過程調用等)置于微內(nèi)核之上在用戶模式下運行。

    RTEMS的板級支持包是啟動代碼、連接器腳本和編譯規(guī)范文件(specs)和設備驅動程序的集合[2],它們針對不同目標機的硬件環(huán)境剪裁RTEMS。


2 RTEMS啟動過程
    處理器加電或復位時,基于RTEMS的應用程序初始化或者重新初始化[3]。BSP中的啟動代碼負責為RTEMS應用程序建立運行環(huán)境。
    RTEMS啟動過程的順序如下:
    ① 執(zhí)行BSP中的啟動代碼;
    ② 調用rtems_initialize_executive;
    ③ 局部和全局應用程序的初始化。
    處理器復位時,首先執(zhí)行BSP的啟動代碼。BSP必須將所有的硬件初始化為一個靜止狀態(tài),然后操作系統(tǒng)才能初始化。rtems_initialize_executive指令不返回啟動代碼,它將導致最高優(yōu)先級的初始化任務開始執(zhí)行。初始化任務用于完成局部或全局依賴于RTEMS的應用程序初始化。


3 BSP開發(fā)過程
    下面以SPARC微處理器ERC32為例,說明RTEMSBSP的開發(fā)步驟:
    ①建立開發(fā)環(huán)境。開發(fā)模式采用宿主機/目標機模式。宿主機運行環(huán)境采用Linux系統(tǒng),目標機為ERC32。宿主機和目標機通過串口連接。交叉開發(fā)工具采用添加了RTEMS補丁的GNU工具鏈(GCC,GDB,Newlib,binary utilities)。
    ② 選擇BSP模板。通常是根據(jù)操作系統(tǒng)提供的BSP模板,選擇與應用硬件環(huán)境最為相似的參考設計,針對具體的目標機對參考BSP進行必要的修改和增刪,以形成自己的BSP。選擇一個適當?shù)腂SP模板可以達到事半功倍的效果。
    ③建立新bsp目錄。將模板BSP整個目錄拷貝到適當?shù)哪夸浵?如libbsp/),重命名為mybsp。
    ④ 建立bsp配置文件??截惾我庖粋€BSP.cfg,重命名為mybsp.cfg,修改相關的體系結構定義,如:RTEMS_CPU_MODEL,RTEMS_BSP,CPU_CFLAGS和制定make_exe規(guī)則。
    ⑤修改makefile文件。對mybsp-bsp中每一個Makefile.in文件,運行acpolish,并檢查運行的結果,例如:
    cd /mybsp - bsp/some_subdir
    /path_to_SACOS/t00ls/update/acpolish<Makefile.old>Makefile.new
    再次運行acpolish:
    /path_to_SACOS/tools/update/acpolish<Makefile.new>Makefile.in
    將Makefile.new和Makefile.in進行比較。如果不相同,則重新編輯Makefile.new,多次運行acpolish,直到連續(xù)兩次產(chǎn)生的Makefile.in相同。
    ⑥ 修改啟動代碼。建立自陷表、基本的CPU初始化、設置中斷堆棧等。
    ⑦ 配置RTEMS。設置RTEMS相關全局變量和常量、RTEMS配置表、CPU依賴信息表、系統(tǒng)初始化任務表,以及用戶初始化任務表等,除完成相關的系統(tǒng)功能之外,提供板上外設的設備驅動程序。
    ⑧調試和測試。建立RTEMS執(zhí)行映像,利用串口下載可執(zhí)行映像到目標機,測試BSP的正確性。
3.1 啟動代碼實現(xiàn)
    BSP的啟動代碼主要包含在五個文件中。它們是Start.s、boardinit.S、bootcard.c、bspstart.C和main.C。
    Start.s包含了用于硬件初始化的匯編語言代碼,它是RTEMS的引導ROM入口。入口點SYM(start)是目標機上電后執(zhí)行的第一段程序。SYM(start)的工作是完成將控制轉移到C程序boot_card()所需要的最少的設置,如初始化堆棧和禁止外部中斷等。它的具體操作包括:
    ①定義自陷表。這個自陷表是SPARC V7體系共有的,可從參考BSP中復制。
    ②初始化處理器。
    a)初始化自陷基地址寄存器TBR,即將自陷表地址寫入TBR;
    b)初始化處理器狀態(tài)寄存器PSR,設置系統(tǒng)為最高優(yōu)先級運行模式,禁止所有可屏蔽中斷;
    c)設置窗口無效寄存器WIM;
    d)初始化堆棧,設置堆棧指針。
    ③調用SYM(_bsp_board_init)(在boardinit.S中定義,這些代碼是目標板專用的),初始化MEC系統(tǒng)寄存器,初始化定時器。
    ④將已初始化數(shù)據(jù)從ROM拷貝到RAM,未初始化內(nèi)存清零。
    ⑤初始化環(huán)境變量和參數(shù),調用C程序boot_card()。
    boot_card()完成RTEMS的基本配置,如設置RTEMS配置表、CPU依賴信息表的相關入口等。它調用bsp_start()完成目標板特定的系統(tǒng)配置,調用內(nèi)核初始化函數(shù)完成RTEMS系統(tǒng)的初始化。boot_card()的具體操作包括:
    ①定義和聲明RTEMS全局變量。
    extern rtems_configuration_table Configuration;
    extern rtems_.configuration_.table BSP_Configuration;
    extern rtems_cpu_table Cpu_table;
    rtems_api_configuration_table BSP_RTEMS_Configura-tion;
    rtems_interrupt_level bsp_isr_level;
    ②初始化CPU依賴信息表的所有人口為缺省值,除了下列兩項,其余都為NULL。
    Cpu_table.do_zero_of_workspace =TRUE;
    Cpu_table.interrupt_stack_size =RTEMS_MINIMUM_STACK_SIZE;
    ③ 調用bsp_start(),根據(jù)目標機環(huán)境重新配置RTEMS,為系統(tǒng)初始化任務建立標準C支持環(huán)境。
    ④ 調用內(nèi)核初始化函數(shù)rtems_initialize_executive_ early(),初始化RTEMS和設備驅動程序。
    ⑤調用c_rtems_main(),創(chuàng)建并啟動多任務,運行用戶應用程序,直到調用rtems_shutdown_executive()退出RTEMS,才將控制返回BSP。
    bsp_start()根據(jù)目標機環(huán)境重新配置RTEMS,為調用操作系統(tǒng)初始化函數(shù)準備一個合適的軟硬件環(huán)境。它的具體操作是:
    ①定義RTEMS全局變量。
    unsigned char*work_space_start;
    rtems_configuration_table BSP_Configuration;
    rtems_cpu_table Cpu_table;
    ②修改CPU依賴信息表,為RTEMS系統(tǒng)初始化任務建立支持環(huán)境。
    /*在執(zhí)行系統(tǒng)初始化任務之前,設置存堆的開始地址和大小,建立C支持庫*/
    Cpu_table.pretasking_hook=bsp_pretasking_hook;
    /*在驅動程序初始化之后注冊設備名,打開標準輸人、標準輸出和標準錯誤文件*/
    Cpu_table.postdriver_hook=bsp_postdriver_hook;
    Cpu_table.do_zero_of_workspace=TRUE;
    /*設置中斷堆棧的大小(16*1024)*/
    Cpu_table.interrupt_stack_size=ONFIGURE_INTER-RUPT_STACK_MEMORY;
    ③檢查并設置工作區(qū)起始地址。
    BSP_Configuration.work_space_start=work_space_start;
    ④設置時鐘嘀嗒頻率。
    CPU_SPARC_CLICKS_PER_TICK=BSP_Configuration.microseconds_per_tick;
    ⑤結束返回boot_card()。
    圖2描述了RTEMS系統(tǒng)初始化函數(shù)之間的調用關系。


3.2設備驅動程序實現(xiàn)
    設備驅動程序的工作方式有輪詢和中斷兩種。無論采用哪一種方式,設備驅動程序的基本流程都是相同的。下面以時鐘設備驅動程序為例,簡單說明編寫RTEMS設備驅動程序的基本框架。
    ①聲明和定義常量和全局變量。
    /*關于時鐘設備的常量參數(shù)*/
    volatile rtems_unsigned32 Clock_driver_ticks;
    extern int CLOCK_SPEED;
    extern rtems_unsigned32 CPU_SPARC_CLICKS_PER_TICK;
    /*定義時鐘驅動程序入口數(shù)據(jù)結構并初始化*/
    #define CLOCK_DRIVER_TABLE_ENTRY{Clock_initialize,NULL,NULL,NULL,NULL,Clock_contr01}
    ②獲取接口參數(shù)。
    rtems_device_major_number
    rtems_clock_major=~O;
    rtems_device_minor_number
    rtems_clock_minor
    ③提供接口函數(shù)。
    /*時鐘驅動程序初始化入口*/
    rtems_device_driver Clock_initialize()  {
    /*安裝時鐘中斷向量,設置時鐘計數(shù)器和標度器的預設值;保存時鐘設備接口參數(shù),以備系統(tǒng)使用*/   };
    /*時鐘滴答中斷處理程序*/
    rtems_isr Clock_isr()  {
    /*時鐘設備的計數(shù)器和標度器設值為周期運行模式*/   };
    /*時鐘設備控制入口*/

    nems—deviceLdriver Clock_control()
    {
    //設置時鐘滴答中斷處理方式
    };
    /*關閉時鐘設備*/
    void Clock_exit()
    {
    //屏蔽時鐘滴答,停止時鐘計數(shù)
    };
    ④啟動時鐘設備。
3.3 修改鏈接器命令腳本
    鏈接器命令腳本為鏈接器提供鏈接的規(guī)則,對鏈接過程進行顯式地控制.修改鏈接器腳本,配置系統(tǒng)可用內(nèi)存區(qū)域和定義可執(zhí)行映像各個程序段在內(nèi)存中的位置,如加載程序時代碼段(.text)從RAM地址。開始放置.
    /*缺省值,可以修改*/
    _PR()M_SIZE=2M;
    _RAM_SIZE=4M;
    _RAM_START_0x02000000;
    _PROM-START=0x00000000;
    /*最終可執(zhí)行程序段的內(nèi)存位置*/
    SECTI()NS
    { .txt :
    { text_start=.;
    *(.text)
    .=ALIGN(16);
    }>RAM


4 建立RTEMS可執(zhí)行映像
    BSP開發(fā)完成之后,與RTEMS的其他代碼,如CPU依賴層、超核、API以及標準應用程序模塊等,經(jīng)由交叉編譯工具編譯連接之后,生成可以加載到目標機的RTEMS執(zhí)行映像,如圖3所示。

結 語
    BSP的開發(fā)對于嵌入式系統(tǒng)的移植具有重要意義.本文以SPARC體系微處理器ERC32為例,討論了RTEMS BSP的功能及其開發(fā)過程.實踐證明,在BSP的開發(fā)過程中,①選擇一個適當?shù)腂SP模板,②深刻理解模板BSP中的相關概念。這兩點相當重要。因為,選擇一個相近的BSP模板可大大減少工作量和復雜度.縮短移植周期;而深刻理解相關概念有助于根據(jù)具體目標硬件環(huán)境對模板BSP進行正確修改,達到預期目的。

本站聲明: 本文章由作者或相關機構授權發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內(nèi)容真實性等。需要轉載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權益,請及時聯(lián)系本站刪除。
換一批
延伸閱讀

Arm 控股有限公司(納斯達克股票代碼:ARM,以下簡稱 Arm)今日宣布推出全新 Arm? Lumex? 計算子系統(tǒng) (Compute Subsystem, CSS) 平臺,這是一套專為旗艦級智能手機及下一代個人電腦加...

關鍵字: CPU AI 消費電子

Arm 控股有限公司(納斯達克股票代碼:ARM,以下簡稱 Arm)今日宣布推出全新 Arm? Lumex?計算子系統(tǒng) (Compute Subsystem, CSS) 平臺,這是一套專為旗艦級智能手機及下一代個人電腦加速...

關鍵字: 消費電子 CPU AI

8位單片機在嵌入式設計領域已經(jīng)成為半個多世紀以來的主流選擇。盡管嵌入式系統(tǒng)市場日益復雜,8位單片機依然不斷發(fā)展,積極應對新的挑戰(zhàn)和系統(tǒng)需求。如今,Microchip推出的8位PIC?和AVR?單片機系列,配備了先進的獨立...

關鍵字: 單片機 嵌入式 CPU

上海2025年8月15日 /美通社/ -- 在數(shù)字化轉型浪潮與數(shù)據(jù)安全需求的雙重驅動下,瀾起科技今日重磅推出第六代津逮? 性能核 CPU (以下簡稱 C6P )。這款融合突破性架構、全棧兼容性與芯片級安全防護的高性能服...

關鍵字: CPU BSP 數(shù)字化 AI

采用分離式架構,充分利用主機 CPU 和 PCIe? 基礎設施,克服傳統(tǒng)存儲瓶頸

關鍵字: CPU 數(shù)據(jù)中心 服務器

受生成式 AI 驅動, RISC-V 芯片市場快速發(fā)展。預計到2030年,RISC-V SoC出貨量將達到1618.1億顆,營收將達到927億美元。其中,用于AI加速器的RISC-V SoC出貨量將達到41億顆,營收將達...

關鍵字: RISC-V CPU AI CUDA ARM 推理

7月21日消息,“全球最佳游戲CPU”銳龍7 9800X3D自去年11月上市以來,價格一直比較堅挺,前期還經(jīng)常處于缺貨狀態(tài)。

關鍵字: CPU GPU

人工智能 (AI) 正在以驚人的速度發(fā)展。企業(yè)不再僅僅是探索 AI,而是積極推動 AI 的規(guī)?;涞?,從實驗性應用轉向實際部署。隨著生成式模型日益精簡和高效,AI 的重心正從云端轉向邊緣側。如今,人們不再質疑邊緣 AI...

關鍵字: 人工智能 CPU GPU

CPU通過將代碼轉換為機器語言、通過指令集架構(ISA)識別代碼、以及利用控制單元(CU)和算術邏輯單元(ALU)執(zhí)行代碼這三種主要方式來認識代碼。CPU首先將編寫的高級語言代碼通過編譯器轉換為低級語言,即機器語言,這是...

關鍵字: CPU 機器語言
關閉