專利名稱:一種uefi內(nèi)核執(zhí)行外圍設(shè)備驅(qū)動(dòng)程序的方法及裝置的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及通信技術(shù)領(lǐng)域,尤其涉及一種UEFI內(nèi)核執(zhí)行外圍設(shè)備驅(qū)動(dòng)程序的方法及裝置。
背景技術(shù):
計(jì)算機(jī)系統(tǒng)的啟動(dòng)流程分為5個(gè)階段,依次為預(yù)啟動(dòng)(PEI,Pre-EFIInitialization)、驅(qū)動(dòng)運(yùn)行環(huán)境(DXE, Driver Execution Environment)、Boot 設(shè)備選擇(BDS, Boot Device Select)、操作系統(tǒng)(OS, Operating System) Boot 和 OS 運(yùn)行環(huán)境 Runtime。DXE 階段是統(tǒng)一的可擴(kuò)展固件接 口(UEFI, Unified Extensible FirmwareInterface)驅(qū)動(dòng)程序的運(yùn)行環(huán)境,也是UEFI固件運(yùn)行的主要階段。在本階段開始時(shí),UEFI內(nèi)核的Driver Dispatcher將枚舉所有外圍設(shè)備的驅(qū)動(dòng)程序,并判斷其相互依賴關(guān)系,依次載入系統(tǒng)。所有UEFI驅(qū)動(dòng)成功加載后,UEFI固件即完成啟動(dòng)準(zhǔn)備工作,可繼續(xù)運(yùn)行其他UEFI應(yīng)用程序或開始引導(dǎo)操作系統(tǒng)。由于UEFI內(nèi)核采用枚舉查找方式啟動(dòng)所有外圍設(shè)備的驅(qū)動(dòng)程序,運(yùn)行速度較慢,最終影響計(jì)算機(jī)系統(tǒng)的啟動(dòng)速度。
發(fā)明內(nèi)容
本發(fā)明實(shí)施例提供了一種UEFI內(nèi)核執(zhí)行外圍設(shè)備驅(qū)動(dòng)程序的方法及裝置,能夠快速查找到需要的驅(qū)動(dòng)程序,提高計(jì)算機(jī)系統(tǒng)啟動(dòng)速度。本發(fā)明實(shí)施例提供的一種UEFI內(nèi)核執(zhí)行外圍設(shè)備驅(qū)動(dòng)程序的方法包括:根據(jù)預(yù)置分配規(guī)則為待分配驅(qū)動(dòng)程序分配入口地址;根據(jù)入口地址,將待分配驅(qū)動(dòng)程序存入對(duì)應(yīng)入口地址表中;當(dāng)需要加載驅(qū)動(dòng)程序時(shí),根據(jù)預(yù)置的計(jì)算規(guī)則得到目的驅(qū)動(dòng)程序的入口地址;根據(jù)入口地址,查找目的驅(qū)動(dòng)程序??蛇x的,根據(jù)預(yù)置分配規(guī)則為待分配驅(qū)動(dòng)程序分配入口地址包括:獲取某一外圍設(shè)備的至少兩個(gè)設(shè)備信息數(shù)據(jù);對(duì)至少兩個(gè)設(shè)備信息數(shù)據(jù)進(jìn)行處理得到邏輯值;將邏輯值作為入口地址分配給該驅(qū)動(dòng)程序??蛇x的,對(duì)至少兩個(gè)設(shè)備信息數(shù)據(jù)進(jìn)行處理得到邏輯值包括:對(duì)至少兩個(gè)設(shè)備信息數(shù)據(jù)進(jìn)行疊加運(yùn)算,得到運(yùn)算結(jié)果;對(duì)上述運(yùn)算結(jié)果進(jìn)行除余運(yùn)算,得到除余運(yùn)算結(jié)果作為邏輯值??蛇x的,將邏輯值作為入口地址分配給該驅(qū)動(dòng)程序步驟之后還包括:
根據(jù)入口地址,將待分配驅(qū)動(dòng)程序存入對(duì)應(yīng)入口包括:
判斷邏輯值是否重復(fù);
若第一邏輯值與第二邏輯值重復(fù),則在第一邏輯值對(duì)應(yīng)的入口地址表末端建立溢出表;
將第二邏輯值對(duì)應(yīng)的驅(qū)動(dòng)程序存放在所述溢出表中。
可選的,
當(dāng)需要加載驅(qū)動(dòng)程序時(shí),根據(jù)預(yù)置計(jì)算規(guī)則查找目標(biāo)驅(qū)動(dòng)程序包括:
獲取待驅(qū)動(dòng)設(shè)備的至少兩個(gè)設(shè)備信息數(shù)據(jù);
對(duì)至少兩個(gè)設(shè)備信息數(shù)據(jù)進(jìn)行處理得到邏輯值;
將邏輯值作為入口地址查找目標(biāo)驅(qū)動(dòng)程序。
可選的,
對(duì)至少兩個(gè)設(shè)備信息數(shù)據(jù)進(jìn)行處理得到邏輯值包括:
對(duì)至少兩個(gè)設(shè)備信息數(shù)據(jù)進(jìn)行疊加運(yùn)算,得到運(yùn)算結(jié)果;
對(duì)運(yùn)算結(jié)果進(jìn)行除余運(yùn)算,得到除余運(yùn)算結(jié)果作為邏輯值。
可選的,
根據(jù)入口地址,查找目的驅(qū)動(dòng)程序包括;
若未查找到所述目標(biāo)驅(qū)動(dòng)程序,則進(jìn)入所述入口末端的溢出表中進(jìn)行查找;
若在所述溢出表中未查到所述目標(biāo)驅(qū)動(dòng)程序,則進(jìn)行異常處理。
可選的,
設(shè)備信息數(shù)據(jù)包括設(shè)備廠商ID、設(shè)備ID和/或設(shè)備系列號(hào)。
本發(fā)明實(shí)施例還提供了一種UEFI內(nèi)核執(zhí)行外圍設(shè)備驅(qū)動(dòng)程序的裝置,具體包括:
分配單元,用于根據(jù)預(yù)置分配規(guī)則為待分配驅(qū)動(dòng)程序分配入口地址;
存入單元,用于根據(jù)入口地址,將待分配驅(qū)動(dòng)程序存入對(duì)應(yīng)入口地址表中;
計(jì)算單元,用于當(dāng)需要加載驅(qū)動(dòng)程序時(shí),根據(jù)預(yù)置的計(jì)算規(guī)則得到目的驅(qū)動(dòng)程序的入口地址;
查找單元,用于根據(jù)入口地址,查找目的驅(qū)動(dòng)程序。
可選的,
計(jì)算單元包括:
第一獲取單元,用于獲取某一外圍設(shè)備的至少兩個(gè)設(shè)備信息數(shù)據(jù);
第一疊加運(yùn)算子單元,用于對(duì)至少兩個(gè)設(shè)備信息數(shù)據(jù)進(jìn)行疊加運(yùn)算,得到運(yùn)算結(jié)果;
第一除余運(yùn)算子單元,用于對(duì)運(yùn)算結(jié)果進(jìn)行除余運(yùn)算,得到除余運(yùn)算結(jié)果作為邏輯值;
查找單元包括:
第二獲取單元,用于獲取某一外圍設(shè)備的至少兩個(gè)設(shè)備信息數(shù)據(jù);
第二疊加運(yùn)算子單元,用于對(duì)至少兩個(gè)設(shè)備信息數(shù)據(jù)進(jìn)行疊加運(yùn)算,得到運(yùn)算結(jié)果;
第二除余運(yùn)算子單元,用于對(duì)運(yùn)算結(jié)果進(jìn)行除余運(yùn)算,得到除余運(yùn)算結(jié)果作為邏輯值。
從以上技術(shù)方案可以看出,本發(fā)明實(shí)施例具有以下優(yōu)點(diǎn):
本發(fā)明方法根據(jù)預(yù)置分配規(guī)則為待分配驅(qū)動(dòng)程序分配入口地址;接著根據(jù)入口地址,將待分配驅(qū)動(dòng)程序存入對(duì)應(yīng)入口地址表中;當(dāng)需要加載驅(qū)動(dòng)程序時(shí),根據(jù)預(yù)置計(jì)算規(guī)則查找目標(biāo)驅(qū)動(dòng)程序。與現(xiàn)有技術(shù)相比,不需要加載所有的驅(qū)動(dòng)程序。由于本發(fā)明根據(jù)預(yù)置的分配規(guī)則為各驅(qū)動(dòng)程序分配不同的入口地址,當(dāng)需要某一驅(qū)動(dòng)程序時(shí),只需要按照預(yù)定的查找規(guī)則在對(duì)應(yīng)的入口中提取目的驅(qū)動(dòng)程序即可,從而快速查找到需要的驅(qū)動(dòng)程序,提高計(jì)算機(jī)系統(tǒng)啟動(dòng)速度。
圖1為本發(fā)明實(shí)施例提供的一種UEFI內(nèi)核執(zhí)行外圍設(shè)備驅(qū)動(dòng)程序的方法的一個(gè)實(shí)施例流程圖2為本發(fā)明實(shí)施例提供的一種UEFI內(nèi)核執(zhí)行外圍設(shè)備驅(qū)動(dòng)程序的方法的另一個(gè)實(shí)施例流程圖3為本發(fā)明實(shí)施例提供的一種UEFI內(nèi)核執(zhí)行外圍設(shè)備驅(qū)動(dòng)程序的裝置實(shí)施例的結(jié)構(gòu)示意圖。
具體實(shí)施方式
本發(fā)明實(shí)施例提供了一種UEFI內(nèi)核執(zhí)行外圍設(shè)備驅(qū)動(dòng)程序的方法及裝置,能夠快速查找到需要的驅(qū)動(dòng)程序,提高計(jì)算機(jī)系統(tǒng)啟動(dòng)速度。
請(qǐng)參閱圖1,本發(fā)明實(shí)施例提供的一種UEFI內(nèi)核執(zhí)行外圍設(shè)備驅(qū)動(dòng)程序的方法的一個(gè)實(shí)施例包括:
101、根據(jù)預(yù)置分配規(guī)則為待分配驅(qū)動(dòng)程序分配入口地址;
在本實(shí)施例中,UEFI內(nèi)核根據(jù)預(yù)置分配規(guī)則,給每一個(gè)驅(qū)動(dòng)設(shè)備對(duì)應(yīng)的驅(qū)動(dòng)程序都分配唯一入口地址。
102、根據(jù)入口地址,將待分配驅(qū)動(dòng)程序存入對(duì)應(yīng)入口地址表中;
在本實(shí)施例中,UEFI內(nèi)核根據(jù)步驟101分配的結(jié)果,將各個(gè)待分配驅(qū)動(dòng)程序存進(jìn)對(duì)應(yīng)的入口地址表中。
103、當(dāng)需要加載驅(qū)動(dòng)程序時(shí),根據(jù)預(yù)置的計(jì)算規(guī)則得到目的驅(qū)動(dòng)程序的入口地址;
在本實(shí)施例中,當(dāng)需要加載驅(qū)動(dòng)程序時(shí),根據(jù)預(yù)置的計(jì)算規(guī)則得到目的驅(qū)動(dòng)程序的入口地址。
104、根據(jù)入口地址,查找目的驅(qū)動(dòng)程序。
本實(shí)施例中,UEFI內(nèi)核根據(jù)預(yù)置分配規(guī)則為待分配驅(qū)動(dòng)程序分配入口地址;接著根據(jù)入口地址,將待分配驅(qū)動(dòng)程序存入對(duì)應(yīng)入口地址表中;當(dāng)需要加載驅(qū)動(dòng)程序時(shí),根據(jù)預(yù)置計(jì)算規(guī)則查找目標(biāo)驅(qū)動(dòng)程序。與現(xiàn)有技術(shù)相比,不需要加載所有的驅(qū)動(dòng)程序。由于本發(fā)明根據(jù)預(yù)置的分配規(guī)則為各驅(qū)動(dòng)程序分配不同的入口地址,當(dāng)需要加載某一驅(qū)動(dòng)程序時(shí),只需要按照預(yù)定的計(jì)算規(guī)則計(jì)算出目標(biāo)驅(qū)動(dòng)程序所在的入口地址,在對(duì)應(yīng)的入口中提取目的驅(qū)動(dòng)程序即可,從而快速查找到需要的驅(qū)動(dòng)程序,提高計(jì)算機(jī)系統(tǒng)啟動(dòng)速度。
上面對(duì)本發(fā)明實(shí)施例提供的一種UEFI內(nèi)核執(zhí)行外圍設(shè)備驅(qū)動(dòng)程序的方法一個(gè)實(shí)施例進(jìn)行了說明,下面請(qǐng)參閱圖2,本發(fā)明實(shí)施例提供的一種UEFI內(nèi)核執(zhí)行外圍設(shè)備驅(qū)動(dòng)程序的方法另一個(gè)實(shí)施例包括:201、獲取某一外圍設(shè)備的至少兩個(gè)設(shè)備信息數(shù)據(jù);在本實(shí)施例中,UEFI內(nèi)核獲取某一外圍設(shè)備的兩個(gè)以上的設(shè)備信息,其中設(shè)備信息數(shù)據(jù)可以包括設(shè)備廠商ID、設(shè)備ID和/或設(shè)備系列號(hào)。202、對(duì)至少兩個(gè)設(shè)備信息數(shù)據(jù)進(jìn)行疊加運(yùn)算,得到運(yùn)算結(jié)果;在本實(shí)施例中,例如某設(shè)備廠商ID和產(chǎn)品ID分別是0x3923和0X12C0,產(chǎn)品序列號(hào)為 2306020E。首先將設(shè)備廠商ID、設(shè)備產(chǎn)品ID和序列號(hào)進(jìn)行疊加運(yùn)算,考慮到設(shè)備廠商ID和產(chǎn)品ID均為4位十六進(jìn)制數(shù)字,所以選用產(chǎn)品序列號(hào)其后4位十六進(jìn)制數(shù)字來進(jìn)行運(yùn)算:3923+12C0+020E=4DFl。203、對(duì)上述運(yùn)算結(jié)果進(jìn)行除余運(yùn)算,得到除余運(yùn)算結(jié)果作為邏輯值;在本實(shí)施例中,對(duì)步驟202得到的結(jié)果進(jìn)行除余運(yùn)算:需要說明的是,應(yīng)用散列函數(shù):f (key)=mod (key,m)其目的是將分布不均勻的關(guān)鍵字聚集到一定范圍的存儲(chǔ)空間中,m—般取素?cái)?shù)。假設(shè)m=97,則:f (4DF1) =mod (4DF1,97) =68 204、將邏輯值作為入口地址分配給該驅(qū)動(dòng)程序;在本實(shí)施中,步驟203得到的邏輯值為68,那么該設(shè)備的驅(qū)動(dòng)程序入口地址可以存放在位置號(hào)為68的入口地址表中。205、判斷邏輯值是否重復(fù);在本實(shí)施例中,若第一邏輯值與第二邏輯值重復(fù),那么執(zhí)行步驟206,否則執(zhí)行步驟 208。206、若第一邏輯值與第二邏輯值重復(fù),則在第一邏輯值對(duì)應(yīng)的入口建立溢出表;207、將第二邏輯值對(duì)應(yīng)的驅(qū)動(dòng)程序存放在所述溢出表中;208、根據(jù)入口地址,將待分配驅(qū)動(dòng)程序存入對(duì)應(yīng)入口地址表中;在本實(shí)施例中,UEFI內(nèi)核根據(jù)步驟101分配的結(jié)果,將各個(gè)待分配驅(qū)動(dòng)程序存進(jìn)對(duì)應(yīng)的入口地址表中。209、當(dāng)需要加載驅(qū)動(dòng)程序時(shí),獲取待驅(qū)動(dòng)設(shè)備的至少兩個(gè)設(shè)備信息數(shù)據(jù);210、對(duì)至少兩個(gè)設(shè)備信息數(shù)據(jù)進(jìn)行疊加運(yùn)算,得到運(yùn)算結(jié)果;211、對(duì)上述運(yùn)算結(jié)果進(jìn)行除余運(yùn)算,得到除余運(yùn)算結(jié)果作為邏輯值;步驟209和步驟210與步驟202和203方法完全相同,在此不做贅述。212、將邏輯值作為入口地址查找目標(biāo)驅(qū)動(dòng)程序;在本實(shí)施例中,按照步驟210得到的入口地址,可以馬上找到目標(biāo)驅(qū)動(dòng)程序。213、若未查找到目標(biāo)驅(qū)動(dòng)程序,則進(jìn)入該入口的溢出表中進(jìn)行查找;在本實(shí)施例中,由于存在重復(fù)的邏輯值,所以可能在入口中無法查到所有的驅(qū)動(dòng)程序,若未查找到目標(biāo)驅(qū)動(dòng)程序,則進(jìn)入該入口的溢出表中進(jìn)行查找。214、若在溢出表中未查到目標(biāo)驅(qū)動(dòng)程序,則進(jìn)行異常處理。
在本實(shí)施例中,上述異常處理可以由UEFI內(nèi)核發(fā)出錯(cuò)誤提示,或提示未找到可用驅(qū)動(dòng)程序,在此不作具體限定。本實(shí)施例中,UEFI內(nèi)核首先獲取某一外圍設(shè)備的至少兩個(gè)設(shè)備信息數(shù)據(jù),然后對(duì)至少兩個(gè)設(shè)備信息數(shù)據(jù)進(jìn)行疊加運(yùn)算,將運(yùn)算結(jié)果進(jìn)行除余運(yùn)算,得到除余運(yùn)算結(jié)果作為邏輯值;將邏輯值作為入口地址分配給該驅(qū)動(dòng)程序;判斷邏輯值是否重復(fù);若第一邏輯值與第二邏輯值重復(fù),則在第一邏輯值對(duì)應(yīng)的入口建立溢出表;將第二邏輯值對(duì)應(yīng)的驅(qū)動(dòng)程序存放在所述溢出表中。將兩個(gè)設(shè)備信息數(shù)據(jù)順次進(jìn)行疊加處理和除余處理,得到邏輯值,由于采用組合散列的方法大大降低入口地址沖突的概率;即使出現(xiàn)邏輯值重復(fù)的情況也可以新建溢出表,將重復(fù)的邏輯值對(duì)應(yīng)的驅(qū)動(dòng)程序儲(chǔ)存在溢出表中。當(dāng)需要加載驅(qū)動(dòng)程序時(shí),UEFI內(nèi)核獲取待驅(qū)動(dòng)設(shè)備的至少兩個(gè)設(shè)備信息數(shù)據(jù);對(duì)至少兩個(gè)設(shè)備信息數(shù)據(jù)進(jìn)行疊加運(yùn)算,對(duì)上述運(yùn)算結(jié)果進(jìn)行除余運(yùn)算,得到除余運(yùn)算結(jié)果作為邏輯值;將邏輯值作為入口地址查找目標(biāo)驅(qū)動(dòng)程序。若未查找到目標(biāo)驅(qū)動(dòng)程序,則進(jìn)入該入口的溢出表中進(jìn)行查找;若在溢出表中未查到目標(biāo)驅(qū)動(dòng)程序,則進(jìn)行異常處理。當(dāng)需要加載驅(qū)動(dòng)程序時(shí),只需獲取該外圍設(shè)備的至少兩個(gè)設(shè)備信息數(shù)據(jù),然后對(duì)至少兩個(gè)設(shè)備信息數(shù)據(jù)進(jìn)行疊加運(yùn)算,將運(yùn)算結(jié)果進(jìn)行除余運(yùn)算,得到除余運(yùn)算結(jié)果作為邏輯值。然后以該邏輯值作為入口地址進(jìn)行查找即可。經(jīng)過簡單計(jì)算能迅速找到設(shè)備驅(qū)動(dòng)程序的入口,大幅提升UEFI內(nèi)核對(duì)外圍設(shè)備驅(qū)動(dòng)程序的操作效率。若果在入口中未找到,還可以進(jìn)入相應(yīng)的溢出表中查找,若還沒有找到,計(jì)算機(jī)會(huì)發(fā)出錯(cuò)誤提示。上面對(duì)本發(fā)明實(shí)施例提供的一種UEFI內(nèi)核執(zhí)行外圍設(shè)備驅(qū)動(dòng)程序的方法進(jìn)行了說明,下面請(qǐng)參閱圖3,本發(fā)明實(shí)施例提供的一種UEFI內(nèi)核執(zhí)行外圍設(shè)備驅(qū)動(dòng)程序的裝置具體包括:分配單元301,用于根據(jù)預(yù)置分配規(guī)則為待分配驅(qū)動(dòng)程序分配入口地址;存入單元302,用于根據(jù)入口地址,將待分配驅(qū)動(dòng)程序存入對(duì)應(yīng)入口地址表中;計(jì)算單元303,用于當(dāng)需要加載驅(qū)動(dòng)程序時(shí),根據(jù)預(yù)置的計(jì)算規(guī)則得到目的驅(qū)動(dòng)程序的入口地址;查找單元304,用于根據(jù)入口地址,查找目的驅(qū)動(dòng)程序。在本實(shí)施例中,分配單元301根據(jù)預(yù)置分配規(guī)則,給每一個(gè)驅(qū)動(dòng)設(shè)備對(duì)應(yīng)的驅(qū)動(dòng)程序都分配唯一入口地址。存入單元302根據(jù)分配單元301分配的結(jié)果,將各個(gè)待分配驅(qū)動(dòng)程序存進(jìn)對(duì)應(yīng)的入口。當(dāng)需要加載驅(qū)動(dòng)程序時(shí),計(jì)算單元303根據(jù)預(yù)置的計(jì)算規(guī)則得到目的驅(qū)動(dòng)程序的入口地址。最后,查找單元304根據(jù)入口地址,查找目的驅(qū)動(dòng)程序。本實(shí)施例中,分配單元301根據(jù)預(yù)置分配規(guī)則為待分配驅(qū)動(dòng)程序分配入口地址;接著由存入單元302根據(jù)入口地址,將待分配驅(qū)動(dòng)程序存入對(duì)應(yīng)入口 ;當(dāng)需要加載驅(qū)動(dòng)程序時(shí),計(jì)算單元303根據(jù)預(yù)置計(jì)算規(guī)則計(jì)算出入口地址,再由查找單元304查找目標(biāo)驅(qū)動(dòng)程序。與現(xiàn)有技術(shù)相比,計(jì)算機(jī)不需要加載所有的驅(qū)動(dòng)程序。由于本發(fā)明根據(jù)預(yù)置的分配規(guī)則為各驅(qū)動(dòng)程序分配不同的入口地址,當(dāng)需要某一驅(qū)動(dòng)程序時(shí),只需要按照預(yù)定的查找規(guī)則在對(duì)應(yīng)的入口中提取目的驅(qū)動(dòng)程序即可,從而快速查找到需要的驅(qū)動(dòng)程序,提高計(jì)算機(jī)系統(tǒng)啟動(dòng)速度。
本發(fā)明實(shí)施例提供的一種UEFI內(nèi)核執(zhí)行外圍設(shè)備驅(qū)動(dòng)程序的裝置中分配單元302包括:
第一疊加運(yùn)算子單元3011,用于對(duì)至少兩個(gè)設(shè)備信息數(shù)據(jù)進(jìn)行疊加運(yùn)算,得到運(yùn)算結(jié)果;
第一除余運(yùn)算子單元3012,用于對(duì)運(yùn)算結(jié)果進(jìn)行除余運(yùn)算,得到除余運(yùn)算結(jié)果作為邏輯值;
第一獲取單元3013,用于獲取某一外圍設(shè)備的至少兩個(gè)設(shè)備信息數(shù)據(jù);
計(jì)算單元303包括:
第二疊加運(yùn)算子單元3031,用于對(duì)至少兩個(gè)設(shè)備信息數(shù)據(jù)進(jìn)行疊加運(yùn)算,得到運(yùn)算結(jié)果;
第二除余運(yùn)算子單元3032,用于對(duì)運(yùn)算結(jié)果進(jìn)行除余運(yùn)算,得到除余運(yùn)算結(jié)果作為邏輯值;
第二獲取單元3033,用于獲取某一外圍設(shè)備的至少兩個(gè)設(shè)備信息數(shù)據(jù)。
下面以一個(gè)在實(shí)際應(yīng)用中的例子,對(duì)本發(fā)明實(shí)施例提供的一種UEFI內(nèi)核執(zhí)行外圍設(shè)備驅(qū)動(dòng)程序的裝置實(shí)施例中各個(gè)單元之間的通信關(guān)系進(jìn)行描述。
分配單元301獲取某一外圍設(shè)備的兩個(gè)以上的設(shè)備信息,其中設(shè)備信息數(shù)據(jù)可以包括設(shè)備廠商ID、設(shè)備ID和/或設(shè)備系列號(hào)。
例如某設(shè)備廠商ID和產(chǎn)品ID分別是0x3923和0xl2C0,產(chǎn)品序列號(hào)為2306020E。
首先由第一疊加運(yùn)算子單元3011將設(shè)備廠商ID、設(shè)備產(chǎn)品ID和序列號(hào)進(jìn)行疊加運(yùn)算,考慮到設(shè)備廠商ID和產(chǎn)品ID均為4位十六進(jìn)制數(shù)字,所以選用產(chǎn)品序列號(hào)其后4位十六進(jìn)制數(shù)字來進(jìn)行運(yùn)算:3923+12C0+020E=4DFl
然后由第一除余運(yùn)算子單元3012對(duì)得到的結(jié)果進(jìn)行除余運(yùn)算:
需要說明的是,應(yīng)用散列函數(shù):f (key)=mod (key,m)其目的是將分布不均勻的關(guān)鍵字聚集到一定范圍的存儲(chǔ)空間中,m—般取素?cái)?shù)。
假設(shè)m=97,則:
f (4DFl)=mod(4DFl,97)=68
得到的邏輯值為68,那么該設(shè)備的驅(qū)動(dòng)程序入口地址可以存放在位置號(hào)為68的入口地址表中。
判斷邏輯值是否重復(fù);
若第一邏輯值與第二邏輯值重復(fù),則在第一邏輯值對(duì)應(yīng)的入口建立溢出表;將第二邏輯值對(duì)應(yīng)的驅(qū)動(dòng)程序存放在所述溢出表中。
當(dāng)需要加載驅(qū)動(dòng)程序時(shí),獲取待驅(qū)動(dòng)設(shè)備的至少兩個(gè)設(shè)備信息數(shù)據(jù);
首先由第二疊加運(yùn)算子單元3031對(duì)至少兩個(gè)設(shè)備信息數(shù)據(jù)進(jìn)行疊加運(yùn)算,得到運(yùn)算結(jié)果;再由第二除余運(yùn)算子單元3032對(duì)上述運(yùn)算結(jié)果進(jìn)行除余運(yùn)算,得到除余運(yùn)算結(jié)果作為邏輯值,將邏輯值作為入口地址查找目標(biāo)驅(qū)動(dòng)程序。
最后由查找單元304找到目標(biāo)驅(qū)動(dòng)程序。若未查找到目標(biāo)驅(qū)動(dòng)程序,則進(jìn)入該入口的溢出表中進(jìn)行查找;
在本實(shí)施例中,由于存在重復(fù)的邏輯值,所以可能在入口中無法查到所有的驅(qū)動(dòng)程序,若未查找到目標(biāo)驅(qū)動(dòng)程序,則進(jìn)入該入口的溢出表中進(jìn)行查找。若在溢出表中未查到目標(biāo)驅(qū)動(dòng)程序,則進(jìn)行異常處理??梢杂捎?jì)算機(jī)發(fā)出錯(cuò)誤提示,或提示未找到可用驅(qū)動(dòng)程序,在此不作具體限定。本實(shí)施例中,首先由第一獲取單元3013獲取某一外圍設(shè)備的至少兩個(gè)設(shè)備信息數(shù)據(jù),然后由第一疊加運(yùn)算子單元3011對(duì)至少兩個(gè)設(shè)備信息數(shù)據(jù)進(jìn)行疊加運(yùn)算,然后由第一除余運(yùn)算子單元3012將運(yùn)算結(jié)果進(jìn)行除余運(yùn)算,得到除余運(yùn)算結(jié)果作為邏輯值;將邏輯值作為入口地址分配給該驅(qū)動(dòng)程序;判斷邏輯值是否重復(fù);若第一邏輯值與第二邏輯值重復(fù),則在第一邏輯值對(duì)應(yīng)的入口建立溢出表;將第二邏輯值對(duì)應(yīng)的驅(qū)動(dòng)程序存放在所述溢出表中。將兩個(gè)設(shè)備信息數(shù)據(jù)順次進(jìn)行疊加處理和除余處理,得到邏輯值,由于采用組合散列的方法大大降低入口地址沖突的概率;即使出現(xiàn)邏輯值重復(fù)的情況也可以新建溢出表,將重復(fù)的邏輯值對(duì)應(yīng)的驅(qū)動(dòng)程序儲(chǔ)存在溢出表中。當(dāng)需要加載驅(qū)動(dòng)程序時(shí),第二獲取單元3033獲取待驅(qū)動(dòng)設(shè)備的至少兩個(gè)設(shè)備信息數(shù)據(jù);由第二疊加運(yùn)算子單元3031對(duì)至少兩個(gè)設(shè)備信息數(shù)據(jù)進(jìn)行疊加運(yùn)算,然后由第二除余運(yùn)算子單元3032對(duì)上述運(yùn)算結(jié)果進(jìn)行除余運(yùn)算,得到除余運(yùn)算結(jié)果作為邏輯值;將邏輯值作為入口地址查找目標(biāo)驅(qū)動(dòng)程序。最后由查找單元304進(jìn)行查找若未查找到目標(biāo)驅(qū)動(dòng)程序,則進(jìn)入該入口的溢出表中進(jìn)行查找;若在溢出表中未查到目標(biāo)驅(qū)動(dòng)程序,則進(jìn)行異常處理。當(dāng)需要加載驅(qū)動(dòng)程序時(shí),只需獲取該外圍設(shè)備的至少兩個(gè)設(shè)備信息數(shù)據(jù),然后對(duì)至少兩個(gè)設(shè)備信息數(shù)據(jù)進(jìn)行疊加運(yùn)算,將運(yùn)算結(jié)果進(jìn)行除余運(yùn)算,得到除余運(yùn)算結(jié)果作為邏輯值。然后以該邏輯值作為入口地址進(jìn)行查找即可。經(jīng)過簡單計(jì)算能迅速找到設(shè)備驅(qū)動(dòng)程序的入口,大幅提升UEFI內(nèi)核對(duì)外圍設(shè)備驅(qū)動(dòng)程序的操作效率。若果在入口中未找到,還可以進(jìn)入相應(yīng)的溢出表中查找,若還沒有找到,計(jì)算機(jī)會(huì)發(fā)出錯(cuò)誤提示。所屬領(lǐng)域的技術(shù)人員可以清楚地了解到,為描述的方便和簡潔,上述描述的系統(tǒng),裝置和單元的具體工作過程,可以參考前述方法實(shí)施例中的對(duì)應(yīng)過程,在此不再贅述。在本申請(qǐng)所提供的幾個(gè)實(shí)施例中,應(yīng)該理解到,所揭露的系統(tǒng),裝置和方法,可以通過其它的方式實(shí)現(xiàn)。例如,以上所描述的裝置實(shí)施例僅僅是示意性的,例如,所述單元的劃分,僅僅為一種邏輯功能劃分,實(shí)際實(shí)現(xiàn)時(shí)可以有另外的劃分方式,例如多個(gè)單元或組件可以結(jié)合或者可以集成到另一個(gè)系統(tǒng),或一些特征可以忽略,或不執(zhí)行。另一點(diǎn),所顯示或討論的相互之間的耦合或直接耦合或通信連接可以是通過一些接口,裝置或單元的間接耦合或通信連接,可以是電性,機(jī)械或其它的形式。所述作為分離部件說明的單元可以是或者也可以不是物理上分開的,作為單元顯示的部件可以是或者也可以不是物理單元,即可以位于一個(gè)地方,或者也可以分布到多個(gè)網(wǎng)絡(luò)單元上??梢愿鶕?jù)實(shí)際的需要選擇其中的部分或者全部單元來實(shí)現(xiàn)本實(shí)施例方案的目的。另外,在本發(fā)明各個(gè)實(shí)施例中的各功能單元可以集成在一個(gè)處理單元中,也可以是各個(gè)單元單獨(dú)物理存在,也可以兩個(gè)或兩個(gè)以上單元集成在一個(gè)單元中。上述集成的單元既可以采用硬件的形式實(shí)現(xiàn),也可以采用軟件功能單元的形式實(shí)現(xiàn)。所述集成的單元如果以軟件功能單元的形式實(shí)現(xiàn)并作為獨(dú)立的產(chǎn)品銷售或使用時(shí),可以存儲(chǔ)在一個(gè)計(jì)算機(jī)可讀取存儲(chǔ)介質(zhì)中?;谶@樣的理解,本發(fā)明的技術(shù)方案本質(zhì)上或者說對(duì)現(xiàn)有技術(shù)做出貢獻(xiàn)的部分或者該技術(shù)方案的全部或部分可以以軟件產(chǎn)品的形式體現(xiàn)出來,該計(jì)算機(jī)軟件產(chǎn)品存儲(chǔ)在一個(gè)存儲(chǔ)介質(zhì)中,包括若干指令用以使得一臺(tái)計(jì)算機(jī)設(shè)備(可以是個(gè)人計(jì)算機(jī),服務(wù)器,或者網(wǎng)絡(luò)設(shè)備等)執(zhí)行本發(fā)明各個(gè)實(shí)施例所述方法的全部或部分步驟。而前述的存儲(chǔ)介質(zhì)包括:U盤、移動(dòng)硬盤、只讀存儲(chǔ)器(ROM,Read-OnlyMemory)、隨機(jī)存取存儲(chǔ)器(RAM, Random Access Memory)、磁碟或者光盤等各種可以存儲(chǔ)程序代碼的介質(zhì)。以上所述,以上實(shí)施例僅用以說明本發(fā)明的技術(shù)方案,而非對(duì)其限制;盡管參照前述實(shí)施例對(duì)本發(fā)明進(jìn)行了詳細(xì)的說明,本領(lǐng)域的普通技術(shù)人員應(yīng)當(dāng)理解:其依然可以對(duì)前述各實(shí)施例所記載的技術(shù)方案進(jìn)行修改,或者對(duì)其中部分技術(shù)特征進(jìn)行等同替換;而這些修改或者替換,并不使相應(yīng)技術(shù)方案的本質(zhì)脫離本發(fā)明各實(shí)施例技術(shù)方案的精神和范圍。
權(quán)利要求
1.一種UEFI內(nèi)核執(zhí)行外圍設(shè)備驅(qū)動(dòng)程序的方法,其特征在于,包括: 根據(jù)預(yù)置分配規(guī)則為待分配驅(qū)動(dòng)程序分配入口地址; 根據(jù)所述入口地址,將所述待分配驅(qū)動(dòng)程序存入對(duì)應(yīng)入口地址表中; 當(dāng)需要加載驅(qū)動(dòng)程序時(shí),根據(jù)預(yù)置的計(jì)算規(guī)則得到目的驅(qū)動(dòng)程序的入口地址; 根據(jù)入口地址,查找目的驅(qū)動(dòng)程序。
2.根據(jù)權(quán)利要求1所述的UEFI內(nèi)核執(zhí)行外圍設(shè)備驅(qū)動(dòng)程序的方法,其特征在于, 所述根據(jù)預(yù)置分配規(guī)則為待分配驅(qū)動(dòng)程序分配入口地址包括: 獲取某一外圍設(shè)備的至少兩個(gè)設(shè)備信息數(shù)據(jù); 對(duì)所述至少兩個(gè)設(shè)備信息數(shù)據(jù)進(jìn)行處理得到邏輯值; 將所述邏輯值作為入口地址分配給所述驅(qū)動(dòng)程序。
3.根據(jù)權(quán)利要求2所述的UEFI內(nèi)核執(zhí)行外圍設(shè)備驅(qū)動(dòng)程序的方法,其特征在于, 對(duì)所述至少兩個(gè)設(shè)備信息數(shù)據(jù)進(jìn)行處理得到邏輯值包括: 對(duì)所述至少兩個(gè)設(shè)備信息數(shù)據(jù)進(jìn)行疊加運(yùn)算,得到運(yùn)算結(jié)果; 對(duì)所述運(yùn)算結(jié)果進(jìn)行除余運(yùn)算,得到除余運(yùn)算結(jié)果作為邏輯值。
4.根據(jù)權(quán)利要求3所述的UEFI內(nèi)核執(zhí)行外圍設(shè)備驅(qū)動(dòng)程序的方法,其特征在于, 所述根據(jù)所述入口地址,將所述待分配驅(qū)動(dòng)程序存入對(duì)應(yīng)入口地址表包括: 判斷邏輯值是否重復(fù); 若第一邏輯值與第二邏輯值重復(fù),則在所述第一邏輯值對(duì)應(yīng)的入口地址表末端建立溢出表; 將所述第二邏輯值對(duì)應(yīng)的驅(qū)動(dòng)程序存放在所述溢出表中。
5.根據(jù)權(quán)利要求4所述的UEFI內(nèi)核執(zhí)行外圍設(shè)備驅(qū)動(dòng)程序的方法,其特征在于, 所述當(dāng)需要加載驅(qū)動(dòng)程序時(shí),根據(jù)預(yù)置計(jì)算規(guī)則查找目標(biāo)驅(qū)動(dòng)程序包括: 獲取待驅(qū)動(dòng)設(shè)備的至少兩個(gè)設(shè)備信息數(shù)據(jù); 對(duì)所述至少兩個(gè)設(shè)備信息數(shù)據(jù)進(jìn)行處理得到邏輯值; 將所述邏輯值作為入口地址查找目標(biāo)驅(qū)動(dòng)程序。
6.根據(jù)權(quán)利要求5所述的UEFI內(nèi)核執(zhí)行外圍設(shè)備驅(qū)動(dòng)程序的方法,其特征在于, 所述對(duì)所述至少兩個(gè)設(shè)備信息數(shù)據(jù)進(jìn)行處理得到邏輯值包括: 對(duì)所述至少兩個(gè)設(shè)備信息數(shù)據(jù)進(jìn)行疊加運(yùn)算,得到運(yùn)算結(jié)果; 對(duì)所述運(yùn)算結(jié)果進(jìn)行除余運(yùn)算,得到除余運(yùn)算結(jié)果作為邏輯值。
7.根據(jù)權(quán)利要求6所述的UEFI內(nèi)核執(zhí)行外圍設(shè)備驅(qū)動(dòng)程序的方法,其特征在于, 所述根據(jù)入口地址,查找目的驅(qū)動(dòng)程序包括; 若未查找到所述目標(biāo)驅(qū)動(dòng)程序,則進(jìn)入所述入口末端的溢出表中進(jìn)行查找; 若在所述溢出表中未查到所述目標(biāo)驅(qū)動(dòng)程序,則進(jìn)行異常處理。
8.根據(jù)權(quán)利要求1至7中任一項(xiàng)所述的UEFI內(nèi)核執(zhí)行外圍設(shè)備驅(qū)動(dòng)程序的方法,其特征在于, 所述設(shè)備信息數(shù)據(jù)包括設(shè)備廠商ID、設(shè)備ID和/或設(shè)備系列號(hào)。
9.一種UEFI內(nèi)核執(zhí)行外圍設(shè)備驅(qū)動(dòng)程序的裝置,其特征在于,包括: 分配單元,用于根據(jù)預(yù)置分配規(guī)則為待分配驅(qū)動(dòng)程序分配入口地址; 存入單元,用于根據(jù)所述入口地址,將所述待分配驅(qū)動(dòng)程序存入對(duì)應(yīng)入口地址表中;計(jì)算單元,用于當(dāng)需要加載驅(qū)動(dòng)程序時(shí),根據(jù)預(yù)置的計(jì)算規(guī)則得到目的驅(qū)動(dòng)程序的入口地址; 查找單元,用于根據(jù)入口地址,查找目的驅(qū)動(dòng)程序。
10.根據(jù)權(quán)利要求9所述的UEFI內(nèi)核執(zhí)行外圍設(shè)備驅(qū)動(dòng)程序的裝置,其特征在于, 所述分配單元包括: 第一獲取單元,用于獲取某一外圍設(shè)備的至少兩個(gè)設(shè)備信息數(shù)據(jù); 第一疊加運(yùn)算子單元,用于對(duì)至少兩個(gè)設(shè)備信息數(shù)據(jù)進(jìn)行疊加運(yùn)算,得到運(yùn)算結(jié)果;第一除余運(yùn)算子單元,用于對(duì)所述運(yùn)算結(jié)果進(jìn)行除余運(yùn)算,得到除余運(yùn)算結(jié)果作為邏輯值; 所述查找單元包括: 第二獲取單元,用于獲取某一外圍設(shè)備的至少兩個(gè)設(shè)備信息數(shù)據(jù); 第二疊加運(yùn)算子單元,用于對(duì)至少兩個(gè)設(shè)備信息數(shù)據(jù)進(jìn)行疊加運(yùn)算,得到運(yùn)算結(jié)果;第二 除余運(yùn)算子單元,用于對(duì)所述運(yùn)算結(jié)果進(jìn)行除余運(yùn)算,得到除余運(yùn)算結(jié)果作為邏輯值。
全文摘要
本發(fā)明實(shí)施例公開了一種UEFI內(nèi)核執(zhí)行外圍設(shè)備驅(qū)動(dòng)程序的方法及裝置,能夠快速加載需要的驅(qū)動(dòng)程序,提高計(jì)算機(jī)系統(tǒng)啟動(dòng)速度。本發(fā)明實(shí)施例方法包括根據(jù)預(yù)置分配規(guī)則為待分配驅(qū)動(dòng)程序分配入口地址;接著根據(jù)入口地址,將待分配驅(qū)動(dòng)程序存入對(duì)應(yīng)入口地址表中;當(dāng)需要加載驅(qū)動(dòng)程序時(shí),根據(jù)預(yù)置計(jì)算規(guī)則查找目標(biāo)驅(qū)動(dòng)程序。與現(xiàn)有技術(shù)相比,不需要加載所有的驅(qū)動(dòng)程序。由于本發(fā)明根據(jù)預(yù)置的分配規(guī)則為各驅(qū)動(dòng)程序分配不同的入口地址,當(dāng)需要加載某一驅(qū)動(dòng)程序時(shí),只需要按照預(yù)定的計(jì)算規(guī)則計(jì)算出目標(biāo)驅(qū)動(dòng)程序所在的入口地址,在對(duì)應(yīng)的入口中提取目的驅(qū)動(dòng)程序即可,從而快速查找到需要的驅(qū)動(dòng)程序,提高計(jì)算機(jī)系統(tǒng)啟動(dòng)速度。
文檔編號(hào)G06F9/445GK103176829SQ20131014144
公開日2013年6月26日 申請(qǐng)日期2013年4月22日 優(yōu)先權(quán)日2013年4月22日
發(fā)明者余松森, 黃小鵬, 施偉周 申請(qǐng)人:東信和平科技股份有限公司