當(dāng)前位置:首頁(yè) > 嵌入式 > 嵌入式軟件
[導(dǎo)讀]基于龍芯2F架構(gòu)的PMON分析與優(yōu)化

摘要:基本輸入/輸出系統(tǒng)(BIOS)是現(xiàn)代計(jì)算機(jī)系統(tǒng)的重要組成部分,負(fù)責(zé)計(jì)算機(jī)系統(tǒng)的開機(jī)自檢、板級(jí)初始化、加載操作系統(tǒng)內(nèi)核以及基本I/O功能。以龍芯2F CPU架構(gòu)為研究背景,在其基礎(chǔ)上分析了PMON的系統(tǒng)結(jié)構(gòu)與工作流程,通過添加網(wǎng)絡(luò)驅(qū)動(dòng)程序,最終實(shí)現(xiàn)通過PMON加載Linux和VxWorks操作系統(tǒng)。進(jìn)行必要的功能完善與性能優(yōu)化,并經(jīng)過嚴(yán)格的測(cè)試以排除可能存在的深層次缺陷,實(shí)現(xiàn)了一個(gè)性能穩(wěn)定、功能完善、高可靠性的能與國(guó)產(chǎn)龍芯2F處理器平臺(tái)緊密搭配的BIOS。
關(guān)鍵詞:BIOS;CPU;龍芯2F處理器;PMON

    龍芯CPU使用PMON作為基本輸入輸出系統(tǒng)(BIOS)。PMON具有強(qiáng)大而豐富的功能,除基本的I/O功能外,還包括硬件初始化與檢測(cè)、操作系統(tǒng)引導(dǎo)和程序調(diào)試等功能。PMON早期的版本功能少且擴(kuò)展性不好?,F(xiàn)在龍芯CPU上使用的PMON添加了硬盤和其他文件系統(tǒng)的支持,以及顯卡的支持等。本文在深入分析PMON源碼的前提下,添加了82551網(wǎng)卡驅(qū)動(dòng)以便以網(wǎng)絡(luò)下載加載操作系統(tǒng)內(nèi)核,并對(duì)移植好的PMON系統(tǒng)進(jìn)行了功能、性能和穩(wěn)定性等方面的測(cè)試以適應(yīng)某些重要領(lǐng)域?qū)τ?jì)算機(jī)系統(tǒng)高可靠性要求。通過專門的測(cè)試程序來(lái)實(shí)現(xiàn)此任務(wù),并且盡量保證高的測(cè)試覆蓋性。

1 基于龍芯2F架構(gòu)的PMON分析
1.1 PMON執(zhí)行流程分析
    在龍芯2F CPU上電之初,內(nèi)存和內(nèi)存控制器處于不確定狀態(tài),因此CPU開始執(zhí)行的BIOS代碼只能放在非易失性介質(zhì)中。PMON的二進(jìn)制代碼就存放于主板上一塊512 KB的FLASH芯片上,其虛擬地址為0xBFC00000,物理地址是0x1FC00000。
    由于在ROM FLASH運(yùn)行的速度比較慢,并且空間有限,不能隨時(shí)更改ROM中的內(nèi)容,就需要把引導(dǎo)程序搬到內(nèi)存里運(yùn)行。因此,PMON的運(yùn)行過程分為兩個(gè)階段:第一階段是在ROM FLASH中運(yùn)行,主要進(jìn)行基本硬件初始化,如:北橋、南橋、內(nèi)存控制器、緩存和串口初始化等;第二階段在內(nèi)存中執(zhí)行,主要完成環(huán)境變量和基本數(shù)據(jù)結(jié)構(gòu)的初始化、PCI總線掃描和設(shè)備初始化,顯卡初始化、網(wǎng)絡(luò)協(xié)議和設(shè)備初始化,并對(duì)搜索到的PCI總線上的設(shè)備進(jìn)行驅(qū)動(dòng)程序的加載與配置等,最后加載操作系統(tǒng)內(nèi)核。
1.2 PMON在ROM中的執(zhí)行流程
    龍芯CPU開始執(zhí)行的指令將CP0控制寄存器的狀態(tài)寄存器和原因寄存器清零,讓CPU處于內(nèi)核模式。這是因?yàn)镸IPS CPU啟動(dòng)時(shí),必須定義足夠的CPU控制寄存器狀態(tài),以使CPU能執(zhí)行非緩存的指令。在對(duì)緩存初始化之前,不能訪問緩存。非緩存的異常入口在0xBFC00000,但此處沒有足夠的空間存放啟動(dòng)代碼,于是設(shè)計(jì)了一個(gè)跳轉(zhuǎn)。這個(gè)跳轉(zhuǎn)可以測(cè)試CPU是否正常工作。如果硬件發(fā)生了某種嚴(yán)重的錯(cuò)誤,可能會(huì)導(dǎo)致CPU嚴(yán)重的異常。如果CPU正常啟動(dòng)起來(lái)并跳轉(zhuǎn)到了正確的位置并執(zhí)行了預(yù)先設(shè)計(jì)的指令,就可以相信CPU正常,某些硬件正常。跳轉(zhuǎn)之后,PMON進(jìn)行一系列的初始化與測(cè)試工作,這個(gè)過程如圖1所示。

[!--empirenews.page--]
1.3 PMON在內(nèi)存中的執(zhí)行流程
    PMON在內(nèi)存中的執(zhí)行過程非常復(fù)雜,下面按照其執(zhí)行流程分析主要的函數(shù):
    _init():主要功能是順序執(zhí)行初始化。列表上的所有函數(shù),建立必要的數(shù)據(jù)結(jié)構(gòu)和編譯環(huán)境。初始化列表上的函數(shù)主要可以分為3類:命令初始化函數(shù),文件系統(tǒng)初始化函數(shù),可執(zhí)行文件初始化函數(shù)。
    Evenint():環(huán)境變量初始化函數(shù),這些環(huán)境變量解釋并執(zhí)行不同的命令。它們對(duì)PMON來(lái)說是必需的,用戶可以定義另外的變量來(lái)保存任何字符串,如文件名和命令符等。
    Tgt_devinit():主要功能是南橋初始化和PCI設(shè)備初始化。其中南橋初始化函數(shù)是cs5536_init()。PCI設(shè)備初始化由函數(shù)_pci_businit()完成,分為兩步;先是北橋初始化,然后是設(shè)備初始化,包括對(duì)設(shè)備的掃描和設(shè)備所需資源的分配。PCI設(shè)備的初始化部分是PMON分析中的難點(diǎn)。
    Init_net():主要進(jìn)行了如下的工作;虛擬內(nèi)存初始化等;用_pci_deviceinit函數(shù)完成了PCI配置空間的參數(shù)初始化,并且初始化顯卡;網(wǎng)絡(luò)系統(tǒng)的初始化包括網(wǎng)絡(luò)設(shè)備的初始化和協(xié)議的配置等。
    最后加載操作系統(tǒng)內(nèi)核。這里會(huì)用到兩個(gè)重要的命令Load和g。Load命令用于加載文件(內(nèi)核)到內(nèi)存,g命令執(zhí)行內(nèi)核文件。加載了內(nèi)核文件之后就可以通過g命令來(lái)執(zhí)行內(nèi)核。

2 基于龍芯2F架構(gòu)的PMON修改與優(yōu)化
2.1 添加82551網(wǎng)卡驅(qū)動(dòng)
    網(wǎng)卡是一個(gè)PCI設(shè)備,所以其驅(qū)動(dòng)在PCI設(shè)備初始化時(shí)實(shí)現(xiàn)。對(duì)于PCI設(shè)備,有一個(gè)重要的數(shù)據(jù)結(jié)構(gòu)struct cfdata cfdata,這個(gè)數(shù)組是根據(jù)具體平臺(tái)的配置文件生成的,以下是配置文件的相關(guān)部分:
   
    這個(gè)部分描述了設(shè)備之間的鏈接關(guān)系,cfdata是這個(gè)關(guān)系的數(shù)組表示。另外還有一個(gè)PV數(shù)組定義一個(gè)設(shè)備的父設(shè)備,每個(gè)節(jié)點(diǎn)的父設(shè)備都是一個(gè)數(shù)組,在設(shè)備的cfdata結(jié)構(gòu)中定義數(shù)組的開始。
    上述配置文件中的fxp0表示的就是網(wǎng)卡設(shè)備。因?yàn)閒xp0是PCI子設(shè)備,因此在查找PCI子設(shè)備時(shí),其4個(gè)子設(shè)備:fxp0,rtkO,ohci,pci-ide的驅(qū)動(dòng)也會(huì)在此時(shí)加載。查找設(shè)備有一個(gè)函數(shù):config_found,其會(huì)調(diào)用config_serch,config_search從靜態(tài)設(shè)備樹cfdata中查找當(dāng)前設(shè)備的子設(shè)備,然后對(duì)設(shè)備調(diào)用mapply函數(shù),進(jìn)行設(shè)備的匹配,如果設(shè)備存在則會(huì)調(diào)用該設(shè)備的ca_attach函數(shù)來(lái)加載設(shè)備的驅(qū)動(dòng)程序。這里找到網(wǎng)卡設(shè)備之后會(huì)調(diào)用fxp_attach函數(shù)。在設(shè)計(jì)的網(wǎng)卡驅(qū)動(dòng)中,實(shí)現(xiàn)了操作系統(tǒng)將怎樣通過網(wǎng)卡驅(qū)動(dòng)來(lái)講網(wǎng)絡(luò)包發(fā)送出去,而網(wǎng)卡收到網(wǎng)絡(luò)數(shù)據(jù)包之后怎樣通過操作系統(tǒng)來(lái)做后續(xù)處理。在PMON中,網(wǎng)卡中斷通過查詢來(lái)實(shí)現(xiàn)。fxp_attach函數(shù)會(huì)調(diào)用pci_intr_establish將中斷程序注冊(cè)到查詢列表poll_list上。網(wǎng)口要將數(shù)據(jù)包發(fā)送出去,就必須提供一個(gè)網(wǎng)絡(luò)接口,以提供給發(fā)送函數(shù)。在這里,將網(wǎng)絡(luò)數(shù)據(jù)包放在網(wǎng)絡(luò)接口的ifp→if_snd隊(duì)列中,然后啟動(dòng)if_start來(lái)開始發(fā)送。在網(wǎng)卡發(fā)送完一個(gè)包后,檢查發(fā)送隊(duì)列,如果有剩余則繼續(xù)發(fā)送,直到發(fā)送完畢。然后通過函數(shù)e100_poll來(lái)檢查是否收到包,并進(jìn)行收包處理。先進(jìn)行緩沖區(qū)的清除,使能接收隊(duì)列,查詢是否有數(shù)據(jù)可接收,有則開始接收。無(wú)則繼續(xù)查詢并發(fā)出信息。[!--empirenews.page--]
2.2 編譯PMON
    添加好了網(wǎng)卡驅(qū)動(dòng)程序之后,需要對(duì)PMON進(jìn)行重新配置和編譯。配置和編譯的過程如下。主要用到幾條命令:
    
    通過網(wǎng)絡(luò)來(lái)更新PMON時(shí)使用下面的命令:load-f 0xbfc00000-r tftp://192.16.12.30來(lái)進(jìn)行PMON的在線燒寫。并通過網(wǎng)絡(luò)來(lái)加載操作系統(tǒng):load tftp://192.16.12.30/VxWorks.如果加載系統(tǒng)內(nèi)核成功則驗(yàn)證了網(wǎng)卡驅(qū)動(dòng)的有效。


3 系統(tǒng)測(cè)試
3.1 系統(tǒng)啟動(dòng)階段網(wǎng)卡測(cè)試
    由于啟動(dòng)階段網(wǎng)卡只用于加載操作系統(tǒng)內(nèi)核,對(duì)性能并沒有太高要求。只需測(cè)試其功能即可。通過在啟動(dòng)過程中用另外一臺(tái)主機(jī)對(duì)其進(jìn)行ping操作來(lái)測(cè)試其功能。其界面如圖2所示。


3.2 系統(tǒng)啟動(dòng)時(shí)間測(cè)試
    經(jīng)過測(cè)試,在硬盤啟動(dòng)模式下,系統(tǒng)從加電到操作系統(tǒng)啟動(dòng)完畢耗時(shí)不超過35 s,符合絕大部分應(yīng)用需求。
3.3 500次開關(guān)機(jī)測(cè)試
    為測(cè)試移植后的系統(tǒng)POST功能的穩(wěn)定性,進(jìn)行了500次開關(guān)機(jī)實(shí)驗(yàn)。經(jīng)驗(yàn)證,成功啟動(dòng)次數(shù)為500,失敗次數(shù)為0,成功率100%。
3.4 200 h老練測(cè)試
    為測(cè)試PMON在系統(tǒng)運(yùn)行時(shí)的穩(wěn)定性,用專用的整機(jī)測(cè)試軟件進(jìn)行了200 h老練測(cè)試。經(jīng)測(cè)試,系統(tǒng)運(yùn)行正常,未出現(xiàn)故障,測(cè)試合格。

 

4 結(jié)語(yǔ)
    為了適應(yīng)PMON在國(guó)產(chǎn)計(jì)算機(jī)系統(tǒng)中的需求,對(duì)其進(jìn)行了分析與優(yōu)化。在分析了源碼的基礎(chǔ)上,對(duì)其進(jìn)行了必要的修改與優(yōu)化,增加了82551網(wǎng)卡的驅(qū)動(dòng)等。為了驗(yàn)證優(yōu)化后系統(tǒng)的穩(wěn)定性,進(jìn)行了一系列的測(cè)試驗(yàn)證,包括啟動(dòng)階段的網(wǎng)絡(luò)測(cè)試、系統(tǒng)啟動(dòng)時(shí)間測(cè)量、500次開
關(guān)機(jī)測(cè)試以及200 h老練測(cè)試等。經(jīng)驗(yàn)證,修改后的PMON系統(tǒng)運(yùn)行穩(wěn)定,可以在多個(gè)重要領(lǐng)域中進(jìn)行應(yīng)用。
 

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

9月2日消息,不造車的華為或?qū)⒋呱龈蟮莫?dú)角獸公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關(guān)鍵字: 阿維塔 塞力斯 華為

倫敦2024年8月29日 /美通社/ -- 英國(guó)汽車技術(shù)公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車工程師從創(chuàng)意到認(rèn)證的所有需求的工具,可用于創(chuàng)建軟件定義汽車。 SODA V工具的開發(fā)耗時(shí)1.5...

關(guān)鍵字: 汽車 人工智能 智能驅(qū)動(dòng) BSP

北京2024年8月28日 /美通社/ -- 越來(lái)越多用戶希望企業(yè)業(yè)務(wù)能7×24不間斷運(yùn)行,同時(shí)企業(yè)卻面臨越來(lái)越多業(yè)務(wù)中斷的風(fēng)險(xiǎn),如企業(yè)系統(tǒng)復(fù)雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務(wù)連續(xù)性,提升韌性,成...

關(guān)鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報(bào)道,騰訊和網(wǎng)易近期正在縮減他們對(duì)日本游戲市場(chǎng)的投資。

關(guān)鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國(guó)國(guó)際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)開幕式在貴陽(yáng)舉行,華為董事、質(zhì)量流程IT總裁陶景文發(fā)表了演講。

關(guān)鍵字: 華為 12nm EDA 半導(dǎo)體

8月28日消息,在2024中國(guó)國(guó)際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)上,華為常務(wù)董事、華為云CEO張平安發(fā)表演講稱,數(shù)字世界的話語(yǔ)權(quán)最終是由生態(tài)的繁榮決定的。

關(guān)鍵字: 華為 12nm 手機(jī) 衛(wèi)星通信

要點(diǎn): 有效應(yīng)對(duì)環(huán)境變化,經(jīng)營(yíng)業(yè)績(jī)穩(wěn)中有升 落實(shí)提質(zhì)增效舉措,毛利潤(rùn)率延續(xù)升勢(shì) 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務(wù)引領(lǐng)增長(zhǎng) 以科技創(chuàng)新為引領(lǐng),提升企業(yè)核心競(jìng)爭(zhēng)力 堅(jiān)持高質(zhì)量發(fā)展策略,塑強(qiáng)核心競(jìng)爭(zhēng)優(yōu)勢(shì)...

關(guān)鍵字: 通信 BSP 電信運(yùn)營(yíng)商 數(shù)字經(jīng)濟(jì)

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺(tái)與中國(guó)電影電視技術(shù)學(xué)會(huì)聯(lián)合牽頭組建的NVI技術(shù)創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會(huì)上宣布正式成立。 活動(dòng)現(xiàn)場(chǎng) NVI技術(shù)創(chuàng)新聯(lián)...

關(guān)鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長(zhǎng)三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會(huì)上,軟通動(dòng)力信息技術(shù)(集團(tuán))股份有限公司(以下簡(jiǎn)稱"軟通動(dòng)力")與長(zhǎng)三角投資(上海)有限...

關(guān)鍵字: BSP 信息技術(shù)
關(guān)閉
關(guān)閉