Problem with martian-modem; can no longer be compiled as of kernel >=3.10?

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Dear board users;
I have tried and tried again to build from
martian-full-20100123.tar.gz, however it seems it can no longer be
built, even with the no_const patch (my kernel has grsec patches) from
Gentoo bugzilla (https://bugs.gentoo.org/show_bug.cgi?id=447434) as
well as the Makefile patch (located here:
http://sources.gentoo.org/cgi-bin/viewvc.cgi/gentoo-x86/net-dialup/martian-modem/files/martian-modem-20100123-makefile.patch?content-type=text%2Fplain&revision=1.1)
to fix kernel version detection.

My current system is as follows:
$ uname -a:
Linux security 3.10.25-0-grsec #1-Alpine SMP Mon Dec 30 12:48:08 UTC
2013 i686 Linux
$ lspci (note Alpinelinux uses busybox, which does not seem to print
any more useful information than hardware identifiers, when using
lspci/lsusb)
00:00.0 Class 0600: 1039:0746
00:01.0 Class 0604: 1039:0002
00:02.0 Class 0601: 1039:0964
00:02.5 Class 0101: 1039:5513
00:03.0 Class 0c03: 1039:7001
00:03.1 Class 0c03: 1039:7001
00:03.2 Class 0c03: 1039:7001
00:03.3 Class 0c03: 1039:7002
00:09.0 Class 0200: 8086:1229
00:0a.0 Class 0200: 8086:100c
00:0b.0 Class 0780: 11c1:0442
00:0c.0 Class 0703: 10b9:5459
00:0d.0 Class 0280: 1814:0701
00:0e.0 Class 0200: 10ec:8169
01:00.0 Class 0300: 10de:0322

The compile log is as follows:
security:~/martian-full-20100123# make
make -C kmodule/ modules
make[1]: Entering directory '/root/martian-full-20100123/kmodule'
make -C /lib/modules/3.10.25-0-grsec/build
M="/root/martian-full-20100123/kmodule"  modules
make[2]: Entering directory '/usr/src/linux-headers-3.10.25-0-grsec'
  CC [M]  /root/martian-full-20100123/kmodule/martian.o
/root/martian-full-20100123/kmodule/martian.c: In function 'martian_isr':
/root/martian-full-20100123/kmodule/martian.c:135:27: warning: value
computed is not used [-Wunused-value]
     process_stream (mdev) && (rd7 &= ~4);
                           ^
/root/martian-full-20100123/kmodule/martian.c: In function 'martian_open':
/root/martian-full-20100123/kmodule/martian.c:187:9: error: implicit
declaration of function 'PDE' [-Werror=implicit-function-declaration]
  struct proc_dir_entry *entry = PDE (inode);
         ^
/root/martian-full-20100123/kmodule/martian.c:187:33: warning:
initialization makes pointer from integer without a cast [enabled by
default]
  struct proc_dir_entry *entry = PDE (inode);
                                 ^
/root/martian-full-20100123/kmodule/martian.c:188:49: error:
dereferencing pointer to incomplete type
  struct martian *mdev = (struct martian *) entry->data;
                                                 ^
/root/martian-full-20100123/kmodule/martian.c: At top level:
/root/martian-full-20100123/kmodule/martian.c:596:1: error: expected
'=', ',', ';', 'asm' or '__attribute__' before 'martian_configure_isr'
 martian_configure_isr (struct martian *mdev)
 ^
/root/martian-full-20100123/kmodule/martian.c:618:1: error: expected
'=', ',', ';', 'asm' or '__attribute__' before
'martian_configure_params'
 martian_configure_params (struct martian *mdev)
 ^
/root/martian-full-20100123/kmodule/martian.c: In function 'martian_add':
/root/martian-full-20100123/kmodule/martian.c:715:2: error: implicit
declaration of function 'martian_configure_isr'
[-Werror=implicit-function-declaration]
  martian_configure_isr (mdev);
  ^
/root/martian-full-20100123/kmodule/martian.c:716:2: error: implicit
declaration of function 'martian_configure_params'
[-Werror=implicit-function-declaration]
  martian_configure_params (mdev);
  ^
/root/martian-full-20100123/kmodule/martian.c:739:2: error: implicit
declaration of function 'create_proc_entry'
[-Werror=implicit-function-declaration]
  mdev->entry = create_proc_entry (name, 0400, NULL);
  ^
/root/martian-full-20100123/kmodule/martian.c:739:14: warning:
assignment makes pointer from integer without a cast [enabled by
default]
  mdev->entry = create_proc_entry (name, 0400, NULL);
              ^
/root/martian-full-20100123/kmodule/martian.c:751:13: error:
dereferencing pointer to incomplete type
  mdev->entry->proc_fops = & martian_fops;
             ^
/root/martian-full-20100123/kmodule/martian.c:752:13: error:
dereferencing pointer to incomplete type
  mdev->entry->data   = mdev;
             ^
/root/martian-full-20100123/kmodule/martian.c: At top level:
/root/martian-full-20100123/kmodule/martian.c:796:1: error: expected
'=', ',', ';', 'asm' or '__attribute__' before
'martian_device_gatherinfo'
 martian_device_gatherinfo (const struct pci_dev *dev, const struct
pci_device_id *ent, struct martian_metrics *metrics)
 ^
/root/martian-full-20100123/kmodule/martian.c:1001:1: error: expected
'=', ',', ';', 'asm' or '__attribute__' before 'mars_device_probe'
 mars_device_probe (struct pci_dev *dev, const struct pci_device_id *ent)
 ^
/root/martian-full-20100123/kmodule/martian.c:1039:23: error: expected
'=', ',', ';', 'asm' or '__attribute__' before 'mars_remove'
 static void __devexit mars_remove (struct pci_dev *dev)
                       ^
In file included from /root/martian-full-20100123/kmodule/martian.c:1045:0:
/root/martian-full-20100123/kmodule/martian_ids.c:11:15: error:
expected '=', ',', ';', 'asm' or '__attribute__' before 'static'
 __devinitdata static struct pci_device_id martian_ids[] = {
               ^
/root/martian-full-20100123/kmodule/martian.c:1050:12: error:
'mars_device_probe' undeclared here (not in a function)
  .probe  = mars_device_probe,
            ^
/root/martian-full-20100123/kmodule/martian.c:1051:2: error: implicit
declaration of function '__devexit_p'
[-Werror=implicit-function-declaration]
  .remove  = __devexit_p (mars_remove),
  ^
/root/martian-full-20100123/kmodule/martian.c:1051:26: error:
'mars_remove' undeclared here (not in a function)
  .remove  = __devexit_p (mars_remove),
                          ^
/root/martian-full-20100123/kmodule/martian.c:1052:14: error:
'martian_ids' undeclared here (not in a function)
  .id_table = martian_ids
              ^
/root/martian-full-20100123/kmodule/martian.c:1065:23: error: expected
'=', ',', ';', 'asm' or '__attribute__' before
'detach_from_serial_class'
 static void __devinit detach_from_serial_class (unsigned int class,
unsigned int mask)
                       ^
/root/martian-full-20100123/kmodule/martian.c:1086:23: error: expected
'=', ',', ';', 'asm' or '__attribute__' before 'detach_from_serial'
 static void __devinit detach_from_serial(void)
                       ^
/root/martian-full-20100123/kmodule/martian.c: In function 'martian_init':
/root/martian-full-20100123/kmodule/martian.c:1107:2: error: implicit
declaration of function 'detach_from_serial'
[-Werror=implicit-function-declaration]
  detach_from_serial();
  ^
In file included from /root/martian-full-20100123/kmodule/martian.c:35:0:
/root/martian-full-20100123/kmodule/martian.c: At top level:
include/linux/module.h:90:32: error: '__mod_pci_device_table' aliased
to undefined symbol 'martian_ids'
 extern const struct gtype##_id __mod_##gtype##_table  \
                                ^
include/linux/module.h:143:3: note: in expansion of macro 'MODULE_GENERIC_TABLE'
   MODULE_GENERIC_TABLE(type##_device,name)
   ^
/root/martian-full-20100123/kmodule/martian.c:1127:1: note: in
expansion of macro 'MODULE_DEVICE_TABLE'
 MODULE_DEVICE_TABLE( pci, martian_ids );
 ^
cc1: some warnings being treated as errors
scripts/Makefile.build:308: recipe for target
'/root/martian-full-20100123/kmodule/martian.o' failed
make[3]: *** [/root/martian-full-20100123/kmodule/martian.o] Error 1
Makefile:1290: recipe for target
'_module_/root/martian-full-20100123/kmodule' failed
make[2]: *** [_module_/root/martian-full-20100123/kmodule] Error 2
make[2]: Leaving directory '/usr/src/linux-headers-3.10.25-0-grsec'
Makefile:20: recipe for target 'modules' failed
make[1]: *** [modules] Error 2
make[1]: Leaving directory '/root/martian-full-20100123/kmodule'
Makefile:9: recipe for target 'all' failed
make: *** [all] Error 2

>From what I've dug up online, these errors seem to be indicative of
large changes that occurred recently in the kernel. The proc interface
itself seems to have changed significantly, for instance, PDE_DATA
replacing PDE, and proc_create taking the place of create_proc_entry,
while others seem to have something to do with the __devinit,
__devinitdata and __devexit_p macros, to name some or most of the
issues. I have created a partial patch that managed to cut the errors
down from 21 to 13, however I seem to have stumped myself and cannot
get past the "mdev->entry->data   = mdev;" error. As it is, I would
prefer it if my patch were looked over anyway for anything I have
overlooked.

The patch is as follows (note the old lines commented out):

--- martian-full-20100123.orig/kmodule/martian.c
+++ martian-full-20100123/kmodule/martian.c
@@ -184,8 +184,9 @@
 static int martian_open (struct inode *inode, struct file *filp)
 {
        // allow single open
-       struct proc_dir_entry *entry = PDE (inode);
-       struct martian *mdev = (struct martian *) entry->data;
+//     struct proc_dir_entry *entry = PDE (inode);
+//     struct martian *mdev = (struct martian *) entry->data;
+       struct martian *mdev = (struct martian *) PDE_DATA (inode);

        if (test_and_set_bit (MARTIAN_STATE_OPEN, &mdev->state)) {
                // already opened
@@ -592,7 +593,7 @@

 static int dev_idx = 0;

-static void __devinit
+static void //__devinit
 martian_configure_isr (struct martian *mdev)
 {
        struct martian_common *mcb = mdev->common;
@@ -614,7 +615,7 @@
        mcb->dp_bamil_rd7 = 0xff;
 }

-static void __devinit
+static void //__devinit
 martian_configure_params (struct martian *mdev)
 {
        mdev->params.dsp_mars   = mdev->metrics.dsp_mars;
@@ -736,7 +737,8 @@
        // create proc entry for this device
        name[ strlen(name) - 1 ] = '0' + dev_idx;

-       mdev->entry = create_proc_entry (name, 0400, NULL);
+//     mdev->entry = create_proc_entry (name, 0400, NULL);
+       mdev->entry = proc_create (name, 0400, NULL, &martian_fops);
        if (! mdev->entry) {
                MERROR ("martian: failed to create /proc/%s\n", name);
                ret = -ENOMEM;
@@ -748,8 +750,9 @@
        // set an index
        mdev->index = dev_idx;

-       mdev->entry->proc_fops = & martian_fops;
+//     mdev->entry->proc_fops = & martian_fops;
        mdev->entry->data        = mdev;
+

        pr_info("martian: added device %x:%x "
                        "BaseAddress = 0x%x, CommAddres = 0x%x, irq = %d%s\n",


Thank you in advance, I humbly await anybody's assistance in repairing
this problem.
-- Matt Schultz




[Index of Archives]     [Linux Media Development]     [Asterisk]     [DCCP]     [Netdev]     [X.org]     [Xfree86]     [Fedora Women]     [Linux USB]

  Powered by Linux