[linux-dvb] Backwards Compatability

Michael Krufky mkrufky at m1k.net
Sun Nov 13 16:49:12 CET 2005


As of now, dvb-kernel will build on kernels 2.6.13 through 2.6.15-rc1.

I have to track down some patches in order to restore compatability with 
2.6.12 and earlier... Any help would be appreciated.

We are now welcoming patches that allow backwards compatability with 
older kernels, but please keep the following guidelines in mind:

Backwards-compatability patches must be completely separate from patches 
that add functionality and bugfixes.  This way, the patches can be 
applied to cvs separately, and it will be easier to identify 
backwards-compat patches and prevent them from being sent upstream.

#IF KERNEL_VERSION [</>] KERNEL_VERSION(X,Y,Z)  IS allowed, but still 
frowned upon, if the logic can be done in another way.  Do not include 
version.h into any source files.... Instead, include compat.h, which 
already has both version.h and utsname.h included.  The idea is to put 
as much of the backwards compatability code into compat.h as possible, 
rather than inline.

Here's an example of an upstream patch (from 2.6.15-rc1) that breaks 
compatability with 2.6.14 and earlier:

diff -u -r1.44 -r1.45
--- dvb-kernel/linux/drivers/media/dvb/dvb-core/dvbdev.c	2005/07/01 23:19:48	1.44
+++ dvb-kernel/linux/drivers/media/dvb/dvb-core/dvbdev.c	2005/11/13 07:33:19	1.45
@@ -235,7 +235,7 @@
 			S_IFCHR | S_IRUSR | S_IWUSR,
 			"dvb/adapter%d/%s%d", adap->num, dnames[type], id);
 
-	class_device_create(dvb_class, MKDEV(DVB_MAJOR, nums2minor(adap->num, type, id)),
+	class_device_create(dvb_class, NULL, MKDEV(DVB_MAJOR, nums2minor(adap->num, type, id)),
 			    NULL, "dvb%d.%s%d", adap->num, dnames[type], id);
 	dprintk("DVB: register adapter%d/%s%d @ minor: %i (0x%02x)\n",

To make this backwards compatable, I applied the following:

diff -u -r1.1 -r1.2
--- dvb-kernel/build-2.6/compat.h	2005/10/01 17:01:45	1.1
+++ dvb-kernel/build-2.6/compat.h	2005/11/13 07:39:10	1.2
@@ -45,5 +47,8 @@
 # define BTTV_BOARD_PINNACLESAT BTTV_PINNACLESAT
 #endif
 
+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,15)
+# define class_device_create(a, b, c, d, e, f, g, h) class_device_create(a, c, d, e, f, g, h)
+#endif
 
 #endif

diff -u -r1.26 -r1.27
--- dvb-kernel/linux/drivers/media/dvb/dvb-core/dvbdev.h	2005/03/17 03:12:43	1.26
+++ dvb-kernel/linux/drivers/media/dvb/dvb-core/dvbdev.h	2005/11/13 07:39:10	1.27
@@ -29,6 +29,7 @@
 #include <linux/list.h>
 #include <linux/devfs_fs_kernel.h>
 #include <linux/smp_lock.h>
+#include "compat.h"
 
 #define DVB_MAJOR 212

Another issue to point out, for each new directory that includes 
compat.h, the following must be done to the makelinks script:

diff -u -r1.21 -r1.22
--- dvb-kernel/makelinks	2005/10/02 01:02:00	1.21
+++ dvb-kernel/makelinks	2005/11/13 07:39:10	1.22
@@ -49,3 +49,5 @@
 ln -v -f -s $PWD/build-2.6/compat.h $1/drivers/media/common/compat.h
 ln -v -f -s $1/drivers/media/video/bttv.h $1/drivers/media/common/bttv.h
 ln -v -f -s $PWD/build-2.6/compat.h $1/drivers/media/dvb/bt8xx/compat.h
+ln -v -f -s $PWD/build-2.6/compat.h $1/drivers/media/dvb/dvb-core/compat.h
+ln -v -f -s $1/drivers/media/video/bttv.h $1/drivers/media/dvb/dvb-core/bttv.h

This is somewhat of a hack, but it isn't really that bad.  This was the 
easiest way to get the compat.h magic to work under both compile methods 
(make / makelinks) ...  I had to do this in order to prevent breaking 
the makelinks compile method.   If anyone knows of a better way to make 
this work, please feel free to propose a new patch.

-Michael Krufky



More information about the linux-dvb mailing list