i.Mx6 SoloX上3G模块的实现

时间:2022-07-18 09:25:04
版本声明:此文档针对于i.Mx6 SoloX开发板,采取的编译方法为SDK开发,若想了解通用版本的配置可查看一下这个链接,谢谢!
硬件:3G USB模块(华为E261)+sim卡(联通)
开发板:NXP开发板+芯片:i.Mx6 SoloX
Linux kernel:4.1.15_2.0.0

编译器为:arm-poky-linux-gnueabi

现将开发流程记录如下:

一:关于内核的配置:

  • 配置环境变量

    export CROSS_COMPILE=/opt/fsl-imx-xwayland/4.1.15-2.0.0/sysroots/i686-pokysdk-linux/usr/bin/arm-poky-linux-gnueabi/arm-poky-linux-gnueabi- (上面的路径要根据SDK gcc安装路径来,而且“=”左右不能有空格,结尾是“-”!)
   export ARCH=arm

  • 加载默认配置

   make imx_v7_defconfig  清理原有配置

make clean

  •  修改配置:

      见上一篇文档

  • · 修改内核:

   1.修改usb的3G驱动文件 driver//usb/serial/option.c在其中加入3G卡片的 HUAWEI_VENDOR_ID 0x12D1和HUAWEI_PRODUCT_EC1260 0x1446。直接找到对应位置添加即可。无需添加别的代码,编译成模块。注意此处的应该生成三个模块,option.ko . usb_wwan.ko,及usbserial.ko文件。

   2.编译3G模块的驱动option.ko :配置内核时3G驱动对应的选项“USB driver for GSM and CDMA modems”需编译成模块,才能在后面转换时生成ttyUSB0、ttyUSB1、ttyUSB2。

   3.执行编辑完成:# make zImage LOADADDR=0x10008000

   注意:编译完成以后,在内核目录的arch/arm/boot 目录下便会生成一个 zImage 内核文件,烧到开发板中,这样开发板内核就支持了PPP了。

二:驱动的编写:

相关工具与库文件的下载:

  1. usb_modeswitch-2.4.0.tar.bz2(http://www.draisberghof.de/usb_modeswitch/)

  2.usb_modeswitch-data-20160803-tar.bz2(http://www.draisberghof.de/usb_modeswitch/)

  3. libusb-1.0.9.tar.bz2 (http://sourceforge.net/projects/libusb/files/libusb-1.0/)

  4.libusb-compat-0.1.5.tar.bz2 (http://www.linuxfromscratch.org/blfs/view/svn/general/libusb-compat.html

交叉编译usb_modeswitch: 

  1. 交叉编译 libusb

    A. 解压并进入libusb-1.0.9目录,建立子目录install用于存放最后生存的库文件与头文件。

     [y@-Inspiron-5437:~/3G/libusb-1.0.9]# mkdir install

    B. 配置并生成Makefile文件

     y@-Inspiron-5437:~/3G/libusb-1.0.9]#./configure --build=i686-linux --host=arm-poky-linux-gnueabi --prefix=/home/y/3G/libusb-1.0.9/install

    C. [y@-Inspiron-5437:~/3G/libusb-1.0.9]#make

    D. [y@-Inspiron-5437:~/3G/libusb-1.0.9]# make install

  2. 设置PKG_CONFIG_PATH环境变量,以使我们后面的编译能够顺利找到libusb库

    A.设置环境变量

     [y@-Inspiron-5437:~/3G/libusb-1.0.9]# export PKG_CONFIG_PATH=/home/y/3G/libusb-1.0.9/install/lib/pkgconfig:$PKG_CONFIG_PATH  

    B.查看是否设置正确

     [y@-Inspiron-5437:~/3G/libusb-1.0.9]#echo $PKG_CONFIG_PATH

  3. 交叉编译lib_compat

    与上面编译libusb的方法类似:

     A.[y@-Inspiron-5437:~/3G/libusb-compat-0.1.5]#.mkdir install

     B . [y@-Inspiron-5437:~/3G/libusb-compat-0.1.5]#./configure --build=i686-linux --host=arm-poky-linux-gnueabi --prefix=/home/y/3G/libusb-compat-0.1.5/install

     C. [y@-Inspiron-5437:~/3G/libusb-compat-0.1.5]#make

     D. [y@-Inspiron-5437:~/3G/libusb-compat-0.1.5]#make install

  4. 交叉编译usb_modeswitch

     A.修改Makefile文件

      修改STRIP和CC选项为:

      STRIP ?= strip (注意:这行在Makefie中没用,直接添加即可)

      CC ?= gcc

     B. 可以将上面的libusb和libusb-compat的库和头文件拷贝到交叉编译器的lib和include目录下                                   

      (注意:libusb和libusb-compat的库和头文件位于上面新建的install下,交叉编译其所有找到安装ARM-Linux-工具的目录下)                                                                                                                            

        C.使用之前,必须先source env, 导入各种工具链的环境变量(包括编译使用的CC,LD等的参数)      

        $ source /opt/fsl-imx-xwayland/4.1.15-2.0.0/environment-setup-cortexa9hf-neon-poky-linux-gnueabi                

        make  

  5. 编辑usb_modeswitch目录下的usb_modeswitch.conf文件,加入以下内容:

DefaultVendor= 0x12d1        

DefaultProduct= 0x1446

TargetVendor = 0x12d1

TargetProduct= 0x140c

MessageContent="55534243000000000000000000000011060000000000000000000000000000"

MessageEndpoint=0x01

CheckSuccess=5

HuaweiMode=0

 

 

 

 

 

 

 

 

 

 

    注意:以上的DefaultVendor,DefaultProduct,TargetVendor,TargetProduct的值是根据具体的设备所得

  6. 将上面生成的libusb动态库拷贝到开发板的库目录下,将上面生成的usb_modeswitch可执行程序和usb_modeswitch.conf配置文件下载到开发板某目录下。

    将上面内核编译得到的驱动option.ko,usb_wwan.ko,usbserial.ko移动到某一目录下,进行insmod进行驱动模块的加载

   注意:在进行挂载之前,我们进行查看ls /proc/bus -l 查看是否有usb这样的一个文件夹,若没用这说明内核USB配置时出错,要从新对内核的配置

    进行模式的转换:./usb_modeswitch -W -c ./usb_modeswitch.confg切换到3G卡片的模式下,此时会出现一些信息,你会看到转换成3G模式后的几个串口信息ttyUSB0,ttyUSB1,ttyUSB2,如下:

   1.      option 1-1:1.0: Option 3G data card converter detected 

   2.       usb 1-1: Option 3G data card converter now attached to ttyUSB0

   3.       option 1-1:1.1: Option 3G data card converter detected

   4.         usb 1-1: Option 3G data card converter now attached to ttyUSB1   

   5.       option 1-1:1.2: Option 3G data card converter detected   

   6.        usb 1-1: Option 3G data card converter now attached to ttyUSB2

   注意:此时查看我们的:ls ttyUSB*是否存在这些ttyUSB0,ttyUSB1,ttyUSB2这些设备文件,若不存在,需要进行以下操作:                                                    

      §   mknod /dev/usb/ttyUSB1 c 188 1                                                                                         

    §    mknod /dev/usb/ttyUSB2 c 188 2                               

    §    mknod /dev/usb/ttyUSB0 c 188 0

         此时我们我们再去查看/dev/tty*就会出现我们的ttyUSB0,ttyUSB1,ttyUSB2。

三:PPP脚本的编写:

·          见上篇文档