女人自慰AV免费观看内涵网,日韩国产剧情在线观看网址,神马电影网特片网,最新一级电影欧美,在线观看亚洲欧美日韩,黄色视频在线播放免费观看,ABO涨奶期羡澄,第一导航fulione,美女主播操b

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

基于SPARC微處理器ERC32實(shí)現(xiàn)板級(jí)支持包BSP的開發(fā)

牽手一起夢(mèng) ? 來源:?jiǎn)纹瑱C(jī)與嵌入式系統(tǒng)應(yīng)用 ? 作者:樊超 , 桂先洲 ? 2020-10-04 17:56 ? 次閱讀

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

板級(jí)支持包BSP(Board Support Package)是嵌入式實(shí)時(shí)系統(tǒng)的基礎(chǔ)部分,也是實(shí)現(xiàn)系統(tǒng)可移植性的關(guān)鍵。它負(fù)責(zé)上電時(shí)的硬件初始化、啟動(dòng)嵌入式操作系統(tǒng)或應(yīng)用程序模塊、提供底層硬件驅(qū)動(dòng),為上層軟件提供訪問底層硬件的手段。BSP針對(duì)目標(biāo)板設(shè)計(jì),其結(jié)構(gòu)和功能隨目標(biāo)板的不同而呈現(xiàn)較大的差異。在將嵌入式系統(tǒng)移植到一種新的CPU時(shí),必須提供相應(yīng)的板級(jí)支持包。

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

1 RTEMS體系結(jié)構(gòu)

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

基于SPARC微處理器ERC32實(shí)現(xiàn)板級(jí)支持包BSP的開發(fā)

RTEMS的板級(jí)支持包是啟動(dòng)代碼、連接器腳本和編譯規(guī)范文件(specs)和設(shè)備驅(qū)動(dòng)程序的集合,它們針對(duì)不同目標(biāo)機(jī)的硬件環(huán)境剪裁RTEMS。

2 RTEMS啟動(dòng)過程

處理器加電或復(fù)位時(shí),基于RTEMS的應(yīng)用程序初始化或者重新初始化。BSP中的啟動(dòng)代碼負(fù)責(zé)為RTEMS應(yīng)用程序建立運(yùn)行環(huán)境。

RTEMS啟動(dòng)過程的順序如下:

① 執(zhí)行BSP中的啟動(dòng)代碼;

② 調(diào)用rtems_initialize_executive;

③ 局部和全局應(yīng)用程序的初始化。

處理器復(fù)位時(shí),首先執(zhí)行BSP的啟動(dòng)代碼。BSP必須將所有的硬件初始化為一個(gè)靜止?fàn)顟B(tài),然后操作系統(tǒng)才能初始化。rtems_initialize_executive指令不返回啟動(dòng)代碼,它將導(dǎo)致最高優(yōu)先級(jí)的初始化任務(wù)開始執(zhí)行。初始化任務(wù)用于完成局部或全局依賴于RTEMS的應(yīng)用程序初始化。

3 BSP開發(fā)過程

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

①建立開發(fā)環(huán)境。開發(fā)模式采用宿主機(jī)/目標(biāo)機(jī)模式。宿主機(jī)運(yùn)行環(huán)境采用Linux系統(tǒng),目標(biāo)機(jī)為ERC32。宿主機(jī)和目標(biāo)機(jī)通過串口連接。交叉開發(fā)工具采用添加了RTEMS補(bǔ)丁的GNU工具鏈(GCC,GDB,Newlib,binary utilities)。

② 選擇BSP模板。通常是根據(jù)操作系統(tǒng)提供的BSP模板,選擇與應(yīng)用硬件環(huán)境最為相似的參考設(shè)計(jì),針對(duì)具體的目標(biāo)機(jī)對(duì)參考BSP進(jìn)行必要的修改和增刪,以形成自己的BSP。選擇一個(gè)適當(dāng)?shù)腂SP模板可以達(dá)到事半功倍的效果。

③建立新bsp目錄。將模板BSP整個(gè)目錄拷貝到適當(dāng)?shù)哪夸浵拢ㄈ鏻ibbsp/),重命名為mybsp。

④ 建立bsp配置文件。拷貝任意一個(gè)BSP.cfg,重命名為mybsp.cfg,修改相關(guān)的體系結(jié)構(gòu)定義,如:RTEMS_CPU_MODEL,RTEMS_BSP,CPU_CFLAGS和制定make_exe規(guī)則。

⑤修改makefile文件。對(duì)mybsp-bsp中每一個(gè)Makefile.in文件,運(yùn)行acpolish,并檢查運(yùn)行的結(jié)果,例如:

cd /mybsp - bsp/some_subdir

/path_to_SACOS/t00ls/update/acpolishMakefile.new

再次運(yùn)行acpolish:

/path_to_SACOS/tools/update/acpolishMakefile.in

將Makefile.new和Makefile.in進(jìn)行比較。如果不相同,則重新編輯Makefile.new,多次運(yùn)行acpolish,直到連續(xù)兩次產(chǎn)生的Makefile.in相同。

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

⑦ 配置RTEMS。設(shè)置RTEMS相關(guān)全局變量和常量、RTEMS配置表、CPU依賴信息表、系統(tǒng)初始化任務(wù)表,以及用戶初始化任務(wù)表等,除完成相關(guān)的系統(tǒng)功能之外,提供板上外設(shè)的設(shè)備驅(qū)動(dòng)程序。

⑧調(diào)試和測(cè)試。建立RTEMS執(zhí)行映像,利用串口下載可執(zhí)行映像到目標(biāo)機(jī),測(cè)試BSP的正確性。

3.1 啟動(dòng)代碼實(shí)現(xiàn)

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

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

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

②初始化處理器。

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

b)初始化處理器狀態(tài)寄存器PSR,設(shè)置系統(tǒng)為最高優(yōu)先級(jí)運(yùn)行模式,禁止所有可屏蔽中斷;

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

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

③調(diào)用SYM(_bsp_board_init)(在boardinit.S中定義,這些代碼是目標(biāo)板專用的),初始化MEC系統(tǒng)寄存器,初始化定時(shí)器

④將已初始化數(shù)據(jù)從ROM拷貝到RAM,未初始化內(nèi)存清零。

⑤初始化環(huán)境變量和參數(shù),調(diào)用C程序boot_card()。

boot_card()完成RTEMS的基本配置,如設(shè)置RTEMS配置表、CPU依賴信息表的相關(guān)入口等。它調(diào)用bsp_start()完成目標(biāo)板特定的系統(tǒng)配置,調(diào)用內(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依賴信息表的所有人口為缺省值,除了下列兩項(xiàng),其余都為NULL。

Cpu_table.do_zero_of_workspace =TRUE;

Cpu_table.interrupt_stack_size =RTEMS_MINIMUM_STACK_SIZE;

③ 調(diào)用bsp_start(),根據(jù)目標(biāo)機(jī)環(huán)境重新配置RTEMS,為系統(tǒng)初始化任務(wù)建立標(biāo)準(zhǔn)C支持環(huán)境。

④ 調(diào)用內(nèi)核初始化函數(shù)rtems_initialize_executive_ early(),初始化RTEMS和設(shè)備驅(qū)動(dòng)程序。

⑤調(diào)用c_rtems_main(),創(chuàng)建并啟動(dòng)多任務(wù),運(yùn)行用戶應(yīng)用程序,直到調(diào)用rtems_shutdown_executive()退出RTEMS,才將控制返回BSP。

bsp_start()根據(jù)目標(biāo)機(jī)環(huán)境重新配置RTEMS,為調(diào)用操作系統(tǒng)初始化函數(shù)準(zhǔn)備一個(gè)合適的軟硬件環(huán)境。它的具體操作是:

①定義RTEMS全局變量。

unsigned char*work_space_start;

rtems_configuration_table BSP_Configuration;

rtems_cpu_table Cpu_table;

②修改CPU依賴信息表,為RTEMS系統(tǒng)初始化任務(wù)建立支持環(huán)境。

/*在執(zhí)行系統(tǒng)初始化任務(wù)之前,設(shè)置存堆的開始地址和大小,建立C支持庫*/

Cpu_table.pretasking_hook=bsp_pretasking_hook;

/*在驅(qū)動(dòng)程序初始化之后注冊(cè)設(shè)備名,打開標(biāo)準(zhǔn)輸人、標(biāo)準(zhǔn)輸出和標(biāo)準(zhǔn)錯(cuò)誤文件*/

Cpu_table.postdriver_hook=bsp_postdriver_hook;

Cpu_table.do_zero_of_workspace=TRUE;

/*設(shè)置中斷堆棧的大小(16*1024)*/

Cpu_table.interrupt_stack_size=ONFIGURE_INTER-RUPT_STACK_MEMORY;

③檢查并設(shè)置工作區(qū)起始地址。

BSP_Configuration.work_space_start=work_space_start;

④設(shè)置時(shí)鐘嘀嗒頻率。

CPU_SPARC_CLICKS_PER_TICK=BSP_Configuration.microseconds_per_tick;

⑤結(jié)束返回boot_card()。

圖2描述了RTEMS系統(tǒng)初始化函數(shù)之間的調(diào)用關(guān)系。

3.2設(shè)備驅(qū)動(dòng)程序?qū)崿F(xiàn)

設(shè)備驅(qū)動(dòng)程序的工作方式有輪詢和中斷兩種。無論采用哪一種方式,設(shè)備驅(qū)動(dòng)程序的基本流程都是相同的。下面以時(shí)鐘設(shè)備驅(qū)動(dòng)程序?yàn)槔?jiǎn)單說明編寫RTEMS設(shè)備驅(qū)動(dòng)程序的基本框架。

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

/*關(guān)于時(shí)鐘設(shè)備的常量參數(shù)*/

volatile rtems_unsigned32 Clock_driver_ticks;

extern int CLOCK_SPEED;

extern rtems_unsigned32 CPU_SPARC_CLICKS_PER_TICK;

/*定義時(shí)鐘驅(qū)動(dòng)程序入口數(shù)據(jù)結(jié)構(gòu)并初始化*/

#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ù)。

/*時(shí)鐘驅(qū)動(dòng)程序初始化入口*/

rtems_device_driver Clock_initialize() {

/*安裝時(shí)鐘中斷向量,設(shè)置時(shí)鐘計(jì)數(shù)器和標(biāo)度器的預(yù)設(shè)值;保存時(shí)鐘設(shè)備接口參數(shù),以備系統(tǒng)使用*/ };

/*時(shí)鐘滴答中斷處理程序*/

rtems_isr Clock_isr() {

/*時(shí)鐘設(shè)備的計(jì)數(shù)器和標(biāo)度器設(shè)值為周期運(yùn)行模式*/ };

/*時(shí)鐘設(shè)備控制入口*/

nems—deviceLdriver Clock_control()

{

//設(shè)置時(shí)鐘滴答中斷處理方式

};

/*關(guān)閉時(shí)鐘設(shè)備*/

void Clock_exit()

{

//屏蔽時(shí)鐘滴答,停止時(shí)鐘計(jì)數(shù)

};

④啟動(dòng)時(shí)鐘設(shè)備。

3.3 修改鏈接器命令腳本

鏈接器命令腳本為鏈接器提供鏈接的規(guī)則,對(duì)鏈接過程進(jìn)行顯式地控制.修改鏈接器腳本,配置系統(tǒng)可用內(nèi)存區(qū)域和定義可執(zhí)行映像各個(gè)程序段在內(nèi)存中的位置,如加載程序時(shí)代碼段(.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以及標(biāo)準(zhǔn)應(yīng)用程序模塊等,經(jīng)由交叉編譯工具編譯連接之后,生成可以加載到目標(biāo)機(jī)的RTEMS執(zhí)行映像,如圖3所示。

結(jié) 語

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

責(zé)任編輯:gt

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 嵌入式
    +關(guān)注

    關(guān)注

    5141

    文章

    19528

    瀏覽量

    314905
  • cpu
    cpu
    +關(guān)注

    關(guān)注

    68

    文章

    11033

    瀏覽量

    215984
  • 微處理器
    +關(guān)注

    關(guān)注

    11

    文章

    2370

    瀏覽量

    83844
收藏 人收藏

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    XPS工具如何快速生成Virtex FPGA級(jí)支持

    、多產(chǎn),成為人們面臨的主要挑戰(zhàn)。嵌入式系統(tǒng)開發(fā)的關(guān)鍵活動(dòng)之一是級(jí)支持(BSP)。利用
    發(fā)表于 07-18 08:30

    BSP板卡支持介紹

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

    NUCLEO-WL55JC2開發(fā)板BSP級(jí)支持)說明

    簡(jiǎn)介本文檔為ST官方NUCLEO-WL55JC2開發(fā)板BSP級(jí)支持)說明。主要內(nèi)容如下:
    發(fā)表于 10-28 18:10

    Linux與VxWorks的級(jí)支持開發(fā)的比較與分析

    Linux與VxWorks的級(jí)支持開發(fā)的比較與分析:簡(jiǎn)要介紹了VxWorks的BSP
    發(fā)表于 03-25 10:34 ?25次下載

    實(shí)時(shí)操作系統(tǒng)中的級(jí)支持BSP

    對(duì)嵌入式實(shí)時(shí)操作系統(tǒng)的級(jí)支持BSP 和PC 機(jī)操作系統(tǒng)中的BIOS 進(jìn)行比較;分析BSP
    發(fā)表于 05-13 16:49 ?20次下載

    什么是SPARC處理器

    什么是SPARC處理器              1
    發(fā)表于 12-17 10:40 ?1005次閱讀

    SPARC微處理器綜合介紹

    SPARC是一個(gè)開放的體系結(jié)構(gòu)標(biāo)準(zhǔn),它基于80年代加州大學(xué)伯克利分校對(duì)RISC微處理器的研究成果,現(xiàn)在已成為國(guó)際上流行的RISC微處理器體系架構(gòu)之一。本文介紹了SPARC
    發(fā)表于 06-23 11:33 ?2940次閱讀
    <b class='flag-5'>SPARC</b><b class='flag-5'>微處理器</b>綜合介紹

    基于Pentium4處理器的VxWorks級(jí)支持設(shè)計(jì)

    文中研究了BSP和驅(qū)動(dòng)程序設(shè)計(jì)中的理論和關(guān)鍵技術(shù),應(yīng)用風(fēng)河公司開發(fā)的Tornado集成開發(fā)環(huán)境基于Pentium4處理器,移植了VxWorks下的最簡(jiǎn)
    發(fā)表于 12-07 14:12 ?34次下載

    基于XSCALE架構(gòu)處理器WinCE系統(tǒng)BSP開發(fā)

    該文介紹了 Intel 公司的基于 XSCALE 架構(gòu) PXA255 微處理器和嵌入式操作系統(tǒng) WinCE 以及該操作系統(tǒng)下基于 PXA255 硬件開發(fā)板 BSP開發(fā)。結(jié)合編程實(shí)例
    發(fā)表于 04-18 14:12 ?0次下載

    SPARC V8結(jié)構(gòu)嵌入式微處理器的軟件集成開發(fā)環(huán)境總體設(shè)計(jì)

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

    關(guān)于SPARC微處理器綜述

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

    級(jí)支持的定義及作用分析

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

    基于嵌入式處理器的Virtex FPGA級(jí)支持設(shè)計(jì)

    ,成為人們面臨的主要挑戰(zhàn)。嵌入式系統(tǒng)開發(fā)的關(guān)鍵活動(dòng)之一是級(jí)支持BSP)。利用
    發(fā)表于 08-06 09:03 ?1018次閱讀

    如何導(dǎo)出硬件平臺(tái)并啟動(dòng)SDK開發(fā)應(yīng)用程序及級(jí)支持

    本文介紹如何導(dǎo)出硬件平臺(tái), 并啟動(dòng)SDK開發(fā)應(yīng)用程序及級(jí)支持(BSP)。
    的頭像 發(fā)表于 02-08 10:56 ?2787次閱讀
    如何導(dǎo)出硬件平臺(tái)并啟動(dòng)SDK<b class='flag-5'>開發(fā)</b>應(yīng)用程序及<b class='flag-5'>板</b><b class='flag-5'>級(jí)</b><b class='flag-5'>支持</b><b class='flag-5'>包</b>

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

    / Microchip 歐空局(ESA)所用的SPARC航空處理器更是已經(jīng)有了20多年的歷史,從最早的ERC32,到如今Gaisler仍在開發(fā)
    的頭像 發(fā)表于 12-21 07:30 ?1664次閱讀