usbserial支持多个modem设备
这篇文章,通过修改usbserial的驱动程序,使usbserial同时支持多个特定的vendor和product. 在使用LC6311或者SIM4100类似的通讯modem的时候,我们经常使用usbserial驱动来在linux环境下访问模块.但是,每次,我们插入特定模块到usb端口后,都需要手动加载usbserial模块,如:
并输入特定的vendor和product参数,十分麻烦.最近在实践的过程中,碰到了更麻烦的问题:基本的usbserial不能直接支持多个不同参数的modem同时使用.比如,当使用上面的第一个命令加载了LC6311的模块以后,第二个命令将没有效果(,modprobe发现usbserial已经加载,便放弃了第二次的加载).下面是通过对usbserial驱动的一些修改,来实现静态支持模块SIM4100和LC6311. ,我们需要自己运行的linux系统对应的内核代码.这里,我将不叙述对于和内核不同版本的模块,如何加载的问题.假设我们已经下载好了对应版本的源代码,并解压缩放到了对应目录下.我们设定内核代码的根目录为: 1.修改$KERNEL_SOURCE_DIR/drivers/usb/serial/generic.c文件 这里主要是修改$KERNEL_SOURCE_DIR/drivers/usb/serial/generic.c文件中的usb_serial_generic_register()函数.
我们平时使用modprobe加载usbserial驱动时输入的vendor和product参数是传给usbserial_generic这个模块的.这里的调用过程是usb_serial_init()->usb_serial_general_register().在这个函数中,在这里传入的参数:
我们这里需要加入我们自己设备的vendor和product,因此在这行下面,我们需要加入: 2.编译模块 之后,回到内核的根目录,要按照原先的config配置编译内核,主要是为了得到Module.symvers文件(以及modpost等.如果直接编译模块,就算编译成功,也可能无法加载):
这里,如何配置内核将不详细说明,主要是要保证配置要加入"device drivers"->"usb support"->"usb serial convertor support"中的对应项. {注:如果之前已经编译过内核,可以直接编译模块.使用如下方式编译:}
编译完成后,即可在对应目录下得到新的usbserial.ko驱动程序. 3.替换系统原有usbserial驱动如果是在2.6.x内核中,则需要将这个文件复制到对应目录,并加载:
|
|||
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |