上班一年了,最近才觉得应该把学到的东西好好用博客展示出来,而不是排的整整齐齐的放在浏览器收藏夹里!也开始从头发一些博客,但是觉得手头上的工作,也应该及时总结,这篇文章是关于 openwrt 拨号上网的博客,具体关于openwrt的使用以后博客慢慢补吧。
废话不多说,进入主题!
本人使用的是MTK-7628的一块板子,因为需要,现在想通过usb外接上网卡的形式,实现4G拨号上网,并让内部的设备能向外互通。4G上网模块使用的是龙尚的U9300C,应该用的高通的基带,如果有读者和我类似的话,下面文章希望对大家有些帮助!接下来的内容可能需要一点openwrt使用的经验,如果不太懂的话我后续的博文会详细介绍的,我也是小白一个,现在就先看看吧!
修改内核USB驱动
- 访问下面位置,打开option.c文件
openwrt-sdk\build_dir\target-mipsel_24kec+dsp_uClibc-0.9.33.2\linux-ramips_mt7628\linux-3.10.14\drivers\usb\serial\option.c
- 搜索0x1c9e,下面增加定义
#define LONGSUNG_VENDOR_ID 0x1c9e
#define LONGSUNG_U9300_PRODUCT_ID 0x9b3c
#define LONGSUNG_U8300_PRODUCT_ID 0x9b05
- 修改数组
由于USB串口跟netdev都属于非标准CDC设备,需要防止NDIS口被USB串口驱动加载而导致无法正常加载NDIS口驱动。可以通过设置 interface 4 不加载 otpion 驱动
先在 option_ids[ ] 数组前面增加
static const struct option_blacklist_info longsung_u8300_blacklist = {
.reserved = BIT(4),
};
static const struct option_blacklist_info longsung_u9300_blacklist = {
.reserved = BIT(4),
};
再搜索0xea42,下面增加数组
. . .
{ USB_DEVICE(LONGSUNG_VENDOR_ID, LONGSUNG_U8300_PRODUCT_ID),
.driver_info = (kernel_ulong_t)&longsung_u8300_blacklist},
{ USB_DEVICE(LONGSUNG_VENDOR_ID, LONGSUNG_U9300_PRODUCT_ID),
.driver_info = (kernel_ulong_t)&longsung_u9300_blacklist},
. . .
编译龙尚 Gobinet 驱动
下载驱动
访问Github下载Gobinet驱动,驱动地址:https://github.com/DiUS/sierra-gobi-drivers
git clone https://github.com/DiUS/sierra-gobi-drivers
创建应用
在 openwrt-sdk/package/ 目录下新建 gobinet目录存放程序, gobinet 目录中新建 src 目录用于存放源码,创建 Makefile文件描述相关配置,Makefile填入下面内容。
include $(TOPDIR)/rules.mk
include $(INCLUDE_DIR)/kernel.mk
PKG_NAME:=gobinet
PKG_RELEASE:=1
include $(INCLUDE_DIR)/package.mk
define KernelPackage/gobinet
SUBMENU:=Other modules
TITLE:=Support Module for gobinet
DEPENDS:=+kmod-usb-core +kmod-usb-net
FILES:=$(PKG_BUILD_DIR)/GobiNet.ko
AUTOLOAD:=$(call AutoLoad,81,GobiNet)
endef
define KernelPackage/gobinet/description
This is a gobinet drivers
endef
MAKE_OPTS:=ARCH="$(LINUX_KARCH)" \
CROSS_COMPILE="$(TARGET_CROSS)" \
SUBDIRS="$(PKG_BUILD_DIR)"
define Build/Prepare
mkdir -p $(PKG_BUILD_DIR)/
$(CP) -R ./src/* $(PKG_BUILD_DIR)/
endef
define Build/Compile
$(MAKE) -C "$(LINUX_DIR)" $(MAKE_OPTS) modules
endef
$(eval $(call KernelPackage,gobinet))
复制源码
将 sierra-gobi-drivers\GobiNet\ 目录下的全部文件复制到 src 目录中去。
添加依赖
在 make menuconfig 中添加如下依赖
//查看USB设备的命令
Base System
-> busybox
-> Linux System Utilities
<*> lsusb
// libpthread 应该默认支持了
// libstdcpp c++可以选择加上
//USB相关模块
Kernel Modules
-> USB Support
<*> kmod-usb-acm
<*> kmod-usb-net
<*> kmod-usb-net-cdc-eem
<*> kmod-usb-net-cdc-mbim
<*> kmod-usb-net-cdc-subset
<*> kmod-usb-net-qmi-wwan
<*> kmod-usb-net-rndis
<*> kmod-usb-ohci
<*> kmod-usb-serial
<*> kmod-usb-serial-ark3116
<*> kmod-usb-serial-belkin
<*> kmod-usb-serial-ch341
<*> kmod-usb-serial-cp210x
<*> kmod-usb-serial-cypress-m8
<*> kmod-usb-serial-ftdi
<*> kmod-usb-serial-option
<*> kmod-usb-storage
<*> kmod-usb-uhci
<*> kmod-usb2
//自己创建的驱动
Other modules
<*> gobinet
编译
驱动应该算是弄好了,直接 make V=s 吧。
拨号上网
好久了,过了半年才来更新这篇文章,上一家公司已经离职了,写的交接文档忘了备份,最近心血来潮想把之前弄的 openwrt 总结一下,把做的东西概括一下,至少自己知道自己做了什么吧。
下面根据记忆,简单说一下吧,最后拨号上网是没问题了,还能发出WiFi,让连接设备上网。
检查 usb 设备
使用 lsusb 应该可以找到找到一个设备,注意一下这个物理接口,后面要配置 WAN 口要用到。
lsusb
配置一个新的 WAN 口
接下来在 openwrt 的网页上增加一个新的接口,模仿着已有的 WAN 口改就可以。
协议选择
在上面的 WAN 口中,好像选的 PPP 协议,貌似写的是 3G 的,实际出来 4G 也能用。
配置防火墙
在 openwrt 的网页上配置防火墙,主要是对我们新增的 WAN 口进行配置,同样模仿着这页的 WAN 口配置改就是,具体我也记不清了,应该很好理解,意思就是让 WAN 口的数据能够通过 WAN 口传递到 LAN 口去,而 WLAN 也是一样的。
串并转换
这部分是另一个同事做的了,好像通过 usb 端口得到的数据需要进行一次串并转换,好像写在龙尚那个驱动应用里面,具体网上找找吧。
重启
重启应该就生效了,好像要经过一次查找信号,查找到信号后再进行拨号,同事好像在龙尚那个应用里面也加了拨号的逻辑,具体是上面路由器网页配置生效的还是代码生效的我就不清楚了,这里提供一个思路吧!但是如果只是在代码里面配置了拨号,肯定是不能使用的,仍然需要按上面的步骤,在路由器的网页上配置,也算是我和同事的代码加起来才生效的。