Openwrt 使用 usb 实现4G拨号上网功能

Openwrt 使用 usb 实现4G拨号上网功能

上班一年了,最近才觉得应该把学到的东西好好用博客展示出来,而不是排的整整齐齐的放在浏览器收藏夹里!也开始从头发一些博客,但是觉得手头上的工作,也应该及时总结,这篇文章是关于 openwrt 拨号上网的博客,具体关于openwrt的使用以后博客慢慢补吧。

废话不多说,进入主题!

本人使用的是MTK-7628的一块板子,因为需要,现在想通过usb外接上网卡的形式,实现4G拨号上网,并让内部的设备能向外互通。4G上网模块使用的是龙尚的U9300C,应该用的高通的基带,如果有读者和我类似的话,下面文章希望对大家有些帮助!接下来的内容可能需要一点openwrt使用的经验,如果不太懂的话我后续的博文会详细介绍的,我也是小白一个,现在就先看看吧!

修改内核USB驱动

  1. 访问下面位置,打开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
  1. 搜索0x1c9e,下面增加定义
#define LONGSUNG_VENDOR_ID          0x1c9e

#define LONGSUNG_U9300_PRODUCT_ID   0x9b3c

#define LONGSUNG_U8300_PRODUCT_ID   0x9b05
  1. 修改数组

由于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 驱动

  1. 下载驱动

访问Github下载Gobinet驱动,驱动地址:https://github.com/DiUS/sierra-gobi-drivers

git clone https://github.com/DiUS/sierra-gobi-drivers
  1. 创建应用

在 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))
  1. 复制源码

将 sierra-gobi-drivers\GobiNet\ 目录下的全部文件复制到 src 目录中去。

  1. 添加依赖

在 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
  1. 编译

驱动应该算是弄好了,直接 make V=s 吧。

拨号上网

拨号上网正在研究,后续更新。

你可能感兴趣的:(Openwrt,openwrt,路由器,usb)