我是在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.
安装必备的软件包
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
通过内核配置工具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
表明驱动已经正常安装了
从 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*
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