首先介绍一下华为me909s-821,它是华为海思芯片4G模块,第一个LTE CAT4模块基于高科技车规级芯片,支持中国联通4G ,3G ,2G,中国移动4G,3G, 2G,中国电信4G,不支持中国电信3G,2G。具体参数如下:
LTE(FDD): B1,B3,B8; LTE(TDD): B39,B40,B41(38), all bands
with diversity
DC-HSPA+: B1,B9,B5,B8; TD-SCDMA: B34, B39, all bands with
diversity
EDGE/GPRS/GSM: 1800/900MHz
MIMO
LTE: DL 2*2 MIMO
HSPA+/DC-HSPA+: DL 2*2 MIMO
Output Power
LTE: +23dBm (3GPP TS 36.101 R8 Class 3)
WCDMA/HSPA+: +24dBm (Power Class 3)
TD-SCDMA/HSPA:+24dBm (Power class 2)
EDGE 1800MHz: +26dBm (Power Class E2)
EDGE 900MHz: +27dBm (Power Class E2)
GSM/GPRS 1800MHz: +30dBm (Power Class 1)
GSM/GPRS 900MHz: +33dBm (Power Class 4)
USIM (Class B and Class C)
Power supply
3.2 V to 4.2V (typical: 3.8V)
Temperature range
Operational: -30°C to 70°C
Extended: -40°C to 85°C*
Dimensions: 51 mm x 30.4 mm x 3.57 mm
Weight: approx. 12g
AT commands
3GPP TS 27.007 and 27.005
Huawei extended AT command
OS: Linux, Android, WinCE, Windows 8/10
我手里的这个模块是MiniPCIe封装,加了一个转USB的转换卡,带sim卡槽,可以直接插在windows10电脑上上网用。不过这里我是要插在openwrt路由器上上网,选用GL-inet6416,AR9331处理器。
第一步 准备编译openwrt环境
准备一台Ubuntu18.04系统电脑,最好不要低于这个版本,不然python版本不够高,无法编译。然后在终端按顺序执行以下命令。
sudo apt-get update
sudo apt-get install gcc g++ build-essential asciidoc binutils bzip2 gawk gettext git libncurses5-dev libz-dev patch flex bison make autoconf texinfo unzip sharutils subversion ncurses-term zlib1g-dev ccache upx lib32gcc1 libc6-dev-i386 uglifyjs git-core gcc-multilib p7zip p7zip-full msmtp libssl-dev libglib2.0-dev xmlto qemu-utils automake libtool -y #安装openwrt编译需要的环境
mkdir openwrt #新建一个目录
sudo chmod 777 openwrt #修改权限(重要)
cd openwrt #进入目录
git clone https://github.com/openwrt/openwrt.git source #下载源代码
cd source
./scripts/feeds update -a #更新软件
./scripts/feeds install -a
make defconfig #测试编译环境
第二步 添加me909s-821模块驱动
要使openwrt能够驱动me909s-821,必须添加相应的驱动,可以在编译的时候从源代码添加。找到build_dir/target-mips_24kc_musl/linux-ar71xx_generic/linux-4.14.160/drivers/usb/serial/option.c,target-mips_24kc_musl/linux-ar71xx_generic这一段路经要根据你的路由器处理器型号有所不同。编辑option.c,在如下位置添加代码。
static const struct usb_device_id option_ids[] = {
......
{ USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x06, 0x78) },
{ USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x06, 0x79) },
{ USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x06, 0x7A) },
{ USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x06, 0x7B) },
{ USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x06, 0x7C) },
/*在这里开始添加HUAWEI ME909S-821驱动代码*/
{ USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0x15c1, 0x02, 0x06, 0x10) },
{ USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0x15c1, 0x0a, 0x06, 0x11) },
{ USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0x15c1, 0xff, 0x06, 0x10) },
{ USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0x15c1, 0xff, 0x06, 0x13) },
{ USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0x15c1, 0xff, 0x06, 0x12) },
{ USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0x15c1, 0xff, 0x06, 0x06) },
{ USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0x15c1, 0xff, 0x06, 0x1b) },
/*添加的代码结束*/
......
};
第三步 添加必要的组件并编译
执行make menuconfig
选中如下设置项:
Kernel modules
-->USB Support
--> kmod-usb-net
--> kmod-usb-net-cdc-ether
--> kmod-usb-serial
--> kmod-usb-serial-option
这里补充一点,不要安装usb-modeswitch,否则无法正确识别模块为网卡。
执行make -j1 V=s,开始编译,编译完成后将openwrt-ar71xx-generic-gl-inet-6416A-v1-squashfs-sysupgrade.bin刷入路由器。
第四步 添加拨号脚本,拨号上网
将模块插入刷好固件的路由器USB口,插上电源。SSH登录路由器(原版openwrt默认192.168.1.1,root密码为空),执行ifconfig -a,可一看到如下图所示新增了wwan0网口,在低版本openwrt里会是usb0。
再执行ls /dev,如下图ttyUSB0~ttyUSB4,这些即为me909s-821的端口,不过只有ttyUSB0能用来4G拨号上网。
这里我们就可以确认模块已经被正常识别。下面还要添加拨号脚本。将以下脚本代码存入/etc/init.d/4g文件。
#!/bin/sh /etc/rc.common
# Example script
# Copyright (C) 2007 OpenWrt.org
START=99
start() {
# commands to launch application
if [ -f /sys/devices/platform/ehci-platform/usb1/1-1/idProduct ]; then
idProduct=`sed -n 1p /sys/devices/platform/ehci-platform/usb1/1-1/idProduct`
idVendor=`sed -n 1p /sys/devices/platform/ehci-platform/usb1/1-1/idVendor`
if [ $? -eq 0 -a -n "$idProduct" -a "$idProduct" == "15c1" -a -n "$idVendor" -a "$idVendor" == "12d1" ]; then
ifup 4g
sleep 1
echo -en "AT^SYSCFGEX=\"030201\",3FFFFFFF,0,2,7FFFFFFFFFFFFFFF,,\r\n" > /dev/ttyUSB0
sleep 1
echo -en "AT+CGDCONT=1,\"IPV4V6\",\"\"\r\n" > /dev/ttyUSB0
sleep 1
echo -en 'AT^NDISDUP=1,1\r\n' > /dev/ttyUSB0
fi
fi
}
stop() {
if [ -f /sys/devices/platform/ehci-platform/usb1/1-1/idProduct ]; then
idProduct=`sed -n 1p /sys/devices/platform/ehci-platform/usb1/1-1/idProduct`
idVendor=`sed -n 1p /sys/devices/platform/ehci-platform/usb1/1-1/idVendor`
if [ $? -eq 0 -a -n "$idProduct" -a "$idProduct" == "15c1" -a -n "$idVendor" -a "$idVendor" == "12d1" ]; then
echo -en 'AT^NDISDUP=1,0\r\n' > /dev/ttyUSB0
sleep 1
ifdown 4g
fi
fi
}
SSH终端执行以下命令。
chmod -R 777 /etc/init.d/4g #添加可执行权限
/etc/init.d/4g enable #激活开机启动,以后每次打开路由器会自动拨号上网
/etc/init.d/4g start #手动拨号上网
到这里还不能上网,还需要进入Luci界面进行进一步设置。打开“网络-->接口”,编辑WAN接口,按照下图进行设置。
保存并应用后,稍等一会就会发现WAN接口获取到了IP地址。再测试网络会发现已经可以正常联网了。但是也有一个问题还没有解决,IPV6地址无法获取,设置WAN6接口也无济于事,以后找到解决办法再行更新。
最后再讲下AT指令,这个模块就是通过AT指令拨号的,上面的拨号脚本就是执行AT指令,如何单独执行AT指令,可以登录路由器SSH,执行echo -en "AT^NDISSTATQRY?">/dev/ttyUSB0,再执行cat /dev/ttyUSB0 | awk '{if($0!="")print}'
得到下图结果:
AT^NDISSTATQRY 命令用于查询连接状态,图中所示IPV4和IPV6都已经连接成功(但是IPV6地址还知道如何获取,AT^DHCPV6?指令也无法获取V6地址)。更多AT指令可以查阅《华为me909s-821 AT命令手册》。