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