LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1490|回复: 7

自制xorg-server 1.7.3 vmware显卡补丁ebuild

[复制链接]
发表于 2009-12-7 21:35:39 | 显示全部楼层 |阅读模式
目前xf86-video-vmware显卡驱动不支持最新的xorg-server 1.7.3,表现为启动黑屏。bug报告见
http://bugs.gentoo.org/show_bug.cgi?id=292634

我做了一个ebuild来临时解决。

步骤如下:

1. 在/etc/make.conf中加一行

  1. PORTDIR_OVERLAY="/usr/local/portage"
复制代码

如果已经有了则不用再加

2.建立overlay目录

  1. mkdir -p /usr/local/portage/x11-drivers/
复制代码


3.复制xf86-video-vmware的ebuild到overlay

  1. cp -rf /usr/portage/x11-drivers/xf86-video-vmware /usr/local/portage/x11-drivers/
复制代码


4.新增本人自制ebuild文件,先运行命令行

  1. nano -w /usr/local/portage/x11-drivers/xf86-video-vmware/xf86-video-vmware-10.16.8-r1.ebuild
复制代码

然后把如下代码粘贴进nano编辑器,按Ctrl+X确认保存退出。(用ssh访问你的linux粘贴起会方便一点)

  1. # Copyright 1999-2009 Gentoo Foundation
  2. # Distributed under the terms of the GNU General Public License v2
  3. # $Header: /var/cvsroot/gentoo-x86/x11-drivers/xf86-video-vmware/xf86-video-vmware-10.16.8.ebuild,v 1.1 2009/10/03 11:59:20 scarabeus Exp $

  4. # Must be before x-modular eclass is inherited
  5. #SNAPSHOT="yes"

  6. inherit x-modular

  7. DESCRIPTION="VMware SVGA video driver"
  8. KEYWORDS="~amd64 ~x86 ~x86-fbsd"
  9. IUSE=""

  10. RDEPEND=">=x11-base/xorg-server-1.0.99.901"
  11. DEPEND="${RDEPEND}
  12.         x11-proto/fontsproto
  13.         x11-proto/randrproto
  14.         x11-proto/renderproto
  15.         x11-proto/xextproto
  16.         x11-proto/xineramaproto
  17.         x11-proto/xproto"
  18. src_unpack() {
  19.         unpack ${A}
  20.         cd "${S}"

  21.         epatch "${FILESDIR}"/vmware-new-r1.patch
  22. }

复制代码

或者直接下载附件1 : xf86-video-vmware-10.16.8-r1.ebuild

5.生成补丁文件,执行命令行: nano -w /usr/local/portage/x11-drivers/xf86-video-vmware/files/vmware-new-r1.patch
然后把如下代码粘贴进nano编辑器,按Ctrl+X确认保存退出

  1. diff --git a/src/vmware.c b/src/vmware.c
  2. index 6004677..b5a5099 100644
  3. --- a/src/vmware.c
  4. +++ b/src/vmware.c
  5. @@ -146,38 +146,6 @@ static PciChipsets VMWAREPciChipsets[] = {
  6.      { -1,                     -1,                  RES_UNDEFINED }
  7. };

  8. -static const char *vgahwSymbols[] = {
  9. -    "vgaHWGetHWRec",
  10. -    "vgaHWGetIOBase",
  11. -    "vgaHWGetIndex",
  12. -    "vgaHWInit",
  13. -    "vgaHWProtect",
  14. -    "vgaHWRestore",
  15. -    "vgaHWSave",
  16. -    "vgaHWSaveScreen",
  17. -    "vgaHWUnlock",
  18. -    NULL
  19. -};
  20. -
  21. -static const char *fbSymbols[] = {
  22. -    "fbCreateDefColormap",
  23. -    "fbPictureInit",
  24. -    "fbScreenInit",
  25. -    NULL
  26. -};
  27. -
  28. -static const char *ramdacSymbols[] = {
  29. -    "xf86CreateCursorInfoRec",
  30. -    "xf86DestroyCursorInfoRec",
  31. -    "xf86InitCursor",
  32. -    NULL
  33. -};
  34. -
  35. -static const char *shadowfbSymbols[] = {
  36. -    "ShadowFBInit2",
  37. -    NULL
  38. -};
  39. -
  40. #ifdef XFree86LOADER
  41. static XF86ModuleVersionInfo vmwareVersRec = {
  42.      "vmware",
  43. @@ -640,8 +608,6 @@ VMWAREPreInit(ScrnInfoPtr pScrn, int flags)
  44.          return FALSE;
  45.      }

  46. -    xf86LoaderReqSymLists(vgahwSymbols, NULL);
  47. -
  48.      if (!vgaHWGetHWRec(pScrn)) {
  49.          return FALSE;
  50.      }
  51. @@ -959,7 +925,6 @@ VMWAREPreInit(ScrnInfoPtr pScrn, int flags)
  52.          VMWAREFreeRec(pScrn);
  53.          return FALSE;
  54.      }
  55. -    xf86LoaderReqSymLists(fbSymbols, shadowfbSymbols, NULL);

  56.      /* Need ramdac for hwcursor */
  57.      if (pVMWARE->hwCursor) {
  58. @@ -967,7 +932,6 @@ VMWAREPreInit(ScrnInfoPtr pScrn, int flags)
  59.              VMWAREFreeRec(pScrn);
  60.              return FALSE;
  61.          }
  62. -        xf86LoaderReqSymLists(ramdacSymbols, NULL);
  63.      }

  64.      return TRUE;
  65. @@ -2051,9 +2015,6 @@ vmwareSetup(pointer module, pointer opts, int *errmaj, int *errmin)
  66.          setupDone = TRUE;
  67.          xf86AddDriver(&VMWARE, module, VMWARE_DRIVER_FUNC);

  68. -        LoaderRefSymLists(vgahwSymbols, fbSymbols, ramdacSymbols,
  69. -                          shadowfbSymbols, NULL);
  70. -
  71.          return (pointer)1;
  72.      }
  73.      if (errmaj) {
复制代码

或者直接下载附件2 : vmware-new-r1.patch

6.进入overlay目录,生成数字签名

  1. cd /usr/local/portage/x11-drivers/xf86-video-vmware/
  2. ebuild xf86-video-vmware-10.16.8-r1.ebuild digest
复制代码


7.重新编译新的xf86-video-vmware包,按确认前看看是不是提示升级成x11-drivers/xf86-video-vmware-10.16.8-r1这个包,是就对了。

  1. emerge -av xf86-video-vmware
复制代码


8.startx或其它方式启动X,看是不是解决黑屏了。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
发表于 2009-12-8 00:27:04 | 显示全部楼层
mybox xf86-video-vmware # ls
         ChangeLog     xf86-video-vmware-10.16.5.ebuild
         Manifest      xf86-video-vmware-10.16.7.ebuild
         files         xf86-video-vmware-10.16.8-r1.ebuild
         metadata.xml  xf86-video-vmware-10.16.8.ebuild

mybox xf86-video-vmware # ebuild xf86-video-vmware-10.16.8-r1.ebuild digest
         Appending /usr/local/portage to PORTDIR_OVERLAY...
         >>> Creating Manifest for /usr/local/portage/x11-drivers/xf86-video-vmware
         digest.assumed                 2
              xf86-video-vmware-10.16.5::xf86-video-vmware-10.16.5.tar.bz2
              xf86-video-vmware-10.16.7::xf86-video-vmware-10.16.7.tar.bz2

[ebuild   R   ] x11-drivers/xf86-video-vmware-10.16.8  USE="-debug" 0 kB

Total: 1 package (1 reinstall), Size of downloads: 0 kB

Would you like to merge these packages? [Yes/No]

没成功!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-12-8 01:06:08 | 显示全部楼层
我用的ACCEPT_KEYWORDS="~amd64"(见/etc/make.conf文件),你如果是 "x86"的话要改成"~x86",如果是"amd64"要改为"~amd64",否则有些最新的包你装不到。

要先做一次emerge --sync来同步到最新的portage树。

再重新做一次签名。

然后你用 emerge -av =xf86-video-vmware-10.16.8-r1 来指定版本升级试试。
回复 支持 反对

使用道具 举报

发表于 2009-12-8 09:35:25 | 显示全部楼层
amd64 的稳定分支会碰到这个问题吗?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-12-8 15:10:30 | 显示全部楼层
要要装的不是xorg-server 1.7.3就没事,这个新版本去掉了一些过期的符号,而被去掉的符号被xf86-video-vmware引用了,所以X启动出错。
回复 支持 反对

使用道具 举报

发表于 2010-1-27 22:59:14 | 显示全部楼层
Post by 没本;2053818
要要装的不是xorg-server 1.7.3就没事,这个新版本去掉了一些过期的符号,而被去掉的符号被xf86-video-vmware引用了,所以X启动出错。


我用xorg-server-1.6.5-r1 搭配 xf86-video-vmware-10.16.8 使用出现黑屏,同时 /var/log/Xorg.0.log 里也没有 “(EE)” 的错误。是不是相应的bug,如何判断是否是个此类不过?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2010-1-28 16:37:25 | 显示全部楼层
Post by canwolf;2065475
我用xorg-server-1.6.5-r1 搭配 xf86-video-vmware-10.16.8 使用出现黑屏,同时 /var/log/Xorg.0.log 里也没有 “(EE)” 的错误。是不是相应的bug,如何判断是否是个此类不过?


用SSH连过去startx试试看报什么错,这个补丁针对的错我也是这么发现的。
回复 支持 反对

使用道具 举报

发表于 2010-1-29 13:34:45 | 显示全部楼层
Post by 没本;2065661
用SSH连过去startx试试看报什么错,这个补丁针对的错我也是这么发现的。
谢谢回复.
首先是:
  1. # Xorg -configure
  2. # X -config /root/xorg.conf.new
  3. > expected keysym, got XF86TouchpadToggle: line 122 of inet
  4. > expected keysym, got XF86TouchpadToggle: line 122 of inet
  5. > expected keysym, got XF86TouchpadToggle: line 122 of inet
  6. > expected keysym, got XF86TouchpadToggle: line 122 of inet
复制代码
接着
  1. #startx
  2. > expected keysym, got XF86TouchpadToggle: line 122 of inet
  3. > expected keysym, got XF86TouchpadToggle: line 122 of inet
  4. > expected keysym, got XF86TouchpadToggle: line 122 of inet
  5. > expected keysym, got XF86TouchpadToggle: line 122 of inet
  6. > /etc/X11/xinit/xinitrc: line 58: twm: command not found
  7. > /etc/X11/xinit/xinitrc: line 59: xclock: command not found
  8. > /etc/X11/xinit/xinitrc: line 60: xterm: command not found
  9. > /etc/X11/xinit/xinitrc: line 61: xterm: command not found
  10. > /etc/X11/xinit/xinitrc: line 62: exec: xterm: not found
复制代码
上面的 “command not found” 可以理解,但 “ > expected keysym, got XF86TouchpadToggle: line 122 of inet”   是什么意思?不明白
昨晚只emerge twm了,网速太慢了,其他今晚回去再emerge
(昨晚把我搞怒了,关键时刻小区一哥们限e网速,攻击e,网速本来也不快,这不穷人欺负穷人吗,所以火拼了一把没来得emerge。)

终于出来了。:yun:
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表