Debian 上 Xen 和 X 之间的 bug
2010年11月1日 | 标签: debian, mmio, x window, xen
上周五 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 只存在使用共享显卡的机器上,如果使用独立显卡就不会有这个问题。