色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

基于SPARC微處理器ERC32實現板級支持包BSP的開發

牽手一起夢 ? 來源:單片機與嵌入式系統應用 ? 作者:樊超 , 桂先洲 ? 2020-10-04 17:56 ? 次閱讀

一個優秀的RTOS(Real-Time Operating system)不但要擁有一個高可靠、多任務的實時內核,還應具有可剪裁和可移植的能力。RTEMS(the Real - Time Executivefor Multiprocessor Systems)就是這樣的系統,它提供的環境可以滿足高性能的嵌入式多任務實時應用。目前,RTEMS支持的CPU系列有:A29k、ARM、H8300、1386、1960、M68k、MIPS、PPC和SPARC等。

板級支持包BSP(Board Support Package)是嵌入式實時系統的基礎部分,也是實現系統可移植性的關鍵。它負責上電時的硬件初始化、啟動嵌入式操作系統或應用程序模塊、提供底層硬件驅動,為上層軟件提供訪問底層硬件的手段。BSP針對目標板設計,其結構和功能隨目標板的不同而呈現較大的差異。在將嵌入式系統移植到一種新的CPU時,必須提供相應的板級支持包。

本文參考SPARC微處理器ERC32的BSP,主要討論RTEMS的BSP開發過程。

1 RTEMS體系結構

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

基于SPARC微處理器ERC32實現板級支持包BSP的開發

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

2 RTEMS啟動過程

處理器加電或復位時,基于RTEMS的應用程序初始化或者重新初始化。BSP中的啟動代碼負責為RTEMS應用程序建立運行環境。

RTEMS啟動過程的順序如下:

① 執行BSP中的啟動代碼;

② 調用rtems_initialize_executive;

③ 局部和全局應用程序的初始化。

處理器復位時,首先執行BSP的啟動代碼。BSP必須將所有的硬件初始化為一個靜止狀態,然后操作系統才能初始化。rtems_initialize_executive指令不返回啟動代碼,它將導致最高優先級的初始化任務開始執行。初始化任務用于完成局部或全局依賴于RTEMS的應用程序初始化。

3 BSP開發過程

下面以SPARC微處理器ERC32為例,說明RTEMSBSP的開發步驟:

①建立開發環境。開發模式采用宿主機/目標機模式。宿主機運行環境采用Linux系統,目標機為ERC32。宿主機和目標機通過串口連接。交叉開發工具采用添加了RTEMS補丁的GNU工具鏈(GCC,GDB,Newlib,binary utilities)。

② 選擇BSP模板。通常是根據操作系統提供的BSP模板,選擇與應用硬件環境最為相似的參考設計,針對具體的目標機對參考BSP進行必要的修改和增刪,以形成自己的BSP。選擇一個適當的BSP模板可以達到事半功倍的效果。

③建立新bsp目錄。將模板BSP整個目錄拷貝到適當的目錄下(如libbsp/),重命名為mybsp。

④ 建立bsp配置文件。拷貝任意一個BSP.cfg,重命名為mybsp.cfg,修改相關的體系結構定義,如:RTEMS_CPU_MODEL,RTEMS_BSP,CPU_CFLAGS和制定make_exe規則。

⑤修改makefile文件。對mybsp-bsp中每一個Makefile.in文件,運行acpolish,并檢查運行的結果,例如:

cd /mybsp - bsp/some_subdir

/path_to_SACOS/t00ls/update/acpolishMakefile.new

再次運行acpolish:

/path_to_SACOS/tools/update/acpolishMakefile.in

將Makefile.new和Makefile.in進行比較。如果不相同,則重新編輯Makefile.new,多次運行acpolish,直到連續兩次產生的Makefile.in相同。

⑥ 修改啟動代碼。建立自陷表、基本的CPU初始化、設置中斷堆棧等。

⑦ 配置RTEMS。設置RTEMS相關全局變量和常量、RTEMS配置表、CPU依賴信息表、系統初始化任務表,以及用戶初始化任務表等,除完成相關的系統功能之外,提供板上外設的設備驅動程序。

⑧調試和測試。建立RTEMS執行映像,利用串口下載可執行映像到目標機,測試BSP的正確性。

3.1 啟動代碼實現

BSP的啟動代碼主要包含在五個文件中。它們是Start.s、boardinit.S、bootcard.c、bspstart.C和main.C。

Start.s包含了用于硬件初始化的匯編語言代碼,它是RTEMS的引導ROM入口。入口點SYM(start)是目標機上電后執行的第一段程序。SYM(start)的工作是完成將控制轉移到C程序boot_card()所需要的最少的設置,如初始化堆棧和禁止外部中斷等。它的具體操作包括:

①定義自陷表。這個自陷表是SPARC V7體系共有的,可從參考BSP中復制。

②初始化處理器。

a)初始化自陷基地址寄存器TBR,即將自陷表地址寫入TBR;

b)初始化處理器狀態寄存器PSR,設置系統為最高優先級運行模式,禁止所有可屏蔽中斷;

c)設置窗口無效寄存器WIM;

d)初始化堆棧,設置堆棧指針。

③調用SYM(_bsp_board_init)(在boardinit.S中定義,這些代碼是目標板專用的),初始化MEC系統寄存器,初始化定時器

④將已初始化數據從ROM拷貝到RAM,未初始化內存清零。

⑤初始化環境變量和參數,調用C程序boot_card()。

boot_card()完成RTEMS的基本配置,如設置RTEMS配置表、CPU依賴信息表的相關入口等。它調用bsp_start()完成目標板特定的系統配置,調用內核初始化函數完成RTEMS系統的初始化。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(),根據目標機環境重新配置RTEMS,為系統初始化任務建立標準C支持環境。

④ 調用內核初始化函數rtems_initialize_executive_ early(),初始化RTEMS和設備驅動程序。

⑤調用c_rtems_main(),創建并啟動多任務,運行用戶應用程序,直到調用rtems_shutdown_executive()退出RTEMS,才將控制返回BSP。

bsp_start()根據目標機環境重新配置RTEMS,為調用操作系統初始化函數準備一個合適的軟硬件環境。它的具體操作是:

①定義RTEMS全局變量。

unsigned char*work_space_start;

rtems_configuration_table BSP_Configuration;

rtems_cpu_table Cpu_table;

②修改CPU依賴信息表,為RTEMS系統初始化任務建立支持環境。

/*在執行系統初始化任務之前,設置存堆的開始地址和大小,建立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;

③檢查并設置工作區起始地址。

BSP_Configuration.work_space_start=work_space_start;

④設置時鐘嘀嗒頻率。

CPU_SPARC_CLICKS_PER_TICK=BSP_Configuration.microseconds_per_tick;

⑤結束返回boot_card()。

圖2描述了RTEMS系統初始化函數之間的調用關系。

3.2設備驅動程序實現

設備驅動程序的工作方式有輪詢和中斷兩種。無論采用哪一種方式,設備驅動程序的基本流程都是相同的。下面以時鐘設備驅動程序為例,簡單說明編寫RTEMS設備驅動程序的基本框架。

①聲明和定義常量和全局變量。

/*關于時鐘設備的常量參數*/

volatile rtems_unsigned32 Clock_driver_ticks;

extern int CLOCK_SPEED;

extern rtems_unsigned32 CPU_SPARC_CLICKS_PER_TICK;

/*定義時鐘驅動程序入口數據結構并初始化*/

#define CLOCK_DRIVER_TABLE_ENTRY{Clock_initialize,NULL,NULL,NULL,NULL,Clock_contr01}

②獲取接口參數。

rtems_device_major_number\

rtems_clock_major=~O;

rtems_device_minor_number \

rtems_clock_minor

③提供接口函數。

/*時鐘驅動程序初始化入口*/

rtems_device_driver Clock_initialize() {

/*安裝時鐘中斷向量,設置時鐘計數器和標度器的預設值;保存時鐘設備接口參數,以備系統使用*/ };

/*時鐘滴答中斷處理程序*/

rtems_isr Clock_isr() {

/*時鐘設備的計數器和標度器設值為周期運行模式*/ };

/*時鐘設備控制入口*/

nems—deviceLdriver Clock_control()

{

//設置時鐘滴答中斷處理方式

};

/*關閉時鐘設備*/

void Clock_exit()

{

//屏蔽時鐘滴答,停止時鐘計數

};

④啟動時鐘設備。

3.3 修改鏈接器命令腳本

鏈接器命令腳本為鏈接器提供鏈接的規則,對鏈接過程進行顯式地控制.修改鏈接器腳本,配置系統可用內存區域和定義可執行映像各個程序段在內存中的位置,如加載程序時代碼段(.text)從RAM地址。開始放置.

/*缺省值,可以修改*/

_PR()M_SIZE=2M;

_RAM_SIZE=4M;

_RAM_START_0x02000000;

_PROM-START=0x00000000;

/*最終可執行程序段的內存位置*/

SECTI()NS

{ .txt :

{ text_start=。;

*(.text)

.=ALIGN(16);

}》RAM

4 建立RTEMS可執行映像

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

結 語

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

責任編輯:gt

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 嵌入式
    +關注

    關注

    5087

    文章

    19145

    瀏覽量

    306144
  • cpu
    cpu
    +關注

    關注

    68

    文章

    10880

    瀏覽量

    212204
  • 微處理器
    +關注

    關注

    11

    文章

    2271

    瀏覽量

    82555
收藏 人收藏

    評論

    相關推薦

    XPS工具如何快速生成Virtex FPGA支持

    、多產,成為人們面臨的主要挑戰。嵌入式系統開發的關鍵活動之一是支持(BSP)。利用
    發表于 07-18 08:30

    BSP板卡支持介紹

    BSP板卡支持      i.MX31 Windows Mobile 6 BSP是用于i.MX31多媒體處理器的板卡
    發表于 08-27 08:14

    NUCLEO-WL55JC2開發板BSP支持)說明

    簡介本文檔為ST官方NUCLEO-WL55JC2開發板BSP支持)說明。主要內容如下:
    發表于 10-28 18:10

    Linux與VxWorks的支持開發的比較與分析

    Linux與VxWorks的支持開發的比較與分析:簡要介紹了VxWorks的BSP
    發表于 03-25 10:34 ?25次下載

    實時操作系統中的支持BSP

    對嵌入式實時操作系統的支持BSP 和PC 機操作系統中的BIOS 進行比較;分析BSP
    發表于 05-13 16:49 ?20次下載

    什么是SPARC處理器

    什么是SPARC處理器              1
    發表于 12-17 10:40 ?967次閱讀

    SPARC微處理器綜合介紹

    SPARC是一個開放的體系結構標準,它基于80年代加州大學伯克利分校對RISC微處理器的研究成果,現在已成為國際上流行的RISC微處理器體系架構之一。本文介紹了SPARC
    發表于 06-23 11:33 ?2738次閱讀
    <b class='flag-5'>SPARC</b><b class='flag-5'>微處理器</b>綜合介紹

    基于Pentium4處理器的VxWorks支持設計

    文中研究了BSP和驅動程序設計中的理論和關鍵技術,應用風河公司開發的Tornado集成開發環境基于Pentium4處理器,移植了VxWorks下的最簡
    發表于 12-07 14:12 ?34次下載

    基于XSCALE架構處理器WinCE系統BSP開發

    該文介紹了 Intel 公司的基于 XSCALE 架構 PXA255 微處理器和嵌入式操作系統 WinCE 以及該操作系統下基于 PXA255 硬件開發板 BSP開發。結合編程實例
    發表于 04-18 14:12 ?0次下載

    SPARC V8結構嵌入式微處理器的軟件集成開發環境總體設計

    SPARC V8 ( Sc a l a b l e Pr o c e s s o rArchitecture V8)是Sun Microsystems 提出的一種32位RISC微處理器結構,此結構
    發表于 10-31 15:40 ?1次下載
    <b class='flag-5'>SPARC</b> V8結構嵌入式<b class='flag-5'>微處理器</b>的軟件集成<b class='flag-5'>開發</b>環境總體設計

    關于SPARC微處理器綜述

    Set Computer)微處理器體系架構之一。 SPARC是開放的,任何機構或個人均可研究或開發基于SPARC架構的產品,如東芝、富士通、Aeroflex、ESA(Europen
    發表于 11-01 16:18 ?3次下載
    關于<b class='flag-5'>SPARC</b><b class='flag-5'>微處理器</b>綜述

    支持的定義及作用分析

    本文首先介紹了什么是支持以及BSP的三大部分,其次介紹了
    的頭像 發表于 06-05 11:45 ?9915次閱讀
    <b class='flag-5'>板</b><b class='flag-5'>級</b><b class='flag-5'>支持</b><b class='flag-5'>包</b>的定義及作用分析

    基于嵌入式處理器的Virtex FPGA支持設計

    ,成為人們面臨的主要挑戰。嵌入式系統開發的關鍵活動之一是支持BSP)。利用
    發表于 08-06 09:03 ?905次閱讀

    如何導出硬件平臺并啟動SDK開發應用程序及支持

    本文介紹如何導出硬件平臺, 并啟動SDK開發應用程序及支持(BSP)。
    的頭像 發表于 02-08 10:56 ?2480次閱讀
    如何導出硬件平臺并啟動SDK<b class='flag-5'>開發</b>應用程序及<b class='flag-5'>板</b><b class='flag-5'>級</b><b class='flag-5'>支持</b><b class='flag-5'>包</b>

    歐空局為何從SPARC換成了RISC-V

    / Microchip 歐空局(ESA)所用的SPARC航空處理器更是已經有了20多年的歷史,從最早的ERC32,到如今Gaisler仍在開發
    的頭像 發表于 12-21 07:30 ?1337次閱讀
    主站蜘蛛池模板: 国产午夜精品一区理论片飘花| 欧美亚洲精品午夜福利AV| 琪琪的色原网站| 国产哺乳期奶水avav| 亚洲 自拍 偷拍 另类综合图区 | 伦 乱真实故事| 91欧美秘密入口| 上课失禁丨vk| 久久精品国产清白在天天线| 99热这里只有精品视频2| 婷婷六月激情综合一区| 久久re热线视频国产| 办公室激情在线观看| 亚洲AV久久久噜噜噜噜| 妈妈的职业3完整版在线播放| 办公室沙发口爆12P| 亚洲区偷拍自拍29P| 欧美另类极品videosbest| 国产精品亚洲高清一区二区| 最近免费中文字幕完整版HD| 神马电影我不卡4k手机在线观看| 久久精品视在线观看85| 动漫AV纯肉无码AV电影网| 一本色道久久综合亚洲AV蜜桃| 啪啪啪社区| 久久re视频这里精品免费1| 大胸美女脱内衣黄网站| 在线欧美 精品 第1页| 特大黑人娇小亚洲女mp4| 久久综合给合久久狠狠狠…| 国产成人精品男人免费| 18 japanese宾馆直播| 网址在线观看你懂我意思吧免费的| 开心色99xxxx开心色| 国产精品人妻无码77777| 999人在线精品播放视频| 亚洲日本激情| 熟妇少妇任你躁在线无码| 蜜桃无码AV视频在线观看| 国内精品七七久久影院| 村上里沙快播|