亚洲成年人黄色一级片,日本香港三级亚洲三级,黄色成人小视频,国产青草视频,国产一区二区久久精品,91在线免费公开视频,成年轻人网站色直接看

基于arm構(gòu)架的納秒級(jí)計(jì)時(shí)方法和系統(tǒng)的制作方法_2

文檔序號(hào):9646468閱讀:來(lái)源:國(guó)知局
驅(qū)動(dòng)模塊,以及對(duì)添加CCNT內(nèi)核驅(qū)動(dòng)模塊后的內(nèi)核源碼再次進(jìn)行編 譯,生成內(nèi)核驅(qū)動(dòng)模塊;
[0043] 加載單元,用于獲取目標(biāo)設(shè)備的最高權(quán)限,將所述內(nèi)核驅(qū)動(dòng)模塊加載到目標(biāo)設(shè)備 中。
[0044] 優(yōu)選地,所述處理器還包括:
[0045] 配置單元,用于配置adb,建立與目標(biāo)設(shè)備的連接;
[0046] 搭建單元,用于搭建x86平臺(tái)下的交叉編譯環(huán)境。
[0047] 優(yōu)選地,所述目標(biāo)設(shè)備包括:
[0048] 初始化單元,用于初始化ARM處理器中的CCNT寄存器;
[0049] 設(shè)置單元,用于設(shè)置禁止CCNT寄存器因溢出而中斷,以及設(shè)置允許所有CCNT寄存 器進(jìn)行計(jì)數(shù);
[0050] 重置單元,用于重置所有CCNT寄存器的初始值為0 ;
[0051] 執(zhí)行單元,用于執(zhí)行被測(cè)試代碼;
[0052] 讀取單元,用于讀取執(zhí)行被測(cè)試代碼前CCNT寄存器的計(jì)數(shù)值,返回第一次時(shí)鐘周 期數(shù),以及執(zhí)行被測(cè)試代碼后CCNT寄存器的計(jì)數(shù)值,返回第二次時(shí)鐘周期數(shù);
[0053] 計(jì)算單元,用于計(jì)算第二次時(shí)鐘周期數(shù)和第一次時(shí)鐘周期數(shù)的第一差值,計(jì)算所 述第一差值與所述CCNT寄存器計(jì)數(shù)函數(shù)的執(zhí)行周期數(shù)的第二差值,獲取ARM處理器的主 頻,根據(jù)所述主頻將所述第二差值換算為時(shí)間,作為所述測(cè)試代碼的執(zhí)行時(shí)間長(zhǎng)度。
[0054] 優(yōu)選地,上述目標(biāo)設(shè)備還包括:
[0055] 控制單元,用于控制CCNT寄存器以每個(gè)周期為單位進(jìn)行計(jì)數(shù)。
[0056] 根據(jù)上述技術(shù)方案,可以調(diào)用ARM處理器的CCNT寄存器實(shí)現(xiàn)精度為納米級(jí)的計(jì)時(shí) 方法。
【附圖說(shuō)明】
[0057] 通過(guò)參考附圖會(huì)更加清楚的理解本發(fā)明的特征和優(yōu)點(diǎn),附圖是示意性的而不應(yīng)理 解為對(duì)本發(fā)明進(jìn)行任何限制,在附圖中:
[0058] 圖1示出了根據(jù)本發(fā)明一個(gè)實(shí)施例的基于ARM構(gòu)架的納秒級(jí)計(jì)時(shí)方法的示意流程 圖;
[0059] 圖2示出了根據(jù)本發(fā)明一個(gè)實(shí)施例的內(nèi)核編譯和加載CCNT驅(qū)動(dòng)模塊的示意流程 圖;
[0060] 圖3示出了根據(jù)本發(fā)明一個(gè)實(shí)施例的目標(biāo)設(shè)備調(diào)用CCNT寄存器進(jìn)行計(jì)時(shí)的示意 流程圖;
[0061] 圖4示出了根據(jù)本發(fā)明一個(gè)實(shí)施例的基于ARM構(gòu)架的納秒級(jí)計(jì)時(shí)系統(tǒng)的示意框 圖;
[0062] 圖5示出了根據(jù)本發(fā)明一個(gè)實(shí)施例的訪(fǎng)問(wèn)每個(gè)Cache組的訪(fǎng)問(wèn)時(shí)間計(jì)時(shí)結(jié)果示意 圖。
【具體實(shí)施方式】
[0063] 為了能夠更清楚地理解本發(fā)明的上述目的、特征和優(yōu)點(diǎn),下面結(jié)合附圖和具體實(shí) 施方式對(duì)本發(fā)明進(jìn)行進(jìn)一步的詳細(xì)描述。需要說(shuō)明的是,在不沖突的情況下,本申請(qǐng)的實(shí)施 例及實(shí)施例中的特征可以相互組合。
[0064] 在下面的描述中闡述了很多具體細(xì)節(jié)以便于充分理解本發(fā)明,但是,本發(fā)明還可 以采用其他不同于在此描述的其他方式來(lái)實(shí)施,因此,本發(fā)明的保護(hù)范圍并不受下面公開(kāi) 的具體實(shí)施例的限制。
[0065] 如圖1所示,根據(jù)本發(fā)明一個(gè)實(shí)施例的基于ARM構(gòu)架的納秒級(jí)計(jì)時(shí)方法,包括:
[0066] S1,根據(jù)目標(biāo)設(shè)備的操作系統(tǒng)內(nèi)核版本,對(duì)該內(nèi)核版本對(duì)應(yīng)的內(nèi)核源碼進(jìn)行編譯, 加載CCNT內(nèi)核模塊,以生成CCNT驅(qū)動(dòng)模塊,將CCNT驅(qū)動(dòng)模塊加載到目標(biāo)設(shè)備中;
[0067]S2,目標(biāo)設(shè)備初始化ARM處理器中的CCNT寄存器,讀取CCNT寄存器的第一次時(shí)鐘 周期數(shù),執(zhí)行被測(cè)試代碼,讀取CCNT寄存器的第二次時(shí)鐘周期數(shù),根據(jù)第二次時(shí)鐘周期數(shù) 和第一次時(shí)鐘周期數(shù)的差值計(jì)算被測(cè)試代碼的執(zhí)行時(shí)間長(zhǎng)度。
[0068] 以ARM11處理器為例,其處理器構(gòu)架中含有3個(gè)32位寄存器,這些寄存器可以用 來(lái)獲取處理器的性能指標(biāo),其中一個(gè)寄存器為周期計(jì)數(shù)器,即CycleCounterRegister,本 實(shí)施例稱(chēng)其為CCNT寄存器,其可以對(duì)每個(gè)周期或者每64個(gè)周期進(jìn)行計(jì)數(shù),但是在用戶(hù)模式 下無(wú)法調(diào)用該寄存器。
[0069] 本實(shí)施例可以通過(guò)計(jì)算機(jī)或者個(gè)人電腦等設(shè)備進(jìn)行步驟S1 (以下以個(gè)人電腦為 例),以針對(duì)目標(biāo)設(shè)備的內(nèi)核源碼進(jìn)行重新編譯,并在編譯過(guò)程中添加CCNT驅(qū)動(dòng)模塊,實(shí)現(xiàn) 通過(guò)目標(biāo)設(shè)備在用戶(hù)模式下對(duì)CCNT寄存在的調(diào)用。
[0070] 本發(fā)明利用ARM處理器中的CCNT寄存器的計(jì)數(shù)器功能,實(shí)現(xiàn)在用戶(hù)模式下調(diào)用返 回值獲取處理器時(shí)鐘周期數(shù),通過(guò)計(jì)算被測(cè)試代碼執(zhí)行前后的時(shí)鐘周期數(shù)差值,并根據(jù)該 數(shù)值差計(jì)算被測(cè)試代碼的執(zhí)行時(shí)間長(zhǎng)度(例如依據(jù)處理器主頻數(shù)換算得到被測(cè)試代碼的 執(zhí)行時(shí)間長(zhǎng)度)。運(yùn)用CCNT寄存器獲取時(shí)鐘周期數(shù)表達(dá)被測(cè)代碼執(zhí)行時(shí)間,相比較于現(xiàn)有 調(diào)用系統(tǒng)取時(shí)間的C函數(shù)和運(yùn)用看門(mén)狗計(jì)時(shí)器實(shí)現(xiàn)計(jì)時(shí)等方法,具有更高的計(jì)時(shí)精度。在 處理器主頻允許的情況下(例如主頻在1GHz以上),能夠達(dá)到納秒級(jí)的計(jì)時(shí)精度。同時(shí)由 于ARM架構(gòu)的處理器都具備CCNT寄存器,因此本發(fā)明的方法適用于所有的ARM平臺(tái)。
[0071] 優(yōu)選地,如圖2所示,步驟S1包括:
[0072]S11,確定目標(biāo)設(shè)備的內(nèi)核版本,下載內(nèi)核版本對(duì)應(yīng)的操作系統(tǒng)內(nèi)核源碼;例如目 標(biāo)設(shè)備的內(nèi)核為Android內(nèi)核,Android內(nèi)核是基于Linux內(nèi)核的一個(gè)增強(qiáng)內(nèi)核版本,它除 了修改了Linux內(nèi)核的部分bug之外,還增加了用于支持Android平臺(tái)的一些設(shè)備驅(qū)動(dòng)。本 實(shí)施例可以根據(jù)其內(nèi)核版本號(hào)下載相應(yīng)的內(nèi)核源碼。
[0073]S12,獲取目標(biāo)設(shè)備的內(nèi)核配置信息;例如獲取設(shè)備的config.gz配置文件, config.gz文件是當(dāng)前目標(biāo)設(shè)備設(shè)備的配置信息,開(kāi)發(fā)者對(duì)Android系統(tǒng)進(jìn)行配置后,將配 置信息存儲(chǔ)在config.gz中。獲得了config.gz文件之后,將其復(fù)制進(jìn)內(nèi)核源碼文件夾根 目錄,解壓縮得到config文件,并將其重命名為.config。
[0074] S13,根據(jù)配置信息,對(duì)內(nèi)核源碼進(jìn)行編譯,例如在獲取Ubuntu系統(tǒng)(一個(gè)以桌面 應(yīng)用為主的Linux操作系統(tǒng))root權(quán)限(最高權(quán)限)的前提下,在個(gè)人電腦中進(jìn)入內(nèi)核源碼 文件夾目錄,然后輸入make編譯命令,設(shè)置目標(biāo)平臺(tái)為ARM平臺(tái),指明交叉編譯工具路徑, 執(zhí)行編譯。
[0075] 編譯成功后在內(nèi)核源碼中添加CCNT內(nèi)核驅(qū)動(dòng)模塊;例如在內(nèi)核源碼中的 drivers(驅(qū)動(dòng))目錄下新建enableccnt目錄,內(nèi)含enableccnt.c(通過(guò)編譯生成ko文 件),Kconfig(配置文件),Makefile(腳本文件)。enableccnt.c是允許CCNT寄存器被調(diào) 用的代碼。
[0076]S14,對(duì)添加CCNT內(nèi)核驅(qū)動(dòng)模塊后的內(nèi)核源碼再次進(jìn)行編譯,生成內(nèi)核驅(qū)動(dòng)模塊; 再次編譯可以將enableccnt.c生成內(nèi)核驅(qū)動(dòng)模塊ko文件(內(nèi)核模塊文件),例如在Ubuntu 系統(tǒng)中,執(zhí)行內(nèi)核模塊預(yù)編譯指令,按設(shè)定的配置要點(diǎn)進(jìn)行配置,完成后在執(zhí)行內(nèi)核模塊編 譯指令,生成內(nèi)核驅(qū)動(dòng)模塊enableccnt.ko。
[0077]S15,獲取目標(biāo)設(shè)備的最高權(quán)限(即Root目標(biāo)設(shè)備),將內(nèi)核驅(qū)動(dòng)模塊加載到目標(biāo) 設(shè)備中。由于目標(biāo)設(shè)備受Android系統(tǒng)保護(hù),要在目標(biāo)設(shè)備加載安裝新的內(nèi)核驅(qū)動(dòng)模塊,首 先需要對(duì)目標(biāo)設(shè)置執(zhí)行root操作;可采用相應(yīng)的root工具對(duì)目標(biāo)設(shè)備執(zhí)行root,完成后 進(jìn)入adbshell(adb命令行)連接目標(biāo)設(shè)備,執(zhí)行insmod/ko_path/enableccnt.ko命令, 加載安裝CCNT內(nèi)核驅(qū)動(dòng)模塊。
[0078] 優(yōu)選地,在步驟S12之前還包括:
[0079] 配置adb,建立與目標(biāo)設(shè)備的連接;為了獲取目標(biāo)設(shè)備的配置文件,獲取內(nèi)核版本 號(hào),需要建立與設(shè)備的連接。本實(shí)施例可以通過(guò)配置adb(AndroidDebugBridge)來(lái)安裝 openjdk(Java平臺(tái)的一種開(kāi)源化實(shí)現(xiàn))為java環(huán)境,以便進(jìn)行環(huán)境變量配置。
[0080] 搭建x86平臺(tái)下的交叉編譯環(huán)境;由于編譯平臺(tái)可選擇x86架構(gòu)下的linux操作 系統(tǒng),而編譯目標(biāo)設(shè)備為ARM平臺(tái),因此要在x86平臺(tái)下編譯Android內(nèi)核需
當(dāng)前第2頁(yè)1 2 3 4 
網(wǎng)友詢(xún)問(wèn)留言 已有0條留言
  • 還沒(méi)有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
1