版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、基于虛擬化的系統(tǒng)安全增強(qiáng)及顯卡透傳研究侯建寧1,董貴山2,王銀3,申婭4(1中國電子科技集團(tuán)第三十研究所,四川 成都,610041;2中國電子科技集團(tuán)第三十研究所,四川 成都,610041;3中國電子科技集團(tuán)第三十研究所,四川 成都,610041;4成都衛(wèi)士通信息產(chǎn)業(yè)股份有限公司,四川 成都,610041)摘要:本文著重于探討系統(tǒng)虛擬化技術(shù)在終端安全領(lǐng)域的應(yīng)用前景以及在推廣應(yīng)用中所面臨的顯卡性能問題的解決辦法。針對個(gè)人終端操作系統(tǒng)安全問題,提出了一種基于系統(tǒng)虛擬化技術(shù)的操作系統(tǒng)安全增強(qiáng)模型,并基于KVM虛擬機(jī)深入研究了提高該模型下虛擬機(jī)顯示性能的顯卡透傳技術(shù)的具體實(shí)現(xiàn)。實(shí)驗(yàn)結(jié)果證明顯卡透傳技術(shù)
2、能夠突破虛擬機(jī)客戶操作系統(tǒng)的顯示性能瓶頸問題,使得客戶機(jī)操作系統(tǒng)能夠像真實(shí)操作系統(tǒng)一樣滿足圖形顯示與處理應(yīng)用,對虛擬技術(shù)在終端安全領(lǐng)域的發(fā)展拓展了更廣闊的空間。關(guān)鍵詞:系統(tǒng)虛擬化技術(shù);系統(tǒng)安全增強(qiáng);KVM虛擬機(jī);顯卡透傳;直接地址映射;PCI配置空間The Research on Virtualization-Based System Security Enhancements and Graphics Card Pass-ThroughHOU Jian-Ning1,DONG Gui-Shan2,WANG Yin3,SHEN Ya4(1.No.30 Institute of China Ele
3、ctronics Tecnology Group Corporation,Chendu,Sichuan 610041,China;2. No.30 Institute of China Electronics Tecnology Group Corporation,Chendu,Sichuan 610041,China;3.No.30 Institute of China Electronics Tecnology Group Corporation,Chendu,Sichuan 610041,China;4.Westone Information Industry Inc.Chendu,Si
4、chuan 610051,China)Abstract: This paper focuses on the prospect of system virtualization technology which applications in the terminal security field, and investigate the solution of the graphics performance problem when people promote the technology. For security issues of personal terminal operati
5、ng system, this paper propose a security Enhancements model based on the system virtualization technology on operating system, and in-depth study implementation of graphics Card pass-through technology to improve virtual machine performance based on this model on KVM virtual machine. Experimental re
6、sults show that graphics Card pass-through technology can breakthrough display performance bottlenecks of the virtual machine client operating system. This technology can make client operating system meet the graphics and processing applications as a real operating system, and can expand more space
7、for development of terminal security field.Key Words:System virtualization technology ;System Security Enhancements; KVM virtual machine;Graphics Card pass-through; Direct address mapping; PCI Configuration Space概述虛擬化技術(shù)存在和發(fā)展已達(dá)四十多年的時(shí)間了,近年來,隨著研究的深入,系統(tǒng)虛擬化技術(shù)已在X86體系架構(gòu)上獲得了很好的發(fā)展,在企業(yè)計(jì)算、災(zāi)難恢復(fù)、分布式計(jì)算、桌面虛擬化領(lǐng)域均得到
8、了廣泛應(yīng)用1。在信息安全領(lǐng)域,因系統(tǒng)虛擬化層介于硬件平臺與用戶操作系統(tǒng)之間,其特有的客戶機(jī)操作系統(tǒng)監(jiān)控和隔離作用,使得系統(tǒng)虛擬化技術(shù)不僅僅可以用于服務(wù)器端實(shí)現(xiàn)資源整合與管理功能,也可以增強(qiáng)以操作系統(tǒng)安全為核心的用戶終端系統(tǒng)的安全性,因此虛擬技術(shù)在信息安全領(lǐng)域也備受關(guān)注。在國內(nèi),系統(tǒng)虛擬技術(shù)在信息安全領(lǐng)域的技術(shù)研究已經(jīng)開展比較多,目前在硬件資源訪問控制、操作系統(tǒng)惡意行為監(jiān)控、隱藏進(jìn)程檢測等方面已有相關(guān)的研究23。主要的思路是在虛擬機(jī)監(jiān)控器(VMM,Virtual Machine Monitor)中構(gòu)筑一系列的安全防護(hù)措施,強(qiáng)化對客戶機(jī)操作系統(tǒng)的安全監(jiān)控與管理,但此類技術(shù)的應(yīng)用研究目前還處于起步階
9、段,尚無完整的應(yīng)用實(shí)現(xiàn)方案。本文借鑒國內(nèi)外當(dāng)前相關(guān)技術(shù)研究成果,結(jié)合個(gè)人終端操作系統(tǒng)安全防護(hù)實(shí)際需求,提出了一種適用于個(gè)人終端計(jì)算機(jī)、基于虛擬技術(shù)的操作系統(tǒng)安全增強(qiáng)模型。根據(jù)該模型在終端安全領(lǐng)域應(yīng)用推廣中將會面臨的顯卡性能問題,提出了一種提高虛擬機(jī)顯示性能的顯卡透傳技術(shù),并基于KVM虛擬機(jī)深入研究了顯卡透傳技術(shù)的具體實(shí)現(xiàn)。顯卡透傳技術(shù)的突破,能夠很好的解決客戶機(jī)操作系統(tǒng)的易用性難題,對促進(jìn)系統(tǒng)虛擬化技術(shù)在終端操作系統(tǒng)安全增強(qiáng)領(lǐng)域的推廣應(yīng)用起著重要的作用。操作系統(tǒng)安全增強(qiáng)模型在個(gè)人終端操作系統(tǒng)安全增強(qiáng)方面,需要做到既能維護(hù)系統(tǒng)的安全性,又需要保證系統(tǒng)的易用性和高效性。根據(jù)這個(gè)需求特點(diǎn),我們通過改
10、造現(xiàn)有虛擬機(jī)體系結(jié)構(gòu),提出了個(gè)人終端操作系統(tǒng)安全增強(qiáng)模型。傳統(tǒng)系統(tǒng)虛擬化體系模型如圖1所示,改造后的操作系統(tǒng)安全增強(qiáng)模型體系結(jié)構(gòu)如圖2所示。在基于虛擬技術(shù)的個(gè)人終端操作系統(tǒng)安全增強(qiáng)模型上,一臺PC機(jī)只運(yùn)行一個(gè)獨(dú)立的虛擬客戶機(jī)操作系統(tǒng),該系統(tǒng)對于用戶來說就是普通的用戶操作系統(tǒng)。虛擬機(jī)監(jiān)控器則成為安全監(jiān)控器,負(fù)責(zé)根據(jù)訪問策略隔離與控制客戶機(jī)操作系統(tǒng)對硬件資源的訪問權(quán)限,可以根據(jù)安全性需要將不存在安全隱患的硬件(顯卡、聲卡、鍵盤、鼠標(biāo)等)透傳給客戶機(jī)操作系統(tǒng)直接控制,對存在安全隱患的硬件資源(如網(wǎng)卡、USB端口)進(jìn)行虛擬,在虛擬層實(shí)施訪問過濾等檢測措施確保訪問安全;同時(shí)通過在虛擬化層實(shí)現(xiàn)進(jìn)一步的惡意
11、行為檢測、隱藏進(jìn)程檢測等安全模塊對客戶機(jī)操作系統(tǒng)各種惡意行為進(jìn)行監(jiān)控。相比于通用虛擬機(jī)體系結(jié)構(gòu)4,這種安全模型中虛擬機(jī)監(jiān)控器主要職能不再是多虛擬環(huán)境的調(diào)度與切換,而轉(zhuǎn)變?yōu)閷我惶摂M機(jī)的安全監(jiān)視功能,簡化了傳統(tǒng)系統(tǒng)虛擬化體系結(jié)構(gòu)的復(fù)雜性,增強(qiáng)了操作系統(tǒng)安全性控制功能。圖1:傳統(tǒng)系統(tǒng)虛擬化體系模型圖2:基于虛擬化技術(shù)的操作系統(tǒng)安全增強(qiáng)模型這種安全模型的推廣應(yīng)用,要求虛擬機(jī)下的客戶機(jī)操作系統(tǒng)應(yīng)具備與運(yùn)行于真實(shí)主機(jī)上的操作系統(tǒng)相同或相近的性能與通用性,否則終端用戶是無法接受因安全增強(qiáng)而帶來的性能或易用性方面的損失的。自2005年, Intel和AMD公司分別發(fā)布了支持VT(Virtualization
12、 Technology)技術(shù)的CPU以來,基于支持VT技術(shù)的CPU虛擬化技術(shù)已經(jīng)讓虛擬機(jī)處理性能產(chǎn)生了質(zhì)的提升,能夠達(dá)到真實(shí)主機(jī)性能的95%以上,CPU處理性能已經(jīng)不再是虛擬化技術(shù)在終端安全領(lǐng)域發(fā)展的絆腳石。而顯卡顯示性能問題則成為當(dāng)前虛擬化技術(shù)在終端安全領(lǐng)域發(fā)展的關(guān)鍵問題,當(dāng)前國外主流的虛擬機(jī)軟件都沒能很好的解決好顯卡虛擬化問題,虛擬機(jī)的圖形顯示處理能力只相當(dāng)于當(dāng)年的386時(shí)代的水平,這使得虛擬機(jī)中的客戶機(jī)操作系統(tǒng)不能夠運(yùn)行一些對圖形處理能力要求高的應(yīng)用,這種安全模型的進(jìn)一步發(fā)展存在著較大的障礙。下面將基于KVM虛擬機(jī)研究實(shí)現(xiàn)提升客戶機(jī)操作系統(tǒng)顯示性能的具體實(shí)現(xiàn)方法,本文的研究主要是基于KV
13、M虛擬機(jī)進(jìn)行的,但相關(guān)技術(shù)原理具有普適性,也可在其他開源虛擬機(jī)上得到實(shí)現(xiàn)。KVM虛擬機(jī)當(dāng)前,主流的商業(yè)虛擬機(jī)有VMware和VirutalPC,開源虛擬機(jī)有Xen、Qemu、Bochs、KVM等。KVM5是Kernel-based Virtual Machine的簡稱,是一個(gè)基于Linux內(nèi)核,依賴CPU硬件虛擬化技術(shù)(如Intel 或AMD VT技術(shù))的的開源系統(tǒng)虛擬化模塊。KVM虛擬機(jī)的體系架構(gòu)如圖3所示,VMM虛擬機(jī)監(jiān)控器借助于Linux操作系統(tǒng)的內(nèi)核實(shí)現(xiàn)。圖3:KVM虛擬機(jī)原理圖KVM虛擬機(jī)支持PCI透傳技術(shù)(PCI passthrough),可以實(shí)現(xiàn)將PCI硬件資源直接映射到虛擬機(jī)的
14、客戶操作系統(tǒng)中,客戶操作系統(tǒng)可以直接驅(qū)動真實(shí)的標(biāo)準(zhǔn)PCI物理設(shè)備以獲得高速物理資源訪問。但KVM虛擬機(jī)支持PCI透傳技術(shù)還必須依賴于硬件平臺支持Intel 或AMD的VT-d/IOMMU技術(shù)。VT-d/IOMMU技術(shù)在服務(wù)器虛擬化中對I/O虛擬化具有重要作用,但在終端用戶的操作系統(tǒng)安全增強(qiáng)模型中卻并不重要,此外,由于VT-d/IOMMU技術(shù)主要面向服務(wù)器設(shè)計(jì),普通PC機(jī)上支持不多。因此,在基于KVM虛擬機(jī)的操作系統(tǒng)安全加固模型中實(shí)現(xiàn)顯卡透傳主要有兩方面的研究工作:一方面是研究在不支持VT-d/IOMMU技術(shù)的硬件平臺上實(shí)現(xiàn)PCI透傳的方法;另一方面是實(shí)現(xiàn)對顯卡這種特殊的PCI設(shè)備在虛擬機(jī)中的直
15、接分配。直接地址映射技術(shù)基本原理在虛擬機(jī)中實(shí)現(xiàn)PCI透傳,需要處理好4方面的問題:PCI配置空間映射;PCI內(nèi)存及I/O資源映射;PCI IRQ中斷映射;DMA(直接內(nèi)存訪問)處理;通常情況下,對于標(biāo)準(zhǔn)PCI設(shè)備,前三個(gè)方面的處理均可以通過虛擬機(jī)相應(yīng)的軟件映射機(jī)制實(shí)現(xiàn),而對虛擬給客戶機(jī)操作系統(tǒng)的物理硬件DMA的處理則是現(xiàn)有的虛擬方式下難以用軟件實(shí)現(xiàn)的,這與DMA本身的技術(shù)機(jī)制有關(guān)。DMA是外設(shè)與系統(tǒng)進(jìn)行高速數(shù)據(jù)傳輸?shù)募夹g(shù),外設(shè)可以不經(jīng)過CPU直接進(jìn)行內(nèi)存讀寫訪問,高效傳輸數(shù)據(jù)。在DMA傳輸時(shí)驅(qū)動需要申請一個(gè)可被DMA訪問的地址空間,然后告訴外設(shè)可進(jìn)行DMA傳輸?shù)膬?nèi)存物理地址。這種方式在物理主機(jī)
16、上沒有任何問題,操作系統(tǒng)會保證分配給驅(qū)動的地址空間獨(dú)立性。但在虛擬機(jī)上,因采用影子頁表機(jī)制實(shí)現(xiàn)多個(gè)客戶機(jī)物理地址到主機(jī)物理地址的映射,驅(qū)動從系統(tǒng)中獲取的物理地址實(shí)際上是經(jīng)過虛擬機(jī)轉(zhuǎn)換后的客戶機(jī)物理地址(GPA),并非對應(yīng)真實(shí)的主機(jī)物理地址(HPA)。如果外設(shè)直接存取該地址的數(shù)據(jù)必然導(dǎo)致系統(tǒng)崩潰或造成安全隱患。Intel 的VT-d和AMD的IOMMU技術(shù)則是從硬件層面解決DMA處理問題的有效辦法。與CPU上的Intel VT-x技術(shù)一樣,VT-d( Virtualization Technology for Directed I/O)技術(shù)是一種基于北橋(North Bridge)芯片的硬件輔助
17、虛擬化技術(shù),通過在北橋中內(nèi)置提供DMA虛擬化和IRQ虛擬化硬件,實(shí)現(xiàn)了新型的I/O虛擬化方式。運(yùn)用VT-d技術(shù),虛擬機(jī)得以使用直接I/O設(shè)備分配方式或者I/O設(shè)備共享方式來實(shí)現(xiàn)PCI設(shè)備透傳,從而大大提升了虛擬化的I/O性能。AMD與之類似的技術(shù)稱之為SVM IOMMU。Intel 的VT-d和AMD的IOMMU技術(shù)支持DMA虛擬化的主要原理是由硬件維護(hù)一張DMA重映射表,當(dāng)外設(shè)對某個(gè)物理地址進(jìn)行DMA操作時(shí),自動查找映射表,將操作地址映射為虛擬機(jī)內(nèi)GPA對應(yīng)的真實(shí)HPA,以避免錯(cuò)誤的內(nèi)存地址操作。該技術(shù)具有通用性,可以同時(shí)支持多個(gè)虛擬機(jī)同時(shí)進(jìn)行物理設(shè)備透傳,且互相不影響,但需要有主板芯片組支
18、持才能使用,對硬件依賴性較高,KVM虛擬機(jī)已支持基于VT-d技術(shù)的PCI設(shè)備透傳6。但在終端操作系統(tǒng)安全加固模型中,我們不需要對多虛擬機(jī)同時(shí)進(jìn)行物理設(shè)備透傳,因此,并不需要維護(hù)一張1對多的DMA重映射表,我們只需要處理好GPA等于HPA的問題即可有效確保硬件對DMA地址處理的合法性,使得虛擬機(jī)對物理硬件具有與真實(shí)主機(jī)一致的效果。本文針對DMA處理問題,提出了虛擬機(jī)與物理主機(jī)直接地址映射技術(shù)的解決方案。實(shí)現(xiàn)方式直接地址映射是通過將真實(shí)系統(tǒng)中低地址內(nèi)存直接分配給虛擬機(jī)使用,直接讓虛擬機(jī)的GPA對應(yīng)主機(jī)HPA的技術(shù)。直接地址映射技術(shù)可以不需要任何硬件輔助,做到DMA訪問的物理地址內(nèi)存與主機(jī)一致。但該
19、技術(shù)的缺點(diǎn)是,一個(gè)主機(jī)系統(tǒng)中只能同時(shí)運(yùn)行一個(gè)進(jìn)行物理設(shè)備透傳的虛擬機(jī),多個(gè)虛擬機(jī)同時(shí)進(jìn)行物理設(shè)備透傳則會造成地址沖突。KVM是基于Linux操作系統(tǒng)運(yùn)行的。實(shí)現(xiàn)直接地址映射的先決條件是需要Linux操作系統(tǒng)在啟動時(shí)將低地址內(nèi)存空間預(yù)留出來。為保證體系兼容,X86架構(gòu)下的低1M內(nèi)存空間在操作系統(tǒng)初始化前就已預(yù)留給實(shí)模式中斷向量表、BIOS數(shù)據(jù)、顯存等使用,我們不能在Linux上預(yù)留這部分空間,只能從1M以上的空間開始預(yù)留。對于2.6內(nèi)核,有一個(gè)PHYSICAL_START變量設(shè)置系統(tǒng)啟動時(shí)內(nèi)核加載地址,缺省指向地址0 x100000(1M)處,我們可以修改為更大的值讓系統(tǒng)在啟動時(shí)空出1M到PHY
20、SICAL_START地址之間的內(nèi)存空間,然后將這部分空間標(biāo)記為預(yù)留,以避免操作系統(tǒng)啟動后占用這部分空間7。從操作系統(tǒng)層面預(yù)留的這部分空間是無法直接在應(yīng)用層直接使用的,目前我們通過Linux下/dev/mem設(shè)備文件直接將預(yù)留內(nèi)存映射到應(yīng)用層QEMU為虛擬機(jī)分配的內(nèi)存空間中,映射時(shí)需注意確保HPA與GPA的對應(yīng)。而對于虛擬機(jī)的其它內(nèi)存空間,無需與物理地址對應(yīng)關(guān)系,依然采用影子頁表機(jī)制將虛擬機(jī)內(nèi)存地址映射為Linux分配給QEMU的內(nèi)存空間中。具體映射關(guān)系見圖4。從圖中可以看出,在成功實(shí)現(xiàn)內(nèi)存映射后,客戶機(jī)操作系統(tǒng)所使用的內(nèi)存實(shí)際對應(yīng)到了主機(jī)的真實(shí)內(nèi)存部分,映射時(shí)確保了地址的一一對應(yīng)。而虛擬機(jī)前
21、640k內(nèi)存空間均由QEMU進(jìn)行虛擬,占用的是Linux操作系統(tǒng)的內(nèi)存空間??紤]到運(yùn)行態(tài)主機(jī)的VGABIOS內(nèi)存空間存儲的是被修改過的BIOS代碼,因此虛擬機(jī)中VGABIOS內(nèi)存空間均由QEMU進(jìn)行虛擬,也占用的是Linux操作系統(tǒng)的內(nèi)存空間。圖4:直接地址映射下虛擬機(jī)內(nèi)存與物理內(nèi)存的對應(yīng)關(guān)系顯卡直接分配從KVM虛擬機(jī)結(jié)構(gòu)中可以看出,如果虛擬機(jī)需要訪問QEMU模擬出的外設(shè),則需要通過多次處理,才能夠?qū)?shù)據(jù)真正傳遞給真實(shí)硬件設(shè)備處理,這對于普通低速接口的硬件外設(shè)訪問來說虛擬化處理開銷還容易接受,但對于顯卡虛擬化來說性能問題將顯得尤其突出。因此,采用顯卡直接分配技術(shù)將物理顯卡單獨(dú)分配給一個(gè)虛擬機(jī)獨(dú)
22、占訪問,使虛擬機(jī)上的客戶端操作系統(tǒng)直接驅(qū)動物理顯卡,進(jìn)行MMIO訪問和DMA操作,是一個(gè)在虛擬環(huán)境中獲得高質(zhì)量圖形顯示效果的有效解決方案。圖5是顯卡直接分配技術(shù)與QEMU直接虛擬外設(shè)的處理對比。從圖中可以看出,顯卡直接分配給虛擬機(jī)的客戶操作系統(tǒng)還可以使得客戶機(jī)操作系統(tǒng)充分利用物理顯卡原始驅(qū)動實(shí)現(xiàn)顯卡效能的最大化發(fā)揮。圖5:顯卡直接分配與QEMU虛擬外設(shè)技術(shù)對比開源的KVM虛擬機(jī)目前已經(jīng)支持對標(biāo)準(zhǔn)PCI設(shè)備的直接透傳(需要硬件具備I/O虛擬化能力,即需要硬件對VT-d或IOMMU技術(shù)的支持),但還沒能夠支持顯卡的直接透傳。主要有兩方面原因:一個(gè)是因歷史遺留問題,X86體系架構(gòu)下的顯卡設(shè)備為實(shí)現(xiàn)兼
23、容,留下了一些不同于標(biāo)準(zhǔn)PCI設(shè)備的內(nèi)存和I/O端口;另一個(gè)是因顯卡其自身高速處理需要,各顯卡廠商可能會有一些特別的設(shè)計(jì)(如獨(dú)立顯存和共享顯存的設(shè)計(jì)、特殊訪問接口等),針對顯卡不能完全像標(biāo)準(zhǔn)PCI設(shè)備一樣簡單的實(shí)現(xiàn)設(shè)備直接透傳。這里我們借鑒XEN虛擬機(jī)下基于VT-d技術(shù)的顯卡直接分配技術(shù)8,解決了KVM基于直接地址映射技術(shù)的顯卡設(shè)備直接分配難題。在KVM中實(shí)現(xiàn)顯卡直接分配,需要解決好顯卡在虛擬機(jī)總線中的注冊、PCI配置空間虛擬、顯卡資源(顯存及I/O地址)映射、VGABIOS調(diào)用、DMA映射等一系列問題。本文將針對以上問題展開研究。顯卡在KVM虛擬機(jī)中的注冊KVM使用QEMU用戶態(tài)進(jìn)程虛擬外設(shè)
24、,顯卡如果在虛擬機(jī)中使用必須首先在QEMU中注冊為一個(gè)稱為pci-assign的特殊qdev虛擬設(shè)備。pci-assign虛擬設(shè)備是QEMU中專門為PCI透傳定義的虛擬設(shè)備類型,每一個(gè)被透傳到虛擬機(jī)中的PCI設(shè)備都會被注冊為一個(gè)pci-assign虛擬設(shè)備,客戶機(jī)操作系統(tǒng)對該虛擬設(shè)備進(jìn)行的MMIO訪問等操作都被直接轉(zhuǎn)發(fā)到對應(yīng)的真實(shí)物理設(shè)備上。該功能的實(shí)現(xiàn)已經(jīng)在QEMU-KVM源代碼中包含,只需要在啟動KVM時(shí)通過命令行指定要映射的PCI設(shè)備BDF號(總線號、設(shè)備號、功能號)即可實(shí)現(xiàn)將該設(shè)備注冊到虛擬機(jī)中。但是做為顯卡設(shè)備,僅僅注冊為pci-assign虛擬設(shè)備并不能完全將顯卡啟用,虛擬機(jī)中能夠
25、從PCI資源中看到該顯卡,但是顯卡依然無法工作,還需要進(jìn)一步完成后續(xù)的工作。顯卡專用總線的注冊因?yàn)槠湫阅苄枰琗86架構(gòu)下大部分平臺都將物理顯卡掛接在獨(dú)立的一根PCI總線(總線1或總線2)上,有些廠商的顯卡驅(qū)動會對顯卡BDF號進(jìn)行檢測,如果顯卡在物理主機(jī)上的BDF號與虛擬機(jī)中注冊的BDF號不一致,將無法正確驅(qū)動顯卡(筆者試驗(yàn)用的NVIDIA Geforce G205M顯卡就存在這個(gè)問題)。因此,為確保顯卡直接分配技術(shù)在各類顯卡中能夠通用,需要在注冊顯卡到虛擬機(jī)中時(shí)確保顯卡在虛擬機(jī)中的BDF號與真實(shí)機(jī)器的BDF號保持一致。QEMU中缺省只虛擬了一條PCI總線(總線0),虛擬的磁盤控制器、CD-R
26、OM驅(qū)動器、網(wǎng)卡、顯卡、聲卡等設(shè)備都注冊在這條總線上。為滿足顯卡直接分配的需要,我們要修改QEMU源碼多注冊兩條PCI總線。這里我們利用QEMU中已實(shí)現(xiàn)的虛擬PCI橋設(shè)備,在虛擬機(jī)的系統(tǒng)總線初始化時(shí)注冊2個(gè)QEMU DEC 21154 虛擬PCI橋設(shè)備,創(chuàng)建了總線1和總線2。然后我們修改QEMU注冊PCI設(shè)備的實(shí)現(xiàn)方式,指定將透傳顯卡設(shè)備按照其真實(shí)主機(jī)上BDF相同的總線號、設(shè)備號、功能號進(jìn)行一一對應(yīng)的注冊。這樣就實(shí)現(xiàn)了顯卡在虛擬機(jī)中與在真實(shí)主機(jī)上具有相同的BDF,以使得顯卡驅(qū)動能夠直接驅(qū)動顯卡。顯卡資源直接映射歷史遺留資源映射自第一臺IBM PC問世以后,顯卡經(jīng)歷了MDA, Mono Herc
27、ults, CGA, EGA, VGA, XGA, SVGA等等標(biāo)準(zhǔn),總線也由ISA, EISA, VESA, PCI, AGP直到現(xiàn)在的PCIE,前前后后共約30年的進(jìn)程。雖然好多硬件都漸漸湮沒在歷史的洪流中,但是由于兼容性需要,一些內(nèi)存或I/O端口還是作為歷史遺留資源在X86硬件體系中保留了下來。在Intel制定PCI總線標(biāo)準(zhǔn)時(shí),在PCI空間保留了從0開始連續(xù)1MB的Memory空間和從0開始連續(xù)64KB的I/O空間,其中給顯卡預(yù)留的空間見表1。表1:PCI顯卡歷史遺留資源類型地址范圍用途內(nèi)存空間0 xA0000 0 xAFFFFVGA顯示緩沖區(qū)0 xB0000 0 xB7FFFMDA或H
28、ercults單顯卡顯示緩沖區(qū)0 xB8000 0 xBFFFFCGA/EGA顯示緩沖區(qū)0 xC0000 0 xCFFFFVGA BIOS 專用I/O 空間0 x3B00 x3DF顯卡控制寄存器I/O空間在PC機(jī)啟動的時(shí)候,BIOS程序會掃描整個(gè)PCI空間,發(fā)現(xiàn)有PCI顯卡時(shí),會使能它的Mem訪問和I/O訪問,同時(shí)會配置它的內(nèi)存空間和I/O空間。但是上面提到的那兩塊保留的內(nèi)存空間和I/O空間是不需要作專門配置的,PCI顯卡可以直接響應(yīng)落在這兩段空間上的PCI訪問請求。進(jìn)行顯卡透傳時(shí)必須將物理主機(jī)特殊的預(yù)留內(nèi)存和I/O地址空間直接映射到虛擬機(jī)對應(yīng)的地址空間中,以保證顯卡初始顯示。對于0 xA00
29、00 0 xBFFFF內(nèi)存空間向虛擬機(jī)的映射,我們借助Linux下特有的/dev/mem設(shè)備實(shí)現(xiàn),通過/dev/mem設(shè)備可以訪問到整個(gè)PC的全部物理內(nèi)存。我們修改QEMU源代碼,在分配了虛擬機(jī)的內(nèi)存后(得到一個(gè)應(yīng)用層地址空間的虛地址),直接打開/dev/mem設(shè)備,將地址0 xA0000到0 xBFFFF內(nèi)存使用mmap方式直接映射到QEMU虛擬機(jī)的內(nèi)存空間對應(yīng)偏移地址處。對于I/O端口0 x3B00 x3DF的映射,可直接向QEMU中注冊IO讀寫函數(shù),該函數(shù)從應(yīng)用層空間上轉(zhuǎn)發(fā)對應(yīng)的讀寫操作到真實(shí)主機(jī)的I/O端口上。顯卡資源映射除歷史遺留資源外,各種顯卡還有其特有的內(nèi)存和I/O資源,需要將這
30、些資源都映射進(jìn)虛擬機(jī)中。Linux下的SYSFS系統(tǒng)提供了一種從應(yīng)用層訪問內(nèi)核資源的簡單途徑。所有的PCI設(shè)備資源在系統(tǒng)初始化時(shí)都自動映射成/sys/bus/pci目錄下的文件,應(yīng)用層如果訪問這些資源可直接打開文件將其mmap到內(nèi)存中,對映射內(nèi)存的讀寫操作都會傳送到PCI設(shè)備的內(nèi)存空間中。在注冊物理顯卡到虛擬機(jī)時(shí),需要將對應(yīng)的顯卡資源也映射到虛擬機(jī)的地址空間中去。顯卡的PCI配置空間在實(shí)現(xiàn)顯卡直接分配時(shí),最重要的是顯卡的PCI配置空間虛擬化。PCI配置空間是用來動態(tài)配置PCI設(shè)備資源占用的一組寄存器,每個(gè)PCI設(shè)備都有自己獨(dú)立的配置空間,在系統(tǒng)初始化時(shí),由BIOS(也可在操作系統(tǒng)中配置)根據(jù)一
31、定的算法分配PCI設(shè)備所占有的資源,并將資源信息寫入PCI設(shè)備配置空間。PCI總線規(guī)范9定義的配置空間總長度為256個(gè)字節(jié),配置信息按一定的順序和大小依次存放。前64個(gè)字節(jié)的配置空間稱為配置頭,對于所有的設(shè)備都一樣,配置頭的主要功能是用來識別設(shè)備、定義主機(jī)訪問PCI卡的方式(I/O訪問或者存儲器訪問,還有中斷信息)。其余的192個(gè)字節(jié)稱為本地配置空間,主要定義卡上中斷、I/O端口資源、內(nèi)存基地址及范圍等信息。PCI配置空間中的基地址寄存器BAR(Base Address Registers)就是用于配置PCI設(shè)備在系統(tǒng)中占用的I/O及內(nèi)存地址及范圍的寄存器。對于普通PCI設(shè)備,可以直接虛擬PC
32、I配置空間,由KVM虛擬機(jī)的BIOS在啟動時(shí)重新配置該空間中的BAR和中斷號等信息。但有些廠商的顯卡則必須實(shí)現(xiàn)虛擬機(jī)里基地址寄存器值等于物理設(shè)備上基地址寄存器的值(VBAR=PBAR),原廠驅(qū)動才能夠正確驅(qū)動顯卡。因此,為保證顯卡透傳功能的通用性,我們針對顯卡都采用VBAR=PBAR的映射方式。這需要為顯卡透傳專門修改虛擬機(jī)BIOS,使得其在開機(jī)初始化時(shí)針對顯卡保留其與PBAR一致的虛擬機(jī)IO及內(nèi)存資源。針對顯卡的透傳修改QEMU代碼,在注冊pci-assign虛擬設(shè)備時(shí)將設(shè)備真實(shí)PCI配置空間內(nèi)容完整復(fù)制到虛擬配置空間。然后修改SeaBIOS(KVM虛擬機(jī)使用的BIOS)中PCI設(shè)備探測與資
33、源分配部分的代碼,在虛擬機(jī)SeaBIOS設(shè)置顯卡各配置寄存器時(shí),首先讀取虛擬配置空間中的真實(shí)設(shè)備配置信息,優(yōu)先為顯卡分配虛擬機(jī) “硬件”資源,確保被透傳的顯卡與真實(shí)顯卡保持一致的基地址寄存器配置信息。對于顯卡中斷等配置則可以根據(jù)需要由虛擬機(jī)進(jìn)行映射轉(zhuǎn)換,中斷號的虛擬不影響顯卡透傳。VGA BIOS顯卡也具有與主板上一樣的基本輸入輸出系統(tǒng)(BIOS),稱為VGA BIOS。系統(tǒng)加電啟動時(shí),主板BIOS會尋找到顯卡,復(fù)制顯卡中的VGA BIOS到系統(tǒng)預(yù)留VGA BIOS專用內(nèi)存空間中(地址0 xC0000 0 xCFFFF),并調(diào)用VGA BIOS初始化顯卡。每種顯卡都有自己專用的VGA BIOS
34、,存儲在顯卡ROM存儲區(qū)或主板BIOS中。如果需要在虛擬機(jī)中初始化顯卡,則必須在虛擬機(jī)BIOS中重新調(diào)用VGA BIOS。因此,我們需要提取VGA BIOS文件給虛擬機(jī),由虛擬機(jī)啟動時(shí)將該VGA BIOS代碼復(fù)制到VGA BIOS專用內(nèi)存空間中執(zhí)行顯卡的初始化。顯卡VGA BIOS的提取有很多種方式,具體如何提取需要視主板或顯卡情況而定。大部分顯卡的VGA BIOS可以用工具從內(nèi)存中提?。ㄈ鏏FLASH、GPU-Z等)。但有些顯卡,如NVIDIA顯卡,在VGA BIOS執(zhí)行時(shí)會自動修改自己在內(nèi)存中的部分代碼,直接提取到的VGA BIOS無法用來初始化顯卡。筆記本電腦集成的顯卡通常都會將顯卡BI
35、OS集成到主板BIOS中,我們可以通過提取主板BIOS,分析出顯卡BIOS存儲位置,提取對應(yīng)的VGA BIOS。DMA映射顯卡的DMA映射問題,采用直接地址映射技術(shù)技術(shù)解決,通過修改Linux操作系統(tǒng)內(nèi)核,預(yù)留從0 x0 x100000(1M)地址開始的物理內(nèi)存空間,直接映射給客戶機(jī)操作系統(tǒng)使用,解決了客戶機(jī)操作系統(tǒng)下直接對顯卡DMA的處理。小結(jié)虛擬機(jī)顯卡透傳技術(shù)解決了虛擬客戶機(jī)操作系統(tǒng)圖形顯示效果差的難題。在終端安全領(lǐng)域,顯卡透傳技術(shù)通過客戶機(jī)操作系統(tǒng)直接驅(qū)動物理顯卡獲得高質(zhì)量顯示效果,使得虛擬機(jī)中的客戶操作系統(tǒng)具有更普遍的適應(yīng)性,能夠滿足普通用戶的使用需求,為基于全系統(tǒng)虛擬化技術(shù)的操作系統(tǒng)
36、安全增強(qiáng)、進(jìn)程控制、病毒防護(hù)等技術(shù)的研究成果更進(jìn)一步的拓展了實(shí)用空間。由于時(shí)間和能力所限,本技術(shù)的研究成果主要適用于當(dāng)前主流的獨(dú)立顯存的顯卡,對于一些特殊顯卡或共享顯存的集成顯卡還會有些特殊處理,這里不再詳述。通過在華碩K40IP筆記本電腦(支持VT-x,不支持VT-d)上驗(yàn)證,主機(jī)向客戶機(jī)操作系統(tǒng)直接分配NVIDIA G205M顯卡,并安裝原廠驅(qū)動進(jìn)行測試,測試證明虛擬機(jī)操作系統(tǒng)的顯示效果得到質(zhì)的提升,獲得了和主機(jī)顯示完全接近的效果。參考文獻(xiàn)1董耀祖,周正偉.基于X86架構(gòu)的系統(tǒng)虛擬機(jī)技術(shù)與應(yīng)用J.計(jì)算機(jī)工程,2006 Vol. 32 (13): 71-732馬文琦. 基于虛擬化的多域安全框
37、架及其關(guān)鍵技術(shù)研究D. 湖南長沙:國防科學(xué)技術(shù)大學(xué)研究生院,20083杜 海,陳 榕. 基于完全虛擬化的進(jìn)程監(jiān)控方法J.計(jì)算機(jī)工程,2009Vol.35(8):88-904英特爾開源軟件技術(shù)中心,復(fù)旦大學(xué)并行處理研究所著.系統(tǒng)虛擬化原理與實(shí)現(xiàn)M.北京:清華大學(xué)出版社,20095 KVM-kernel-based Virtual MachineDB/OL./page/Main_Page,20106How to assign devices with VT-d in KVMDB/OL./page/How_to_assign_devices_with_VT-d_in_KVM ,20107河秦,王洪濤
38、.Linux2.6內(nèi)核標(biāo)準(zhǔn)教程M.北京:人民郵電出版社,20088Beng Heng Ng, Billy Lau, Atul Prakash. Direct Access to Graphics Card Leveraging VT-d Technical ReportR. HYPERLINK /bengheng/pubs/vgapt_techreport.pdf /bengheng/pubs/vgapt_techreport.pdf ,July 20, 20099PCI Local Bus Specification Revision 3.0. PCI Special Interest Gr
39、oup ,February 3,2004聲明:本課題無任何基金或項(xiàng)目支持作者簡介:侯建寧,1978,男,工程師,學(xué)士,主研方向:信息安全、虛擬化技術(shù)、網(wǎng)絡(luò)安全監(jiān)管技術(shù),手機(jī)貴山,高級工程師,博士,手機(jī)銀,工程師,學(xué)士申婭,工程師,學(xué)士附錄資料:不需要的可以自行刪除 busybox詳解制作根文件系統(tǒng)詳解制作根文件系統(tǒng) 一、FHS(Filesystem Hierarchy Standard)標(biāo)準(zhǔn)介紹當(dāng)我們在linux下輸入ls / 的時(shí)候,見到的目錄結(jié)構(gòu)以及這些目錄下的內(nèi)容都大同小異,這是因?yàn)樗械膌inux發(fā)行版在對根文件系統(tǒng)布局上都遵循FHS
40、標(biāo)準(zhǔn)的建議規(guī)定。該標(biāo)準(zhǔn)規(guī)定了根目錄下各個(gè)子目錄的名稱及其存放的內(nèi)容:目錄名存放的內(nèi)容/bin必備的用戶命令,例如ls、cp等/sbin必備的系統(tǒng)管理員命令,例如ifconfig、reboot等/dev設(shè)備文件,例如mtdblock0、tty1等/etc系統(tǒng)配置文件,包括啟動文件,例如inittab等/lib必要的鏈接庫,例如C鏈接庫、內(nèi)核模塊/home普通用戶主目錄/rootroot用戶主目錄/usr/bin非必備的用戶程序,例如find、du等/usr/sbin非必備的管理員程序,例如chroot、inetd等/usr/lib庫文件/var守護(hù)程序和工具程序所存放的可變,例如日志文件/pro
41、c用來提供內(nèi)核與進(jìn)程信息的虛擬文件系統(tǒng),由內(nèi)核自動生成目錄下的內(nèi)容/sys用來提供內(nèi)核與設(shè)備信息的虛擬文件系統(tǒng),由內(nèi)核自動生成目錄下的內(nèi)容/mnt文件系統(tǒng)掛接點(diǎn),用于臨時(shí)安裝文件系統(tǒng)/tmp臨時(shí)性的文件,重啟后將自動清除制作根文件系統(tǒng)就是要建立以上的目錄,并在其中建立完整目錄內(nèi)容。其過程大體包括:編譯安裝busybox,生成/bin、/sbin、/usr/bin、/usr/sbin目錄 利用交叉編譯工具鏈,構(gòu)建/lib目錄 手工構(gòu)建/etc目錄 手工構(gòu)建最簡化的/dev目錄 創(chuàng)建其它空目錄 配置系統(tǒng)自動生成/proc目錄 利用udev構(gòu)建完整的/dev目錄 制作根文件系統(tǒng)的jffs2映像文件
42、下面就來詳細(xì)介紹這個(gè)過程。二、編譯安裝busybox,生成/bin、/sbin、/usr/bin、/usr/sbin目錄這些目錄下存儲的主要是常用命令的二進(jìn)制文件。如果要自己編寫這幾百個(gè)常用命令的源程序,my god, 這簡直是一個(gè)噩夢!好在我們有嵌入式Linux系統(tǒng)的瑞士軍刀busybox,事情就簡單很多。1、從 HYPERLINK / / 下載busybox-1.7.0.tar.bz22、tar xjvf busybox-1.7.0.tar.bz2解包3、修改Makefile文件175 ARCH ?= arm176 CROSS_COMPILE ?= arm-linux- 4、make me
43、nuconfig配置busyboxbusybox配置主要分兩部分。第一部分是Busybox Settings,主要編譯和安裝busybox的一些選項(xiàng)。這里主要需要配置:1)、Build Options - Build BusyBox as a static binary (no shared libs),表示編譯busybox時(shí),是否靜態(tài)鏈接C庫。我們選擇動態(tài)鏈接C庫。2)、Installation Options - Applets links (as soft-links) - (X) as soft-links,表示安裝busybox時(shí),將各個(gè)命令安裝為指向busybox的軟鏈接還是硬鏈
44、接。我們選擇軟鏈接。3)、Installation Options - (/work/nfs_root/fs_mini3) BusyBox installation prefix,表示busybox的安裝位置。我們選擇/work/nfs_root/fs_mini34)Busybox Library Tuning。保留Command line editing以支持命令行編輯;保留History size以支持記憶歷史命令;選中Tab completion和Username completion以支持命令自動補(bǔ)全 第二部分是Applets,他將busybox的支持的幾百個(gè)命令分門別類。我們只要在各
45、個(gè)門類下選擇想要的命令即可。這里我們基本保持默認(rèn)設(shè)置。1)選中Networking Utilities - httpd下的Enable -u option,以啟用http服務(wù)器的功能allows the server to run as a specific user5、編譯busyboxmake6、安裝busyboxmake install安裝完成后,可以看到在/work/nfs_root/fs_mini3目錄下生成了binsbinusr/binusr/sbin目錄,其下包含了我們常用的命令,這些命令都是指向bin/busybox的軟鏈接,而busybox本身的大小不到800K:dennis
46、dennis-desktop:/work/nfs_root/fs_mini3$ lsbin linuxrc sbin usrdennisdennis-desktop:/work/nfs_root/fs_mini3$ ls -l bintotal 740lrwxrwxrwx 1 dennis dennis 7 2010-04-03 23:57 addgroup - busyboxlrwxrwxrwx 1 dennis dennis 7 2010-04-03 23:57 adduser - busyboxlrwxrwxrwx 1 dennis dennis 7 2010-04-03 23:57 a
47、sh - busybox-rwxr-xr-x 1 dennis dennis 749632 2010-04-03 23:57 busyboxlrwxrwxrwx 1 dennis dennis 7 2010-04-03 23:57 cat busybox 而普通PC機(jī)上的ls命令就有差不多80K的大?。?dennisdennis-desktop:/work/nfs_root/fs_mini3$ ls -l /bin/ls-rwxr-xr-x 1 root root 78004 2007-09-29 20:51 /bin/ls busybox以它嬌小的身軀容納了數(shù)以百計(jì)的命令代碼,實(shí)在是讓人佩服
48、不已,其不愧嵌入式系統(tǒng)瑞士軍刀之美譽(yù)。據(jù)說,busybox的作者身患絕癥,這更讓人欽佩GNU開源軟件的作者們。 三、利用交叉編譯工具鏈,構(gòu)建/lib目錄 光有應(yīng)用程序(命令)是不夠的,因?yàn)閼?yīng)用程序本身需要使用C庫的庫函數(shù),因此還必需制作for ARM的C庫,并將其放置于/lib目錄。my god,要自己寫C庫的源代碼嗎?不用!還記得交叉編譯工具鏈的3個(gè)組成部分嗎?交叉編譯器、for ARM的C庫和二進(jìn)制工具。哈哈,for ARM的C庫是現(xiàn)成的,我們只需要拷貝過來就可以了。遺憾的是:整個(gè)C庫目錄下的文件總大小有26M。而我們根文件系統(tǒng)所在分區(qū)不過區(qū)區(qū)16M而已,根本放不下。怎么辦呢? denni
49、sdennis-desktop:/work/nfs_root/fs_mini3$ du -s -si /work/tools/gcc-3.4.5-glibc-2.3.6/arm-linux/lib26M /work/tools/gcc-3.4.5-glibc-2.3.6/arm-linux/lib 需要C庫目錄下所有的文件嗎?no,absolutely no! 讓我們來分析一下glibc庫目錄下內(nèi)容的組成。該目錄下的子目錄和文件共分8類: 目標(biāo)文件,如crtn.o,用于gcc鏈接可執(zhí)行文件 libtool庫文件(.la),在鏈接庫文件時(shí)這些文件會被用到,比如他們列出了當(dāng)前庫文件所依賴的其它庫文
50、件,程序運(yùn)行時(shí)無需這些文件 gconv目錄,里面是各種鏈接腳本,在編譯應(yīng)用程序時(shí),他們用于指定程序的運(yùn)行地址,各段的位置等 靜態(tài)庫文件(.a),例如libm.a,libc.a 動態(tài)庫文件 (.so、.so.0-9*) 動態(tài)鏈接庫加載器ld-2.3.6.so、ld-linux.so.2 其它目錄及文件很顯然,第1、2、3、4、7類文件和目錄是不需要拷貝的。由于動態(tài)鏈接的應(yīng)用程序本身并不含有它所調(diào)用的C庫函數(shù)的代碼,因此執(zhí)行時(shí)需要動態(tài)鏈接庫加載器來為它加載相應(yīng)的C庫文件,所以第6類文件是需要拷貝的。除此之外,第5類文件當(dāng)然要拷貝。但第5類文件的大小也相當(dāng)大。dennisdennis-desktop
51、:/work/tools/gcc-3.4.5-glibc-2.3.6/arm-linux/lib$ du -c -si *.so* 7.2M total 需要全部拷貝嗎?非也,非也!其實(shí),需要哪些庫完全取決于要運(yùn)行的應(yīng)用程序使用了哪些庫函數(shù)。如果我們只制作最簡單的系統(tǒng),那么我們只需要運(yùn)行busybox這一個(gè)應(yīng)用程序即可。通過執(zhí)行 dennisdennis-desktop:/work/nfs_root/fs_mini3$ arm-linux-readelf -a bin/busybox | grep Shared0 x00000001 (NEEDED) Shared library: libcr
52、ypt.so.10 x00000001 (NEEDED) Shared library: libm.so.60 x00000001 (NEEDED) Shared library: libc.so.6 可知:busybox只用到了3個(gè)庫:通用C庫(libc)、數(shù)學(xué)庫(libm)、加密庫(libcrypt),因此我們只需要拷貝這3個(gè)庫的庫文件即可。但是每個(gè)庫都有4個(gè)文件,4個(gè)文件都要拷貝嗎?當(dāng)然不是。 dennisdennis-desktop:/work/tools/gcc-3.4.5-glibc-2.3.6/arm-linux/lib$ ls -l libcrypt.-*-rwxr-xr-x
53、1 dennis dennis 30700 2008-01-22 05:32 libcrypt-2.3.6.so-rw-r-r- 1 dennis dennis 23118 2008-01-22 05:32 libcrypt.alrwxrwxrwx 1 dennis dennis 13 2008-12-22 15:38 libcrypt.so - libcrypt.so.1lrwxrwxrwx 1 dennis dennis 17 2008-12-22 15:38 libcrypt.so.1 - libcrypt-2.3.6.sodennisdennis-desktop:/work/tools
54、/gcc-3.4.5-glibc-2.3.6/arm-linux/lib$ ls -l libm.-*-rwxr-xr-x 1 dennis dennis 779096 2008-01-22 05:31 libm-2.3.6.so-rw-r-r- 1 dennis dennis 1134282 2008-01-22 05:32 libm.alrwxrwxrwx 1 dennis dennis 9 2008-12-22 15:38 libm.so - libm.so.6lrwxrwxrwx 1 dennis dennis 13 2008-12-22 15:38 libm.so.6 - libm-
55、2.3.6.sodennisdennis-desktop:/work/tools/gcc-3.4.5-glibc-2.3.6/arm-linux/lib$ ls -l libc.-*-rwxr-xr-x 1 dennis dennis 1435660 2008-01-22 05:48 libc-2.3.6.so-rw-r-r- 1 dennis dennis 2768280 2008-01-22 05:31 libc.a-rw-r-r- 1 dennis dennis 195 2008-01-22 05:34 libc.solrwxrwxrwx 1 dennis dennis 13 2008-
56、12-22 15:38 libc.so.6 - libc-2.3.6.so 4個(gè)文件中的.a文件是靜態(tài)庫文件,是不需要拷貝的。另外3個(gè)文件是: 實(shí)際的共享鏈接庫:libLIBRARY_NAME-GLIBC_VERSION.so。當(dāng)然需要拷貝。 主修訂版本的符號鏈接,指向?qū)嶋H的共享鏈接庫:libLIBRARY_NAME.so.MAJOR_REVISION_VERSION,程序一旦鏈接了特定的鏈接庫,將會參用該符號鏈接。程序啟動時(shí),加載器在加載程序前,會檢索該文件。所以需要拷貝。 與版本無關(guān)的符號鏈接,指向主修訂版本的符號連接(libc.so是唯一的例外,他是一個(gè)鏈接命令行:libLIBRARY_
57、NAME.so,是為編譯程序時(shí)提供一個(gè)通用條目)。這些文件在程序被編譯時(shí)會被用到,但在程序運(yùn)行時(shí)不會被用到,所以不必拷貝它。關(guān)于共享庫的2個(gè)符號鏈接的作用的特別說明:當(dāng)我們使用gcc hello.c -o hello -lm編譯程序時(shí),gcc會根據(jù)-lm的指示,加頭(lib)添尾(.so)得到libm.so,從而沿著與版本無關(guān)的符號鏈接(libm.so - libm.so.6)找到libm.so.6并記錄在案(hello的ELF頭中),表示hello需要使用libm.so.6這個(gè)庫文件所代表的數(shù)學(xué)庫中的庫函數(shù)。而當(dāng)hello被執(zhí)行的時(shí)候,動態(tài)鏈接庫加載器會從hello的ELF頭中找到libm.
58、so.6這個(gè)記錄,然后沿著主修訂版本的符號鏈接(libm.so.6 - libm-2.3.6.so)找到實(shí)際的共享鏈接庫libm-2.3.6.so,從而將其與hello作動態(tài)鏈接??梢?,與版本無關(guān)的符號鏈接是供編譯器使用的,主修訂版本的符號鏈接是供動態(tài)鏈接庫加載器使用的,而實(shí)際的共享鏈接庫則是供應(yīng)用程序使用的。通過以上分析,我們只需要拷貝3個(gè)庫(每個(gè)庫各1個(gè)主修訂版本的符號鏈接和1個(gè)實(shí)際的共享鏈接庫)以及動態(tài)鏈接庫加載器(1個(gè)符號鏈接和1個(gè)實(shí)體文件)。步驟如下:dennisdennis-desktop:/work/tools/gcc-3.4.5-glibc-2.3.6/arm-linux/li
59、b$ mkdir /work/nfs_root/fs_mini3/lib dennisdennis-desktop:/work/tools/gcc-3.4.5-glibc-2.3.6/arm-linux/lib$ cp libcrypt-* /work/nfs_root/fs_mini3/libdennisdennis-desktop:/work/tools/gcc-3.4.5-glibc-2.3.6/arm-linux/lib$ cp -l libcrypt.so.* /work/nfs_root/fs_mini3/libdennisdennis-desktop:/work/tools/gc
60、c-3.4.5-glibc-2.3.6/arm-linux/lib$ cp libm-* /work/nfs_root/fs_mini3/libdennisdennis-desktop:/work/tools/gcc-3.4.5-glibc-2.3.6/arm-linux/lib$ cp -l libm.so.* /work/nfs_root/fs_mini3/libdennisdennis-desktop:/work/tools/gcc-3.4.5-glibc-2.3.6/arm-linux/lib$ cp libc-* /work/nfs_root/fs_mini3/libdennisde
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度個(gè)人別墅花園養(yǎng)護(hù)與管理服務(wù)合同4篇
- 二零二五年度化工企業(yè)技術(shù)人員知識產(chǎn)權(quán)保護(hù)合同2篇
- 2025年度藝術(shù)學(xué)校聘用聲樂教師合同協(xié)議4篇
- 2025年度智慧家居產(chǎn)品研發(fā)與制造普通勞動合同4篇
- 2025年度木工行業(yè)品牌建設(shè)與推廣分包合同4篇
- 二零二五年度拆遷安置補(bǔ)償糾紛調(diào)解合同匯編3篇
- 2025年度美團(tuán)外賣加盟店財(cái)務(wù)結(jié)算合同范本4篇
- 2025年度二手車交易合同
- 2025年度知識產(chǎn)權(quán)股權(quán)買賣及許可合同
- 2025年度熱水器安全檢測與維修服務(wù)合同2篇
- 2024版塑料購銷合同范本買賣
- JJF 2184-2025電子計(jì)價(jià)秤型式評價(jià)大綱(試行)
- GB/T 44890-2024行政許可工作規(guī)范
- 2024年安徽省中考數(shù)學(xué)試卷含答案
- 2025屆山東省德州市物理高三第一學(xué)期期末調(diào)研模擬試題含解析
- 2024年滬教版一年級上學(xué)期語文期末復(fù)習(xí)習(xí)題
- 兩人退股協(xié)議書范文合伙人簽字
- 2024版【人教精通版】小學(xué)英語六年級下冊全冊教案
- 汽車噴漆勞務(wù)外包合同范本
- 微項(xiàng)目 探討如何利用工業(yè)廢氣中的二氧化碳合成甲醇-2025年高考化學(xué)選擇性必修第一冊(魯科版)
- 2024年重慶南開(融僑)中學(xué)中考三模英語試題含答案
評論
0/150
提交評論