您的当前位置:首页正文

USBserial

2023-09-20 来源:客趣旅游网
我们平时使用modprobe加载usbserial驱动时输入的vendor和product参数是传给usbserial_generic这个模块的.这里的调用过程是usb_serial_init()->usb_serial_general_register().在

这个函数中,在这里传入的参数:  generic_device_ids[0].idVendor =vendor;  generic_device_ids[0].idProduct =product;

 generic_device_ids[0].match_flags =USB_DEVICE_ID_MATCH_VENDOR |

USB_DEVICE_ID_MATCH_PRODUCT;

我们这里需要加入我们自己设备的vendor和product,因此在这行下面,我们需要加入:

 // added by xzpeter, try to support both sim4100 and lc6311

 // for sim4100

 generic_device_ids[1].idVendor =0x0456;  generic_device_ids[1].idProduct =0x6532;  generic_device_ids[1].match_flags =

 USB_DEVICE_ID_MATCH_VENDOR | USB_DEVICE_ID_MATCH_PRODUCT;

 // for lc6311

 generic_device_ids[2].idVendor =0x1AB7; 

generic_device_ids[2].idProduct =0x6000; 

generic_device_ids[2].match_flags =

USB_DEVICE_ID_MATCH_VENDOR | USB_DEVICE_ID_MATCH_PRODUCT;

// end here

2.编译模块

之后,回到内核的根目录,要按照原先的config配置编译内核,主要是为了得到

Module.symvers文件(以及modpost等.如果直接编译模块,就算编译成功,也可能无法加载):

 make menuconfig

 make

这里,如何配置内核将不详细说明,主要是要保证配置要加入\"device drivers\"->\"usb support\"->\"usb serial convertor support\"中的对应项.

{注:如果之前已经编译过内核,可以直接编译模块.使用如下方式编译:}

 make-C $KERNEL_SOURCE_DIR M=drivers/usb/serial modules 编译完成后,即可在对应目录下得到新的usbserial.ko驱动程序.

3.替换系统原有usbserial驱动

如果是在2.6.x内核中,则需要将这个文件复制到对应目录,并加载:

 cd /lib/modules/`uname -r`/kernel/drivers/usb/serial

 # 备份原有驱动

 sudo mv usbserial.ko usbserial.ko.bak

 # 放入新的驱动

 sudo cp

$KERNEL_SOURCE_DIR/drivers/usb/serial/usbserial.ko ./

sudo rmmod usbserial

 # 加载新的驱动,这里就不用加vendor和product参数了,已经加入静态的id_table了

sudo modprobe usbserial

这样,以后在插入SIM4100或者LC6311模块的时候,就不用输入任何vendor和product参数

了,这两个模块也可以同时使用了.可以用:

 ls /dev/ttyUSB*

查看一下,是不是两个模块的设备文件都有了.

然后在wvdial.conf文件中如下配置!

================================== [Dialer Defaults] Init1 = ATZ

Init2 = ATQ0 V1 E1 S0=0 &C1 &D2 +FCLASS=0

Modem Type = USB Modem #我见过这里有人填CDMA,GPRS等等等等的...........反正是五花八门,什么都有!但是记住既然你用的是

手机连接USB上网!那这里Modem的类型就应该是USB Modem!区分CDMA和GPRS等等,或者说GPRS连接Wap网络的接入点,应该是在Init2这一行下面新建一行Init3,并在这一行写入GPRS接入点!

Baud = 460800 #手机专业人士应该能告诉你这一行写的是什么...........(也就这里!我有些不理解........)

New PPPD = yes

Modem = /dev/ttyACM0 #这里是你的设备端口!注意,以上步骤4上面显示的是那个端口,这里就填哪个端口!千万别填错! ISDN = 0

Phone = #777 #这里是你的Modem拨号的电号码!CDMA好像都是这个! Password = CARD #你拨号用的密码!

Username = CARD #你拨号用的用户名! Stupid Mode = 1

==================================================

配置好后,连接网络的方法是打开一个终端,输入sudo wvdial 看到如下信息就表示网络连接成功!你的手机应该也显示拨号页面!

WvDial<*1>: WvDial: Internet dialer version 1.56 WvModem<*1>: Cannot get information for serial port. WvDial<*1>: Initializing modem. WvDial<*1>: Sending: ATZ WvDial Modem<*1>: ATZ WvDial Modem<*1>: OK

WvDial<*1>: Sending: ATQ0 V1 E1 S0=0 &C1 &D2 +FCLASS=0 WvDial Modem<*1>: ATQ0 V1 E1 S0=0 &C1 &D2 +FCLASS=0 WvDial Modem<*1>: OK WvDial<*1>: Modem initialized. WvDial<*1>: Sending: ATDT#777 WvDial<*1>: Waiting for carrier. WvDial Modem<*1>: ATDT#777 WvDial Modem<*1>: CONNECT

WvDial<*1>: Carrier detected. Starting PPP immediately. WvDial: Starting pppd at Thu Nov 29 01:13:26 2007 WvDial: Pid of pppd: 5910 WvDial<*1>: Using interface ppp0 WvDial<*1>: pppd: [10]?[06][08]??[06][08] WvDial<*1>: pppd: [10]?[06][08]??[06][08] WvDial<*1>: pppd: [10]?[06][08]??[06][08] WvDial<*1>: pppd: [10]?[06][08]??[06][08] WvDial<*1>: pppd: [10]?[06][08]??[06][08] WvDial<*1>: local IP address 220.207.67.143 WvDial<*1>: pppd: [10]?[06][08]??[06][08] WvDial<*1>: remote IP address 220.192.64.1 WvDial<*1>: pppd: [10]?[06][08]??[06][08] WvDial<*1>: primary DNS address 220.192.8.58 WvDial<*1>: pppd: [10]?[06][08]??[06][08]

WvDial<*1>: secondary DNS address 220.192.32.103 WvDial<*1>: pppd: [10]?[06][08]??[06][08] 注:拨号后请不要关闭用来拨号的终端!

还有其他拨号方法我就不一一叙述了!个人感觉就这么拨号挺好的,没必要把这个放到Xwindows里面!(有一次去外地学习,临时离开了2天,结果我的本本被同室发现,并且他用他Windows的功底找到Xwindows的这个CDMA连接,被他残忍的聊了2天的QQ我不得不为这两天的CDMA网费买单后,才发现有时候命令行还是挺好用的阿!)

这套方案我用到现在!几乎是任何地方都可以享受Internet!所以拿出来分享一下!高手别寒颤我,如果我有什么地方有错误,请您帮忙指出我的错误,并留下修改方案,我毕竟是个才学linux不到一个星期的超级大菜鸟 ^_^! ....... 各位有条件弄到以上设备,周边又没有网线,又急于上网的人事可以尝试一下!

一、内核配置linux内核2.6以后都应该自带usb转串口的驱动,在编译内核时按如下选项配置内核,即可安装usb转串口驱动:在linux kernel configuration中选择:Device Drivers--->USB support--->USB Serial Conve ...

一、内核配置

linux内核2.6以后都应该自带usb转串口的驱动,在编译内核时按如下选项配置内核,即可安装usb转串口驱动:

在linux kernel configuration中选择:

Device Drivers--->USB support--->USB Serial Converter support---> [*]USB Serial Converter support //选项配置为[*]即将该驱动编译进内核; [*]USB Generic serial Driver

//linux下有针对不同的usb设备的驱动,假如你的设备不在这些驱动范围之内,就可以用这个通用的串口驱动,其用法可以有两种:

方法一、将该驱动编译成驱动模块,加载驱动时输入如下: #insmod usbserial vendor=0x#### product=0x####

其中vendor为驱动芯片的vendor IDproduct为芯片的product ID查询芯片的资料可以获得该芯片的这两个参数。例如FTDI的usb转串口芯片FT232R的USB Vendor ID(VID)为0403h,USB Product ID(PID)为6001h,均为FTDI的默认ID;

方法二、直接修改该驱动源代码中的Vendor ID 与 Product ID两个参数为芯片的ID,然后将该驱动编译进内核:

该驱动的路径为:linux-2.6.20/drivers/usb/serial/generic.c对该驱动修改如下: #ifdef CONFIG_USB_SERIAL_GENERIC

static __u16 vendor=0x0403; static __u16 product=0x6001; 直接编译内核即可;

[*]USB FTDI Single Port Serial Driver(EXPERIMENTAL)

//暂时理解为针对FTDI产品的usb转串口驱动,例如上述的FT232R芯片,可以直接使用该驱动;

编译内核,下载到开发板; 二、创建设备文件

USB转串口驱动的主设备号一般为188,从设备号依次累加0~255;可以参考linux的文档:linux-2.6.20/Documentation/usb/usb-serial.txt 创建设备文件:

#mknod /dev/ttyUSB0 c 188 0 #mknod /dev/ttyUSB1 C 180 1

上电后,插入usb转串口模块,即可看到该模块挂载到了哪一个设备文件: # usb 1-1: new full speed USB device using at91_ohci and address 2 usb 1-1: configuration #1 chosen from 1 choice

ftdi_sio 1-1:1.0: FTDI USB Serial Device converter detected drivers/usb/serial/ftdi_sio.c: Detected FT232BM

usb 1-1: FTDI USB Serial Device converter now attached to ttyUSB0

即该驱动挂载到了ttyUSB0设备文件,然后就可以像操作串口文件一样的操作该设备文件。 附:挂载网络文件系统的命令:

#mount -t nfs -o nolock 192.168.0.244:/home/yumei /mnt/nfs(备忘)

因篇幅问题不能全部显示,请点此查看更多更全内容