华为4g模块 linux驱动程序,定制Android之4G-LTE模块驱动
定制Android之4G-LTE模塊驅(qū)動(dòng)
一.????????簡介
本文講述在Android內(nèi)核中,添加中國移動(dòng)4G-LTE制式華為MU909模塊驅(qū)動(dòng),實(shí)現(xiàn)通過4G上網(wǎng)業(yè)務(wù),電話業(yè)務(wù),短信業(yè)務(wù)。
CPU:Samsung 6410
Kernel:linux 2.6.36
System: Android 2.3
4Gmod:HUAWEI—MU909
Authority:ACE 2014-12-8
華為模塊在Android端使用的驅(qū)動(dòng)分為兩部分:
定制接口:對應(yīng)的驅(qū)動(dòng)為option,需要將華為模塊的驅(qū)動(dòng)適配數(shù)據(jù)添加到驅(qū)動(dòng)才能被usb識別和使用。
通用接口:ECM,華為模塊直接適配通用驅(qū)動(dòng)。暫時(shí)無需修改代碼。
二.具體內(nèi)容
華為模塊以PCI-E接口封裝,主要以USB接口為通訊接口,將USB口虛擬成ttyUSB,將作為華為的定制接口,包括Modem PPP撥號,PCUI基本AT指令響應(yīng)端口,Diag 日志抓取端口。
涉及三個(gè)文件:
/drivers/usb/serial/option.c
/drivers/usb/serial/usb_wwan.c
/include/linux/usb.h
2.1 usb轉(zhuǎn)serial驅(qū)動(dòng)
2.1.1 /include/linux/usb.h 添加
#define USB_VENDOR_AND_INTERFACE_INFO(vend,cl, sc, pr) \
.match_flags = USB_DEVICE_ID_MATCH_INT_INFO \
|USB_DEVICE_ID_MATCH_VENDOR, \
.idVendor = (vend), \
.bInterfaceClass = (cl), \
.bInterfaceSubClass = (sc), \
.bInterfaceProtocol = (pr)
2.1.2
/drivers/usb/serial/option.c在static const struct usb_device_id option_ids[]
添加華為模塊的ID,協(xié)議碼等。
參數(shù)內(nèi)容為{VID,InterfaceClass,InterfaceSubClass, InterfaceProtocol}
{ USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID,0xff, 0xff, 0xff) },
{USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x01, 0x01) },
2.1.3?????????USB零包機(jī)制
根據(jù)USB協(xié)議,添加關(guān)于傳輸中零包的處理
修改/drivers/usb/serial/usb_wwan.c,
增加bcdUSB值和華為vid值的定義
#define HW_bcdUSB 0x0110
#define HUAWEI_VENDOR_ID 0x12d1
在usb_wwan_write 函數(shù)中添加零包語句
intusb_wwan_write()
{
;;;
struct usb_host_endpoint *ep=NULL;
}
在usb_wwan_write 函數(shù)中添加零包判斷
int usb_wwan_write()
{
;;;
if((HUAWEI_VENDOR_ID ==port->serial->dev->descriptor.idVendor)
&& (HW_bcdUSB !=port->serial->dev->descriptor.bcdUSB)){
ep = usb_pipe_endpoint(this_urb->dev, this_urb->pipe);
if(ep && (0 != this_urb->transfer_buffer_length)
&& (0 == this_urb->transfer_buffer_length %
ep->desc.wMaxPacketSize)){
this_urb->transfer_flags |= URB_ZERO_PACKET;
}
}
3.編譯usb-serial進(jìn)內(nèi)核
CONFIG_USB_SERIAL=y
CONFIG_USB_SERIAL_OPTION=y
CONFIG_USB_SERIAL_WWAN=y
終端輸入#make menuconfig
4. PPP 撥號配置
相關(guān)配置項(xiàng):
CONFIG_PPP=y
CONFIG_PPP_MULTILINK=y
CONFIG_PPP_FILTER=y
CONFIG_PPP_ASYNC=y
CONFIG_PPP_SYNC_TTY=y
CONFIG_PPP_DEFLATE=y
CONFIG_PPP_BSDCOMP=y
5.CDC驅(qū)動(dòng)
CDC驅(qū)動(dòng)是華為模塊適配標(biāo)準(zhǔn)的ECM通用驅(qū)動(dòng),無需代碼修改,LTE模塊使用PPP-modem撥號的方式進(jìn)行數(shù)據(jù)業(yè)務(wù)。
修改Android內(nèi)核的配置項(xiàng)
CONFIG_USB_USBNET=y
CONFIG_NETDEVICES=y
CONFIG_USB_NET_CDCETHER=y
6. usb-serial 電源管理集成
Usb-serial驅(qū)動(dòng)需要內(nèi)核支持selectivesuspend 電源管理,修改 /driver/usb/serial/option.c
找到static struct usb_serial_driver option_1port_device ={
.attach??= usb_wwan_startup? //添加接口
}
在usb_wwan_startup() 添加
{
if (serial->dev->descriptor.idVendor== HUAWEI_VENDOR_ID) {
if ( 0 !=(serial->dev->config->desc.bmAttributes & 0x20)){
usb_enable_autosuspend(serial->dev);
}
}
}
配置內(nèi)核
CONFIG_USB_SUPPORT=y
CONFIG_USB =y
CONFIG_PM_RUNTIME=y
CONFIG_USB_SUSPEND=y
以上修改完內(nèi)核,重新編譯內(nèi)核
#make zImage
7.將編譯完內(nèi)核燒進(jìn)板子。
7.1將LTE模塊接入板子
查看usb-serial驅(qū)動(dòng)是否成功加載
一個(gè)USB口虛擬成三個(gè)串口ttyUSB,ttyUSB0 為modem接口,ttyUSB1為Dial,ttyUSB2為AT端口。
7.2 檢查CDC驅(qū)動(dòng)是否成功加載
已經(jīng)識別為usb網(wǎng)卡,可以ifconfig eth1 使能網(wǎng)卡
至此完成對華為MU909 驅(qū)動(dòng)的添加,還需添加PPP撥號軟件,編寫LTE撥號腳本,才能接入4G網(wǎng)絡(luò)。
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)總結(jié)
以上是生活随笔為你收集整理的华为4g模块 linux驱动程序,定制Android之4G-LTE模块驱动的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 怎么ghost系统 如何做出Ghost系
- 下一篇: 错误代码0x800f0950怎么解决_解