DM368开发 -- 华为3G/4G模块移植

一、模块介绍

用的是华为 ME909s-821 Mini PCIe。 

模块介绍,参看: ME909s-821 Mini PCIe 规格参数

其他模块,参看:华为全系列模块 产品介绍

ME909s-821 Mini PCIe是ME909s-821的变形版本,标准Mini PCIe封装;支持下行150Mbps,上行50Mbps的传输速率;提供高质量的语音、短信功能;丰富的扩展功能:FOTA、USSD、IPV6/IPV4…;内置TCP/IP协议栈;华为扩展AT指令集… 是车载、跟踪、工业路由器、安防监控、工业平板等行业应用的理想产品。

30.4mm

51mm

3.57mm

重量

<12g

Mini-PCIe

ME909s-821 Mini PCIe:

LTE (FDD): B1,B3,B8

LTE (TDD): B38, B39,B40,B41

DC-HSPA+/HSPA+/HSPA/UMTS : B1, B5, B8,B9

TD-SCDMA: B34, B39

EDGE/GPRS/GSM : 900/1800 MHz

DC-HSPA+ : 下行:42 Mbps, 上行: 5.76 Mbps

LTE TDD : 下行: 112Mbps , 上行: 10Mbps (CAT4)

LTE FDD: 下行:150 Mbps, 上行: 50 Mbps @Bandwidth 20M (CAT4)

Mini PCIe interface

Antenna interface

USB 2.0 High speed

PCM Voice

SIM Card

LED

Power supply

Reset

3.2 V to 4.2V (typical: 3.8V)

PCM语音

DTMF

-40℃ to 85℃

CDC-ECM

FOTA

Firmware Update via USB

Embedded UDP/TCP/FTP(s)/HTTP(s) stack

High-speed UART

CMUX

Sleep mode

Linux, Android, WinCE, Windows 8/10

CCC

NAL

SRRC


其中选择模块的时候一定要注意是否支持中国市场:

ME909s-120, 支持欧洲, 亚太, 拉美等海外市场.
ME909s-821, 支持中国市场
ME909u-521(B1/B2/B3/B5/B7/B8/B20),欧洲市场
ME909u-523(B2/B4/B5/B13/B17/B25/B26),北美市场
ME909u-XXX(TBD),日本市场

再有查看支持的频段,选择相应的联通或移动3G/4G上网卡。

中国移动  
GSM900   
上行/下行:890-909MHz/935-954MHz 
EGSM900  
上行/下行:885-890MHz/930-935MHz (中国铁通GSM-R:885-889/930-934) 
GSM1800M 上行/下行:1710-1720MHz/1805-1815MHz 
3G TDD   1880-1900MHz 、2010-2025MHz 
4G TD-LTE 1880 -1900 MHz、2320-2370 MHz、2575-2635 MHz
中国联通 
GSM900   
上行/下行:909-915MHz/954-960MHz
GSM1800  上行/下行:1740-1755MHz/1835-1850MHz 
3G FDD   上行/下行:1940-1955MHz/2130-2145MHz 
TD-LTE  2300-2320 MHz、2555-2575 MHz
FDD-LTE 1755-1765MHz   1850-1860MHz
FDD-LTE实际使用 1745-1765MHz   1840-1860MHz
中国电信 
CDMA800 上行/下行:825-835MHz/870-880MHz
3G FDD  上行/下行:1920-1935MHz/2110-2125MHz 
TD-LTE  2370-2390 MHz、2635-2655 MHz
FDD-LTE 1765-1780MHz    1860-1875MHz

二、相关文档

下载:3G/4D 相关文档


三、华为模块Linux 内核驱动集成指导

上述的文档,根据名称都可以自行百度出来。根据指导手册一步一步的来配置内核驱动。

这里只是说的是一些出现的问题:

(1)首先要注意,它所支持的范围:

我们用的是 linux-2.6.32 因为内核版本不同,没有usb_wwan.c usb_wwan.h usb_wwan_write 。所以将添加到上述文件里的内容,合并到option.c中去。

(2)无法加载cmemk.ko  irqk.ko  edmak.ko等设备模块

是因为版本不同造成的,需要重新编译


下面只操作cmemk.ko 同理irqk.ko edmak.ko 
find . -name cmemk.ko  


重新编译cmemk.ko

有下图可知,将新编译好的 cmemk.ko 拷贝到 
/home/zslf/dm368/rootfs/zslf/rootfs-php/lib/modules/2.6.32.17-davinci1/kernel/drivers/dsp/
然后重新烧写内核,根文件系统,uboot 


(3)大小屏不兼容问题


(4)davinci_interrupt 368: VBUS error workaround (delay coming) 与 只有4个ttyUSB 问题 

模块使用不当造成的。就是上面所说的使用了欧洲版的模块。

(5)AT 拨号

AT 拨号指令可参看相关手册

先贴出两个OK的3G PPP拨号AT指令

《1》3G OK版ppp-on脚本


  
  
  1. #!/bin/sh
  2. USER= "vpdn@chaoyang-uvpdn"
  3. PASSWORD= "vpdn"
  4. DIAL= "wcdma-connect-chat"
  5. TELEPHONE= "*99#" (为什么可以拨通移动的3G,但是不能拨通联通的3G呢?)
  6. APN= "3gnet" (而且3gnet,*99 #,应该是联通的APN,和拨号号码啊?)
  7. i=`cat /proc/bus/usb/devices | grep ProdID=1573`
  8. if [ -z $i ]; then
  9. CONTRAL=/dev/ttyUSB0
  10. else
  11. CONTRAL=/dev/ttyUSB2
  12. fi
  13. export TELEPHONE APN
  14. pppd \
  15. $CONTRAL \
  16. 115200 \
  17. nocrtscts \
  18. modem \
  19. debug \
  20. noauth \
  21. nodetach \
  22. noipdefault \
  23. usepeerdns \
  24. defaultroute \
  25. persist \
  26. maxfail 1 \
  27. holdoff 5 \
  28. user $USER \
  29. password $PASSWORD \
  30. 0.0.0.0:0.0.0.0 \
  31. connect "/bin/chat -E -s -v -f /etc/ppp/$DIAL" \
  32. #connect "/bin/chat -s -v -f /etc/ppp/wcdma-connect-chat" \
  33. #disconnect '/bin/chat -s -v -f /etc/ppp/wcdma-disconnect-chat' \

《2》wcdma-connect-chat脚本


  
  
  1. #/etc/ppp/wcdma-connect-chat
  2. TIMEOUT 5
  3. ABORT "DELAYED"
  4. ABORT "BUSY"
  5. ABORT "ERROR"
  6. ABORT "NO DIALTONE"
  7. ABORT "NO CARRIER"
  8. #"AT
  9. #'OK-+++\c-OK' ATHO
  10. TIMEOUT 5
  11. '' AT
  12. OK AT+CGDCONT= 1, "IP", "$APN",, 0, 0
  13. OK ATDT$TELEPHONE
  14. CONNECT ''

《3》大神PPP脚本   移动3G ok 


  
  
  1. #cd /etc/ppp/peers/
  2. /dev/ttyUSB0
  3. 9600
  4. crtscts
  5. modem
  6. debug
  7. nodetach
  8. defaultroute
  9. user "cmnet"
  10. usepeerdns
  11. connect '/bin/chat -s -v -f /etc/ppp/peers/LTE-connect-chat'
  12. disconnect '/bin/chat -s -v -f /etc/ppp/peers/LTE-disconnect-chat'
  13. TIMEOUT 15
  14. ABORT 'ERROR'
  15. ABORT 'NODIALTONE'
  16. ABORT 'BUSY'
  17. ABORT 'NOANSWER'
  18. '' AT
  19. OK AT+CGDCONT= 1,\ "IP\",\ "cmnet\"
  20. OK ATDT* 99*** 1 #
  21. CONNECT
  22. ABORT OK
  23. ABORT BUSY
  24. ABORT DELAYED
  25. ABORT "NOANSWER"
  26. ABORT "NOCARRIER"
  27. ABORT "NODIALTONE"
  28. ABORT VOICE
  29. ABORT ERROR
  30. ABORT RINGING
  31. TIMEOUT 12
  32. "" \K
  33. "" \K
  34. "" \K
  35. "" +++ATH
  36. "" +++ATH
  37. "" +++ATH
  38. "" ATZ
  39. SAY "\nGoodbay\n"

先要明白,4G模块有网卡,我们上面整个内核移植过程,EMC移植的网卡驱动。3G用可PPP拨号,但是4G的话,使用网卡。所以接下来是我们经过好几轮实现得出的OK版AT指令。


  
  
  1. int main( int argc, const char* argv[])
  2. {
  3. int ret = 0;
  4. printf( "### Serial_ttyUSB0_Init ###\n");
  5. ret = Serial_ttyUSB0_Init();
  6. if( -1 == ret)
  7. {
  8. printf( "### Failed to Serial_ttyUSB0_Init ###\n");
  9. return -1;
  10. }
  11. printf( "### Serial_ttyUSB0_Init End ###\n");
  12. int CFUNFlag = 0;
  13. while(! CFUNFlag)
  14. {
  15. printf( "### MU909_SetCFUN ###\n");
  16. ret = MU909_SetCFUN(fd_serial, 1);
  17. if( -1 == ret)
  18. {
  19. CFUNFlag = 0;
  20. }
  21. else
  22. {
  23. CFUNFlag = 1;
  24. }
  25. }
  26. //当发生错误时,显示错误信息
  27. unsigned char * strCGACTCommand1 = "AT+CMEE=2\r";
  28. int CGACTFlag1 = 0;
  29. while(! CGACTFlag1)
  30. {
  31. ret = ME3760_CGACT(fd_serial,strCGACTCommand1);
  32. if( -1 == ret)
  33. {
  34. CGACTFlag1 = 0;
  35. }
  36. else
  37. {
  38. CGACTFlag1 = 1;
  39. }
  40. }
  41. //检查SIM是否存在
  42. unsigned char * strCGACTCommand2 = "AT+CPIN?\r";
  43. int CGACTFlag2 = 0;
  44. while(! CGACTFlag2)
  45. {
  46. ret = ME3760_CGACT(fd_serial,strCGACTCommand2);
  47. if( -1 == ret)
  48. {
  49. CGACTFlag2 = 0;
  50. }
  51. else
  52. {
  53. CGACTFlag2 = 1;
  54. }
  55. }
  56. //PS域注册状态
  57. unsigned char * strCGACTCommand3 = "AT+CEREG=2\r";
  58. int CGACTFlag3 = 0;
  59. while(! CGACTFlag3)
  60. {
  61. ret = ME3760_CGACT(fd_serial,strCGACTCommand3);
  62. if( -1 == ret)
  63. {
  64. CGACTFlag3 = 0;
  65. }
  66. else
  67. {
  68. CGACTFlag3 = 1;
  69. }
  70. }
  71. //查询和报告信号强度
  72. unsigned char * strCGACTCommand4 = "AT^HCSQ?\r";
  73. int CGACTFlag4 = 0;
  74. while(! CGACTFlag4)
  75. {
  76. ret = ME3760_CGACT(fd_serial,strCGACTCommand4);
  77. if( -1 == ret)
  78. {
  79. CGACTFlag4 = 0;
  80. }
  81. else
  82. {
  83. CGACTFlag4 = 1;
  84. }
  85. }
  86. //查询当前运营商信息
  87. unsigned char * strCGACTCommand5 = "AT+COPS?\r";
  88. int CGACTFlag5 = 0;
  89. while(! CGACTFlag5)
  90. {
  91. ret = ME3760_CGACT(fd_serial,strCGACTCommand5);
  92. if( -1 == ret)
  93. {
  94. CGACTFlag5 = 0;
  95. }
  96. else
  97. {
  98. CGACTFlag5 = 1;
  99. }
  100. }
  101. //配置扩展系统,选择联通CDMA还是移动LTE,是否支持漫游
  102. unsigned char * strSysConfigArguments6 =
  103. "AT^SYSCFGEX=\"03\",3fffffff,1,2,7fffffffffffffff,,\r";
  104. int SysConfigFlag6 = 0;
  105. while(!SysConfigFlag6)
  106. {
  107. ret = MU909_SysConfig(fd_serial,strSysConfigArguments6);
  108. if( -1 == ret)
  109. {
  110. SysConfigFlag6 = 0;
  111. }
  112. else
  113. {
  114. SysConfigFlag6 = 1;
  115. }
  116. }
  117. //NDIS拨号
  118. unsigned char * strCGACTCommand7 = "AT^NDISDUP=1,1,\"cmnet\"\r";
  119. int CGACTFlag7 = 0;
  120. while(! CGACTFlag7)
  121. {
  122. ret = ME3760_CGACT(fd_serial,strCGACTCommand7);
  123. if( -1 == ret)
  124. {
  125. CGACTFlag7 = 0;
  126. }
  127. else
  128. {
  129. CGACTFlag7 = 1;
  130. }
  131. }
  132. system( "udhcpc -i usb0");
  133. Serial_ttyUSB0_Release();
  134. return 0;
  135. }

四、内核启动信息


  
  
  1. U-Boot 2010.12-rc2 (May 27 2014 - 16:50:48)
  2. Cores: ARM 297 MHz
  3. DDR: 243 MHz
  4. DRAM: 128 MiB
  5. NAND: 512 MiB
  6. Bad block table found at page 262080, version 0x01
  7. Bad block table found at page 262016, version 0x01
  8. Net: Ethernet PHY: LXT972 @ 0x01
  9. DaVinci-EMAC
  10. Hit any key to stop autoboot: 2 1 0
  11. NAND read: device 0 offset 0x400000, size 0x400000
  12. 4194304 bytes read: OK
  13. ## Booting kernel from Legacy Image at 80700000 ...
  14. Image Name: Linux -2.6 .32 .17-davinci1
  15. Created: 2015 -11 -23 9: 14: 53 UTC
  16. Image Type: ARM Linux Kernel Image (uncompressed)
  17. Data Size: 2243956 Bytes = 2.1 MiB
  18. Load Address: 80008000
  19. Entry Point: 80008000
  20. Verifying Checksum ... OK
  21. Loading Kernel Image ... OK
  22. OK
  23. Starting kernel ...
  24. Uncompressing Linux.................................................................................................................................................. done, booting the kernel.
  25. Linux version 2.6 .32 .17-davinci1 (root@zslf-desktop) (gcc version 4.3 .3 (Sourcery G++ Lite 2009q1 -203) ) # 117 PREEMPT Mon Nov 23 17: 14: 48 CST 2015
  26. CPU: ARM926EJ-S [ 41069265] revision 5 (ARMv5TEJ), cr= 00053177
  27. CPU: VIVT data cache, VIVT instruction cache
  28. Machine: DaVinci DM36x EVM
  29. Memory policy: ECC disabled, Data cache writeback
  30. DaVinci dm36x_rev1 .2 variant 0x8
  31. Built 1 zonelists in Zone order, mobility grouping off. Total pages: 12192
  32. Kernel command line: dm365_imp.oper_mode= 0 mem= 48M console=ttyS0, 115200n8 noinitrd rw ubi.mtd= 3 root=ubi0:rootfs rootfstype=ubifs video=davincifb:osd0= 720x480x16, 4050K
  33. PID hash table entries: 256 ( order: -2, 1024 bytes)
  34. Dentry cache hash table entries: 8192 ( order: 3, 32768 bytes)
  35. Inode- cache hash table entries: 4096 ( order: 2, 16384 bytes)
  36. Memory: 48MB = 48MB total
  37. Memory: 43900KB available ( 4216K code, 393K data, 148K init, 0K highmem)
  38. SLUB: Genslabs= 11, HWalign= 32, Order= 0 -3, MinObjects= 0, CPUs= 1, Nodes= 1
  39. Hierarchical RCU implementation.
  40. NR_IRQS: 245
  41. Calibrating delay loop... 147.86 BogoMIPS (lpj= 739328)
  42. Mount- cache hash table entries: 512
  43. CPU: Testing write buffer coherency: ok
  44. DaVinci: 8 gpio irqs
  45. NET: Registered protocol family 16
  46. davinci_serial_init: 97: failed to get UART2 clock
  47. EVM: HD imager video input
  48. bio: create slab <bio -0> at 0
  49. DM365 IPIPE initialized in Continuous mode
  50. SCSI subsystem initialized
  51. usbcore: registered new interface driver usbfs
  52. usbcore: registered new interface driver hub
  53. usbcore: registered new device driver usb
  54. pca9543a_probe
  55. vpss vpss: dm365_vpss vpss probed
  56. vpss vpss: dm365_vpss vpss probe success
  57. dm365_afew_hw_init
  58. lconfig->line_length is 0.
  59. ch0 default output "COMPOSITE", mode "NTSC"
  60. ###### vpbe_encoder_init ######
  61. ###### vid_enc_register_encoder ######
  62. ###### mgr->num_encoders is 0 ######
  63. ###### **ch_id is 0 ######
  64. ###### mode_info.name is NTSC ######
  65. ###### vpbe_encoder_initialize ######
  66. ###### output is COMPOSITE,outindex is 0 ######
  67. ###### vpbe_encoder_setoutput ######
  68. ###### dm365 = 1 ######
  69. ###### mode_info-> std is 1 ######
  70. ###### mode is NTSC ######
  71. ###### 22VPBE Encoder initialized ######
  72. ###### vpbe_encoder_setoutput ######
  73. ###### dm365 = 1 ######
  74. ###### mode_info-> std is 1 ######
  75. ###### mode is NTSC ######
  76. ###### dm365 = 1 ######
  77. ###### mode_info-> std is 1 ######
  78. ###### mode is NTSC ######
  79. ###### 33encoder->mode_ops->setmode: error is 0 ######
  80. ###### davinci_enc_set_mode_platform : next davinci_enc_priv_setmode ######
  81. VPBE Encoder Initialized
  82. ###### 11VPBE Encoder Initialized ######
  83. Switching to clocksource timer0_1
  84. musb_hdrc: version 6.0, cppi-dma, host, debug= 0
  85. musb_hdrc: USB Host mode controller at fec64000 using DMA, IRQ 12
  86. musb_hdrc musb_hdrc: MUSB HDRC host driver
  87. musb_hdrc musb_hdrc: new USB bus registered, assigned bus number 1
  88. usb usb1: New USB device found, idVendor= 1d6b, idProduct= 0002
  89. usb usb1: New USB device strings: Mfr= 3, Product= 2, SerialNumber= 1
  90. usb usb1: Product: MUSB HDRC host driver
  91. usb usb1: Manufacturer: Linux 2.6 .32 .17-davinci1 musb-hcd
  92. usb usb1: SerialNumber: musb_hdrc
  93. usb usb1: configuration # 1 chosen from 1 choice
  94. hub 1 -0: 1.0: USB hub found
  95. hub 1 -0: 1.0: 1 port detected
  96. NET: Registered protocol family 2
  97. IP route cache hash table entries: 1024 ( order: 0, 4096 bytes)
  98. TCP established hash table entries: 2048 ( order: 2, 16384 bytes)
  99. TCP bind hash table entries: 2048 ( order: 1, 8192 bytes)
  100. TCP: Hash tables configured (established 2048 bind 2048)
  101. TCP reno registered
  102. NET: Registered protocol family 1
  103. RPC: Registered udp transport module.
  104. RPC: Registered tcp transport module.
  105. RPC: Registered tcp NFSv4 .1 backchannel transport module.
  106. Installing knfsd (copyright (C) 1996 okir@monad.swb.de).
  107. msgmni has been set to 85
  108. alg: No test for stdrng (krng)
  109. io scheduler noop registered
  110. io scheduler anticipatory registered ( default)
  111. ###### davinci_enc_get_mode ######
  112. ###### davinci_get_cur_encoder ######
  113. ###### davinci_enc_get_mode ######
  114. ###### davinci_get_cur_encoder ######
  115. ###### davinci_enc_get_mode ######
  116. ###### davinci_get_cur_encoder ######
  117. davincifb davincifb .0: dm_osd0_fb: 720x480x16@ 0, 0 with framebuffer size 4050KB
  118. davincifb davincifb .0: dm_vid0_fb: 0x0x16@ 0, 0 with framebuffer size 1020KB
  119. ###### davinci_enc_get_mode ######
  120. ###### davinci_get_cur_encoder ######
  121. ###### davinci_enc_get_mode ######
  122. ###### davinci_get_cur_encoder ######
  123. davincifb davincifb .0: dm_osd1_fb: 720x480x4@ 0, 0 with framebuffer size 675KB
  124. davincifb davincifb .0: dm_vid1_fb: 0x0x16@ 0, 0 with framebuffer size 1020KB
  125. DM365 IPIPEIF probed
  126. imp serializer initialized
  127. davinci_previewer initialized
  128. davinci_resizer initialized
  129. davinci gpio led module init .......
  130. register davinci gpio module is ok .......
  131. Serial: 8250/ 16550 driver, 2 ports, IRQ sharing disabled
  132. serial8250 .0: ttyS0 at MMIO 0x1c20000 (irq = 40) is a 16550A
  133. console [ttyS0] enabled
  134. serial8250 .0: ttyS1 at MMIO 0x1d06000 (irq = 41) is a 16550A
  135. brd: module loaded
  136. NAND device: Manufacturer ID: 0xec, Chip ID: 0xdc (Samsung NAND 512MiB 3, 3V 8- bit)
  137. nand_bbt: ECC error while reading bad block table
  138. Creating 5 MTD partitions on "davinci_nand.0":
  139. 0x000000000000 -0x0000003c0000 : "bootloader"
  140. 0x0000003c0000 -0x000000400000 : "params"
  141. 0x000000400000 -0x000000820000 : "kernel"
  142. 0x000000820000 -0x000008820000 : "filesystem"
  143. 0x000008820000 -0x000020000000 : "zslf"
  144. davinci_nand davinci_nand .0: controller rev. 2.3
  145. UBI: attaching mtd3 to ubi0
  146. UBI: physical eraseblock size: 131072 bytes ( 128 KiB)
  147. UBI: logical eraseblock size: 126976 bytes
  148. UBI: smallest flash I/O unit: 2048
  149. UBI: VID header offset: 2048 (aligned 2048)
  150. UBI: data offset: 4096
  151. usb 1 -1: new high speed USB device using musb_hdrc and address 2
  152. usb 1 -1: New USB device found, idVendor= 12d1, idProduct= 15c1
  153. usb 1 -1: New USB device strings: Mfr= 1, Product= 2, SerialNumber= 3
  154. usb 1 -1: Product: HUAWEI Mobile V7R11
  155. usb 1 -1: Manufacturer: Huawei Technologies Co., Ltd.
  156. usb 1 -1: SerialNumber: 0123456789ABCDEF
  157. usb 1 -1: configuration # 2 chosen from 3 choices
  158. UBI: attached mtd3 to ubi0
  159. UBI: MTD device name: "filesystem"
  160. UBI: MTD device size: 128 MiB
  161. UBI: number of good PEBs: 1024
  162. UBI: number of bad PEBs: 0
  163. UBI: max. allowed volumes: 128
  164. UBI: wear-leveling threshold: 4096
  165. UBI: number of internal volumes: 1
  166. UBI: number of user volumes: 1
  167. UBI: available PEBs: 5
  168. UBI: total number of reserved PEBs: 1019
  169. UBI: number of PEBs reserved for bad PEB handling: 10
  170. UBI: max/mean erase counter: 2/ 1
  171. UBI: image sequence number: 0
  172. UBI: background thread "ubi_bgt0d" started, PID 354
  173. PPP generic driver version 2.4 .2
  174. PPP Deflate Compression module registered
  175. PPP BSD Compression module registered
  176. PPP MPPE Compression module registered
  177. NET: Registered protocol family 24
  178. tun: Universal TUN/TAP device driver, 1.6
  179. tun: (C) 1999 -2004 Max Krasnyansky <maxk@qualcomm.com>
  180. cdc_bind,[ 546]
  181. usb0: register 'cdc_ether' at usb-musb_hdrc -1, CDC Ethernet Device, 02: 1e: 10: 1f: 00: 00
  182. usbcore: registered new interface driver cdc_ether
  183. console [netcon0] enabled
  184. netconsole: network logging started
  185. Initializing USB Mass Storage driver...
  186. usbcore: registered new interface driver usb- storage
  187. USB Mass Storage support registered.
  188. usbcore: registered new interface driver usbserial
  189. USB Serial support registered for generic
  190. usbcore: registered new interface driver usbserial_generic
  191. usbserial: USB Serial Driver core
  192. USB Serial support registered for GSM modem ( 1-port)
  193. option 1 -1: 2.2: GSM modem ( 1-port) converter detected
  194. usb 1 -1: GSM modem ( 1-port) converter now attached to ttyUSB0
  195. option 1 -1: 2.3: GSM modem ( 1-port) converter detected
  196. usb 1 -1: GSM modem ( 1-port) converter now attached to ttyUSB1
  197. option 1 -1: 2.4: GSM modem ( 1-port) converter detected
  198. usb 1 -1: GSM modem ( 1-port) converter now attached to ttyUSB2
  199. option 1 -1: 2.5: GSM modem ( 1-port) converter detected
  200. usb 1 -1: GSM modem ( 1-port) converter now attached to ttyUSB3
  201. option 1 -1: 2.6: GSM modem ( 1-port) converter detected
  202. usb 1 -1: GSM modem ( 1-port) converter now attached to ttyUSB4
  203. usbcore: registered new interface driver option
  204. option: v0 .7 .2:USB Driver for GSM modems
  205. usbcore: registered new interface driver usbtest
  206. rtc-ds1307 1 -0068: rtc core: registered ds1339 as rtc0
  207. i2c /dev entries driver
  208. Linux video capture interface: v2 .00
  209. ths7303 1 -002c: chip found @ 0x58 (DaVinci I2C adapter)
  210. ths7303 1 -002c: ths7303 write failed
  211. ths7303: probe of 1 -002c failed with error -121
  212. vpfe_init
  213. vpfe-capture: vpss clock vpss_master enabled
  214. vpfe-capture vpfe-capture: v4l2 device registered
  215. vpfe-capture vpfe-capture: video device registered
  216. EVM: switch to tvp5150 SD video input
  217. tvp5150 1 -005d: chip found @ 0x5d (DaVinci I2C adapter)
  218. vpfe-capture vpfe-capture: v4l2 sub device tvp5150 registered
  219. EVM: switch to tvp7002 HD video input
  220. vpfe-capture vpfe-capture: v4l2 sub device ths7353 register fails
  221. vpfe_register_ccdc_device: DM365 ISIF
  222. DM365 ISIF is registered with vpfe.
  223. af major#: 250, minor# 0
  224. AF Driver initialized
  225. aew major#: 249, minor# 0
  226. AEW Driver initialized
  227. ###### osd_init ######
  228. ### VPBE OSD DRIVER INIT ###
  229. Trying to register davinci display video device.
  230. layer=c10b1400,layer->video_dev=c10b1570
  231. Trying to register davinci display video device.
  232. layer=c10b1800,layer->video_dev=c10b1970
  233. davinci_init:DaVinci V4L2 Display Driver V1 .0 loaded
  234. watchdog watchdog: heartbeat 60 sec
  235. davinci_mmc davinci_mmc .0: Using DMA, 4- bit mode
  236. Advanced Linux Sound Architecture Driver Version 1.0 .21.
  237. No device for DAI tlv320aic3x
  238. No device for DAI davinci-i2s
  239. asoc: tlv320aic3x <-> davinci-i2s mapping ok
  240. ALSA device list:
  241. # 0: DaVinci EVM (tlv320aic3x)
  242. TCP cubic registered
  243. NET: Registered protocol family 17
  244. Clocks: disable unused mmcsd1
  245. Clocks: disable unused spi0
  246. Clocks: disable unused spi1
  247. Clocks: disable unused spi2
  248. Clocks: disable unused spi3
  249. Clocks: disable unused spi4
  250. Clocks: disable unused pwm0
  251. Clocks: disable unused pwm1
  252. Clocks: disable unused pwm2
  253. Clocks: disable unused pwm3
  254. Clocks: disable unused timer1
  255. Clocks: disable unused timer3
  256. Clocks: disable unused emac
  257. Clocks: disable unused voice_codec
  258. Clocks: disable unused rto
  259. Clocks: disable unused mjcp
  260. davinci_emac_probe: using random MAC addr: b2: 55: 85:e9: 2b: 0e
  261. emac-mii: probed
  262. mmc0: new high speed SDHC card at address e624
  263. rtc-ds1307 1 -0068: setting system clock to 2015 -11 -24 11: 00: 54 UTC ( 1448362854)
  264. mmcblk0: mmc0:e624 SU64G 59.4 GiB
  265. mmcblk0: p1
  266. UBIFS: mounted UBI device 0, volume 0, name "rootfs"
  267. UBIFS: file system size: 126341120 bytes ( 123380 KiB, 120 MiB, 995 LEBs)
  268. UBIFS: journal size: 6348800 bytes ( 6200 KiB, 6 MiB, 50 LEBs)
  269. UBIFS: media format: w4/r0 (latest is w4/r0)
  270. UBIFS: default compressor: lzo
  271. UBIFS: reserved for root: 4952683 bytes ( 4836 KiB)
  272. VFS: Mounted root (ubifs filesystem) on device 0: 14.
  273. Freeing init memory: 148K
  274. INIT: version 2.86 booting
  275. Please wait: booting...
  276. Error Cannot open /dev/tty0: No such device or address
  277. Starting udev
  278. udev: starting version 141
  279. Root filesystem already rw, not remounting
  280. Caching udev devnodes
  281. Populating dev cacheFAT: bogus number of reserved sectors
  282. VFS: Can 't find a valid FAT filesystem on dev mmcblk0.
  283. mv: cannot rename '/tmp/devices ': No such file or directory
  284. EXT3-fs warning: maximal mount count reached, running e2fsck is recommended
  285. kjournald starting. Commit interval 5 seconds
  286. EXT3 FS on mmcblk0p1, internal journal
  287. EXT3-fs: mounted filesystem with writeback data mode.
  288. ALSA: Restoring mixer settings...
  289. Configuring network interfaces... eth0: attached PHY driver [LXT971] (mii_bus:phy_addr=1:01, id=1378e2)
  290. done.
  291. Setting up IP spoofing protection: rp_filter.
  292. INIT: Entering runlevel: 5
  293. Starting system message bus: dbus.
  294. Starting telnet daemon.
  295. Starting syslogd/klogd: done
  296. CMEMK module: built on Oct 26 2015 at 22:19:29
  297. Reference Linux version 2.6.32
  298. File /home/zslf/dm368/dvsdk_dm368_4_02_00_06/linuxutils_2_26_01_02_bak/packages/ti/sdo/linuxutils/cmem/src/module/cmemk.c
  299. allocated heap buffer 0xc7000000 of size 0x4400000
  300. heap fallback enabled - will try heap if pool buffer is not available
  301. CMEM Range Overlaps Kernel Physical - allowing overlap
  302. CMEM phys_start (0x1000) overlaps kernel (0x80000000 -> 0x83000000)
  303. cmemk initialized
  304. IRQK module: built on Oct 26 2015 at 22:17:36
  305. Reference Linux version 2.6.32
  306. File /home/zslf/dm368/dvsdk_dm368_4_02_00_06/linuxutils_2_26_01_02_bak/packages/ti/sdo/linuxutils/irq/src/module/irqk.c
  307. irqk initialized
  308. EDMAK module: built on Oct 26 2015 at 22:16:49
  309. Reference Linux version 2.6.32
  310. File /home/zslf/dm368/dvsdk_dm368_4_02_00_06/linuxutils_2_26_01_02_bak/packages/ti/sdo/linuxutils/edma/src/module/edmak.c
  311. /zslf/appZSLF.sh: line 9: ppp_config_copy: not found
  312. start copy th config file from zslf/config to /etc/ppp/peers.
  313. cp: cannot stat '/zslf/config/ppp- off ': No such file or directory
  314. cp: cannot stat '/zslf/config/ppp0_on_state.txt ': No such file or directory
  315. ############## ZSLF ##################
  316. start copy the config file from zslf to thttpd/www.
  317. /zslf/appZSLF.sh: line 17: ppp_config_copy: not found
  318. Create a shared memory segment 32769.
  319. 24 Nov 11:01:09 ntpdate[993]: no servers can be used, exiting
  320. mkdir: cannot create directory '/media/mmcblk0p1/bak ': File exists
  321. ## davinci_pio_led:ioctl:out: GPIO-81=1 now.ret= 0 ##
  322. setrlimit ok
  323. FD_SETSIZE= 1024
  324. ### Serial_ttyUSB0_Init ###
  325. ### Complete serial_open ###
  326. ### Complete serial_config ###
  327. ### Complete fcntl ###
  328. ### Serial_ttyUSB0_Init End ###
  329. ### MU909_SetCFUN ###
  330. start MU909_SetCFUN
  331. ##strATCommand is AT+CFUN=1
  332. .
  333. AT+CFUN=1
  334. OK
  335. ##strATCommand is AT+CMEE=2
  336. .
  337. AT+CMEE=2
  338. OK
  339. ##strATCommand is AT+CPIN?
  340. .
  341. AT+CPIN?
  342. +CPIN: READY
  343. OK
  344. ##strATCommand is AT+CEREG=2
  345. .
  346. AT+CEREG=2
  347. OK
  348. ##strATCommand is AT^HCSQ?
  349. .
  350. AT^HCSQ?
  351. ^HCSQ: "LTE",52,49,166,34
  352. OK
  353. ##strATCommand is AT+COPS?
  354. .
  355. AT+COPS?
  356. +COPS: 0,0,"CMCC",7
  357. OK
  358. ##strATCommand is AT^SYSCFGEX="03",3fffffff,1,2,7fffffffffffffff,,
  359. .
  360. AT^SYSCFGEX="03",3fffffff,1,2,7fffffffffffffff,,
  361. OK
  362. ##strATCommand is AT^NDISDUP=1,1,"cmnet"
  363. .
  364. AT^NDISDUP=1,1,"cmnet"
  365. OK
  366. ^NDISSTAT: 1,,,"IPV4"
  367. ^NDISSTAT: 1,,,"IPV6"
  368. udhcpc (v1.13.2) started
  369. Sending discover...
  370. Sending select for 10.67.239.228...
  371. Lease of 10.67.239.228 obtained, lease time 518400
  372. adding dns 221.130.33.60
  373. adding dns 221.130.33.52
  374. ######## encode #########
  375. ### timenow->tm_year = 115 ###
  376. _____ _____ _ _
  377. | _ |___ ___ ___ ___ | _ |___ ___ |_|___ ___| |_
  378. | | _| .'| . | . | | __| _| . | | | -_| _| _|
  379. |__|__|_| |__,|_ |___| |__| |_| |___|_| |___|___|_|
  380. |___| |___|
  381. Arago Project http://arago-project.org dm368-evm ttyS0
  382. Arago 2011.02 dm368-evm ttyS0
  383. dm368-evm login: 24 Nov 11: 01: 32 ntpdate[ 1189]: no server suitable for synchronization found
  384. zslf module ok...
  385. dlsym load ok!
  386. *** after***
  387. #### parseStreamingArgs - streaming to [ 124.65 .158 .106: 22616] ####
  388. #### parseStreamingArgs - streaming to [ 192.168 .2 .91: 22616] ####
  389. #### parseVideoArgs - ( 0) 720x480 ####
  390. #### parseVideoArgs - ( 1) 720x480 ####
  391. #### parseAudioArgs - 44100, 2, 32000, 1 ####
  392. ### parseArgs - config/devInfo.txt, Name:[联通小单?##### output_store ######
  393. ? 56001], ID:[YS-###### davinci_get_cur_encoder ######
  394. 56001] ###
  395. Encode streaming star###### vpbe_encoder_initialize ######
  396. ting...
  397. 1
  398. 2
  399. 3
  400. 4
  401. ###### output is COMPOSITE,outindex is 0 ######
  402. ###### vpbe_encoder_setoutput ######
  403. ###### dm365 = 1 ######
  404. ###### mode_info-> std is 1 ######
  405. ###### mode is NTSC ######
  406. ###### 22VPBE Encoder initialized ######
  407. ###### vpbe_encoder_setoutput ######
  408. ###### dm365 = 1 ######
  409. ###### mode_info-> std is 1 ######
  410. ###### mode is NTSC ######
  411. ###### davinci_enc_set_output : next davinci_enc_set_mode_platform ######
  412. ###### davinci_enc_set_mode_platform : next davinci_enc_priv_setmode ######
  413. ###### output_show ######
  414. ###### davinci_enc_get_output ######
  415. ###### davinci_get_cur_encoder ######
  416. ###### mode_store ######
  417. ###### davinci_enc_get_mode ######
  418. ###### davinci_get_cur_encoder ######
  419. ###### davinci_enc_set_mode ######
  420. ###### davinci_get_cur_encoder ######
  421. ###### dm365 = 1 ######
  422. ###### mode_info-> std is 1 ######
  423. ###### mode is PAL ######
  424. ###### davinci_enc_set_mode : next davinci_enc_set_mode ######
  425. ###### davinci_enc_set_mode_platform : next davinci_enc_priv_setmode ######
  426. ###### mode_show ######
  427. ###### davinci_enc_get_mode ######
  428. ###### davinci_get_cur_encoder ######
  429. Found width= 720 height= 480, yres_virtual= 480,xres_virtual= 720, l###### davinci_enc_get_mode ######
  430. ###### davinci_get_cur_encoder ######
  431. ###### davinci_enc_get_mode ######
  432. ###### davinci_get_cur_encoder ######
  433. ###### davinci_enc_set_mode ######
  434. ###### davinci_get_cur_encoder ######
  435. ###### dm365 = 1 ######
  436. ###### mode_info-> std is 1 ######
  437. ###### mode is PAL ######
  438. ###### davinci_enc_set_mode : next davinci_enc_set_mode ######
  439. ###### davinci_enc_set_mode_platform : next davinci_enc_priv_setmode ######
  440. ###### davinci_enc_get_mode ######
  441. ###### davinci_get_cur_encoder ######
  442. ine_length= 384
  443. ###### davinci_enc_get_mode ######
  444. ###### davinci_get_cur_encoder ######
  445. ###### davinci_enc_get_mode ######
  446. ###### davinci_get_cur_encoder ######
  447. 5
  448. 6
  449. 7
  450. sd write module ok...
  451. ____Mp4Recover module ok!
  452. /media/mmcblk0p1/video/temp/YS -56001_11 -24_10h59m49s.mp4 Need to recover!
  453. ~~~~~~~~~~~~~~ now! is ready to recover!
  454. now! is get_data!
  455. get data all!
  456. now! is make mp4!
  457. ### sps.pic_width_in_mbs_minus1 : 0
  458. sps.pic_height_in_map_units_minus1 : 0
  459. sps.vui_parameters.time_scale : 139596691
  460. sps.vui_parameters.num_units_in_tick : 376021250 ###
  461. now! is follow handle!
  462. __cgy in main all!
  463. sd write init ok## davinci_pio_led:ioctl: out: GPIO -47= 0 now.ret= 0 ##
  464. func_sd_input_data ok
  465. +
  466. ###READY TO PM### 18
  467. there is a sd need to be mounted 0000
  468. ### name:[mpeg4enc] ###
  469. ### name:[h264enc] ###
  470. #davinci_resizer davinci_resizer .2: RSZ_G_CONFIG: 0: 1: 124
  471. ## name:[mpeg2enc] ###
  472. ### name:[jpegenc] ###
  473. ### name:[g711enc] ###
  474. ### name:[aacenc] ###
  475. ###Ready to open encoder###
  476. davinci_previewer davinci_previewer .2: ipipe_set_preview_config
  477. ############
  478. v4l2_device_call_until_err sdinfo->grp_id : 5.
  479. vpfe-capture vpfe-capture: error in getting g_fmt from sub device
  480. ############
  481. v4l2_device_call_until_err sdinfo->grp_id : 5.
  482. ###succeed to open encoder###
  483. setrlimit ok
  484. FD_SETSIZE= 1024
  485. udp port multiplexing : 1
  486. #### InitUdpSocket - SO_RCVBUF : 217088, SO_SNDBUF : 217088 ####
  487. mount: /dev/mmcblk0p1 already mounted or /media/mmcblk0p1/ busy
  488. ###### len = 26 #########
  489. mount: according to mtab, /dev/mmcblk0p1 is already mounted on /media/mmcblk0p1
  490. add sd card
  491. ############# PUID: 83
  492. bjwLgn.strModel:bjw -2013
  493. PUID= 83
  494. ### do_login: sockfd = 32
  495. Login response status : d
  496. ACK
  497. vpfe-capture vpfe-capture: IPIPE Chained
  498. vpfe-capture vpfe-capture: Resizer present
  499. ***** input= 0****EVM: switch to tvp5150 SD video input
  500. ***
  501. ############
  502. v4l2_device_call_until_err sdinfo->grp_id : 5.
  503. ###j= 1###
  504. *** Video ASK Rep ***
  505. startdata ok!
  506. *****queryInput= 0*******
  507. ############
  508. v4l2_device_call_until_err sdinfo->grp_id : 5.
  509. setsockopt ok!
  510. vpfe-capture vpfe-capture: width = 736, height = 480, bpp = 1
  511. vpfe-capture vpfe-capture: adjusted width = 736, height = 480, bpp = 1, bytesperline = 736, sizeimage = 529920
  512. vpfe-capture vpfe-capture: width = 736, height = 480, bpp = 1
  513. vpfe-capture vpfe-capture: adjusted width = 736, height = 480, bpp = 1, bytesperline = 736, sizeimage = 529920
  514. ### BJW_DealMsg - VIDEO: FORCE IDR ###
  515. BJW_DealMsg - CONNECTED 42
  516. ### videoThrFxn - video0 construct IDR ###
  517. ***succeed to get capture***
  518. ### sps.pic_width_in_mbs_minus1 : 0
  519. sps.pic_height_in_map_units_minus1 : 0
  520. sps.vui_parameters.time_scale : 139596691
  521. sps.vui_parameters.num_units_in_tick : 376021250 ###
  522. .
  523. dm368-evm login:
  524. _____ _____ _ _
  525. | _ |___ ___ ___ ___ | _ |___ ___ |_|___ ___| |_
  526. | | _| . '| . | . | | __| _| . | | | -_| _| _|
  527. |__|__|_| |__,|_ |___| |__| |_| |___|_| |___|___|_|
  528. |___| |___|
  529. Arago Project http://arago-project.org dm368-evm ttyS0
  530. Arago 2011.02 dm368-evm ttyS0
  531. dm368-evm login: root
  532. root@dm368-evm:~#

五、相关博客

ARM平台嵌入式Linux下使用3G/4G 模块

原博客已删除,就怕这种事情发生哦,所以我自己写博客从来不会只给一个链接,必须还有标题。


简介

随着工业发展,嵌入式设备接入网络的需求日益增多,在没有有线或者无线以太网的环境下,直接通过3G/4G Modem连接运营商网络来接入互联网不失为一个好方法,本文就着重介绍基于ARM平台的嵌入式设备在Embedded Linux下使用3G/4G Modem的方法。

目前市面上的3G/4G modem和主机的连接方式主要有串口、USB和mini-PCIE,串口模块比较传统且使用比较简单,而mini-PCIE在工业设备中目前应用还不广泛,因此本文使用USB 3G/4G modem来进行演示。

硬件准备

嵌入式平台基于Toradex Colibri i.MX6工业产品级ARM核心板搭配Colibri开发载板,Embedded linux采用Toradex官方发布兼容Yocto Project 的Linux V2.5版本。

3G Modem使用华为 E303s WCDMA Modem,支持中国联通的3G网络

Linux Kernel准备

关于Linux kernel源代码下载及基本编译更新操作请参考这里,本文不再赘述,只简单列出操作如下:

a). 下载Linux kernel源代码

b). 下载安装Toolchain,并link到 “ ~/gcc-linaro “ 目录

$ wget http://releases.linaro.org/14.11/components/toolchain/binaries/arm-linux-gnueabihf/gcc-linaro-4.9-2014.11-x86_64_arm-linux-gnueabihf.tar.xz

$ tar xvf gcc-linaro-4.9-2014.11-x86_64_arm-linux-gnueabihf.tar.xz

$ ln -s gcc-linaro-4.9-2014.11-x86_64_arm-linux-gnueabihf gcc-linaro

 

c). 设置环境变量

$ export ARCH=arm

$ export PATH=~/gcc-linaro/bin/:$PATH

$ export CROSS_COMPILE=arm-linux-gnueabihf-

 

d). 配置

$ make colibri_imx6_defconfig

$ make menuconfig      //添加下面列出功能

--------------------

[*] Network device support  --->

       <*>   PPP (point-to-point protocol) support

       <*>     PPP BSD-Compress compression

        <*>     PPP Deflate compression

       [*]     PPP filtering

       <*>     PPP MPPE compression (encryption)

       [*]     PPP multilink support

       <*>     PPP over Ethernet

       <*>     PPP support for async serial ports

       <*>     PPP support for sync tty ports

 

[*] USB support  --->

       <*>     USB Modem (CDC ACM) support

 

[*] USB support  --->

    <*>   USB Serial Converter support  --->

              <*>   USB driver for GSM and CDMA modems

--------------------

 

e). 重新编译kernel image

$ make -j3 uImage LOADADDR=10008000 2>&1 | tee build.log

 

f). 升级目标板

根据本章节开始提供的参考升级目标板到新的kernel image

相关软件准备

1). PPP

Toradex image默认已经安装,如果其他ARM平台image也是基于Yocto/OpenEmbedded环境编译,可以在local.conf文件中添加如下选项后编译

-----------------

IMAGE_INSTALL_append = " ppp"

-----------------

2). usb-modesiwtch-2.3.0

a). 需要libusb-1.0.x,先从这里下载源文件并解压

b). 使用上一章节配置的ToolChain如下设置交叉编译libusb

$ sudo CC="/home/xxx/gcc-linaro/bin/arm-linux-gnueabihf-gcc" CXX="/home/xxx/gcc-linaro/bin/arm-linux-gnueabihf-g++" ./configure --host=arm-linux-gnueabihf --prefix=/home/xxx/gcc-linaro --disable-udev

$ make

$ make install

c). 从这里下载usb-modesiwtch并解压

d). 如下修改usb-modesiwtch 目录下Makefile

----------------

CC          = ~/gcc-linaro/bin/arm-linux-gnueabihf-gcc

CFLAGS      += -Wall -I/home/xxx/gcc-linaro/include -L/home/xxx/gcc-linaro/lib

----------------

e).交叉编译usb-modesiwtch

$ make

f). 从这里下载usb-modeswitch-data,和上面步骤编译出的usb-modesiwtch可执行文件一起上传到目标板

配置Modem连接网络

目前比较新的3G/4G都支持Ethernet模式和Fallback模式,而老一些的模块只支持Fallback模式,请根据所需模块情况自行参考下面操作。

1). Ethernet模式

a). 将E303s 3G Modem连接目标板,由于Modem上包含为了给Windows系统提供驱动而部署的存储分区,Linux默认将设备识别成USB Mass Storage设备

root@colibri-imx6:/home# lsusb

Bus 001 Device 004: ID 12d1:1f01 Huawei Technologies Co., Ltd. E353/E3131 (Mass storage mode)

……

b). 如下修改usb-modeswitch-data-20160112/usb_modeswitch.d目录下的12d1:1f01文件

-----------------------

# Huawei E303s Ethernet Mode

DefaultVendor=0x12d1

DefaultProduct=0x1f01

TargetVendor=0x12d1

TargetProduct=0x14db

MessageEndPoint = "0x01"

MessageContent="55534243123456780000000000000a11062000000000000100000000000000"

------------------------

c). 使用usb-modeswitch工具将modem设置为Ethernet mode

root@colibri-imx6:/home# ./usb_modeswitch -c 12d1:1f01

……

root@colibri-imx6:/home# [  840.027676] usb 1-1.1: USB disconnect, device number 4

[  840.284299] usb 1-1.1: new high-speed USB device number 6 using ci_hdrc

[  840.427810] cdc_ether 1-1.1:1.0 eth1: register 'cdc_ether' at usb-ci_hdrc.0-1.1, CDC Ethernet Device, 58:2c:80:13:92:63

 

lsusb查看

root@colibri-imx6:/home# lsusb

Bus 001 Device 005: ID 12d1:14db Huawei Technologies Co., Ltd. E353/E3131

……

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值