Hi Wolfgang,

On Thursday 10 December 2009 13:37, Wolfgang Grandegger wrote:
> Matthias Fuchs wrote:
> > Hi,
> > 
> > does anybody succeed in setting up SC on a 2.6.18 kernel?
> > I need to get it up on a RHEL/CentOs 5.3 system.
> > 
> > On the first glance there have been incompatibel changes in 
> > sysfs support. I don't dare to talk about netlink support.
> 
> Netlink support requires kernel version > 2.6.24. 
I know. We stepped backwards to sysfs.

> What are the issues with 2.6.18.

Here is my build output with only the ESD_PCI driver enabled. Also ISOTP and 
BCM are
disabled because 2.6.18 lacks hrtimers support. But these are also not needed.

matth...@debby:~/svn/socketcan/trunk/kernel/2.6$ make 
KERNELDIR=/usr/src/linux-2.6-2.6.18.dfsg.1 -k
make -C /usr/src/linux-2.6-2.6.18.dfsg.1 
M=/data/home/matthias/svn/socketcan/trunk/kernel/2.6 modules 
TOPDIR=/data/home/matthias/svn/socketcan/trunk/kernel/2.6
make[1]: Entering directory `/usr/src/linux-2.6-2.6.18.dfsg.1'
  CC [M]  
/data/home/matthias/svn/socketcan/trunk/kernel/2.6/drivers/net/can/vcan.o
  CC [M]  
/data/home/matthias/svn/socketcan/trunk/kernel/2.6/drivers/net/can/dev.o
  CC [M]  
/data/home/matthias/svn/socketcan/trunk/kernel/2.6/drivers/net/can/sysfs.o
/data/home/matthias/svn/socketcan/trunk/kernel/2.6/drivers/net/can/sysfs.c: In 
function ‘can_dev_show’:
/data/home/matthias/svn/socketcan/trunk/kernel/2.6/drivers/net/can/sysfs.c:72: 
warning: implicit declaration of function ‘to_net_dev’
=> I fixed this like this:
Replace
        struct net_device *dev = to_net_dev(d);
by
        struct net_device *dev = d->driver_data;

But I don't believe it's correct ;-)

/data/home/matthias/svn/socketcan/trunk/kernel/2.6/drivers/net/can/sysfs.c:72: 
warning: initialization makes pointer from integer without a cast
/data/home/matthias/svn/socketcan/trunk/kernel/2.6/drivers/net/can/sysfs.c: In 
function ‘can_dev_store’:
/data/home/matthias/svn/socketcan/trunk/kernel/2.6/drivers/net/can/sysfs.c:102: 
warning: initialization makes pointer from integer without a cast
/data/home/matthias/svn/socketcan/trunk/kernel/2.6/drivers/net/can/sysfs.c: In 
function ‘can_btc_show’:
/data/home/matthias/svn/socketcan/trunk/kernel/2.6/drivers/net/can/sysfs.c:262: 
warning: initialization makes pointer from integer without a cast
/data/home/matthias/svn/socketcan/trunk/kernel/2.6/drivers/net/can/sysfs.c: In 
function ‘can_bt_show’:
/data/home/matthias/svn/socketcan/trunk/kernel/2.6/drivers/net/can/sysfs.c:302: 
warning: initialization makes pointer from integer without a cast
/data/home/matthias/svn/socketcan/trunk/kernel/2.6/drivers/net/can/sysfs.c: In 
function ‘can_bt_store’:
/data/home/matthias/svn/socketcan/trunk/kernel/2.6/drivers/net/can/sysfs.c:330: 
warning: initialization makes pointer from integer without a cast
/data/home/matthias/svn/socketcan/trunk/kernel/2.6/drivers/net/can/sysfs.c: In 
function ‘can_stat_show’:
/data/home/matthias/svn/socketcan/trunk/kernel/2.6/drivers/net/can/sysfs.c:445: 
warning: initialization makes pointer from integer without a cast
/data/home/matthias/svn/socketcan/trunk/kernel/2.6/drivers/net/can/sysfs.c: In 
function ‘can_create_sysfs’:
/data/home/matthias/svn/socketcan/trunk/kernel/2.6/drivers/net/can/sysfs.c:499: 
error: ‘struct net_device’ has no member named ‘dev’
/data/home/matthias/svn/socketcan/trunk/kernel/2.6/drivers/net/can/sysfs.c:500: 
error: ‘struct net_device’ has no member named ‘dev’
/data/home/matthias/svn/socketcan/trunk/kernel/2.6/drivers/net/can/sysfs.c:501: 
error: ‘struct net_device’ has no member named ‘dev’
/data/home/matthias/svn/socketcan/trunk/kernel/2.6/drivers/net/can/sysfs.c:502: 
error: ‘struct net_device’ has no member named ‘dev’
/data/home/matthias/svn/socketcan/trunk/kernel/2.6/drivers/net/can/sysfs.c:503: 
error: ‘struct net_device’ has no member named ‘dev’
/data/home/matthias/svn/socketcan/trunk/kernel/2.6/drivers/net/can/sysfs.c:505: 
error: ‘struct net_device’ has no member named ‘dev’
/data/home/matthias/svn/socketcan/trunk/kernel/2.6/drivers/net/can/sysfs.c:514: 
error: ‘struct net_device’ has no member named ‘dev’
/data/home/matthias/svn/socketcan/trunk/kernel/2.6/drivers/net/can/sysfs.c: In 
function ‘can_remove_sysfs’:
/data/home/matthias/svn/socketcan/trunk/kernel/2.6/drivers/net/can/sysfs.c:525: 
error: ‘struct net_device’ has no member named ‘dev’
/data/home/matthias/svn/socketcan/trunk/kernel/2.6/drivers/net/can/sysfs.c:526: 
error: ‘struct net_device’ has no member named ‘dev’
/data/home/matthias/svn/socketcan/trunk/kernel/2.6/drivers/net/can/sysfs.c:527: 
error: ‘struct net_device’ has no member named ‘dev’
/data/home/matthias/svn/socketcan/trunk/kernel/2.6/drivers/net/can/sysfs.c:528: 
error: ‘struct net_device’ has no member named ‘dev’
/data/home/matthias/svn/socketcan/trunk/kernel/2.6/drivers/net/can/sysfs.c:529: 
error: ‘struct net_device’ has no member named ‘dev’
/data/home/matthias/svn/socketcan/trunk/kernel/2.6/drivers/net/can/sysfs.c:531: 
error: ‘struct net_device’ has no member named ‘dev’
/data/home/matthias/svn/socketcan/trunk/kernel/2.6/drivers/net/can/sysfs.c:533: 
error: ‘struct net_device’ has no member named ‘dev’
=> I fixed this like this:

#define CAN_CREATE_FILE(_dev, _name)                                    \
//      if (device_create_file(&_dev->dev, &dev_attr_##_name)) \
        if (device_create_file(_dev->class_dev.dev, &dev_attr_##_name))         
\
                dev_err(ND2D(_dev),                                     \
                        "Couldn't create device file for ##_name\n")

#define CAN_REMOVE_FILE(_dev, _name)                                    \
        device_remove_file(_dev->class_dev.dev, &dev_attr_##_name)
//      device_remove_file(&_dev->dev->dev, &dev_attr_##_name)


make[3]: *** 
[/data/home/matthias/svn/socketcan/trunk/kernel/2.6/drivers/net/can/sysfs.o] 
Error 1
  CC [M]  
/data/home/matthias/svn/socketcan/trunk/kernel/2.6/drivers/net/can/sja1000/sja1000.o
  CC [M]  
/data/home/matthias/svn/socketcan/trunk/kernel/2.6/drivers/net/can/sja1000/sja1000_platform.o
/data/home/matthias/svn/socketcan/trunk/kernel/2.6/drivers/net/can/sja1000/sja1000_platform.c:38:2:
 error: #error This driver does not support Kernel versions < 2.6.27
/data/home/matthias/svn/socketcan/trunk/kernel/2.6/drivers/net/can/sja1000/sja1000_platform.c:
 In function ‘sp_probe’:
/data/home/matthias/svn/socketcan/trunk/kernel/2.6/drivers/net/can/sja1000/sja1000_platform.c:78:
 warning: implicit declaration of function ‘resource_size’
=> easy to fix

make[4]: *** 
[/data/home/matthias/svn/socketcan/trunk/kernel/2.6/drivers/net/can/sja1000/sja1000_platform.o]
 Error 1
  CC [M]  
/data/home/matthias/svn/socketcan/trunk/kernel/2.6/drivers/net/can/sja1000/esd_pci.o
/data/home/matthias/svn/socketcan/trunk/kernel/2.6/drivers/net/can/sja1000/esd_pci.c:41:2:
 error: #error This driver does not support Kernel versions < 2.6.21
/data/home/matthias/svn/socketcan/trunk/kernel/2.6/drivers/net/can/sja1000/esd_pci.c:102:
 error: ‘PCI_VENDOR_ID_ESDGMBH’ undeclared here (not in a function)
/data/home/matthias/svn/socketcan/trunk/kernel/2.6/drivers/net/can/sja1000/esd_pci.c:107:
 error: ‘PCI_DEVICE_ID_PLX_9030’ undeclared here (not in a function)
=> easy to fix

/data/home/matthias/svn/socketcan/trunk/kernel/2.6/drivers/net/can/sja1000/esd_pci.c:
 In function ‘esd_pci_init_one’:
/data/home/matthias/svn/socketcan/trunk/kernel/2.6/drivers/net/can/sja1000/esd_pci.c:253:
 warning: comparison between pointer and integer
/data/home/matthias/svn/socketcan/trunk/kernel/2.6/drivers/net/can/sja1000/esd_pci.c:
 In function ‘esd_pci_remove_one’:
/data/home/matthias/svn/socketcan/trunk/kernel/2.6/drivers/net/can/sja1000/esd_pci.c:291:
 warning: comparison between pointer and integer
make[4]: *** 
[/data/home/matthias/svn/socketcan/trunk/kernel/2.6/drivers/net/can/sja1000/esd_pci.o]
 Error 1
make[4]: Target `__build' not remade because of errors.
make[3]: *** 
[/data/home/matthias/svn/socketcan/trunk/kernel/2.6/drivers/net/can/sja1000] 
Error 2
make[3]: Target `__build' not remade because of errors.
make[2]: *** 
[/data/home/matthias/svn/socketcan/trunk/kernel/2.6/drivers/net/can] Error 2
  CC [M]  /data/home/matthias/svn/socketcan/trunk/kernel/2.6/net/can/raw.o
  CC [M]  /data/home/matthias/svn/socketcan/trunk/kernel/2.6/net/can/af_can.o
  CC [M]  /data/home/matthias/svn/socketcan/trunk/kernel/2.6/net/can/proc.o
  LD [M]  /data/home/matthias/svn/socketcan/trunk/kernel/2.6/net/can/can.o
  LD [M]  /data/home/matthias/svn/socketcan/trunk/kernel/2.6/net/can/can-raw.o
make[2]: Target `__build' not remade because of errors.
make[1]: *** [_module_/data/home/matthias/svn/socketcan/trunk/kernel/2.6] Error 
2
make[1]: Target `modules' not remade because of errors.
make[1]: Leaving directory `/usr/src/linux-2.6-2.6.18.dfsg.1'
make: *** [modules] Error 2
matth...@debby:~/svn/socketcan/trunk/kernel/2.6$

So the main issues are some changes in the struct device, struct net_device 
structures.

> 
> > Are there some inofficial patches for that old kernels?
> 
> There might be support in the SVN trunk, depending on the drivers you
> intend to use.
Getting esd_pci driver running is our first goal. Later we need
a USB driver running. This driver is currently under development
an will be posted to the socketcan list in the next days.

Do you think the above changes are correct?

Matthias
_______________________________________________
Socketcan-core mailing list
[email protected]
https://lists.berlios.de/mailman/listinfo/socketcan-core

Reply via email to