Following on from Greg KH <[EMAIL PROTECTED]> articles in the Feb/April 2003 Linux
Journal I have attempted writing my own driver but as you can well imagine I
have had a problem or two. His environment is Kernel 2.5 or greater and mine is
2.4.20.
When I compile I get
[EMAIL PROTECTED]:/usr/src/linux-2.4.20/drivers/usb/serial# make -C
../../../../linux SUBDIRS=$PWD modules
make: Entering directory `/usr/src/linux-2.4.20'
make -C /usr/src/linux-2.4.20/drivers/usb/serial CFLAGS="-D__KERNEL__
-I/usr/src/linux-2.4.20/include -Wall -Wstrict-prototypes -Wno-trigraphs -O2
-fno-strict-aliasing -fno-common -fomit-frame-pointer -pipe
-mpreferred-stack-boundary=2 -march=i686 -DMODULE" MAKING_MODULES=1 modules
make[1]: Entering directory `/usr/src/linux-2.4.20/drivers/usb/serial'
gcc -D__KERNEL__ -I/usr/src/linux-2.4.20/include -Wall -Wstrict-prototypes
-Wno-trigraphs -O2 -fno-strict-aliasing -fno-common -fomit-frame-pointer -pipe
-mpreferred-stack-boundary=2 -march=i686 -DMODULE -nostdinc -iwithprefix
include -DKBUILD_BASENAME=ericsson_serial -c -o ericsson-serial.o
ericsson-serial.c
ericsson-serial.c:15:52: ../../../drivers/usb/serial/usb-serial.h: No such file
or directory
ericsson-serial.c:31: `usb_serial_probe' undeclared here (not in a function)
ericsson-serial.c:31: initializer element is not constant
ericsson-serial.c:31: (near initialization for `ericsson_driver.probe')
ericsson-serial.c:32: `usb_serial_disconnect' undeclared here (not in a
function)
ericsson-serial.c:32: initializer element is not constant
ericsson-serial.c:32: (near initialization for `ericsson_driver.disconnect')
ericsson-serial.c:36: variable `ericsson_device' has initializer but incomplete
type
ericsson-serial.c:38: unknown field `owner' specified in initializer
ericsson-serial.c:38: warning: excess elements in struct initializer
ericsson-serial.c:38: warning: (near initialization for `ericsson_device')
ericsson-serial.c:39: unknown field `name' specified in initializer
ericsson-serial.c:39: warning: excess elements in struct initializer
ericsson-serial.c:39: warning: (near initialization for `ericsson_device')
ericsson-serial.c:40: unknown field `short_name' specified in initializer
ericsson-serial.c:40: warning: excess elements in struct initializer
ericsson-serial.c:40: warning: (near initialization for `ericsson_device')
ericsson-serial.c:41: unknown field `id_table' specified in initializer
ericsson-serial.c:41: warning: excess elements in struct initializer
ericsson-serial.c:41: warning: (near initialization for `ericsson_device')
ericsson-serial.c:42: unknown field `num_interrupt_in' specified in initializer
ericsson-serial.c:42: `NUM_DONT_CARE' undeclared here (not in a function)
ericsson-serial.c:42: warning: excess elements in struct initializer
ericsson-serial.c:42: warning: (near initialization for `ericsson_device')
ericsson-serial.c:43: unknown field `num_bulk_in' specified in initializer
ericsson-serial.c:43: `NUM_DONT_CARE' undeclared here (not in a function)
ericsson-serial.c:43: warning: excess elements in struct initializer
ericsson-serial.c:43: warning: (near initialization for `ericsson_device')
ericsson-serial.c:44: unknown field `num_bulk_out' specified in initializer
ericsson-serial.c:44: `NUM_DONT_CARE' undeclared here (not in a function)
ericsson-serial.c:44: warning: excess elements in struct initializer
ericsson-serial.c:44: warning: (near initialization for `ericsson_device')
ericsson-serial.c:45: unknown field `num_ports' specified in initializer
ericsson-serial.c:45: warning: excess elements in struct initializer
ericsson-serial.c:45: warning: (near initialization for `ericsson_device')
ericsson-serial.c: In function `ericsson_init':
ericsson-serial.c:50: warning: implicit declaration of function
`usr_serial_register'
ericsson-serial.c: In function `ericsson_exit':
ericsson-serial.c:57: warning: implicit declaration of function `usr_deregister'
ericsson-serial.c:58: warning: implicit declaration of function
`usb_serial_deregister'
ericsson-serial.c: At top level:
ericsson-serial.c:36: storage size of `ericsson_device' isn't known
ericsson-serial.c:7: warning: `debug' defined but not used
make[1]: *** [ericsson-serial.o] Error 1
make[1]: Leaving directory `/usr/src/linux-2.4.20/drivers/usb/serial'
make: *** [_mod_/usr/src/linux-2.4.20/drivers/usb/serial] Error 2
make: Leaving directory `/usr/src/linux-2.4.20'
Is there any way of my staying with 2.4.20 and still get this program working?
I also attach my version of your tiny tiny usb serial driver in case that makes
a difference.
I have also noticed that in usbserial.c usb_serial_probe and
usb_serial_disconnect are defined as static.
Is this part of my problem? As far as I am aware static functions are only
useable from within the module where they are defined.
Look forward to your reply as I would really like to get this working.
BTW When I plug my device into the USB port I get:-
Aug 19 15:09:11 puppypad /etc/hotplug/usb.agent: ... no modules for USB product
731/528/1
and I have assumed that 731 is the PRODUCT_ID & 528 is the DEVICE_ID?
in hex that would be 0x02db and 0x0210 respectively.
---
Regards,
Alf Stockton www.stockton.co.za
It is the business of the future to be dangerous.
-- Hawkwind#include <linux/config.h>
#ifdef CONFIG_USB_SERIAL_DEBUG
static int debug=1;
#define debug
#else
static int debug;
#endif
#include <linux/kernel.h>
#include <linux/init.h>
#include <linux/tty.h>
#include <linux/module.h>
#include <linux/usb.h>
#include <../../../drivers/usb/serial/usb-serial.h>
#define MY_PRODUCT_ID 731
#define MY_DEVICE_ID 528
static struct usb_device_id id_table[] =
{
{ USB_DEVICE(MY_PRODUCT_ID, MY_DEVICE_ID) },
{}
};
MODULE_DEVICE_TABLE(usb, id_table);
static struct usb_driver ericsson_driver =
{
.name = "Ericsson",
.probe = usb_serial_probe,
.disconnect = usb_serial_disconnect,
.id_table = id_table,
};
static struct usb_serial_device_type ericsson_device =
{
.owner = THIS_MODULE,
.name = "Ericsson usb serial",
.short_name = "Ericsson",
.id_table = id_table,
.num_interrupt_in = NUM_DONT_CARE,
.num_bulk_in = NUM_DONT_CARE,
.num_bulk_out = NUM_DONT_CARE,
.num_ports = 1,
};
static int __init ericsson_init (void)
{
usr_serial_register (&ericsson_device);
usb_register(&ericsson_driver);
return 0;
}
static void __exit ericsson_exit (void)
{
usr_deregister(&ericsson_driver);
usb_serial_deregister(&ericsson_device);
}
module_init(ericsson_init);
module_exit(ericsson_exit);
MODULE_LICENSE("GPL");