侧边栏壁纸
博主头像
我叫电池博主等级

Keep Calm And Carry On

  • 累计撰写 7 篇文章
  • 累计创建 28 个标签
  • 累计收到 0 条评论

目 录CONTENT

文章目录

openwrt配置AIR724实现RNDIS上网

ShaoC
2024-11-18 / 0 评论 / 0 点赞 / 70 阅读 / 7283 字

啊哈,距离立项已经过去了,额,额, 额,8个月了。终于,又有空搞这个了,总结一下上次开的板子,有一个封装图是在网上找到,虽然我有官方给的数据手册,但是我上网找了个封装,我相信你们懂的,画封装虽然不费事,但是,我就是懒,所以,出错了,重新来搞一次吧。
9c33b23200d4ac37a1f7354b650c34a2.png

有用的参考内容
如何排查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  		# 开始编译

三、烧录系统

  1. 连接串口调试工具,配置:57600 8 N 1

  2. 重启路由器(姑且称之为路由器,毕竟他就是路由器)

  3. 然后当出现下图时,按 2
    5176d1b2b740d9d567684e4a72943c9f.png

  4. 然后打开tftpd工具,如果你有的话,没有没关系,文末我会告诉你在哪里下载,总之打开以后配置如下图

81fc8accd3eeeda3c39399671d3305ee.png

  1. 将自己做的路由器连接到可以正常联网的那个路由器,然后回到mobaxterm并在uboot中设置如图
    ba9e2abd7e421cc3adc47790d5712bf3.png

  2. 回车,如下图
    4047bf357d6ec8824f8a24e88da0e245.png

  3. 完成

四、修改wan口

a2fc27c276a6c5a6a522f5cdfe4ba1d5.png
b620f4e4110451516cba14c9983b5914.png

然后保存就行了。

问题

  1. 在调试过程中,出现了一个非常重要的问题,每次重启后,eth1都会消失,然后都需要执行以下两条命令来进行网络连接,后来发现设置上了上述wan口以后,就不会出现这种情况了。(你看,知识是个好东西,没有就得走弯路。)这个问题花了我大概两天的时间,虽然知道以下两条命令能够连上网,但是和lan口也没关系,lan口依然连不上,所以实际上知道这样能行也没什么用。
ifconfig eth1 up	# 激活网卡
udhcpc -i eht1		# 获取ip地址
  1. 上述问题可以通过编译时设置相关配置实现,我还不会,以后会改

相关下载地址:
编译成功的系统文件
链接:https://pan.baidu.com/s/1jEEGwSe0h7WFEVNgd0d7iw 提取码:17o9
tftpd文件
链接:https://pan.baidu.com/s/1Wpgx1RG9o6C3jWH-lgCgtA 提取码:y2sz

0

评论区