在i.MX 6ULL平台上编译sim7100驱动(SIM7100 Linux NDIS)

在i.MX 6ULL平台上编译sim7100驱动(SIM7100 Linux NDIS)

我是在Ubuntu 16.04上操作的,使用的开发板是米尔科技的MYC-Y6ULX开发板,内核版本为Linux 4.1.15,并按照米尔科技给的教程配置好Yocto编译工具链

arm-poky-linux-gnueabi-gcc --version

arm-poky-linux-gnueabi-gcc (GCC) 5.3.0
Copyright (C) 2015 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

1 尝试编译内核

安装必备的软件包

sudo apt-get install build-essential git-core libncurses5-dev \
flex bison texinfo zip unzip zlib1g-dev gettext u-boot-tools \
g++ xz-utils mtd-utils gawk diffstat gcc-multilib python git \
make gcc g++ diffstat bzip2 gawk chrpath wget cpio texinfo

尝试编译内核

#进入Kernel目录,解压内核源码
cd $DEV_ROOT/04-Source
tar -xvf MYiR-iMX-Linux.tar.gz
cd MYiR-iMX-Linux
#开始编译
make distclean 
make myd_y6ulx_defconfig
make zImage dtbs
#成功的话,编译完成后在"arch/arm/boot"目录会生成内核镜像文件zImage
#编译时可能会提示lzop: not found,安装lzop
sudo apt-get install lzop

配置内核,安装USB Serial Driver

通过内核配置工具make menuconfig,根据simcom官方指导文件“SIM7100 Linux NDIS User Guide ”,确保内核中:
* CONFIG_USB_SERIAL=y
* CONFIG_USB_SERIAL_WWAN=y
* CONFIG_USB_SERIAL_OPTION=y

修改内核中option.c文件(通常路径为drivers/usb/serial/options.c)

//我的内核版本大于V3,2
#define SIMCOM_SIM7100_VID   0x1E0E 
#define SIMCOM_SIM7100_PID   0x9001 

//for SIM7100 modem for NDIS   
static const struct option_blacklist_info simcom_sim7100_blacklist = {   
    .reserved = BIT(5),   
};

/*
Add into option_ids list 
*/
//for SIM7100 modem for NDIS   
{ USB_DEVICE(SIMCOM_SIM7100_VID, SIMCOM_SIM7100_PID),   
    .driver_info = (kernel_ulong_t)& simcom_sim7100_blacklist   
}, 

重新编译内核,病通过NXP的MfgTool下载内核,成功的话,会在/dev下面生成5个ttyUSB×
分别是:
ttyUSB0 ttyUSB1 ttyUSB2 ttyUSB3 ttyUSB4
表明驱动已经正常安装了

配置内核,安装NDIS Dial up

从 3.4.1开始,linux内核已经支持 QMI WWAN
重新配置内核,确保
* CONFIG_USB_WDM=y
* CONFIG_USBNET=y
* CONFIG_USB_NET_QMI_WWAN=y

配置成y的话,驱动直接集成到内核里面,如果是m的话,即驱劝是以模块方式加载,需要编译lib,然后手动拷贝到/lib里面(因为依赖关系,我的CONFIG_USB_NET_QMI_WWAN只能是m)

在qmi_wwan.c中添加sim7100 VID和PID

{QMI_GOBI_DEVICE(0x1e0e, 0x9001)}, /* SIM7100 Modem Device */ 

重新编译内核,如果是配置为m需要,即驱劝是以模块方式加载,那么需要重新编译驱动模块

make modules
mkdir ../target-kernel
make INSTALL_MOD_PATH=../target-kernel modules_install

把target-kernel目录打包后,解压在MYD-Y6ULX开发板的/lib目录下使用
成功的话会提示成功加载驱动, QMI WWAN,但是通过ifconfig -a查看所有网卡,有可能并没有发现设备
这时候需要进行的是进行匹配设备PID/VID(参考[1])

#匹配设备pid/vid
sudo echo 1e0e 9001 > /sys/bus/usb/drivers/qmi_wwan/new_id 
#检查驱动是否加载成功/dev/cdc-wdm0
ls /dev/cdc*

通过ifconfig -a也会看到wwan0设备
在i.MX 6ULL平台上编译sim7100驱动(SIM7100 Linux NDIS)_第1张图片

拨号连接

sim7100可以通过下面两条指令进行拨号和断开连接

// Start to dial up. 
AT$QCRMCALL=1,1    
// Disconnect. 
AT$QCRMCALL=0,1    

实际的具体操作为:

#拨号上网,字符串内的符号需要转义
echo "AT\$QCRMCALL=1,1" > /dev/ttyUSB2
udhcpc -i wwan0  #获取ip
#通过ping www.baidu.com查看是否连接到互联网
...

SIM7100 Linux NDIS User Guide下载地址:https://gitee.com/smartlifestyle/simcom_sim7100_qmi_ndis_linux_driver.git

参考:
[1] http://blog.csdn.net/wofeboy/article/details/45110667
[2] http://blog.csdn.net/a_tu_/article/details/51087994
[3] http://blog.csdn.net/lixuhui112/article/details/52803723

你可能感兴趣的:(arm,linux)