Debian 上 Xen 和 X 之间的 bug

上周五 VPSee 在一台新 PC 上安装 Debian 的时候遇到一堆问题,先是安装程序没有找到网卡,没有网卡就需要自己编译驱动,但是编译又需要一些编译包、头文件和库,没有网络就没法 apt-get(因为只下载了 cd1),所以不得不从另外一台机器上下载网卡驱动 e1000e-1.2.10.tar.gz(内核树里居然也没有发现这款网卡,需要从 Intel 官网下载)以及编译驱动所必须的软件包和依赖包。最后 dpkg -i 软件包到 Debian、编译驱动、modprobe 驱动到内核,终于找到网卡。好不容易配好了网络,开始装 X,配置 X Window 的时候居然没有找到鼠标,一查原因原来是 gpm 鼠标服务由于某种原因没起来。最后把 X Window 和窗口管理器装上又发现字体和渲染都很难看,然后又下载其他的字体更改 .fonts.conf. 好不容易可以用桌面了,却发现在 Debian 上安装完 Xen 后进入 Xen(2.6.26-1xen-amd64)内核启动 X Window 就报错:

$ uname -r
2.6.26-1-xen-amd64

$ tail /var/log/Xorg.0.log 
(==) intel(0): RGB weight 888
(==) intel(0): Default visual is TrueColor
(II) intel(0): Integrated Graphics Chipset: Intel(R) G33
(--) intel(0): Chipset: "G33"
(--) intel(0): Linear framebuffer at 0xC0000000
(--) intel(0): IO registers at addr 0xD0300000

Fatal server error:
xf86MapVidMem: Could not mmap framebuffer (0xd0300000,0x80000) (Invalid argument)

VPSee 发现只要用 Xen 内核启动就无法进入 X,但是用原来的内核启动就可以。Debian 用户组有人2008年就报告了这个 bug,原因是 Debian 自带的这个 Xen 内核 2.6.26-1-xen-amd64 在启动 X 调用 mmap () 的时候,CPU 和显卡之间作内存映射(MMIO)出错,导致 X Window 不能启动。这个 bug 居然到现在都没有解决,可能大家都用 Debian 做 Xen 服务器,很少拿 Debian 桌面和 Xen 一起用吧。目前最简单的解决办法是限制 dom0 的内存(小于 2GB 就可以):

# vi /boot/grub/menu.lst
...
kernel          /boot/xen-3.2-1-amd64.gz dom0_mem=1024mb
...

这个 bug 只存在使用共享显卡的机器上,如果使用独立显卡就不会有这个问题。