Xen中的工具libxc

2021-06-19 03:50:17 字數 1507 閱讀 6440

libxc

是乙個

c語言 庫,它提供了一些簡單易用的

api ,使使用者程式可以方便的和

hypervisor

進行通訊。

它的工作原理很簡單,主要封裝了

dom0

中的/proc/xen/privcmd

,/dev/xen/evtchn

以及/dev/xen/gntdev

提供的ioctl

介面。也就是說,我們本來可以直接通過上面這些核心級裝置驅動進行相關的操作控制,但有了libxc之後,只需要呼叫其相應介面函式,由它負責資料結構的解析/封裝,然後再與底層hypervisor通訊。這就是為什麼說xm發出命令之後,到達xend,而xend需要呼叫libxc再處理後才與底層hypervisor通訊:libxc是乙個介面庫。

/proc/xen/privcmd

1.xc_inte***ce_open()

開啟/proc/xen/privcmd,獲得檔案描述符。

2.xc_sysctl()

填充xen_sysctl結構體,傳送ioctl請求。

3.xc_inte***ce_close()

關閉1中開啟的檔案描述

/dev/xen/evtchn

1.xc_evtchn_open

2.xc_evtchn_notify等函式

evtchn的操作比較簡單,不需要填充結構體,一般指明遠端dom id,port即可

3.xc_evtchn_close

/dev/xen/gntdev

1.xc_gnttab_open

2.xc_gnttab_map_grant_ref等

3.xc_gnttab_close

用來控制xen核心的庫,位於xen-../tools/libxc。包括兩個部分:

乙個是libxenctrl,封裝了各種hypercall提供的功能,其函式列表在xenctrl.h中列出;

另乙個是libxenguest,提供在核心中建立domain的方法,其函式列表在xenguest.h中列出。

若在核心中通過修改hypercall的方式為xen新增功能,需要在libxenctrl中進行封裝。

libxc中的函式的第乙個引數均為int xc_handler,這其實是乙個控制代碼,這個控制代碼對應著dom0中與guest kernel進行互動的proc檔案,即/proc/xen/privcmd。

libxc中進行hypercall的呼叫可以利用do_domctl這個函式,這個函式的定義在xc_private.h中。do_domctl的第二個引數struct xen_domctl封裝了乙個hypercall的number and arguments。

如要在其中加入自己的新介面,需要在libxc目錄下執行make install命令,之後,可以自己編寫乙個小型c程式,並引用,在編譯時加入引數-lxenctrl就可以了。

深入理解Xen工具棧(ToolStack)

dom0通常會包含乙個工具棧 toolstack 其能夠實現讓使用者完成虛擬機器的建立 刪除 配置等功能。此工具棧還提供了乙個訪問介面,因此,其管理功能還可以通過相應的命令列工具 圖形化控制台或者如cloudstack或openstack類的雲計算環境來完成。xen能夠與多個不同的工具棧結合工作,如...

Opensolaris 在xen中的PVM 捷徑。

一直以下,都想在xen oracle vm 中安裝opensolaris但又不想用hvm方式,用virt install死活不認nfs location。最近發現 opensolaris joes for vm,提供了一種 啟動方式,記錄如下 改一下xen 64bit.sh,如下 cat xen 6...

Xen的裝置驅動

半虛擬化guest os無論如何都需要修改才能執行,因此,虛擬化環境必須使用guest os系統現有驅動要求就不存在了,然而讓客戶作業系統開發人員編寫大量 同樣也不是乙個很好的設計方案,因此xen的方式是提供抽象裝置,抽象裝置實現了針對特定裝置類的高階介面,如xen提供了抽象的塊裝置,而不是提供sc...