国产精品1024永久观看,大尺度欧美暖暖视频在线观看,亚洲宅男精品一区在线观看,欧美日韩一区二区三区视频,2021中文字幕在线观看

  • <option id="fbvk0"></option>
    1. <rt id="fbvk0"><tr id="fbvk0"></tr></rt>
      <center id="fbvk0"><optgroup id="fbvk0"></optgroup></center>
      <center id="fbvk0"></center>

      <li id="fbvk0"><abbr id="fbvk0"><dl id="fbvk0"></dl></abbr></li>

      網(wǎng)絡(luò)操作系統(tǒng)中建立并使用設(shè)備硬件模型的方法及裝置的制造方法

      文檔序號(hào):10569729閱讀:318來(lái)源:國(guó)知局
      網(wǎng)絡(luò)操作系統(tǒng)中建立并使用設(shè)備硬件模型的方法及裝置的制造方法
      【專(zhuān)利摘要】本發(fā)明公開(kāi)了一種網(wǎng)絡(luò)操作系統(tǒng)中建立并使用設(shè)備硬件模型的方法及裝置,涉及網(wǎng)絡(luò)操作系統(tǒng)開(kāi)發(fā)技術(shù)領(lǐng)域。該方法包括:對(duì)網(wǎng)絡(luò)操作系統(tǒng)中的設(shè)備硬件進(jìn)行建模抽象,得到設(shè)備硬件模型;將設(shè)備硬件模型通過(guò)代碼解釋工具生成相關(guān)自動(dòng)代碼;將自動(dòng)代碼存儲(chǔ)于網(wǎng)絡(luò)操作系統(tǒng)平臺(tái)軟件內(nèi)并編譯通過(guò),網(wǎng)絡(luò)操作系統(tǒng)平臺(tái)軟件在啟動(dòng)時(shí)加載已存儲(chǔ)的設(shè)備硬件模型文件,并為設(shè)備硬件模型創(chuàng)建一個(gè)模型數(shù)據(jù)庫(kù);利用自動(dòng)代碼提供的set函數(shù)接口、notify函數(shù)接口,以及創(chuàng)建的模型數(shù)據(jù)庫(kù),完成各業(yè)務(wù)對(duì)設(shè)備硬件模型的使用。本發(fā)明能使網(wǎng)絡(luò)操作系統(tǒng)的內(nèi)部開(kāi)發(fā)與設(shè)備硬件驅(qū)動(dòng)的開(kāi)發(fā)相分離,提升網(wǎng)絡(luò)操作系統(tǒng)適配新硬件的能力,縮短網(wǎng)絡(luò)操作系統(tǒng)的研發(fā)周期。
      【專(zhuān)利說(shuō)明】
      網(wǎng)絡(luò)操作系統(tǒng)中建立并使用設(shè)備硬件模型的方法及裝置
      技術(shù)領(lǐng)域
      [0001] 本發(fā)明涉及網(wǎng)絡(luò)操作系統(tǒng)開(kāi)發(fā)技術(shù)領(lǐng)域,具體來(lái)講是一種網(wǎng)絡(luò)操作系統(tǒng)中建立并 使用設(shè)備硬件模型的方法及裝置。
      【背景技術(shù)】
      [0002] 網(wǎng)絡(luò)操作系統(tǒng)開(kāi)發(fā)的設(shè)計(jì)目標(biāo)是:希望開(kāi)發(fā)出來(lái)的網(wǎng)絡(luò)操作系統(tǒng)是一個(gè)可以適配 不同產(chǎn)品系列中各種硬件的系統(tǒng),其開(kāi)發(fā)內(nèi)容包括操作系統(tǒng)內(nèi)部的設(shè)計(jì)開(kāi)發(fā)與設(shè)備硬件驅(qū) 動(dòng)的設(shè)計(jì)開(kāi)發(fā)。設(shè)備硬件驅(qū)動(dòng)的設(shè)計(jì)開(kāi)發(fā)的目標(biāo)是:希望某個(gè)新型的網(wǎng)絡(luò)操作系統(tǒng)在設(shè)計(jì) 開(kāi)發(fā)設(shè)備硬件驅(qū)動(dòng)軟件時(shí)能盡量簡(jiǎn)化適配工作,即如何將設(shè)備硬件驅(qū)動(dòng)流程整合到網(wǎng)絡(luò)操 作系統(tǒng)內(nèi)部的工作盡量簡(jiǎn)化。
      [0003] 而目前,網(wǎng)絡(luò)操作系統(tǒng)開(kāi)發(fā)過(guò)程中設(shè)備管理層面通常沒(méi)有一個(gè)統(tǒng)一的標(biāo)準(zhǔn)過(guò)程去 遵循,這導(dǎo)致開(kāi)發(fā)不同的設(shè)備硬件驅(qū)動(dòng)時(shí),會(huì)分別設(shè)計(jì)出不同的開(kāi)發(fā)流程,需要網(wǎng)絡(luò)操作系 統(tǒng)內(nèi)部的研發(fā)人員和設(shè)備硬件驅(qū)動(dòng)的研發(fā)人員同時(shí)進(jìn)行設(shè)計(jì)和開(kāi)發(fā)工作。這種將網(wǎng)絡(luò)操作 系統(tǒng)內(nèi)部設(shè)計(jì)與設(shè)備硬件驅(qū)動(dòng)設(shè)計(jì)進(jìn)行綁定開(kāi)發(fā)的方式,嚴(yán)重限制了網(wǎng)絡(luò)操作系統(tǒng)適配新 硬件的能力且延長(zhǎng)了網(wǎng)絡(luò)操作系統(tǒng)的研發(fā)周期。

      【發(fā)明內(nèi)容】

      [0004] 本發(fā)明的目的是為了克服上述【背景技術(shù)】的不足,提供一種網(wǎng)絡(luò)操作系統(tǒng)中建立并 使用設(shè)備硬件模型的方法及裝置,通過(guò)將設(shè)備硬件抽象為設(shè)備硬件模型,該設(shè)備硬件模型 能作為中間橋梁連接網(wǎng)絡(luò)操作系統(tǒng)與設(shè)備硬件驅(qū)動(dòng),從而使得網(wǎng)絡(luò)操作系統(tǒng)的內(nèi)部開(kāi)發(fā)與 設(shè)備硬件驅(qū)動(dòng)的開(kāi)發(fā)相分離,提升了網(wǎng)絡(luò)操作系統(tǒng)適配新硬件的能力,縮短了網(wǎng)絡(luò)操作系 統(tǒng)的研發(fā)周期。
      [0005] 為達(dá)到以上目的,本發(fā)明采取的技術(shù)方案是:提供一種網(wǎng)絡(luò)操作系統(tǒng)中建立并使 用設(shè)備硬件模型的方法,包括以下步驟:
      [0006] 步驟S1:對(duì)網(wǎng)絡(luò)操作系統(tǒng)中的設(shè)備硬件進(jìn)行建模抽象,得到設(shè)備硬件模型;
      [0007] 步驟S2:將設(shè)備硬件模型通過(guò)代碼解釋工具生成相關(guān)自動(dòng)代碼,該自動(dòng)代碼包括: 與各設(shè)備元器件對(duì)應(yīng)的結(jié)構(gòu)體定義、set函數(shù)接口定義,以及notify函數(shù)接口定義;
      [0008] 步驟S3:將自動(dòng)代碼存儲(chǔ)于網(wǎng)絡(luò)操作系統(tǒng)平臺(tái)軟件內(nèi)并編譯通過(guò);將設(shè)備硬件模 型文件存儲(chǔ)于網(wǎng)絡(luò)操作系統(tǒng)平臺(tái)軟件內(nèi),網(wǎng)絡(luò)操作系統(tǒng)平臺(tái)軟件在啟動(dòng)時(shí)加載設(shè)備硬件模 型文件,并為設(shè)備硬件模型創(chuàng)建一個(gè)模型數(shù)據(jù)庫(kù);
      [0009]步驟S4:利用自動(dòng)代碼提供的set函數(shù)接口、notify函數(shù)接口,以及創(chuàng)建的模型數(shù) 據(jù)庫(kù),完成各業(yè)務(wù)對(duì)設(shè)備硬件模型的使用。
      [0010]在上述技術(shù)方案的基礎(chǔ)上,所述設(shè)備硬件模型的內(nèi)容包括所有設(shè)備元器件的類(lèi)信 息,每個(gè)設(shè)備元器件的類(lèi)信息包含以下類(lèi)成員內(nèi)容:設(shè)備元器件名稱(chēng)、設(shè)備元器件關(guān)鍵屬性 描述、設(shè)備元器件的類(lèi)對(duì)應(yīng)的結(jié)構(gòu)體成員信息。
      [0011]在上述技術(shù)方案的基礎(chǔ)上,步驟S1具體包括以下操作:
      [0012] 步驟S101:定義設(shè)備元器件的類(lèi)名稱(chēng),該類(lèi)名稱(chēng)用于在模型文件內(nèi)唯一標(biāo)識(shí)一個(gè) 設(shè)備元器件,并在生成代碼過(guò)程中以此名稱(chēng)做關(guān)鍵字進(jìn)行結(jié)構(gòu)體命名和函數(shù)命名;
      [0013] 步驟S102:設(shè)置類(lèi)成員屬性值,該屬性值為默認(rèn)值設(shè)置或者在系統(tǒng)運(yùn)行中通過(guò)相 應(yīng)的設(shè)置接口函數(shù)進(jìn)行修改設(shè)置;
      [0014] 步驟S103:定義類(lèi)成員的數(shù)據(jù)類(lèi)型名稱(chēng),該名稱(chēng)對(duì)應(yīng)編程語(yǔ)言的數(shù)據(jù)類(lèi)型;
      [0015]步驟S104:設(shè)置類(lèi)成員在內(nèi)存中占用的長(zhǎng)度。
      [0016]在上述技術(shù)方案的基礎(chǔ)上,步驟S2中所述將設(shè)備硬件模型通過(guò)代碼解釋工具生成 相關(guān)自動(dòng)代碼,包括以下操作:代碼解釋工具對(duì)設(shè)備硬件模型文件進(jìn)行一套C語(yǔ)言化的轉(zhuǎn) 換,將每個(gè)設(shè)備元器件的類(lèi)對(duì)應(yīng)一個(gè)結(jié)構(gòu)體名,將設(shè)備元器件的類(lèi)的屬性對(duì)應(yīng)結(jié)構(gòu)體的成 員變量。
      [0017]在上述技術(shù)方案的基礎(chǔ)上,步驟S4具體操作如下:
      [0018]步驟S401:當(dāng)有業(yè)務(wù)修改了自動(dòng)代碼中的某個(gè)結(jié)構(gòu)體時(shí),通過(guò)調(diào)用該結(jié)構(gòu)體對(duì)應(yīng) 的set函數(shù)接口,向模型數(shù)據(jù)庫(kù)發(fā)送TLV消息格式的修改消息;
      [0019]步驟S402:模型數(shù)據(jù)庫(kù)在接收到修改消息后,檢查有哪些其他業(yè)務(wù)與該結(jié)構(gòu)體相 關(guān),向相關(guān)的其他業(yè)務(wù)發(fā)送有關(guān)該結(jié)構(gòu)體的變化消息;
      [0020]步驟S403:收到結(jié)構(gòu)體變化消息的其他業(yè)務(wù),通過(guò)noti fy函數(shù)接口回調(diào)模型數(shù)據(jù) 庫(kù)來(lái)接收該結(jié)構(gòu)體的變化。
      [0021 ]在上述技術(shù)方案的基礎(chǔ)上,其特征在于:若存在重復(fù)的設(shè)備元器件時(shí),步驟S1中對(duì) 網(wǎng)絡(luò)操作系統(tǒng)中的設(shè)備硬件進(jìn)行建模抽象時(shí),通過(guò)添加 inst實(shí)例屬性做為關(guān)鍵字,對(duì)重復(fù) 的設(shè)備元器件進(jìn)行索引標(biāo)識(shí)。
      [0022] 本發(fā)明還提供一種基于上述方法的網(wǎng)絡(luò)操作系統(tǒng)中建立并使用設(shè)備硬件模型的 裝置,包括模型建立單元、自動(dòng)代碼生成單元、代碼編譯與模型加載單元、模型使用單元;
      [0023] 所述模型建立單元用于:對(duì)網(wǎng)絡(luò)操作系統(tǒng)中的設(shè)備硬件進(jìn)行建模抽象,得到設(shè)備 硬件模型;
      [0024] 所述自動(dòng)代碼生成單元用于:將設(shè)備硬件模型通過(guò)代碼解釋工具生成相關(guān)自動(dòng)代 碼,該自動(dòng)代碼包括:與各設(shè)備元器件對(duì)應(yīng)的結(jié)構(gòu)體定義、set函數(shù)接口定義,以及notify函 數(shù)接口定義;
      [0025] 所述代碼編譯與模型加載單元用于:將自動(dòng)代碼存儲(chǔ)于網(wǎng)絡(luò)操作系統(tǒng)平臺(tái)軟件內(nèi) 并編譯通過(guò);將設(shè)備硬件模型文件存儲(chǔ)于網(wǎng)絡(luò)操作系統(tǒng)平臺(tái)軟件內(nèi),使網(wǎng)絡(luò)操作系統(tǒng)平臺(tái) 軟件啟動(dòng)時(shí)加載設(shè)備硬件模型文件,并為設(shè)備硬件模型創(chuàng)建一個(gè)模型數(shù)據(jù)庫(kù);
      [0026] 所述模型使用單元用于:利用自動(dòng)代碼提供的set函數(shù)接口、notify函數(shù)接口,以 及創(chuàng)建的模型數(shù)據(jù)庫(kù),完成各業(yè)務(wù)對(duì)設(shè)備硬件模型的使用。
      [0027] 在上述技術(shù)方案的基礎(chǔ)上,所述模型建立單元包括類(lèi)名稱(chēng)定義子單元、屬性值設(shè) 置子單元、數(shù)據(jù)類(lèi)型名稱(chēng)定義子單元和長(zhǎng)度設(shè)置子單元;所述類(lèi)名稱(chēng)定義子單元用于:定義 設(shè)備元器件的類(lèi)名稱(chēng),該類(lèi)名稱(chēng)用于在模型文件內(nèi)唯一標(biāo)識(shí)一個(gè)設(shè)備元器件,并在生成代 碼過(guò)程中以此名稱(chēng)做關(guān)鍵字進(jìn)行結(jié)構(gòu)體命名和函數(shù)命名;所述屬性值設(shè)置子單元用于:設(shè) 置類(lèi)成員屬性值;所述數(shù)據(jù)類(lèi)型名稱(chēng)定義子單元用于:定義類(lèi)成員的數(shù)據(jù)類(lèi)型名稱(chēng),該名稱(chēng) 對(duì)應(yīng)編程語(yǔ)言的數(shù)據(jù)類(lèi)型;所述長(zhǎng)度設(shè)置子單元用于:設(shè)置類(lèi)成員在內(nèi)存中占用的長(zhǎng)度。
      [0028] 在上述技術(shù)方案的基礎(chǔ)上,所述自動(dòng)代碼生成單元將設(shè)備硬件模型通過(guò)代碼解釋 工具生成相關(guān)自動(dòng)代碼的具體過(guò)程為:自動(dòng)代碼生成單元通過(guò)代碼解釋工具對(duì)設(shè)備硬件模 型文件進(jìn)行一套C語(yǔ)言化的轉(zhuǎn)換,將每個(gè)設(shè)備元器件的類(lèi)對(duì)應(yīng)一個(gè)結(jié)構(gòu)體名,將設(shè)備元器件 的類(lèi)的屬性對(duì)應(yīng)結(jié)構(gòu)體的成員變量。
      [0029] 在上述技術(shù)方案的基礎(chǔ)上,所述模型使用單元包括修改消息發(fā)送子單元、變化消 息發(fā)送子單元和變化接收子單元;所述修改消息發(fā)送子單元用于:當(dāng)有業(yè)務(wù)修改了自動(dòng)代 碼中的某個(gè)結(jié)構(gòu)體時(shí),通過(guò)調(diào)用該結(jié)構(gòu)體對(duì)應(yīng)的set函數(shù)接口,向模型數(shù)據(jù)庫(kù)發(fā)送TLV消息 格式的修改消息;所述變化消息發(fā)送子單元用于:在模型數(shù)據(jù)庫(kù)接收到修改消息后,檢查有 哪些其他業(yè)務(wù)與被修改的結(jié)構(gòu)體相關(guān),并向相關(guān)的其他業(yè)務(wù)發(fā)送有關(guān)該結(jié)構(gòu)體的變化消 息;所述變化接收子單元用于:使收到結(jié)構(gòu)體變化消息的其他業(yè)務(wù),通過(guò)no t i f y函數(shù)接口回 調(diào)模型數(shù)據(jù)庫(kù)來(lái)接收被修改的結(jié)構(gòu)體的變化。
      [0030] 本發(fā)明的有益效果在于:
      [0031] (1)本發(fā)明中,使用面向?qū)ο蟮脑O(shè)計(jì)方法將設(shè)備硬件和整體形態(tài)進(jìn)行抽象整理為 設(shè)備硬件模型,并將設(shè)備硬件模型通過(guò)代碼解釋工具生成相關(guān)自動(dòng)代碼,該自動(dòng)代碼不但 包含與各設(shè)備元器件對(duì)應(yīng)的結(jié)構(gòu)體定義,而且還包含各結(jié)構(gòu)體向模型數(shù)據(jù)庫(kù)提交消息的接 口(set函數(shù)接口),以及當(dāng)模型數(shù)據(jù)庫(kù)中結(jié)構(gòu)體的實(shí)例發(fā)生變化時(shí)業(yè)務(wù)回調(diào)模型數(shù)據(jù)庫(kù)的 通知回調(diào)接口(notify函數(shù)接口);網(wǎng)絡(luò)操作系統(tǒng)平臺(tái)軟件加載設(shè)備硬件模型文件后,會(huì)為 設(shè)備硬件模型創(chuàng)建模型數(shù)據(jù)庫(kù);利用自動(dòng)代碼提供的set函數(shù)接口、notify函數(shù)接口,以及 創(chuàng)建的模型數(shù)據(jù)庫(kù),可以方便快速的完成各業(yè)務(wù)(網(wǎng)絡(luò)操作系統(tǒng)平臺(tái)業(yè)務(wù)、設(shè)備硬件驅(qū)動(dòng)業(yè) 務(wù))對(duì)設(shè)備硬件模型的使用。
      [0032] 與現(xiàn)有技術(shù)相比,本發(fā)明能實(shí)現(xiàn)以設(shè)備硬件模型為中間橋梁連接網(wǎng)絡(luò)操作系統(tǒng)與 硬件驅(qū)動(dòng),從而使得網(wǎng)絡(luò)操作系統(tǒng)的內(nèi)部開(kāi)發(fā)與設(shè)備硬件驅(qū)動(dòng)的開(kāi)發(fā)相分離,二者可分別 進(jìn)行,將網(wǎng)絡(luò)操作系統(tǒng)內(nèi)部和設(shè)備硬件驅(qū)動(dòng)視為兩個(gè)點(diǎn),缺少任一點(diǎn)都不影響另一點(diǎn)的設(shè) 計(jì)開(kāi)發(fā)。設(shè)備硬件驅(qū)動(dòng)不需要重復(fù)編寫(xiě)同一類(lèi)型的代碼,相同的代碼邏輯僅因模型命名的 不同而導(dǎo)致代碼中變量不同這部分代碼將由工具根據(jù)模型進(jìn)行解析生成,不需要手動(dòng)編 寫(xiě),縮短了網(wǎng)絡(luò)操作系統(tǒng)的研發(fā)周期;而且設(shè)備硬件模型的可移植性強(qiáng),通用性強(qiáng),可提升 網(wǎng)絡(luò)操作系統(tǒng)適配新硬件的能力。
      [0033] (2)本發(fā)明步驟S4的詳細(xì)步驟中,通過(guò)調(diào)用結(jié)構(gòu)體對(duì)應(yīng)的set函數(shù)接口,向模型數(shù) 據(jù)庫(kù)發(fā)送基于TLV消息格式的修改消息。TLV(type+length+value)消息格式是一種靈活可 變的消息打包方式,不要求每次消息報(bào)文要格式相同,其中type由兩部分組成,分別是前半 部的類(lèi)索引和后半部分成員索引構(gòu)成,因此,模型數(shù)據(jù)庫(kù)在接收到tlv消息格式的修改消息 后,可根據(jù)type定位到具體內(nèi)容,靈活方便。
      [0034] (3)本發(fā)明考慮到有的設(shè)備元器件在一塊板卡上有多個(gè)的問(wèn)題,因此,為了對(duì)重復(fù) 的設(shè)備元器件進(jìn)行進(jìn)一步區(qū)分,本發(fā)明通過(guò)在建模抽象時(shí)添加 inst實(shí)例屬性做為關(guān)鍵字, 來(lái)對(duì)重復(fù)的設(shè)備元器件進(jìn)行索引標(biāo)識(shí),不但識(shí)別效果好,而且滿(mǎn)足了各種板卡的使用需求, 實(shí)用性尚。
      【附圖說(shuō)明】
      [0035] 圖1為本發(fā)明實(shí)施例中網(wǎng)絡(luò)操作系統(tǒng)中建立并使用設(shè)備硬件模型的方法的流程 圖;
      [0036]圖2為路由器設(shè)備主控板的內(nèi)部結(jié)構(gòu)框圖;
      [0037]圖3為步驟S1的具體流程圖;
      [0038]圖4為步驟S4的具體流程圖;
      [0039] 圖5為本發(fā)明實(shí)施例中網(wǎng)絡(luò)操作系統(tǒng)中建立并使用設(shè)備硬件模型的裝置的結(jié)構(gòu)框 圖。
      【具體實(shí)施方式】
      [0040] 下面結(jié)合附圖及具體實(shí)施例對(duì)本發(fā)明作進(jìn)一步的詳細(xì)描述。
      [0041] 參見(jiàn)圖1所示,本發(fā)明實(shí)施例提供一種網(wǎng)絡(luò)操作系統(tǒng)中建立并使用設(shè)備硬件模型 的方法,包括以下步驟:
      [0042]步驟S1、模型的建立:對(duì)網(wǎng)絡(luò)操作系統(tǒng)中的設(shè)備硬件進(jìn)行建模抽象,得到設(shè)備硬件 模型。
      [0043]可以理解的是,本實(shí)施例中,在進(jìn)行設(shè)備硬件建模抽象時(shí),是以板卡為單元,對(duì)板 卡內(nèi)所有設(shè)備元器件進(jìn)行抽象,得到的設(shè)備硬件模型為XML格式文件,并以板卡名稱(chēng)進(jìn)行命 名。其中,設(shè)備硬件模型的內(nèi)容包括所有設(shè)備元器件的類(lèi)信息,每個(gè)設(shè)備元器件的類(lèi)信息包 含以下類(lèi)成員內(nèi)容:設(shè)備元器件名稱(chēng)、設(shè)備元器件關(guān)鍵屬性描述、設(shè)備元器件的類(lèi)對(duì)應(yīng)的結(jié) 構(gòu)體成員信息。
      [0044] 例如,以一塊路由器設(shè)備主控板為例,如圖2所示,該主控板內(nèi)的設(shè)備元器件包括 CPU、控制網(wǎng)口和串行接口,則該設(shè)備硬件模型可保存為"主控板.xml",其相應(yīng)的模型內(nèi)容 如下: 〈board name=" 彳板"〉 <class name="cpu"> 〈member name=:i'tdp" value="35" type="UINT16" len^"2" iskey="false"/> .〈member. name='M2 cache" value="512" type=--"uns[T16" len="2" iskey="false'V> 〈member name.=." core". value="2" typ;e:="UINT8" len="l".
      [0045] iskey="false"/> <member name="frequency" vtlue="8Q0!' type="UINT16" 1611="2" iskey="falsei'/> </class> <class name="etherne!:"> <member name="speed" value-'100" type="UINT16" len="2" iskey="fabe7> </class> <class name="console"> 〈member name="bit rate.1:' val.ue=''56700" type.=!'UINT32"
      [0046] len="4" iskey="false7> </class> 乂....... </board>
      [0047] 進(jìn)一步地,由于抽象建模的過(guò)程基本上是一種滿(mǎn)足TLV(Type,Length,Value)格式 的一組描述,通過(guò)這組描述生成編程語(yǔ)言可識(shí)別的中間配置文件,即模型文件。因此,如圖3 所示,實(shí)際操作時(shí),步驟S1的抽象建模過(guò)程具體包括以下操作:
      [0048]步驟S101:定義設(shè)備元器件的類(lèi)名稱(chēng),該類(lèi)名稱(chēng)用于在模型文件內(nèi)唯一標(biāo)識(shí)一個(gè) 設(shè)備元器件,并在生成代碼過(guò)程中(即步驟S2中)以此名稱(chēng)做關(guān)鍵字進(jìn)行結(jié)構(gòu)體命名和函數(shù) 命名。
      [0049] 步驟S102:設(shè)置類(lèi)成員屬性值。模型中的屬性賦值通常是該屬性的默認(rèn)值,對(duì)于設(shè) 備元器件固定不變的屬性值,在模型加載時(shí)讀取,可用于業(yè)務(wù)(網(wǎng)絡(luò)操作系統(tǒng)平臺(tái)業(yè)務(wù)、設(shè) 備硬件驅(qū)動(dòng)業(yè)務(wù))查詢(xún);對(duì)于設(shè)備元器件可變化的屬性值可以在系統(tǒng)運(yùn)行中通過(guò)相應(yīng)的設(shè) 置接口函數(shù)進(jìn)行修改。
      [0050] 步驟S103:定義類(lèi)成員的數(shù)據(jù)類(lèi)型名稱(chēng),對(duì)應(yīng)編程語(yǔ)言的數(shù)據(jù)類(lèi)型。
      [0051]步驟S104:設(shè)置類(lèi)成員在內(nèi)存中占用的長(zhǎng)度。
      [0052]步驟S2、自動(dòng)代碼的生成:將設(shè)備硬件模型通過(guò)代碼解釋工具生成相關(guān)自動(dòng)代碼, 自動(dòng)代碼包括與各設(shè)備元器件對(duì)應(yīng)的結(jié)構(gòu)體定義、各結(jié)構(gòu)體向模型數(shù)據(jù)庫(kù)提交消息的接口 (set函數(shù)接口)定義,以及當(dāng)模型數(shù)據(jù)庫(kù)中結(jié)構(gòu)體的實(shí)例發(fā)生變化時(shí)業(yè)務(wù)回調(diào)模型數(shù)據(jù)庫(kù) 的通知回調(diào)接口(notify函數(shù)接口)定義。
      [0053]具體操作時(shí),步驟S2中所述將設(shè)備硬件模型通過(guò)代碼解釋工具生成相關(guān)自動(dòng)代 碼,包括以下操作:代碼解釋工具對(duì)設(shè)備硬件模型文件進(jìn)行一套C語(yǔ)言化的轉(zhuǎn)換,將每個(gè)設(shè) 備元器件的類(lèi)對(duì)應(yīng)一個(gè)結(jié)構(gòu)體名,將設(shè)備元器件的類(lèi)的屬性對(duì)應(yīng)結(jié)構(gòu)體的成員變量。此處, 還是以上述路由器設(shè)備主控板為例,對(duì)該主控板模型進(jìn)行C語(yǔ)言轉(zhuǎn)換后生成的相關(guān)自動(dòng)代 碼如下: struct epu { UINT16tdp; UINT16 12_cache; UINT8 core ; UINT16 frequency ; };
      [0054] struct ethernet UINT16 speed; struct console { UINT32 bit-rate; };
      [0055] 步驟S3、自動(dòng)代碼的編譯與模型的加載:將自動(dòng)代碼拷貝到網(wǎng)絡(luò)操作系統(tǒng)平臺(tái)軟 件的項(xiàng)目工程目錄內(nèi),修改編譯配置使代碼編譯通過(guò);將設(shè)備硬件模型文件放在網(wǎng)絡(luò)操作 系統(tǒng)平臺(tái)軟件指定的資源目錄文件夾內(nèi),網(wǎng)絡(luò)操作系統(tǒng)平臺(tái)軟件在啟動(dòng)時(shí)會(huì)加載設(shè)備硬件 模型文件,并為設(shè)備硬件模型創(chuàng)建一個(gè)模型數(shù)據(jù)庫(kù)。
      [0056]步驟S4、模型的使用:利用自動(dòng)代碼提供的set函數(shù)接口、notify函數(shù)接口,以及創(chuàng) 建的模型數(shù)據(jù)庫(kù),完成各業(yè)務(wù)(網(wǎng)絡(luò)操作系統(tǒng)平臺(tái)業(yè)務(wù)、設(shè)備硬件驅(qū)動(dòng)業(yè)務(wù))對(duì)設(shè)備硬件模 型的使用,實(shí)現(xiàn)以設(shè)備硬件模型為中間橋梁連接網(wǎng)絡(luò)操作系統(tǒng)與硬件驅(qū)動(dòng),從而使得網(wǎng)絡(luò) 操作系統(tǒng)的內(nèi)部開(kāi)發(fā)與設(shè)備硬件驅(qū)動(dòng)的開(kāi)發(fā)相分尚。
      [0057]實(shí)際操作時(shí),如圖4所示,步驟S4具體包括以下操作:
      [0058]步驟S401:當(dāng)有業(yè)務(wù)(網(wǎng)絡(luò)操作系統(tǒng)平臺(tái)業(yè)務(wù)或設(shè)備硬件驅(qū)動(dòng)業(yè)務(wù))修改了自動(dòng)代 碼中的某個(gè)結(jié)構(gòu)體時(shí),通過(guò)調(diào)用該結(jié)構(gòu)體對(duì)應(yīng)的set函數(shù)接口,向模型數(shù)據(jù)庫(kù)發(fā)送修改消 息;可以理解的是,調(diào)用set函數(shù)接口的方法本身是一個(gè)消息發(fā)送的封裝過(guò)程,也就是將業(yè) 務(wù)對(duì)結(jié)構(gòu)體的修改轉(zhuǎn)換為通用的TLV消息格式發(fā)送至模型數(shù)據(jù)庫(kù)。TLV(type + length+ value)消息格式是一種靈活可變的消息打包方式,不要求每次消息報(bào)文要格式相同,其中 type由兩部分組成,分別是前半部的類(lèi)索引和后半部分成員索引構(gòu)成,因此模型數(shù)據(jù)庫(kù)在 接收到tlv消息格式的修改消息后,可以根據(jù)type定位到具體內(nèi)容。
      [0059]步驟S402:模型數(shù)據(jù)庫(kù)在接收到修改消息后,檢查有哪些其他業(yè)務(wù)(除做出修改的 業(yè)務(wù)之外的業(yè)務(wù))與該結(jié)構(gòu)體相關(guān),向相關(guān)的其他業(yè)務(wù)發(fā)送有關(guān)該結(jié)構(gòu)體的變化消息。
      [0060]步驟S403:收到結(jié)構(gòu)體變化消息的其他業(yè)務(wù),通過(guò)noti fy函數(shù)接口回調(diào)模型數(shù)據(jù) 庫(kù)來(lái)接收該結(jié)構(gòu)體的變化。
      [0061]另外,在上述技術(shù)方案的基礎(chǔ)上,考慮到有的設(shè)備元器件在一塊板卡上有多個(gè),因 此,為了對(duì)相同種類(lèi)的設(shè)備元器件進(jìn)行進(jìn)一步區(qū)分,需要在進(jìn)行建模抽象時(shí)通過(guò)添加實(shí)例 屬性(inst)做為關(guān)鍵字對(duì)重復(fù)的設(shè)備元器件進(jìn)行索引標(biāo)識(shí),同樣,在生成相關(guān)自動(dòng)代碼時(shí) 也需要對(duì)添加的實(shí)例屬性進(jìn)行C語(yǔ)言化的轉(zhuǎn)換。
      [0062] 例如,在路由器業(yè)務(wù)板上就存在有多個(gè)ge_interface接口,則對(duì)該業(yè)務(wù)板進(jìn)行建 模抽象時(shí),設(shè)備硬件模型中g(shù)e_interface接口相應(yīng)的內(nèi)容如下: <class name="ge_interface"> <meinber name="inst" value-tvpe=" UI NT 16" len=,'2" iskey="true"/>
      [0063] <rnember name="mtu" value=" 1460" type="UrNT16" 1en=!,2" iskey='!false"/> </class>
      [0064] 生成相關(guān)自動(dòng)代碼時(shí),相關(guān)的代碼內(nèi)容如下: struct ge_interface {:
      [0065] UINT32 inst; UINT16mtu: h
      [0066] 參見(jiàn)圖5所示,本發(fā)明實(shí)施例還提供一種基于上述方法的網(wǎng)絡(luò)操作系統(tǒng)中建立并 使用設(shè)備硬件模型的裝置,該裝置包括模型建立單元、自動(dòng)代碼生成單元、代碼編譯與模型 加載單元、模型使用單元。
      [0067] 模型建立單元用于:對(duì)網(wǎng)絡(luò)操作系統(tǒng)中的設(shè)備硬件進(jìn)行建模抽象,得到設(shè)備硬件 模型。
      [0068]其中,所述模型建立單元包括類(lèi)名稱(chēng)定義子單元、屬性值設(shè)置子單元、數(shù)據(jù)類(lèi)型名 稱(chēng)定義子單元和長(zhǎng)度設(shè)置子單元。所述類(lèi)名稱(chēng)定義子單元用于:定義設(shè)備元器件的類(lèi)名稱(chēng), 該類(lèi)名稱(chēng)用于在模型文件內(nèi)唯一標(biāo)識(shí)一個(gè)設(shè)備元器件,并在生成代碼過(guò)程中以此名稱(chēng)做關(guān) 鍵字進(jìn)行結(jié)構(gòu)體命名和函數(shù)命名;所述屬性值設(shè)置子單元用于:設(shè)置類(lèi)成員屬性值;所述數(shù) 據(jù)類(lèi)型名稱(chēng)定義子單元用于:定義類(lèi)成員的數(shù)據(jù)類(lèi)型名稱(chēng),該名稱(chēng)對(duì)應(yīng)編程語(yǔ)言的數(shù)據(jù)類(lèi) 型;所述長(zhǎng)度設(shè)置子單元用于:設(shè)置類(lèi)成員在內(nèi)存中占用的長(zhǎng)度。
      [0069]自動(dòng)代碼生成單元用于:將設(shè)備硬件模型通過(guò)代碼解釋工具生成相關(guān)自動(dòng)代碼, 該自動(dòng)代碼包括:與各設(shè)備元器件對(duì)應(yīng)的結(jié)構(gòu)體定義、set函數(shù)接口定義,以及notify函數(shù) 接口定義。
      [0070] 其中,所述自動(dòng)代碼生成單元將設(shè)備硬件模型通過(guò)代碼解釋工具生成相關(guān)自動(dòng)代 碼的具體過(guò)程為:自動(dòng)代碼生成單元通過(guò)代碼解釋工具對(duì)設(shè)備硬件模型文件進(jìn)行一套C語(yǔ) 言化的轉(zhuǎn)換,將每個(gè)設(shè)備元器件的類(lèi)對(duì)應(yīng)一個(gè)結(jié)構(gòu)體名,將設(shè)備元器件的類(lèi)的屬性對(duì)應(yīng)結(jié) 構(gòu)體的成員變量。
      [0071] 代碼編譯與模型加載單元用于:將自動(dòng)代碼存儲(chǔ)于網(wǎng)絡(luò)操作系統(tǒng)平臺(tái)軟件內(nèi)并編 譯通過(guò);將設(shè)備硬件模型文件存儲(chǔ)于網(wǎng)絡(luò)操作系統(tǒng)平臺(tái)軟件內(nèi),使網(wǎng)絡(luò)操作系統(tǒng)平臺(tái)軟件 啟動(dòng)時(shí)加載設(shè)備硬件模型文件,并為設(shè)備硬件模型創(chuàng)建一個(gè)模型數(shù)據(jù)庫(kù)。
      [0072] 模型使用單元用于:利用自動(dòng)代碼提供的set函數(shù)接口、notify函數(shù)接口,以及創(chuàng) 建的模型數(shù)據(jù)庫(kù),完成各業(yè)務(wù)(網(wǎng)絡(luò)操作系統(tǒng)平臺(tái)業(yè)務(wù)、設(shè)備硬件驅(qū)動(dòng)業(yè)務(wù))對(duì)設(shè)備硬件模 型的使用。
      [0073] 其中,所述模型使用單元包括修改消息發(fā)送子單元、變化消息發(fā)送子單元和變化 接收子單元。
      [0074] 所述修改消息發(fā)送子單元用于:當(dāng)有業(yè)務(wù)(網(wǎng)絡(luò)操作系統(tǒng)平臺(tái)業(yè)務(wù)或設(shè)備硬件驅(qū) 動(dòng)業(yè)務(wù))修改了自動(dòng)代碼中的某個(gè)結(jié)構(gòu)體時(shí),通過(guò)調(diào)用該結(jié)構(gòu)體對(duì)應(yīng)的set函數(shù)接口,向模 型數(shù)據(jù)庫(kù)發(fā)送修改消息;
      [0075] 所述變化消息發(fā)送子單元用于:在模型數(shù)據(jù)庫(kù)接收到修改消息后,檢查有哪些其 他業(yè)務(wù)與被修改的結(jié)構(gòu)體相關(guān),并向相關(guān)的其他業(yè)務(wù)發(fā)送有關(guān)該結(jié)構(gòu)體的變化消息;
      [0076] 所述變化接收子單元用于:使收到結(jié)構(gòu)體變化消息的其他業(yè)務(wù),通過(guò)notify函數(shù) 接口回調(diào)模型數(shù)據(jù)庫(kù)來(lái)接收被修改的結(jié)構(gòu)體的變化。
      [0077] 本發(fā)明不局限于上述實(shí)施方式,對(duì)于本技術(shù)領(lǐng)域的普通技術(shù)人員來(lái)說(shuō),在不脫離 本發(fā)明原理的前提下,還可以做出若干改進(jìn)和潤(rùn)飾,這些改進(jìn)和潤(rùn)飾也視為本發(fā)明的保護(hù) 范圍之內(nèi)。本說(shuō)明書(shū)中未作詳細(xì)描述的內(nèi)容屬于本領(lǐng)域?qū)I(yè)技術(shù)人員公知的現(xiàn)有技術(shù)。
      【主權(quán)項(xiàng)】
      1. 一種網(wǎng)絡(luò)操作系統(tǒng)中建立并使用設(shè)備硬件模型的方法,其特征在于,包括以下步驟: 步驟SI:對(duì)網(wǎng)絡(luò)操作系統(tǒng)中的設(shè)備硬件進(jìn)行建模抽象,得到設(shè)備硬件模型; 步驟S2:將設(shè)備硬件模型通過(guò)代碼解釋工具生成相關(guān)自動(dòng)代碼,該自動(dòng)代碼包括:與各 設(shè)備元器件對(duì)應(yīng)的結(jié)構(gòu)體定義、set函數(shù)接口定義,以及notify函數(shù)接口定義; 步驟S3:將自動(dòng)代碼存儲(chǔ)于網(wǎng)絡(luò)操作系統(tǒng)平臺(tái)軟件內(nèi)并編譯通過(guò);將設(shè)備硬件模型文 件存儲(chǔ)于網(wǎng)絡(luò)操作系統(tǒng)平臺(tái)軟件內(nèi),網(wǎng)絡(luò)操作系統(tǒng)平臺(tái)軟件在啟動(dòng)時(shí)加載設(shè)備硬件模型文 件,并為設(shè)備硬件模型創(chuàng)建一個(gè)模型數(shù)據(jù)庫(kù); 步驟S4:利用自動(dòng)代碼提供的set函數(shù)接口、notify函數(shù)接口,以及創(chuàng)建的模型數(shù)據(jù)庫(kù), 完成各業(yè)務(wù)對(duì)設(shè)備硬件模型的使用。2. 如權(quán)利要求1所述的網(wǎng)絡(luò)操作系統(tǒng)中建立并使用設(shè)備硬件模型的方法,其特征在于: 所述設(shè)備硬件模型的內(nèi)容包括所有設(shè)備元器件的類(lèi)信息,每個(gè)設(shè)備元器件的類(lèi)信息包含以 下類(lèi)成員內(nèi)容:設(shè)備元器件名稱(chēng)、設(shè)備元器件關(guān)鍵屬性描述、設(shè)備元器件的類(lèi)對(duì)應(yīng)的結(jié)構(gòu)體 成員信息。3. 如權(quán)利要求1所述的網(wǎng)絡(luò)操作系統(tǒng)中建立并使用設(shè)備硬件模型的方法,其特征在于, 步驟Sl具體包括以下操作: 步驟S101:定義設(shè)備元器件的類(lèi)名稱(chēng),該類(lèi)名稱(chēng)用于在模型文件內(nèi)唯一標(biāo)識(shí)一個(gè)設(shè)備 元器件,并在生成代碼過(guò)程中以此名稱(chēng)做關(guān)鍵字進(jìn)行結(jié)構(gòu)體命名和函數(shù)命名; 步驟S102:設(shè)置類(lèi)成員屬性值,該屬性值為默認(rèn)值設(shè)置或者在系統(tǒng)運(yùn)行中通過(guò)相應(yīng)的 設(shè)置接口函數(shù)進(jìn)行修改設(shè)置; 步驟S103:定義類(lèi)成員的數(shù)據(jù)類(lèi)型名稱(chēng),該名稱(chēng)對(duì)應(yīng)編程語(yǔ)言的數(shù)據(jù)類(lèi)型; 步驟S104:設(shè)置類(lèi)成員在內(nèi)存中占用的長(zhǎng)度。4. 如權(quán)利要求1所述的網(wǎng)絡(luò)操作系統(tǒng)中建立并使用設(shè)備硬件模型的方法,其特征在于: 步驟S2中所述將設(shè)備硬件模型通過(guò)代碼解釋工具生成相關(guān)自動(dòng)代碼,包括以下操作:代碼 解釋工具對(duì)設(shè)備硬件模型文件進(jìn)行一套C語(yǔ)言化的轉(zhuǎn)換,將每個(gè)設(shè)備元器件的類(lèi)對(duì)應(yīng)一個(gè) 結(jié)構(gòu)體名,將設(shè)備元器件的類(lèi)的屬性對(duì)應(yīng)結(jié)構(gòu)體的成員變量。5. 如權(quán)利要求1所述的網(wǎng)絡(luò)操作系統(tǒng)中建立并使用設(shè)備硬件模型的方法,其特征在于, 步驟S4具體操作如下: 步驟S401:當(dāng)有業(yè)務(wù)修改了自動(dòng)代碼中的某個(gè)結(jié)構(gòu)體時(shí),通過(guò)調(diào)用該結(jié)構(gòu)體對(duì)應(yīng)的set 函數(shù)接口,向模型數(shù)據(jù)庫(kù)發(fā)送TLV消息格式的修改消息; 步驟S402:模型數(shù)據(jù)庫(kù)在接收到修改消息后,檢查有哪些其他業(yè)務(wù)與該結(jié)構(gòu)體相關(guān),向 相關(guān)的其他業(yè)務(wù)發(fā)送有關(guān)該結(jié)構(gòu)體的變化消息; 步驟S403:收到結(jié)構(gòu)體變化消息的其他業(yè)務(wù),通過(guò)notify函數(shù)接口回調(diào)模型數(shù)據(jù)庫(kù)來(lái) 接收該結(jié)構(gòu)體的變化。6. 如權(quán)利要求1至5中任一項(xiàng)所述的網(wǎng)絡(luò)操作系統(tǒng)中建立并使用設(shè)備硬件模型的方法, 其特征在于:若存在重復(fù)的設(shè)備元器件時(shí),步驟Sl中對(duì)網(wǎng)絡(luò)操作系統(tǒng)中的設(shè)備硬件進(jìn)行建 模抽象時(shí),通過(guò)添加 inst實(shí)例屬性做為關(guān)鍵字,對(duì)重復(fù)的設(shè)備元器件進(jìn)行索引標(biāo)識(shí)。7. -種基于權(quán)利要求1所述方法的網(wǎng)絡(luò)操作系統(tǒng)中建立并使用設(shè)備硬件模型的裝置, 其特征在于:該裝置包括模型建立單元、自動(dòng)代碼生成單元、代碼編譯與模型加載單元、模 型使用單元; 所述模型建立單元用于:對(duì)網(wǎng)絡(luò)操作系統(tǒng)中的設(shè)備硬件進(jìn)行建模抽象,得到設(shè)備硬件 豐旲型; 所述自動(dòng)代碼生成單元用于:將設(shè)備硬件模型通過(guò)代碼解釋工具生成相關(guān)自動(dòng)代碼, 該自動(dòng)代碼包括:與各設(shè)備元器件對(duì)應(yīng)的結(jié)構(gòu)體定義、set函數(shù)接口定義,以及notify函數(shù) 接口定義; 所述代碼編譯與模型加載單元用于:將自動(dòng)代碼存儲(chǔ)于網(wǎng)絡(luò)操作系統(tǒng)平臺(tái)軟件內(nèi)并編 譯通過(guò);將設(shè)備硬件模型文件存儲(chǔ)于網(wǎng)絡(luò)操作系統(tǒng)平臺(tái)軟件內(nèi),使網(wǎng)絡(luò)操作系統(tǒng)平臺(tái)軟件 啟動(dòng)時(shí)加載設(shè)備硬件模型文件,并為設(shè)備硬件模型創(chuàng)建一個(gè)模型數(shù)據(jù)庫(kù); 所述模型使用單元用于:利用自動(dòng)代碼提供的set函數(shù)接口、notify函數(shù)接口,以及創(chuàng) 建的模型數(shù)據(jù)庫(kù),完成各業(yè)務(wù)對(duì)設(shè)備硬件模型的使用。8. 如權(quán)利要求7所述的網(wǎng)絡(luò)操作系統(tǒng)中建立并使用設(shè)備硬件模型的裝置,其特征在于: 所述模型建立單元包括類(lèi)名稱(chēng)定義子單元、屬性值設(shè)置子單元、數(shù)據(jù)類(lèi)型名稱(chēng)定義子單元 和長(zhǎng)度設(shè)置子單兀; 所述類(lèi)名稱(chēng)定義子單元用于:定義設(shè)備元器件的類(lèi)名稱(chēng),該類(lèi)名稱(chēng)用于在模型文件內(nèi) 唯一標(biāo)識(shí)一個(gè)設(shè)備元器件,并在生成代碼過(guò)程中以此名稱(chēng)做關(guān)鍵字進(jìn)行結(jié)構(gòu)體命名和函數(shù) 命名; 所述屬性值設(shè)置子單元用于:設(shè)置類(lèi)成員屬性值; 所述數(shù)據(jù)類(lèi)型名稱(chēng)定義子單元用于:定義類(lèi)成員的數(shù)據(jù)類(lèi)型名稱(chēng),該名稱(chēng)對(duì)應(yīng)編程語(yǔ) 言的數(shù)據(jù)類(lèi)型; 所述長(zhǎng)度設(shè)置子單元用于:設(shè)置類(lèi)成員在內(nèi)存中占用的長(zhǎng)度。9. 如權(quán)利要求7所述的網(wǎng)絡(luò)操作系統(tǒng)中建立并使用設(shè)備硬件模型的裝置,其特征在于: 所述自動(dòng)代碼生成單元將設(shè)備硬件模型通過(guò)代碼解釋工具生成相關(guān)自動(dòng)代碼的具體過(guò)程 為:自動(dòng)代碼生成單元通過(guò)代碼解釋工具對(duì)設(shè)備硬件模型文件進(jìn)行一套C語(yǔ)言化的轉(zhuǎn)換,將 每個(gè)設(shè)備元器件的類(lèi)對(duì)應(yīng)一個(gè)結(jié)構(gòu)體名,將設(shè)備元器件的類(lèi)的屬性對(duì)應(yīng)結(jié)構(gòu)體的成員變 量。10. 如權(quán)利要求7所述的網(wǎng)絡(luò)操作系統(tǒng)中建立并使用設(shè)備硬件模型的裝置,其特征在 于:所述模型使用單元包括修改消息發(fā)送子單元、變化消息發(fā)送子單元和變化接收子單元; 所述修改消息發(fā)送子單元用于:當(dāng)有業(yè)務(wù)修改了自動(dòng)代碼中的某個(gè)結(jié)構(gòu)體時(shí),通過(guò)調(diào) 用該結(jié)構(gòu)體對(duì)應(yīng)的set函數(shù)接口,向模型數(shù)據(jù)庫(kù)發(fā)送TLV消息格式的修改消息; 所述變化消息發(fā)送子單元用于:在模型數(shù)據(jù)庫(kù)接收到修改消息后,檢查有哪些其他業(yè) 務(wù)與被修改的結(jié)構(gòu)體相關(guān),并向相關(guān)的其他業(yè)務(wù)發(fā)送有關(guān)該結(jié)構(gòu)體的變化消息; 所述變化接收子單元用于:使收到結(jié)構(gòu)體變化消息的其他業(yè)務(wù),通過(guò)notify函數(shù)接口 回調(diào)模型數(shù)據(jù)庫(kù)來(lái)接收被修改的結(jié)構(gòu)體的變化。
      【文檔編號(hào)】G06F9/44GK105930154SQ201610244354
      【公開(kāi)日】2016年9月7日
      【申請(qǐng)日】2016年4月19日
      【發(fā)明人】宋??? 蘭光華
      【申請(qǐng)人】烽火通信科技股份有限公司
      網(wǎng)友詢(xún)問(wèn)留言 已有0條留言
      • 還沒(méi)有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
      1