pl2303
日頃からお世話になってるソレを読む事に。時間かかるかもしれませんが、ぼちぼち進めます。
エントリポイント
全部引用しちゃいますが、以下。
static int __init pl2303_init(void) { int retval; retval = usb_serial_register(&pl2303_device); if (retval) goto failed_usb_serial_register; retval = usb_register(&pl2303_driver); if (retval) goto failed_usb_register; info(DRIVER_DESC); return 0; failed_usb_register: usb_serial_deregister(&pl2303_device); failed_usb_serial_register: return retval; } static void __exit pl2303_exit(void) { usb_deregister(&pl2303_driver); usb_serial_deregister(&pl2303_device); } module_init(pl2303_init); module_exit(pl2303_exit);
ポイントとしては module_init な pl2303_init で
- usb_serial_register
- usb_register
module_exit な pl2303_exit で
- usb_deregister
- usb_serial_deregister
という順で処理している模様。ちなみに usb_serial_register とか usb_serial_deregister とかは driver/usb/serial/usb-serial.c で定義されている模様。
あ、これ usbserial か。
# modprobe pl2303 # lsmod|grep pl2303 pl2303 19268 0 usbserial 29448 1 pl2303 usbcore 121352 6 pl2303,usbserial,zd1211rw,ehci_hcd,uhci_hcd #
違うのかなぁ。一応 usb-serial.c では以下な定義があります。
/* Driver structure we register with the USB core */ static struct usb_driver usb_serial_driver = { .name = "usbserial", .probe = usb_serial_probe, .disconnect = usb_serial_disconnect, .no_dynamic_id = 1, };
usb_driver 構造体は include/linux/usb.h にて定義されてますが、随分昔に usb なドライバの文書を読んだ記憶があるなぁ、と。
で、Documentation/usb の中を見てみたら usb-serial.txt というドキュメントを発見したので読んでみます。多分今日はこれで力尽きるはず。