という組合せで,nvidia.ko が compile できないという問題.
具体的には,
/usr/src/modules/nvidia-kernel/nv/nv.c: In function 'nvidia_init_module': /usr/src/modules/nvidia-kernel/nv/nv.c:1326: error: too many arguments to function 'kmem_cache_create' /usr/src/modules/nvidia-kernel/nv/nv.c:1435: error: too many arguments to function 'kmem_cache_create' /usr/src/modules/nvidia-kernel/nv/nv.c:1569: error: void value not ignored as it ought to be /usr/src/modules/nvidia-kernel/nv/nv.c: In function 'nvidia_exit_module': /usr/src/modules/nvidia-kernel/nv/nv.c:1601: error: void value not ignored as it ought to be
という error でこける.kmem_cache_create に関しては <URL:http://git.kernel.org/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commitdiff;h=9a79b2274186fade17134929d4f85b70d59a3840#patch115> の
struct kmem_cache *kmem_cache_create(const char *, size_t, size_t,
unsigned long,
- void (*)(void *, struct kmem_cache *, unsigned long),
void (*)(void *, struct kmem_cache *, unsigned long));
という部分の影響.これに関しては,
diff -uw nv/nv-linux.h.orig nv/nv-linux.h
--- nv/nv-linux.h.orig 2007-09-09 13:49:04.000000000 +0900
+++ nv/nv-linux.h 2007-09-09 13:49:14.000000000 +0900
@@ -533,7 +533,7 @@
#define NV_KMEM_CACHE_CREATE(kmem_cache, name, type) \
{ \
kmem_cache = kmem_cache_create(name, sizeof(type), \
- 0, 0, NULL, NULL); \
+ 0, 0, NULL); \
}
#define NV_KMEM_CACHE_DESTROY(kmem_cache) \
とかして対応.
void value not ignored as it ought to be
-extern int unregister_chrdev(unsigned int, const char *); +extern void unregister_chrdev(unsigned int, const char *);
という部分の影響.これに関しては,
diff -uw nv/nv.c.orig nv/nv.c
--- nv/nv.c.orig 2007-09-09 13:50:30.000000000 +0900
+++ nv/nv.c 2007-09-09 13:52:11.000000000 +0900
@@ -1566,8 +1566,7 @@
if (apm_nv_dev[i] != NULL) pm_unregister(apm_nv_dev[i]);
#endif
- if (unregister_chrdev(nv_major, "nvidia") < 0)
- nv_printf(NV_DBG_ERRORS, "NVRM: unregister nv chrdev failed\n");
+ unregister_chrdev(nv_major, "nvidia");
for (i = 0; i < num_nv_devices; i++)
{
@@ -1598,8 +1597,7 @@
nv_printf(NV_DBG_INFO, "NVRM: nvidia_exit_module\n");
- if (unregister_chrdev(nv_major, "nvidia") < 0)
- nv_printf(NV_DBG_ERRORS, "NVRM: unregister nv chrdev failed\n");
+ unregister_chrdev(nv_major, "nvidia");
for (i = 0; i < num_nv_devices; i++)
{
とかして対応.
ちなみに普通に nvidia.ko (というか,それを含む .deb) を作る時は,
% sudo module-assistant build nvidia-kernel
とかで済ますのであるが,こけた時の原因を探るには,
% cd /usr/src/modules/nvidia-kernel % sudo make -f debian/rules KVERS=`uname -r` KSRC=/lib/modules/`uname -r`/source KDREV=0.1 binary_modules
とかで探ってやれば良さげ.nvidia-kernel-source の本体は
/usr/src/nvidia-kernel-source.tar.gz
にあるので,本来はそこに patch をあててやるべきな気がしないでもないが, 上述の make で .deb が吐けるので, kernel をあげる度に対応することに適当に修正をかけることにする.
Last-modified: Tue Aug 26 23:12:49 +0900 2008