Breaking all the rules by copying 2.6.25 updates from other drivers on a "monkey see, monkey do" basis, I came up with three patches which let unicorn-0.9.3 build on 2.6.24. The modules even insert OK but I haven't tested more with them because 2.6.24-etchnhalf seems buggy on my network card.
The patches are attached, probably a hopelessly naive attempt to update the driver anyway :) As I say not tested in live running since I've not yet connected my Unicorn to a phone line ! The same three patches also let 0.9.3 compile OK on 2.6.25, however the link stage then fails with GPL violations (?!). Building in a patched /usr/src/modules with "m-a -t -o build unicorn" I get the following. Doubly annoying since I want the PCI driver and don't care about USB ! dh_clean -k # Build and install the module if [ 6 = 4 ]; then \ /usr/bin/make modules M=/usr/src/modules/unicorn HPATH=/lib/modules/2.6.25-2-686/build/include KERNEL_SOURCES=/lib/modules/2.6.25-2-686/build; \ /usr/bin/make only_modules_install KERNEL_SOURCES=/lib/modules/2.6.25-2-686/build \ DESTDIR=/usr/src/modules/unicorn/debian/unicorn-modules-2.6.25-2-686 KVERS=2.6.25-2-686; \ elif [ 6 = 6 ]; then \ /usr/bin/make -C libm modules; \ /usr/bin/make -C /lib/modules/2.6.25-2-686/build SUBDIRS=/usr/src/modules/unicorn/unicorn_pci \ INSTALL_MOD_PATH=/usr/src/modules/unicorn/debian/unicorn-modules-2.6.25-2-686 modules modules_install; \ /usr/bin/make -C /lib/modules/2.6.25-2-686/build SUBDIRS=/usr/src/modules/unicorn/unicorn_usb \ INSTALL_MOD_PATH=/usr/src/modules/unicorn/debian/unicorn-modules-2.6.25-2-686 modules modules_install; \ fi make[2]: Entering directory `/usr/src/modules/unicorn/libm' make[2]: Nothing to be done for `modules'. make[2]: Leaving directory `/usr/src/modules/unicorn/libm' make[2]: Entering directory `/usr/src/linux-headers-2.6.25-2-686' CC [M] /usr/src/modules/unicorn/unicorn_pci/../msw/linrapi.o CC [M] /usr/src/modules/unicorn/unicorn_pci/../msw/msw.o CC [M] /usr/src/modules/unicorn/unicorn_pci/../msw/crc.o CC [M] /usr/src/modules/unicorn/unicorn_pci/../amu/amas.o CC [M] /usr/src/modules/unicorn/unicorn_pci/../amu/amu.o CC [M] /usr/src/modules/unicorn/unicorn_pci/../unicorn_atm/unicorn_atmdrv.o CC [M] /usr/src/modules/unicorn/unicorn_pci/../unicorn_eth/unicorn_ethdrv.o LD [M] /usr/src/modules/unicorn/unicorn_pci/unicorn_pci_atm.o LD [M] /usr/src/modules/unicorn/unicorn_pci/unicorn_pci_eth.o Building modules, stage 2. MODPOST 2 modules LD [M] /usr/src/modules/unicorn/unicorn_pci/unicorn_pci_atm.ko LD [M] /usr/src/modules/unicorn/unicorn_pci/unicorn_pci_eth.ko INSTALL /usr/src/modules/unicorn/unicorn_pci/unicorn_pci_atm.ko INSTALL /usr/src/modules/unicorn/unicorn_pci/unicorn_pci_eth.ko DEPMOD 2.6.25-2-686 make[2]: Leaving directory `/usr/src/linux-headers-2.6.25-2-686' make[2]: Entering directory `/usr/src/linux-headers-2.6.25-2-686' CC [M] /usr/src/modules/unicorn/unicorn_usb/../msw/linrapi.o CC [M] /usr/src/modules/unicorn/unicorn_usb/../msw/msw.o CC [M] /usr/src/modules/unicorn/unicorn_usb/../msw/crc.o CC [M] /usr/src/modules/unicorn/unicorn_usb/../amu/amas.o CC [M] /usr/src/modules/unicorn/unicorn_usb/../amu/amu.o CC [M] /usr/src/modules/unicorn/unicorn_usb/../unicorn_atm/unicorn_atmdrv.o CC [M] /usr/src/modules/unicorn/unicorn_usb/../unicorn_eth/unicorn_ethdrv.o LD [M] /usr/src/modules/unicorn/unicorn_usb/unicorn_usb_atm.o LD [M] /usr/src/modules/unicorn/unicorn_usb/unicorn_usb_eth.o Building modules, stage 2. MODPOST 2 modules FATAL: modpost: GPL-incompatible module unicorn_usb_eth.ko uses GPL-only symbol 'usb_unlink_urb' make[3]: *** [__modpost] Error 1 make[2]: *** [modules] Error 2 make[2]: Leaving directory `/usr/src/linux-headers-2.6.25-2-686'
Index: unicorn/unicorn_pci/unicorn_pcidrv.c =================================================================== --- unicorn.orig/unicorn_pci/unicorn_pcidrv.c 2008-08-07 12:39:04.000000000 +0100 +++ unicorn/unicorn_pci/unicorn_pcidrv.c 2008-08-07 12:39:42.000000000 +0100 @@ -992,7 +992,11 @@ phys_base,dev->mem,dev->mem_size); // Initialize and connect the interrupt +#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,24) status = request_irq(pci_dev->irq, unicorn_isr, SA_SHIRQ, "unicorn_pci", dev); +#else + status = request_irq(pci_dev->irq, unicorn_isr, IRQF_SHARED, "unicorn_pci", dev); +#endif if (status) { WARN("Failed to connect Interrupt,status=%d\n",status); return status;
Index: unicorn/unicorn_usb/unicorn_usbdrv.c =================================================================== --- unicorn.orig/unicorn_usb/unicorn_usbdrv.c 2008-08-07 12:36:13.000000000 +0100 +++ unicorn/unicorn_usb/unicorn_usbdrv.c 2008-08-07 12:36:16.000000000 +0100 @@ -148,7 +148,9 @@ unsigned int pipe, void *buf, int length, int packet_size, usb_complete_t complete, void *context) { +#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,24) spin_lock_init(&urb->lock); +#endif urb->dev=dev; urb->pipe=pipe; urb->transfer_buffer=buf;
Index: unicorn/unicorn_eth/unicorn_ethdrv.c =================================================================== --- unicorn.orig/unicorn_eth/unicorn_ethdrv.c 2008-08-07 12:47:19.000000000 +0100 +++ unicorn/unicorn_eth/unicorn_ethdrv.c 2008-08-07 12:47:22.000000000 +0100 @@ -1391,7 +1391,9 @@ } unicorn_ethdrv = drv = eth_dev->priv; memset(drv, 0, sizeof(struct unicorn_ethdrv)); +#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,24) SET_MODULE_OWNER(eth_dev); +#endif drv->dev = eth_dev; drv->adsl_status = ADSL_STATUS_NOHARDWARE; drv->vpi = VPI;