本發(fā)明涉及嵌入式設(shè)備領(lǐng)域,具體涉及一種動(dòng)態(tài)適配外圍設(shè)備的系統(tǒng)和一種動(dòng)態(tài)適配外圍設(shè)備的方法。
背景技術(shù):
相較于其它可編程邏輯單元,soc(systemonchip,系統(tǒng)級(jí)芯片)類fpga(field-programmablegatearray,現(xiàn)場(chǎng)可編程邏輯門陣列)具有更高的集成度、更低的功耗、更小的電路尺寸等優(yōu)勢(shì),因而被大多數(shù)開發(fā)人員所使用。同時(shí),為了充分發(fā)揮fpga的靈活性,許多fpga的廠商已開始研發(fā)和銷售集成了硬核處理器的fpga器件,并為之提供系統(tǒng)方案,在此基礎(chǔ)上設(shè)計(jì)的扣板產(chǎn)品,可動(dòng)態(tài)管理外設(shè)資源,更好的對(duì)核心硬件電路進(jìn)行復(fù)用。
通過替換邏輯器件的可執(zhí)行文件,即可使上述fpga器件支持不同的應(yīng)用場(chǎng)景,從而減少硬件和核心代碼的維護(hù)成本,但是,若采用當(dāng)前主流的linux操作系統(tǒng)下對(duì)外設(shè)進(jìn)行描述的方案,如設(shè)備樹情況下,由于隨著外設(shè)的變化,設(shè)備樹的描述文件也必須跟隨著進(jìn)行相應(yīng)替換,以便于與外設(shè)適配,導(dǎo)致上層的操作系統(tǒng)必須隨著設(shè)備樹文件的變化而重新編譯,致使操作系統(tǒng)難以復(fù)用。
技術(shù)實(shí)現(xiàn)要素:
針對(duì)現(xiàn)有技術(shù)中存在的缺陷,本發(fā)明的目的在于提供一種動(dòng)態(tài)適配外圍設(shè)備的系統(tǒng)和一種動(dòng)態(tài)適配外圍設(shè)備的方法,有效提高操作系統(tǒng)的利用率。
為達(dá)到以上目的,本發(fā)明采取的技術(shù)方案是,包括:
初始化模塊,其用于初始化硬件設(shè)備,并加載設(shè)備樹和linux內(nèi)核到內(nèi)存;
資源配置模塊,其用于通過fpga模擬外設(shè)得到外設(shè)的資源配置;
擴(kuò)展模塊,其用于根據(jù)外設(shè)的資源配置信息,對(duì)加載到內(nèi)存中的設(shè)備樹節(jié)點(diǎn)進(jìn)行相應(yīng)的添加、刪除或替換操作;
其中,所述設(shè)備樹用于根據(jù)外設(shè)的資源配置進(jìn)行外設(shè)邏輯的描述,所述linux內(nèi)核用于根據(jù)設(shè)備樹的描述進(jìn)行外設(shè)的驅(qū)動(dòng)。
在上述技術(shù)方案的基礎(chǔ)上,所述擴(kuò)展模塊中的執(zhí)行代碼由uboot代碼修改后生成,所述執(zhí)行代碼用于對(duì)設(shè)備樹節(jié)點(diǎn)進(jìn)行添加、刪除或替換操作。
在上述技術(shù)方案的基礎(chǔ)上,所述設(shè)備樹由uboot加載至內(nèi)存中,并由uboot將設(shè)備樹傳遞給已加載到內(nèi)存中的linux內(nèi)核。
在上述技術(shù)方案的基礎(chǔ)上,所述初始化模塊用于對(duì)硬件設(shè)備進(jìn)行初始化及上電操作,所述硬件設(shè)備包括內(nèi)存、調(diào)試串口、外部存儲(chǔ)器以及外設(shè)的硬核處理器。
本發(fā)明還提供一種動(dòng)態(tài)適配外圍設(shè)備的方法,包括:
s1:對(duì)硬件設(shè)備進(jìn)行上電并初始化;
s2:加載一fpga用以模擬外設(shè),得到外設(shè)的資源配置,并標(biāo)記出fpga版本標(biāo)識(shí),所述fpga版本標(biāo)識(shí)用于表示設(shè)備樹中需進(jìn)行修改的節(jié)點(diǎn);
s3:加載設(shè)備樹和linux內(nèi)核至內(nèi)存中;
s4:根據(jù)標(biāo)記出的fpga版本標(biāo)識(shí),對(duì)設(shè)備樹節(jié)點(diǎn)進(jìn)行添加、刪除或替換操作;
s5:完成linux系統(tǒng)的啟動(dòng)。
在上述技術(shù)方案的基礎(chǔ)上,所述硬件設(shè)備包括內(nèi)存、調(diào)試串口、外部存儲(chǔ)器以及外設(shè)的硬核處理器。
在上述技術(shù)方案的基礎(chǔ)上,所述設(shè)備樹用于根據(jù)外設(shè)的資源配置進(jìn)行外設(shè)邏輯的描述。
在上述技術(shù)方案的基礎(chǔ)上,所述s5具體為:linux內(nèi)核根據(jù)設(shè)備樹的描述驅(qū)動(dòng)外設(shè)。
與現(xiàn)有技術(shù)相比,本發(fā)明的優(yōu)點(diǎn)在于:當(dāng)接入不同的外設(shè)時(shí),將設(shè)備樹以及l(fā)inux內(nèi)核加載到內(nèi)存中,進(jìn)行初始化,通過一fpga模擬當(dāng)前所接入的外設(shè),得到外設(shè)的資源配置,然后對(duì)加載到內(nèi)存中的設(shè)備樹進(jìn)行相應(yīng)修改,以便于加載到內(nèi)存中的linux內(nèi)核對(duì)當(dāng)前所接外設(shè)進(jìn)行驅(qū)動(dòng),而原始的設(shè)備樹未做修改,即設(shè)備樹原始的描述文件未做修改,因此linux操作系統(tǒng)無需隨著外設(shè)的改變而重新編譯,從而達(dá)到操作系統(tǒng)復(fù)用的目的。
附圖說明
圖1為本發(fā)明一種動(dòng)態(tài)適配外圍設(shè)備的方法的流程圖。
具體實(shí)施方式
以下結(jié)合附圖對(duì)本發(fā)明作進(jìn)一步詳細(xì)說明。
本發(fā)明提供一種動(dòng)態(tài)適配外圍設(shè)備的系統(tǒng),該系統(tǒng)基于linux操作系統(tǒng),動(dòng)態(tài)適配的外圍設(shè)備為采用fpga邏輯創(chuàng)建的外設(shè),即soc類fpga中采用邏輯動(dòng)態(tài)創(chuàng)建的外設(shè)或其它共cpu(centralprocessingunit,中央處理器)子系統(tǒng)但使用環(huán)境有所差異的外設(shè)。優(yōu)選的,本發(fā)明的動(dòng)態(tài)適配外圍設(shè)備的系統(tǒng)在基于cyclonev系列設(shè)計(jì)出的扣板平臺(tái)上實(shí)施,使用linux操作系統(tǒng),適用于扣板應(yīng)用于不同底板的場(chǎng)景。
本動(dòng)態(tài)適配外圍設(shè)備的系統(tǒng)包括初始化模塊、資源配置模塊和擴(kuò)展模塊,初始化模塊用于初始化硬件設(shè)備,并加載設(shè)備樹、linux內(nèi)核到內(nèi)存;資源配置模塊用于得到外設(shè)的資源配置,外設(shè)的資源配置可以通過多種方式的得到,本實(shí)施例中,通過一fpga來模擬外設(shè),得到外設(shè)的資源配置,因外設(shè)為基于fpga設(shè)計(jì),因此可以通過另一fpga進(jìn)行外設(shè)邏輯文件的模擬,從而得到外設(shè)的資源配置;擴(kuò)展模塊用于根據(jù)外設(shè)的資源配置信息,對(duì)加載到內(nèi)存中的設(shè)備樹節(jié)點(diǎn)進(jìn)行相應(yīng)的添加、刪除或替換操作,從而達(dá)到動(dòng)態(tài)適配soc類fpga外設(shè)的目的。
設(shè)備樹用于根據(jù)外設(shè)的資源配置進(jìn)行外設(shè)邏輯的描述,linux內(nèi)核用于根據(jù)設(shè)備樹的描述進(jìn)行外設(shè)的驅(qū)動(dòng),根據(jù)當(dāng)前接入的外設(shè)的資源配置,對(duì)系統(tǒng)中的設(shè)備樹進(jìn)行適應(yīng)性修改,從而linux內(nèi)核能夠根據(jù)修改后的設(shè)備樹驅(qū)動(dòng)外設(shè),達(dá)到動(dòng)態(tài)設(shè)備不同外設(shè)的目的。設(shè)備樹由uboot加載至內(nèi)存中,并由uboot將設(shè)備樹傳遞給已加載到內(nèi)存中的linux內(nèi)核。
擴(kuò)展模塊中的執(zhí)行代碼由uboot代碼修改后生成,執(zhí)行代碼用于對(duì)設(shè)備樹節(jié)點(diǎn)進(jìn)行添加、刪除或替換操作,擴(kuò)展模塊依賴于uboot,但擴(kuò)展模塊為獨(dú)立的模塊,擴(kuò)展模塊能夠單獨(dú)進(jìn)行重遍以改變功能。初始化模塊通過uboot加載設(shè)備樹至內(nèi)存中,并將設(shè)備樹傳遞給linux內(nèi)核。uboot,全稱universalbootloader,用于系統(tǒng)引導(dǎo),linux操作系統(tǒng)通常使用uboot進(jìn)行系統(tǒng)的引導(dǎo)。擴(kuò)展模塊用于執(zhí)行除系統(tǒng)啟動(dòng)外的其它功能。
初始化模塊還用于對(duì)硬件設(shè)備進(jìn)行初始化及上電操作,硬件設(shè)備包括內(nèi)存、調(diào)試串口、外部存儲(chǔ)器以及外設(shè)的硬核處理器。
當(dāng)接入不同的外設(shè)時(shí),將設(shè)備樹以及l(fā)inux內(nèi)核加載到內(nèi)存中,進(jìn)行初始化,通過一fpga模擬當(dāng)前所接入的外設(shè),得到外設(shè)的資源配置,然后對(duì)加載到內(nèi)存中的設(shè)備樹進(jìn)行相應(yīng)修改,以便于加載到內(nèi)存中的linux內(nèi)核對(duì)當(dāng)前所接外設(shè)進(jìn)行驅(qū)動(dòng),而原始的設(shè)備樹未做修改,即設(shè)備樹原始的描述文件未做修改,因此linux操作系統(tǒng)無需隨著外設(shè)的改變而重新編譯,從而達(dá)到操作系統(tǒng)復(fù)用的目的。
參見圖1所示,本發(fā)明還提供一種基于上述系統(tǒng)的動(dòng)態(tài)適配外圍設(shè)備的方法,該方法包括以下步驟:
s1:對(duì)硬件設(shè)備上電并初始化,硬件設(shè)備包括內(nèi)存、調(diào)試串口、外部存儲(chǔ)器以及外設(shè)的硬核處理器等需要使用到的基礎(chǔ)設(shè)備。
s2:加載一fpga用以模擬外設(shè),得到外設(shè)的資源配置,并標(biāo)記出fpga版本標(biāo)識(shí),fpga版本標(biāo)識(shí)用于表示設(shè)備樹中需進(jìn)行修改的節(jié)點(diǎn),因外設(shè)為fpga邏輯的外設(shè),基于可編程的邏輯器件,因此可以用另一fpga對(duì)接入的外設(shè)進(jìn)行模擬,得到所接入外設(shè)內(nèi)邏輯代碼等資源配置,便于后續(xù)根據(jù)設(shè)備樹與外設(shè)資源配置之間的映射關(guān)系,對(duì)設(shè)備樹進(jìn)行適應(yīng)性修改,根據(jù)外設(shè)的資源配置進(jìn)行外設(shè)邏輯的描述。
s3:加載設(shè)備樹和linux內(nèi)核至內(nèi)存中。
s4:根據(jù)標(biāo)記出的fpga版本標(biāo)識(shí),對(duì)設(shè)備樹節(jié)點(diǎn)進(jìn)行添加、刪除或替換操作。若當(dāng)前接入的外設(shè)與之前接入的外設(shè)相同,則fpga版本標(biāo)識(shí)為空,即無需對(duì)設(shè)備樹的節(jié)點(diǎn)進(jìn)行修改操作。
s5:完成linux系統(tǒng)的啟動(dòng),從而能夠?qū)ν庠O(shè)進(jìn)行驅(qū)動(dòng)并操作。
通過一fpga模擬所接入的外設(shè),得到外設(shè)的資源配置,從而對(duì)linux操作系統(tǒng)中加載到內(nèi)存中的設(shè)備樹進(jìn)行適應(yīng)性修改,使得加載到內(nèi)存中的linux內(nèi)核能夠驅(qū)動(dòng)外設(shè),從而適配不同應(yīng)用場(chǎng)景下所接入的不同外設(shè),原始的設(shè)備樹無需修改,即原始的設(shè)備樹描述文件無需休息,當(dāng)接入下一外設(shè)時(shí),再次加載設(shè)備樹至內(nèi)存中并初始化,然后進(jìn)行相應(yīng)修改即可,即原始的設(shè)備樹始終是無需修改的,因而能夠僅通過替換與外設(shè)相匹配的fpga,來修改內(nèi)存中的設(shè)備樹,即可適配當(dāng)前接入的采用fpga邏輯創(chuàng)建的外設(shè),提高了操作系統(tǒng)的復(fù)用率,降低fpga產(chǎn)品核心代碼的維護(hù)成本。
本發(fā)明不局限于上述實(shí)施方式,對(duì)于本技術(shù)領(lǐng)域的普通技術(shù)人員來說,在不脫離本發(fā)明原理的前提下,還可以做出若干改進(jìn)和潤飾,這些改進(jìn)和潤飾也視為本發(fā)明的保護(hù)范圍之內(nèi)。本說明書中未作詳細(xì)描述的內(nèi)容屬于本領(lǐng)域?qū)I(yè)技術(shù)人員公知的現(xiàn)有技術(shù)。