書:The Definitive Guide to the Xen Hypervisor 的範例程式碼可以在這邊找到 http://www.informit.com/store/definitive-guide-to-the-xen-hypervisor-9780132349710

第二章的範例很簡單,就是一個 hello world,但是要改的地方也不少,有下列幾點。完整的 diff 檔將附在文章最後面。

1) 首先要讓這個範例程式可以編譯成功,必須把 xen 原始碼的 include 資料夾加入 gcc 的 -I 參數中。很剛好,我們重新編譯 xen 時就已經下載了 xen 的整包原始碼,我們可以將資料夾指過去就好,請注意看 diff 檔的第 10-11 行。請注意你的 xen 是放在哪個資料夾,無論是相對、或是絕對路徑都可以。

2) 在 x64 的環境編譯 x86 的程式時需要加上 -m32,link 時要加上 -m elf_i386,請參考第 12-14 行,以及第 23 行。

以上兩個都改好就可以編譯成功,執行的方式是透過 xm 這個 xen 的控制工具,範例也很貼心的提供了一個 config 檔叫作是 domain_config,使用他開啟就可以了。

$ sudo xm create domain_config

 

不過第一次嘗試執行時,卻出現:

Error: Cannot find kernel "testkernel"

 

Oops!! 明明就存在阿,可是他就是找不到=__=  後來我嘗試使用絕對路徑,他就找到了...可能必須再深究一下為什麼。雖然找到了,可是當 xen 載入核心時卻出現了這樣的錯誤訊息:

Error: (2, 'Invalid kernel', 'panic: xc_dom_boot.c:127: xc_dom_compat_check: guest type xen-3.0-x86_32 not supported by xen kernel, sorry') 

 

似乎是因為該 kernel 與 xen 提供的功能不相容的緣故,我們透過指令 xm info 可以看到:

<前略>

virt_caps : hvm
total_memory : 4094
free_memory : 127
free_cpus : 0
xen_major : 4
xen_minor : 2
xen_extra : .1
xen_caps : xen-3.0-x86_64 xen-3.0-x86_32p hvm-3.0-x86_32 hvm-3.0-x86_32p hvm-3.0-x86_64
xen_scheduler : credit
xen_pagesize : 4096

<後略>

 

恩~因為我們 kernel 是 PV 的,對於 PV 的 kernel 來看只支援 x86_64 或是 x86_32p 這裡的p應該是指 PAE 。看來是必須讓我們的 kernel "回報"支援 PAE,雖然事實上我們根本沒有用到 PAE :p ,修改方法很簡單,只要將 bootstrap.x86-32.S 中的 pae="no" 改為 pae="yes" 即可,請參考 diff 的 39-40 行。到此為止就可以正確執行了。

從 xm list 可以看到我們的 test_kernel 執行中:

 $ sudo xm list
Name              ID    Mem  VCPUs    State   Time(s)
Domain-0           0   3915      4   r-----     250.7
Simplest_Kernel    2     32      1   r-----      12.9

 

至於 test_kernel 所印出來的 Hello World 則必須透過 xm dmesg 中看到:

<前略>

(XEN) PCI add device 0000:02:00.0
(XEN) PCI add device 0000:03:0e.0
(XEN) no cpu_id for acpi_id 4
(XEN) no cpu_id for acpi_id 5
(XEN) no cpu_id for acpi_id 6
Hello World 

 

如果想要結束的話,要透過 destroy 的指令,目標可以是 domain ID 或是 domain 名稱(如 Simplest_Kernel),domain ID 可以透過剛剛的 xm list 查詢到:

$ xm destroy <dom-ID|dom-Name>

 

最後附上 diff 檔,或是可以直接從 github 下載整包 code: https://github.com/koukaipan/xen-examples

參考資料:http://www.blogjava.net/zellux/archive/2008/10/17/235056.html

arrow
arrow
    文章標籤
    xen pae kernel xm
    全站熱搜

    koukaipan 發表在 痞客邦 留言(0) 人氣()