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

来源:互联网 发布:淘宝用什么打折软件 编辑:程序博客网 时间:2024/05/30 04:29


今天把我的gentoo同步了一下,发现内核从2.16.17-gentoo-r8升级到了2.16.18-gentoo-r2,就直接make oldconfig,升级了内核,紧接着执行module-rebuild rebuild命令来重新编译依赖于内核的相关模块。
发现在编译ati-driver的时候出现了错误,有两个常量声明无法找到:
代码:
CC [M] /var/tmp/portage/ati-drivers-8.27.10-r1/work/common/lib/modules/fglrx/build_mod/firegl_public.o/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)/var/tmp/portage/ati-drivers-8.27.10-r1/work/common/lib/modules/fglrx/build_mod/firegl_public.c: In function 'firegl_stub_open':/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/var/tmp/portage/ati-drivers-8.27.10-r1/work/common/lib/modules/fglrx/build_mod/firegl_public.c: In function '__ke_vm_map':/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)/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/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.)make[1]: *** [/var/tmp/portage/ati-drivers-8.27.10-r1/work/common/lib/modules/fglrx/build_mod/firegl_public.o] Error 1make: *** [_module_/var/tmp/portage/ati-drivers-8.27.10-r1/work/common/lib/modules/fglrx/build_mod] Error 2make: Leaving directory `/usr/src/linux-2.6.18-gentoo-r2' * DRM module not built>>> Source compiled.>>> Test phase [not enabled]: x11-drivers/ati-drivers-8.27.10-r1>>> Install ati-drivers-8.27.10-r1 into /var/tmp/portage/ati-drivers-8.27.10-r1/image/ category x11-drivers * Installing fglrx moduleinstall: cannot stat `fglrx.ko': No such file or directory!!! ERROR: x11-drivers/ati-drivers-8.27.10-r1 failed.Call stack: ebuild.sh, line 1546: Called dyn_install ebuild.sh, line 1020: Called src_install ati-drivers-8.27.10-r1.ebuild, line 205: Called linux-mod_src_install linux-mod.eclass, line 510: Called die!!! doins fglrx.ko failed!!! If you need support, post the topmost build error, and the call stack if relevant.!!! 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文件如下:
代码:
#define UTS_RELEASE "2.6.18-gentoo-r2"#define LINUX_VERSION_CODE 132626#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 *,发现下面的一行:
代码:
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包含的头文件中添加这一行也可。
昵称: ooio_karl  时间: 2006-11-13 21:17:00
今天把我的gentoo同步了一下,发现内核从2.16.17-gentoo-r8升级到了2.16.18-gentoo-r2,就直接make oldconfig,升级了内核,紧接着执行module-rebuild rebuild命令来重新编译依赖于内核的相关模块。
发现在编译ati-driver的时候出现了错误,有两个常量声明无法找到:
代码:
CC [M] /var/tmp/portage/ati-drivers-8.27.10-r1/work/common/lib/modules/fglrx/build_mod/firegl_public.o/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)/var/tmp/portage/ati-drivers-8.27.10-r1/work/common/lib/modules/fglrx/build_mod/firegl_public.c: In function 'firegl_stub_open':/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/var/tmp/portage/ati-drivers-8.27.10-r1/work/common/lib/modules/fglrx/build_mod/firegl_public.c: In function '__ke_vm_map':/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)/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/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.)make[1]: *** [/var/tmp/portage/ati-drivers-8.27.10-r1/work/common/lib/modules/fglrx/build_mod/firegl_public.o] Error 1make: *** [_module_/var/tmp/portage/ati-drivers-8.27.10-r1/work/common/lib/modules/fglrx/build_mod] Error 2make: Leaving directory `/usr/src/linux-2.6.18-gentoo-r2' * DRM module not built>>> Source compiled.>>> Test phase [not enabled]: x11-drivers/ati-drivers-8.27.10-r1>>> Install ati-drivers-8.27.10-r1 into /var/tmp/portage/ati-drivers-8.27.10-r1/image/ category x11-drivers * Installing fglrx moduleinstall: cannot stat `fglrx.ko': No such file or directory!!! ERROR: x11-drivers/ati-drivers-8.27.10-r1 failed.Call stack: ebuild.sh, line 1546: Called dyn_install ebuild.sh, line 1020: Called src_install ati-drivers-8.27.10-r1.ebuild, line 205: Called linux-mod_src_install linux-mod.eclass, line 510: Called die!!! doins fglrx.ko failed!!! If you need support, post the topmost build error, and the call stack if relevant.!!! 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文件如下:
代码:
#define UTS_RELEASE "2.6.18-gentoo-r2"#define LINUX_VERSION_CODE 132626#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 *,发现下面的一行:
代码:
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包含的头文件中添加这一行也可。
昵称: ooio_karl  时间: 2006-11-13 21:17:00
原创粉丝点击