通过修改内核提高3G上网卡设备速率(usbserial.c)

由于linux内核中usbserial模块是为低速usb设备所设计,无法应对目前的3G无线USB上网卡设备的高速模式,所以虽然在linux下可正常拔号,最高速度仍然只能达到62K/s,为解决此问题可通过修改linux内核代码中的usbserial来完成。

 

参考链接: http://www.linuxsir.org/bbs/thread350300.html

由于以上链接是基于2.6.28,其中的patch已经不再可用,由于linux内核版本更新较快,所以我也不再做新补丁,而手动修改代码。

 

以下是我进行的再整理:

 

1、修改内核usbserial.c代码

先进行备份

# cp /usr/src/linux/drivers/usb/serial/usb-serial.c  /usr/src/linux/drivers/usb/serial/usb-serial.c.2.6.31

 

根据以下内容修改

带“+”的行为要添加的内容

# vim /usr/src/linux/drivers/usb/serial/usb-serial.c

@@ -58,4 +58,5 @@
*/
+static ushort maxRSize, maxWSize, maxISize;
static int debug;
static struct usb_serial *serial_table[SERIAL_TTY_MINORS]; /* initially all NULL */

 

@@ -817,4 +818,6 @@
}
buffer_size = le16_to_cpu(endpoint->wMaxPacketSize);
+ if (buffer_size < maxRSize)
+ buffer_size = maxRSize;
port->bulk_in_size = buffer_size;
port->bulk_in_endpointAddress = endpoint->bEndpointAddress;

 

@@ -841,4 +844,6 @@
}
buffer_size = le16_to_cpu(endpoint->wMaxPacketSize);
+ if (buffer_size < maxWSize)
+ buffer_size = maxWSize;
port->bulk_out_size = buffer_size;
port->bulk_out_endpointAddress = endpoint->bEndpointAddress;

 

@@ -866,4 +871,6 @@
}
buffer_size = le16_to_cpu(endpoint->wMaxPacketSize);
+ if (buffer_size < maxISize)
+ buffer_size = maxISize;
port->interrupt_in_endpointAddress = endpoint->bEndpointAddress;
port->interrupt_in_buffer = kmalloc (buffer_size, GFP_KERNEL);

 

@@ -1191,2 +1198,8 @@
module_param(debug, bool, S_IRUGO | S_IWUSR);
MODULE_PARM_DESC(debug, "Debug enabled or not");
+module_param(maxRSize, ushort, 0);
+MODULE_PARM_DESC(maxRSize, "User specified USB input buffer size");
+module_param(maxWSize, ushort, 0);
+MODULE_PARM_DESC(maxWSize, "User specified USB output buffer size");
+module_param(maxISize, ushort, 0);
+MODULE_PARM_DESC(maxISize, "User specified USB interrupt buffer size");

2、编译修改后的模块(这里实际上编译了所有的USB串口模块,但至少比编译整个内核快得多)
make -C /lib/modules/$(uname -r)/build M=/usr/src/linux-2.6.31/drivers/usb/serial

3、备份当前使用的usbserial.ko,然后将上步生成的usbserial.ko copy到/lib/modules/kernel/drivers/usb/serial/

# cp /lib/modules/2.6.31-tuxonice/kernel/drivers/usb/serial/usbserial.ko /lib/modules/2.6.31-tuxonice/kernel/drivers/usb/serial/usbserial.ko.2.6.31

# cp /lib/modules/2.6.31-tuxonice/build/drivers/usb/serial/usbserial.ko /lib/modules/2.6.31-tuxonice/kernel/drivers/usb/serial/


4、卸载掉旧的usbserial(rmmod usbserial),然后载入新的usbserial,现在我们可以分别指定usbserial使用的接收与发送缓冲区的大小了,modprobe usbserial vendor=0x19d2 product=0xfff1 maxRSize=4096 maxWSize=1024

 

5、再次拔号后测试下载速度已可达到200多Kb,在信号好的地方或许还可以更快。。。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值