Em versões mais recentes do kernel do linux, as funções usb_serial_register
e usb_serial_deregister
ficaram estáticas. Assim, as funções só existem como texto nos arquivos de objeto do kernel. Os usb_serial_register_drivers
e usb_serial_deregister_drivers
podem ser usados.
Aqui estão as definições dos dois conjuntos de funções:
int usb_serial_register(struct usb_serial_driver *driver);
void usb_serial_deregister(struct usb_serial_driver *device);
int usb_serial_register_drivers(struct usb_driver *udriver,
struct usb_serial_driver * const serial_drivers[]);
void usb_serial_deregister_drivers(struct usb_driver *udriver,
struct usb_serial_driver * const serial_drivers[]);
usb_serial_register_drivers
usa uma matriz de ponteiros terminada em NULL para os drivers serial-usb a serem registrados e um usb_driver usado para dispositivos / interfaces correspondentes. Os detalhes dos dois conjuntos de funções podem ser lidos aqui:
Dentro do código-fonte do driver, linhas como esta:
retval = usb_serial_register(&vizzini_device);
foram substituídos por:
struct usb_serial_driver *serial_drivers[2] = {&vizzini_device,NULL};
retval = usb_serial_register_drivers(&vizzini_driver,serial_drivers);
vizzini_driver e vizzini_device foram definidos em outro lugar no código como o seguinte:
static struct usb_driver vizzini_driver = {
.name = "vizzini",
.probe = usb_serial_probe,
.disconnect = vizzini_disconnect,
.id_table = id_table,
.no_dynamic_id = 1,
};
static struct usb_serial_driver vizzini_device = {
.driver = {
.owner = THIS_MODULE,
.name = "vizzini",
},
.usb_driver = &vizzini_driver,
.description = "Vizzini USB serial port",
.id_table = id_table,
.calc_num_ports = vizzini_calc_num_ports,
.probe = vizzini_probe,
.open = vizzini_open,
.close = vizzini_close,
.write = vizzini_write,
.write_room = vizzini_write_room,
.ioctl = vizzini_ioctl,
.set_termios = vizzini_set_termios,
.break_ctl = vizzini_break_ctl,
.tiocmget = vizzini_tiocmget,
.tiocmset = vizzini_tiocmset,
.attach = vizzini_attach,
.disconnect = vizzini_serial_disconnect,
.release = vizzini_serial_release,
.read_int_callback = vizzini_int_callback,
};