Xenの公式カーネルは2.6.18止まりですが、各方面で2.6.27のパッチが出ています。
xen-patches-2.6.27-6.tar.bz2
http://code.google.com/p/gentoo-xen-kernel/downloads/list
xen-sources-2.6.27-r4.ebuild
ビルド手順はこちらのページを参考にしました:
ebuild /usr/portage/sys-kernel/xen-sources/xen-sources-2.6.27-r2.ebuild digest
http://www.stbbs.net/blog/2008/11/xen-dom0-linux-2627.html
emerge xen-sources
私の環境では最後のリンクに失敗しました。
arch/x86/kernel/built-in.o: In function `show_cpuinfo': proc.c:(.text+0xc0a0): undefined reference to `cpufreq_quick_get' make: *** [.tmp_vmlinux1] Error 1
cpufreq_quick_get()はcpufreq.hで宣言されていますが、CONFIG_CPU_FREQが有効でない場合は常に0を返す関数で置き換えられるはずです。
/* query the last known CPU freq (in kHz). If zero, cpufreq couldn't detect it */ #if defined(CONFIG_CPU_FREQ) || defined(CONFIG_PROCESSOR_EXTERNAL_CONTROL) unsigned int cpufreq_quick_get(unsigned int cpu); #else static inline unsigned int cpufreq_quick_get(unsigned int cpu) { return 0; } #endif
CONFIG_PROCESSOR_EXTERNAL_CONTROLが有効になっているのが原因ですね。これを無効にして再ビルドします。
というのが正しい方法ですが、面倒なので arch/x86/kernel/cpu/proc.c を書き換えてごまかしました。
Xenを使う場合は CONFIG_PROCESSOR_EXTERNAL_CONTROL が有効になるようです。
config PROCESSOR_EXTERNAL_CONTROL bool depends on (X86 || IA64) && XEN default y
これを無効にすると影響が出ると考えられるため、arch/x86/kernel/cpu/proc.c を書き換えます。
if (cpu_has(c, X86_FEATURE_TSC)) { unsigned int freq = 0;//cpufreq_quick_get(cpu); if (!freq) freq = cpu_khz; seq_printf(m, "cpu MHz\t\t: %u.%03u\n", freq / 1000, (freq % 1000)); }
とりあえず動いています。
Linux ***** 2.6.27-xen-r4 #4 SMP Thu Dec 18 23:36:50 JST 2008 x86_64 Intel(R) Atom(TM) CPU 330 @ 1.60GHz GenuineIntel GNU/Linux