<dfn id="is4kg"></dfn>
  • <ul id="is4kg"></ul>
  • <abbr id="is4kg"></abbr>
  • <ul id="is4kg"></ul>
    <bdo id="is4kg"></bdo>

    曙海教育集團(tuán)論壇VxWorks專區(qū)VxWorks BSP開發(fā) → PowerPC VxWorks BSP分析


      共有6943人關(guān)注過本帖樹形打印

    主題:PowerPC VxWorks BSP分析

    美女呀,離線,留言給我吧!
    wangxinxin
      1樓 個性首頁 | 博客 | 信息 | 搜索 | 郵箱 | 主頁 | UC


    加好友 發(fā)短信
    等級:青蜂俠 帖子:1393 積分:14038 威望:0 精華:0 注冊:2010-11-12 11:08:23
    PowerPC VxWorks BSP分析  發(fā)帖心情 Post By:2010-12-1 10:50:45

    1 PowerPC BSP定制
    如圖1,BSP的主要功能在于配置系統(tǒng)硬件使其工作于正常的狀態(tài),以及完成硬件與軟件之間的數(shù)據(jù)交互,為OS及上層應(yīng)用程序提供一個與硬件無關(guān)的軟件平臺。因此從執(zhí)行角度來說,其可以分為兩大部分:
    ? 目標(biāo)系統(tǒng)啟動時的硬件初始化及操作系統(tǒng)引導(dǎo)例程,它只在系統(tǒng)啟動過程中執(zhí)行一次;
    ? 目標(biāo)板上控制硬件運行的設(shè)備驅(qū)動程序,由它來完成硬件與軟件之間的銜接。
    圖片點擊可在新窗口打開查看
     
    圖1 BSP在系統(tǒng)中所處的位置
    一般說來,BSP的設(shè)計與開發(fā)可以分為以下幾個步驟:
    (1)建立開發(fā)環(huán)境。安裝VxWorks集成開發(fā)環(huán)境(Tornado);選擇合適的開發(fā)工具。目前幾乎每一種處理器都支持JTAG/BDM接口,大多數(shù)處理器都有JTAG/BDM調(diào)試工具支持,如vision ICE等,采用目標(biāo)板供應(yīng)商的DEBUG ROM調(diào)試工具也是一種可以考慮的途徑。
    (2)選擇合適的BSP模板。如有可能,所選的模板盡可能與硬件平臺相近,當(dāng)然,實際情況中考慮到費用及充分利用已有的資源,所選的模板可能需要較大的修改才能移植到需要的硬件平臺。
    (3)修改或添加WIND內(nèi)核激活前的初始化代碼,包括初始化CPU內(nèi)核、MMU、CACHE禁止/使能等。
    (4)內(nèi)核激活以后,連接系統(tǒng)中斷、系統(tǒng)時鐘,修改或添加所需要的設(shè)備驅(qū)動程序等。
    (5)測試與驗證。BSP的正確性與穩(wěn)定性對上層軟件和整個系統(tǒng)的穩(wěn)定起著至關(guān)重要的作用。因此BSP完成后要經(jīng)過測試驗證。
    BSP主要文件目錄的組成及作用:
    圖片點擊可在新窗口打開查看
    target/config/All目錄
    這個目錄下的文件是所有BSP文件共享的,不是特別需要不要更改里面的任何文件。
    configAll.h:
    缺省定義了所有VxWorks的設(shè)置,如果不用缺省的設(shè)置,可在BSP目錄下的config.h文件中用#define或#undef方式來更改設(shè)置。
    bootInit.c:
    在romInit.s后,完成Boot ROM的第二步初始化。程序從romInit.s中的romInit()跳到這個文件中的romStart()來執(zhí)行必要的解壓和ROM image的放置
    bootConfig.c: 完成Boot ROM image的初始化和控制
    usrConfig.c: VxWorks image的初始化代碼
    target/config/comps/src目錄
    涉及系統(tǒng)核心的components,主要由target/config/All中usrConfig.c中函數(shù)調(diào)用
    target/config/bspname目錄
    包含系統(tǒng)或硬件相關(guān)的BSP文件
    Makefile
    一些命令行控制images的生成
    README
    BSP發(fā)布紀(jì)錄,版本,總的文檔
    config.h
    包括所有涉及CPU主板的設(shè)置及定義(includes,definations)
    configNet.h
    網(wǎng)絡(luò)驅(qū)動的主要設(shè)置文件,主要對END驅(qū)動設(shè)置.
    romInit.s
    匯編語言文件,是VxWorks Boot ROM和ROM based image的入口,參見系統(tǒng)啟動部分
    sysALib.s
    匯編語言文件,程序員可以把自己的匯編函數(shù)放在這個文件里,在上層調(diào)用。VxWorks image的入口點_sysInit在這個文件里,是在RAM中執(zhí)行的第一個函數(shù)
    sysLib.c
    包含一些系統(tǒng)相關(guān)的函數(shù)例程,提供了一個board-level的接口,VxWorks和應(yīng)用程序可以以system-indepent的方式生成。這個文件還能包含目錄target/config/comps/src的驅(qū)動
    sysScsi.c
    可選文件用于SCSI設(shè)備設(shè)置和初始化
    sysSerial.c
    可選文件用于所有的串口設(shè)置和初始化
    bootrom.hex
    ASIC文件包含VxWorks Boot ROM代碼
    VxWorks
    運行在目標(biāo)機(jī)上,完整的,連結(jié)后的VxWorks二進(jìn)制文件
    VxWorks.sym
    完全的,連結(jié)后帶有符號表的VxWorks二進(jìn)制文件
    VxWorks.st
    完全的,連結(jié)后,standalone,帶有符號表的VxWorks二進(jìn)制文件
    1.1啟動過程
    VxWorks OS有三種映像:
    ? Loadable Images:由Bootrom引導(dǎo)通過網(wǎng)口或串口下載到RAM
    ? ROM-based Images(壓縮/沒有壓縮):即將Image直接燒入ROM,運行時將Image拷入RAM中運行。
    ? ROM-Resident Images:Image的指令部分駐留在ROM中運行,僅將數(shù)據(jù)段部分拷入RAM。
    注意這里說的三種映像都是包含真正操作系統(tǒng)VxWorks的映像,其中后兩種可以直接啟動并運行起來,但是第一種不行,它必須借助另一個叫做Boot Image的映像(可以在Tornado中的build-&gt;build boot rom中生成)才能運行起來,也就是利用Boot Image引導(dǎo)起來然后通過網(wǎng)口或串口下載真正包含VxWorks的Loadable Image,然后才能運行起來。也就是說Boot Image是和Loadable Image 結(jié)合使用的。
    現(xiàn)在看來一共有四種映像文件,讓我們看看它們的組成吧:
    ? Boot Image:包含一段叫做BootStrap Programs的程序+一段ROM BOOT Program程序。
    ? Loadable Images:由操作系統(tǒng)VxWorks和應(yīng)用組成的映像。
    ? ROM-based Images(壓縮/沒有壓縮):包含一段叫做BootStrap Programs的程序+ Loadable Images(即由操作系統(tǒng)VxWorks和應(yīng)用組成的映像)
    ? ROM-Resident Images:同上
    通過上面我們可以看出,ROM-based Images,ROM-Resident Images,Boot Image三種映像都包含一段叫做BootStrap Programs的程序,它具有啟動功能,可以把ROM中的代碼段和數(shù)據(jù)段拷貝到RAM中。
    下面我們來看看三種VxWorks OS映像的啟動順序:
    Boot Image + Loadable Images
    Loadable Images是依靠Boot Image加載啟動的,首先有Boot Image中的程序BootStrap Programs把Boot Program程序加載到RAM中的RAM_HIGH_ADRS處,然后控制權(quán)交給Boot Program,由Boot Program負(fù)責(zé)一系列簡單的硬件初始化(網(wǎng)口,串口等),開始下載Loadable Images(即包含應(yīng)用的VxWorks操作系統(tǒng))到RAM_LOW_ADRS,之后控制權(quán)交給VxWorks操作系統(tǒng)開始執(zhí)行。
    圖片點擊可在新窗口打開查看
     
    圖2 Loadable Images VxWorks啟動過程
     
    如圖2,第一階段的執(zhí)行流程使用的是上圖的左邊的源文件中的那些函數(shù)(romInit();romStart();usrInit();sysHwinit();usrKernelinit();usrRoot());第二階段執(zhí)行流程使用的是上圖中右邊源文件中的那些函數(shù)(sysInit(); usrInit();sysHwinit();usrKernelinit();usrRoot();usrAppInit())。下面具體解釋:
    第一階段:
    romInit.s:romInit()
    ? 系統(tǒng)上電之后,首先調(diào)用的函數(shù)就是romInit()
    ? 禁止中斷
    ? 把啟動類型(冷啟動/熱啟動)放在堆棧上
    ? 清除cache
    ? 初始化CPU基本寄存器,調(diào)用SDRAM初始化函數(shù)初始化UPM
    ? 直接跳轉(zhuǎn)到bootInit.c:romStart()
    bootInit.c:romStart()
    ? 把代碼段和數(shù)據(jù)段從bootrom復(fù)制到RAM當(dāng)中
    ? 完成程序映象的解壓縮(如果映象是壓縮版本的)
    ? 跳轉(zhuǎn)到bootConfig.c:usrInit()
    bootConfig.c:usrInit()
    ? VxWorks OS中第一個C語言完成的代碼。執(zhí)行操作系統(tǒng)內(nèi)核所必須的初始化程序。
    ? Cache程序庫的初始化
    ? 清零系統(tǒng)的BSS段
    ? 初始化中斷向量表
    ? 使硬件工作在一個“安靜”的狀態(tài),盡量不產(chǎn)生各種中斷或者異常
    ? 控制權(quán)移交給KernelInit(),產(chǎn)生usrRoot根任務(wù)
    ? 在usrRoot根任務(wù)中解析Bootline,產(chǎn)生bootCmdLoop任務(wù),用于啟動、加載VxWorks映像
    /target/config/all/bootConfig.c是Boot ROM設(shè)置模塊,用于加載VxWorks image。執(zhí)行流程為:
    usrRoot();bootCmdLoop(void)命令行選擇,或autobooting;bootLoad(pLine, &entry)加載模塊到內(nèi)存(網(wǎng)絡(luò)、TFFS、TSFS...);netifAttach();go(entry);(entry)()從入口開始執(zhí)行,不返回。
    第二階段:
    bootConfig.c: bootLoad( )
    ? 加載VxWorks映像,并轉(zhuǎn)向它的加載地址,從sysInit入口開始執(zhí)行VxWorks映像
    sysALib.s: sysInit( )
    ? 與romInit.s : romInit()的初始化過程類似,但不再初始化Memory(DRAM和Memory控制器通常初始化一次)
    usrConfig.c: usrInit( )
    ? 設(shè)置cache的工作模式,板級硬件初始化,初始化Wind內(nèi)核,啟動usrRoot( )根任務(wù)
    usrConfig.c: usrRoot( )
    ? 初始化內(nèi)存,系統(tǒng)時鐘,I/O系統(tǒng),標(biāo)準(zhǔn)輸入輸出錯,異常處理,添加用戶應(yīng)用程序。
    ROM-based Images(壓縮/沒有壓縮)
    和上面那種啟動方式相比,這種啟動方式省去了一些步驟,執(zhí)行完romStart()之后就已經(jīng)加載VxWorks 到RAM中了,因此,下一步就是把控制權(quán)交給VxWorks,由VxWorks從sysInit()開始執(zhí)行即可。下面是具體的流程:
    圖片點擊可在新窗口打開查看
    romInit.s:romInit()
    ? 系統(tǒng)上電之后,首先調(diào)用的函數(shù)就是romInit()
    ? 禁止中斷
    ? 把啟動類型(冷啟動/熱啟動)放在堆棧上
    ? 清除cache
    ? 初始化CPU基本寄存器,調(diào)用SDRAM初始化函數(shù)初始化UPM
    ? 直接跳轉(zhuǎn)到bootInit.c:romStart()
    bootInit.c: romStart()
    ? 把代碼段(如果是VxWorks_romResident映像,則不拷貝代碼段)和數(shù)據(jù)段從bootrom復(fù)制到RAM當(dāng)中
    ? 完成程序映象的解壓縮(如果映象是壓縮版本的)
    ? 跳轉(zhuǎn)到sysALib.s: sysInit()
    sysALib.s: sysInit()
    ? 重新進(jìn)行CPU內(nèi)核(主要是cache)的初始化,這些工作在romInit.s:romInit()中曾經(jīng)進(jìn)行
    ? 是RAM中運行的第一段代碼
    ? 跳轉(zhuǎn)到usrConfig.c: usrInit()
    usrConfig.c: usrInit()
    ? VxWorks 中第一個C語言完成的代碼。執(zhí)行操作系統(tǒng)內(nèi)核所必須的初始化程序。
    ? Cache程序庫的初始化
    ? 清零系統(tǒng)的BSS段
    ? 初始化中斷向量表
    ? 使硬件工作在一個“安靜”的狀態(tài),盡量不產(chǎn)生各種中斷或者異常
    ? 控制權(quán)移交給KernelInit(),產(chǎn)生usrRoot根任務(wù)
    ROM-Resident Images
    這種映像的加載和上一種是基本相同的,其執(zhí)行順序為:
    文件romInit.s中的romInit();文件bootInit.c中的romStart();文件usrConfig.c中的usrInit();sysHwInit();usrKernelInit();KernelInit(usrRoot,...)。
    usrRoot()任務(wù)的主要功能包括:
    ? 初始化內(nèi)存分區(qū)表(memory partition library)
    ? 初始化系統(tǒng)時鐘(system clock)
    ? 初始化輸入輸出系統(tǒng)(I/O system)----可選
    ? Create devices----可選
    ? 設(shè)置網(wǎng)絡(luò)(Configure network)----可選
    ? 激活WDB目標(biāo)通信(Activate WDB agent)----可選
    ? 調(diào)用程序(Activate application

    支持(0中立(0反對(0單帖管理 | 引用 | 回復(fù) 回到頂部

    返回版面帖子列表

    PowerPC VxWorks BSP分析








    簽名
    主站蜘蛛池模板: 最新69堂国产成人精品视频| 亚洲国产精品综合久久网络 | 视频在线一区二区三区| 日韩精品专区在线影院重磅| 免费萌白酱国产一区二区三区| 777奇米影视四色永久| 无码人妻精品中文字幕 | 99久久中文字幕伊人| 无码人妻精品一区二区三区久久 | 好猛好深好爽好硬免费视频| 亚洲一区二区三区免费视频 | 国产精品日韩欧美一区二区三区| 久久国产精品99精品国产| 欧美人妻aⅴ中文字幕| 国产一区二区在线视频| 99re在线观看| 小妇人电影中文在线观看| 五月花精品视频在线观看| 欧美黑人XXXX高潮猛交| 四虎成人免费大片在线| 青青青国产在线视频| 天堂网在线观看| 久久夜色精品国产亚洲AV动态图| 欧美成人午夜精品免费福利| 午夜寂寞在线一级观看免费| 麻豆乱码国产一区二区三区| 在线看欧美成人中文字幕视频| 中文字幕免费观看全部电影| 日韩AV片无码一区二区不卡| 亚洲精品第一国产综合野| 粉色视频免费入口| 国产人久久人人人人爽| 2021国产精品视频网站| 国外欧美一区另类中文字幕| 一区二区三区无码视频免费福利 | 性导航app精品视频| 亚洲成a人一区二区三区| 看看黄色一级片| 国产免费全部免费观看| 亚洲国产综合精品中文第一区| 蜜中蜜3在线观看视频|