4G上网卡NIDS拨号之Rmnet驱动

  4G上网卡一般为双对外通讯口,一个是串口、一个是USB。

  但是基于串口的常用波特率为115200,速度过于底下,所以大多使用USB。

  1)一般来说常用ppp拨号方式,ppp拨号方式分为应用层pppd与驱动层pppk。

    驱动层pppk通讯主要接口为ppp_async_send与tty->ldisc->receive_buf,并调用tty驱动,而tty驱动转为USB则需要针对GSM/CDMA的usb_wwan、option驱动,而usb_wwan驱动又依赖于usb-serial基础转换。此时驱动已经将通讯转换为USB。

    应用层pppd主要以option脚本、chat脚本、ppp应用,进行发送AT命令,拨号上网。

  2)当不使用ppp拨号方式,而是使用NDIS拨号,那么ppp软件没有了,就需要替代他的东西,这时候,需要三样东西:Rmnet驱动 + dhclient + minicom/echo命令。当然Rmnet驱动也是USB总线驱动。而由于发送AT命令是以串口发送,所以依旧需要usb-serial、usb_wwan、option驱动进行串口USB转换。

  值此特别声明:USB设备驱动架构:分为HID、CDC、mass storage,而Rmnet是非标准的Rmnet驱动。NDIS是windows提出的网络驱动接口规范,linux下并没有。

  以下就是USB总线方式的Rmnet驱动流程:

  • 注册驱动  :module_init(NDIS_Init);
  • 创建类   :Rmnet_class= class_create( THIS_MODULE, "Rmnet_class" );
  • 注册USB设备:usb_register(&usb_drv_Rmnet);
  • 定义    :static struct usb_driver usb_drv_Rmnet{...};
  • 探针函数

    int Rmnet_Probe( struct usb_interface * usb_interf, const struct usb_device_id * usb_devid)

    •   获取端点信息
      • cur_altsetting->desc.bInterfaceNumber
      • cur_altsetting->desc.bNumEndpoints
      • cur_altsetting->endpoint

  

未完待续....

上一篇:php – 使用$GLOBALS [‘HTTP_GET_VARS’]已被弃用?


下一篇:无法将json转换为java pojo类?