關(guān) 閉

新聞中心

EEPW首頁 > 工控自動(dòng)化 > 設(shè)計(jì)應(yīng)用 > 基于龍芯2F架構(gòu)的PMON分析與優(yōu)化

基于龍芯2F架構(gòu)的PMON分析與優(yōu)化

作者: 時(shí)間:2011-03-30 來源:網(wǎng)絡(luò) 收藏

1.3 在內(nèi)存中的執(zhí)行流程
在內(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í)行不同的命令。它們對來說是必需的,用戶可以定義另外的變量來保存任何字符串,如文件名和命令符等。
Tgt_devinit():主要功能是南橋初始化和PCI設(shè)備初始化。其中南橋初始化函數(shù)是cs5536_init()。PCI設(shè)備初始化由函數(shù)_pci_businit()完成,分為兩步;先是北橋初始化,然后是設(shè)備初始化,包括對設(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命令來執(zhí)行內(nèi)核。

本文引用地址:http://butianyuan.cn/article/202462.htm

2 基于的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)。對于PCI設(shè)備,有一個(gè)重要的數(shù)據(jù)結(jié)構(gòu)struct cfdata cfdata,這個(gè)數(shù)組是根據(jù)具體平臺(tái)的配置文件生成的,以下是配置文件的相關(guān)部分:
2.JPG
這個(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è)備,然后對設(shè)備調(diào)用mapply函數(shù),進(jìn)行設(shè)備的匹配,如果設(shè)備存在則會(huì)調(diào)用該設(shè)備的ca_attach函數(shù)來加載設(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)來講網(wǎng)絡(luò)包發(fā)送出去,而網(wǎng)卡收到網(wǎng)絡(luò)數(shù)據(jù)包之后怎樣通過操作系統(tǒng)來做后續(xù)處理。在PMON中,網(wǎng)卡中斷通過查詢來實(shí)現(xiàn)。fxp_attach函數(shù)會(huì)調(diào)用pci_intr_establish將中斷程序注冊到查詢列表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來開始發(fā)送。在網(wǎng)卡發(fā)送完一個(gè)包后,檢查發(fā)送隊(duì)列,如果有剩余則繼續(xù)發(fā)送,直到發(fā)送完畢。然后通過函數(shù)e100_poll來檢查是否收到包,并進(jìn)行收包處理。先進(jìn)行緩沖區(qū)的清除,使能接收隊(duì)列,查詢是否有數(shù)據(jù)可接收,有則開始接收。無則繼續(xù)查詢并發(fā)出信息。



關(guān)鍵詞: PMON 龍芯2F 架構(gòu) 分析

評論


相關(guān)推薦

技術(shù)專區(qū)

關(guān)閉