LinuxSir.cn,穿越时空的Linuxsir!

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

ati-driver在2.16.18-gentoo-r2内核编译有问题及解决方法!!!

[复制链接]
发表于 2006-11-13 16:17:14 | 显示全部楼层 |阅读模式
今天把我的gentoo同步了一下,发现内核从2.16.17-gentoo-r8升级到了2.16.18-gentoo-r2,就直接make oldconfig,升级了内核,紧接着执行module-rebuild rebuild命令来重新编译依赖于内核的相关模块。
发现在编译ati-driver的时候出现了错误,有两个常量声明无法找到:

  1.   CC [M]  /var/tmp/portage/ati-drivers-8.27.10-r1/work/common/lib/modules/fglrx/build_mod/firegl_public.o
  2. /var/tmp/portage/ati-drivers-8.27.10-r1/work/common/lib/modules/fglrx/build_mod/firegl_public.c:233: error: 'UTS_RELEASE' undeclared here (not in a function)
  3. /var/tmp/portage/ati-drivers-8.27.10-r1/work/common/lib/modules/fglrx/build_mod/firegl_public.c: In function 'firegl_stub_open':
  4. /var/tmp/portage/ati-drivers-8.27.10-r1/work/common/lib/modules/fglrx/build_mod/firegl_public.c:559: warning: assignment discards qualifiers from pointer target type
  5. /var/tmp/portage/ati-drivers-8.27.10-r1/work/common/lib/modules/fglrx/build_mod/firegl_public.c: In function '__ke_vm_map':
  6. /var/tmp/portage/ati-drivers-8.27.10-r1/work/common/lib/modules/fglrx/build_mod/firegl_public.c:3159: error: 'VM_SHM' undeclared (first use in this function)
  7. /var/tmp/portage/ati-drivers-8.27.10-r1/work/common/lib/modules/fglrx/build_mod/firegl_public.c:3159: error: (Each undeclared identifier is reported only once
  8. /var/tmp/portage/ati-drivers-8.27.10-r1/work/common/lib/modules/fglrx/build_mod/firegl_public.c:3159: error: for each function it appears in.)
  9. make[1]: *** [/var/tmp/portage/ati-drivers-8.27.10-r1/work/common/lib/modules/fglrx/build_mod/firegl_public.o] Error 1
  10. make: *** [_module_/var/tmp/portage/ati-drivers-8.27.10-r1/work/common/lib/modules/fglrx/build_mod] Error 2
  11. make: Leaving directory `/usr/src/linux-2.6.18-gentoo-r2'
  12. * DRM module not built
  13. >>> Source compiled.
  14. >>> Test phase [not enabled]: x11-drivers/ati-drivers-8.27.10-r1

  15. >>> Install ati-drivers-8.27.10-r1 into /var/tmp/portage/ati-drivers-8.27.10-r1/image/ category x11-drivers
  16. * Installing fglrx module
  17. install: cannot stat `fglrx.ko': No such file or directory

  18. !!! ERROR: x11-drivers/ati-drivers-8.27.10-r1 failed.
  19. Call stack:
  20.   ebuild.sh, line 1546:   Called dyn_install
  21.   ebuild.sh, line 1020:   Called src_install
  22.   ati-drivers-8.27.10-r1.ebuild, line 205:   Called linux-mod_src_install
  23.   linux-mod.eclass, line 510:   Called die

  24. !!! doins fglrx.ko failed
  25. !!! If you need support, post the topmost build error, and the call stack if relevant.

  26. !!! This ebuild is from an overlay: '/usr/portage'
复制代码


1)先看UTS_RELEASE:进入到var/tmp/portage/ati-drivers-8.27.10-r1/work/common/lib/modules/fglrx/build_mod/目录下,有一个make.sh脚本,发现原来是编译fglrx驱动的时候出现的问题,通过make.sh脚本内容得出脚本是从$linuxincludes/linux/version.h文件中来获取UTS_RELEASE,于是我就看了一下$linuxincludes/linux/version.h文件,发现并没有UTS_RELEASE,于是参看了以前的内核中对应的文件,而以前内核的version.h文件是包含UTS_RELEASE的预定义的,于是用grep UTS_RELEASE *命令看了一下,发现对于UTS_RELEASE的预定义18已经把它放到utsrelease.h头文件中。因此这个错误是由于新内核修改了预定义变量的位置引起的。所以,要想编译通过,只需修改$linuxincludes/linux/version.h文件,把预定义的变量加上即可,我的$linuxincludes/linux/version.h文件如下:

  1. #define UTS_RELEASE "2.6.18-gentoo-r2"
  2. #define LINUX_VERSION_CODE 132626
  3. #define KERNEL_VERSION(a,b,c) (((a) << 16) + ((b) << 8) + (c))
复制代码


2)VM_SHM:
第2个问题和第一个类似,于是就直接到/usr/src/linux/inlcude/linux下执行grep VM_SHM *,没有任何发现。想到是不是内核头文件更新太快,所以到/usr/include/linux下执行grep VM_SHM *,发现下面的一行:

  1. mm.h:#define VM_SHM             0x00000000      /* Means nothing: delete it later */
复制代码

原来如此,因为VM_SHM已经没有任何意义了,所以在老的.h中已经提醒大家,这个预定义将在以后会删除掉,所以在新的内核源文件中就看不到了!
不过,既然fglrx还要使用这个预定义,我们可以在mm.h中再把这一行添加上就可以了,但是也不行,原来firegl_public.c中并没有include mm.h文件,现在有两个办法,第一,使用ebuild命令将ati-drivers包解开,然后再firegl_public.c文件中手动添加一行,然后再编译、安装;第二,在一个firegl_public.c包含的头文件中添加这一行也可。
发表于 2006-11-13 16:40:16 | 显示全部楼层
直接把 ati-drivers unmask了,装 8.30.3。
回复 支持 反对

使用道具 举报

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

本版积分规则

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