啊哈,距离立项已经过去了,额,额, 额,8个月了。终于,又有空搞这个了,总结一下上次开的板子,有一个封装图是在网上找到,虽然我有官方给的数据手册,但是我上网找了个封装,我相信你们懂的,画封装虽然不费事,但是,我就是懒,所以,出错了,重新来搞一次吧。
有用的参考内容
如何排查linux使用RNDIS无法上网的问题
修改Linux内核添加Air72X 4G模块支持
树莓派使用合宙4G模块环境搭建指南
br-lan、eth0、eth1及lo
可能还有其他的,毕竟这两天看了很多,主要是上述这些
一、修改内核代码,添加vid、pid
这部分是我复制的,当然也是我写的。
这里主要涉及到一个文件“drivers/usb/serial/option.c”,添加usb设备的PID和VID,我用的是Air724UG模块,其PID和VID是{0x1782, 0x4e00}。
//1. 更改option_ids数组,大约在630行左右,可以搜一下
static const struct usb_device_id option_ids[] = {
//在数组中添加以下USB设备的PID和VID
//Air72X 4G模块
{USB_DEVICE(0x1286, 0x4e3d)},
{USB_DEVICE(0x1782, 0x4e00)},
//在下边是原来就有的设备的PID和VID,不需要修改
{USB_DEVICE(0x19d2, 0x0117)}, /* ME3630*/
{USB_DEVICE(0x19d2, 0x0199)},
{USB_DEVICE(0x19d2, 0x1476)},
。。。。。。。。。。。。。。。
。。。。。。。。。。。。。。。
//2. 更改option_probe函数,大约在1865行左右
static int option_probe(struct usb_serial *serial,
const struct usb_device_id *id)
{
struct usb_interface_descriptor *iface_desc =
&serial->interface->cur_altsetting->desc;
//这一行本来是要添加的,但是正点原子已经给添加了,所以,就不用了
struct usb_device_descriptor *dev_desc = &serial->dev->descriptor;
const struct option_blacklist_info *blacklist;
/* Never bind to the CD-Rom emulation interface */
if (iface_desc->bInterfaceClass == 0x08)
return -ENODEV;
//。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
//这部分是中间一堆代码,我没有复制过来
//。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
if (dev_desc->idVendor == cpu_to_le16(0x05c6) &&
dev_desc->idProduct == cpu_to_le16(0x9215) &&
iface_desc->bInterfaceNumber >= 4)
return -ENODEV;
if (dev_desc->idVendor == cpu_to_le16(0x2c7c) &&
iface_desc->bInterfaceNumber >= 4)
return -ENODEV;
//在接紧最下边,添加下述两个if条件
//Air72X
if (dev_desc->idVendor == cpu_to_le16(0x1286) &&
dev_desc->idProduct == cpu_to_le16(0x4e3d) &&
iface_desc->bInterfaceNumber <= 4)
return -ENODEV;
if (dev_desc->idVendor == cpu_to_le16(0x1782) &&
dev_desc->idProduct == cpu_to_le16(0x4e00) &&
iface_desc->bInterfaceNumber <= 4)
return -ENODEV;
/* Store the blacklist info so we can use it during attach. */
usb_set_serial_data(serial, (void *)blacklist);
return 0;
}
二、勾选和RNDIS相关的所有配置
cd openwrt # 切换到openwrt源码目录
./scripts/feeds update -a # 更新package包列表
./scripts/feeds install -a # 安装包列表
make menuconfig # 打开配置界面
# 配置所有和rndis相关的东西保持打开
make -j 8 # 开始编译
三、烧录系统
- 连接串口调试工具,配置:57600 8 N 1
- 重启路由器(姑且称之为路由器,毕竟他就是路由器)
- 然后当出现下图时,按 2
- 然后打开tftpd工具,如果你有的话,没有没关系,文末我会告诉你在哪里下载,总之打开以后配置如下图
- 将自己做的路由器连接到可以正常联网的那个路由器,然后回到mobaxterm并在uboot中设置如图
- 回车,如下图
- 完成
四、修改wan口
然后保存就行了。
问题
- 在调试过程中,出现了一个非常重要的问题,每次重启后,eth1都会消失,然后都需要执行以下两条命令来进行网络连接,后来发现设置上了上述wan口以后,就不会出现这种情况了。(你看,知识是个好东西,没有就得走弯路。)这个问题花了我大概两天的时间,虽然知道以下两条命令能够连上网,但是和lan口也没关系,lan口依然连不上,所以实际上知道这样能行也没什么用。
ifconfig eth1 up # 激活网卡
udhcpc -i eht1 # 获取ip地址
- 上述问题可以通过编译时设置相关配置实现,我还不会,以后会改
相关下载地址:
编译成功的系统文件
链接:https://pan.baidu.com/s/1jEEGwSe0h7WFEVNgd0d7iw 提取码:17o9
tftpd文件
链接:https://pan.baidu.com/s/1Wpgx1RG9o6C3jWH-lgCgtA 提取码:y2sz