0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

Openwrt开发指南 第4章 烧写OpenWrt固件

嵌入式大杂烩 来源:嵌入式大杂烩 作者:嵌入式大杂烩 2023-06-27 09:11 次阅读

1 嵌入式系统启动流程

对于一个完整的嵌入式系统,它由U-boot、内核(Linux)、文件系统、应用程序四部分组成。那么这四部分之间的关系是怎么样的呢?OpenWrt是属于哪部分呢?

当我们拿到嵌入式设备,比如我们的MT7620开发板,然后给它一上电,首先运行的就是我们的U-boot程序,然后就是U-boot来启动我们的内核(Linux),当内核(Linux)启动完成以后,内核(Linux)就会去挂载我们的文件系统,当文件系统挂载成功以后,就会在文件系统上面运行我们的应用程序,比如我们学习C语言时写的HelloWorld应用程序。

OpenWrt系统是一个嵌入式的Linux发行版。它本生是包含了内核(Linux)和文件系统两部分的。因此,上一章中,我们编译出来的固件

openwrt-ramips-mt7620-youku-yk1-squashfs-sysupgrade.bin

就是将内核(Linux)和文件系统打包成了一个bin文件。在这里,大家肯定会有疑问了,那么U-boot是谁提供的呢?对于其它的嵌入式设备,U-boot是需要我们单独来编译和烧写的,而对于我们的MT7620等开发板,我们在出厂的时候,已经在开发板上的Flash中烧入了U-boot了。

那么大家马上肯定会问,我们可以自己烧写U-boot吗?答案是肯定的。我们可以自己烧写U-boot。如何烧写,我们会在后面进行讲解。

注意:虽然我们可以自己烧写U-boot,但是,如果不是动手能力特别强的同学,不建议自己烧写U-boot,因为随时都有可能变砖。变砖以后,就只能通过SPIFlash编程器来拯救了。虽然在后面的章节,会讲如何使用SPIFlash编程器来烧U-boot、固件。但是整个过程比较麻烦,所以请大家自己慎重。

2 U-boot菜单选项简介

将开发板的Mini-USB口通过USB线和电脑的USB口进行连接,然后安装串口驱动(只有第一次需要安装),USB转串口驱动文件如下,安装步骤不再赘述。

168779106622505u82025wt

图1串口驱动

1687791066960ylg0ngts56

图2电脑识别到串口

打开putty串口下载软件,编者也给出了另一款下载软件securecrt,看读者喜好了。自己选择吧。

紧接着,如图3所示,在终端上设置好相应的串口(8N1,57600)。

1687791067504n4esvax5qc

图3设置终端

最后上电启动,便可以在串口上看到开发板的启动信息,首先打印出的是U-boot的版本等信息,如图4所示。

1687791068196y5s2vjidhy

图4 U-boot启动信息

紧接着便进入了U-boot的菜单选项,如图5所示。这里一共有5秒的时间供大家选择。如果不做任何选择,5秒后,便自动启动内核。

1687791068456es9qfcivgz

图5U-boot的菜单选项

1).选择1,表示将固件通过网络下载到内存中,如果是刷SDK固件,可以选择这个选项,但是,如果是刷OpenWrt,该选项没有用,我们会发现,刷固件成功以后,系统并不能正常启动;

2).选择2,表示将固件通过网络下载到Flash中,在以后的开发中,我们都是使用该选项;

3).选择3,表示启动内核(Linux),上面说的5秒结束,不做任何选择,系统就会默认来选择该选项,然后启动系统;

4).选择4,便会进入到U-boot的命令行,注意区分Linux系统的命令行。在U-boot的命令行我们可以使用printenv、set、loadb等命令。

5).选择7,表示将U-boot通过串口下载到Flash中;

6).选择9,表示将U-boot通过网络下载到Flash中。

3 烧写OpenWrt固件

以下烧写方法,都是通过网络的方式进行烧写。因此,需要用到网线。接线方式有两种,一是通过网线将开发板的网口和电脑的网口直接相连(电脑---开发板);另一种是电脑和路由器通过网线或者wifi连接,然后开发板和路由器通过网线连接(电脑---路由器---开发板)。

为了更加方便和稳定,推荐使用第二种方法。

无论使用哪种方法,都必须遵循一个大前提,就是要让电脑和开发板的IP处于同一个网段。另外,一定要关闭电脑的防火墙和一些顽固的杀毒软件。

3.1 通过网线下载

3.1.1设置ubuntu虚拟网卡

1 选择网卡

编辑->虚拟网络编辑器->桥接模式选择本机的物理网卡,见下图.

1687791068744ldphj2plw6

图6

2 网络适配器设置

虚拟机->设置->网络适配器

1687791069032m3hgx5kd5i

图7

3.1.2 主服务器tftp服务器配置

TFTP(Trivial File Transfer Protocol,简单文件传输协议)是TCP/IP协议族中的一个用来在客户机与服务器之间进行简单文件传输的协议,提供不复杂、开销不大的文件传输服务。TFTP承载在UDP上,提供不可靠的数据流传输服务,不提供存取授权与认证机制,使用超时重传方式来保证数据的到达。

0 IP配置

在谈TFTP之前,先简单讲一下Linux网络配置,网络中最重要的当然是IP地址了,这里不讲IP协议,在后面的网络编程再讲解,这里主要学习一下Linux下配置IP,配置IP地址的方法有两种:

  • 配置静态IP:在主机进入网络之前,事先未主机设置固定的IP地址;
  • 配置动态IP:选择DHCP网络服务,在主机进行网络之后,动态的随机获取IP地址;

当然,大家都知道ifconfig这个命令:

ifconfig
eth0      Link encap:Ethernet  HWaddr 00:0c:29:6c:c2:ec  
          inet addr:172.16.58.130  Bcast:172.16.58.255  Mask:255.255.255.0
          inet6 addr: fe80::20c:29ff:fe6c:c2ec/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:337 errors:0 dropped:0 overruns:0 frame:0
          TX packets:358 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:123712 (123.7 KB)  TX bytes:42430 (42.4 KB)
          Interrupt:19 Base address:0x2024 
lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:16436  Metric:1
          RX packets:149 errors:0 dropped:0 overruns:0 frame:0
          TX packets:149 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:10307 (10.3 KB)  TX bytes:10307 (10.3 KB)

如果ifconfig命令不带任何参数时,用于显示当前主机中状态为“活动”的网络接口信息;

当然,ifconfig命令可以修改IP地址:

sudo ifconfig eth0 192.168.3.51

但是这是动态的修改IP地址,重启以后,IP地址又变回原来的静态IP地址;修改IP地址除了可以在图形界面中修改,也可以在配置文件中修改,这才是Linux的特性!无论是配置静态IP还是动态IP,计算机系统将IP信息保存在什么地方呢?答案是配置文件 "/etc/network/interfaces".在UBuntu Linux 启动时就能获得IP地址的配置信息。若是配置静态IP。就从配置文件中读取IP地址参数,直接配置网络接口设备;若是配置动态IP,就通知主机通过DHCP协议获取网络配置。以下分别为配置静态IP和动态IP时,配置文件"/etc/network/interfaces"的实例:

动态IP

cat /etc/network/interfaces 
auto lo
iface lo inet loopback
auto eth0

静态IP

cat /etc/network/interfaces 
auto lo
iface lo inet loopback

auto eth0
iface eth0 inet static
	address 192.168.3.51
	netmask 255.255.0.0
	gateway 192.168.1.1

重启下系统,用ifconfig命令查看IP地址

ifconfig 
eth0      Link encap:Ethernet  HWaddr 00:0c:29:6c:c2:ec  
          inet addr:192.168.3.51  Bcast:192.168.255.255  Mask:255.255.0.0

明显看到IP地址依然是我们静态修改过的IP地址。

注意:

1、若不能访问外网: ping 不通114.114.114.114

解决方法: sudo route add default gw 192.168.1.1

2、若不能访问域名: ping 不通baidu.com

解决方法:

1)-- sudo vi /etc/resolv.conf

2) -- 添加nameserver 114.114.114.114

1 检查是否安装tftp server

命令:dpkg –s tftpd-hpa

2 如果未安装则需要安装tftp-server

命令:sudo apt-get install tftp-hpa tftpd-hpa

Client:PC 安装tftp-hpa

Server:ARM 安装tftpd-hpa

后面的 tftp 此处的IP地址应该是ARM的IP地址。

__3 修改文件 tftpd-hpa __

命令:sudo vim /etc/default/tftpd-hpa

tftpd-hpa文件修改后如下:

# /etc/default/tftpd-hpa

TFTP_USERNAME="tftp"
TFTP_DIRECTORY="/tftpboot"
TFTP_ADDRESS="0.0.0.0:69"
TFTP_OPTIONS="--secure"

说明:修改项,其中TFTP_DIRECTORY处可以改为你的tftp-server的根目录,这里是/tftpboot,当然可以改成其他地址,参数 -c 指定了可以创建文件,参数 -s是指定tftpd-hpa服务目录,上面已经指定。

4 创建目录tftpboot,改变权限及启动

命令:

sudo mkdir /tftpboot

sudo chmod a+w /tftpboot

操作命令:

sudo service tftpd-hpa stop//停止

sudo service tftpd-hpa start//启动

sudo service tftpd-hpa status//查看tftp信息

sudo service tftpd-hpa restart//重启

5 测试

a、登陆服务器

tftp localhost或 tftp<主机IP>

b、从tftp服务器下载文件

tftp> get

c、上传文件到tftp服务器

tftp> put

d、查看帮助

tftp>?

tftp-hpa5.2

Commands may be abbreviated. Commands are:

connect connect to remote tftp

mode set file transfer mode

put send file

get receive file

quit exit tftp

verbose toggle verbose mode

trace toggle packet tracing

literal toggle literal mode, ignore':'in file name

status show current status

binary set mode to octet

ascii set mode to netascii

rexmt set per-packet transmission timeout

timeout set total retransmission timeout

?print help information

help print help information

e、退出登陆

tftp> q

注意:必须是超级用户权限

6问题及原因(解决方法):

1、Transfer time out.

tftpd服务没有启动

2、Error code 0:Permission denied

可能是由SELinux造成的,在FC3和FC3以后的FC版本中SELinux默认的都是开启的,现在要关掉它。

修改文件/etc/sysconfig/selinux,设定SELINUX=disabled,然后重启电脑即可

或者执行命令system-config-securitylevel打开“安全级别配置”对话框,将SELinux(S)选项中“强制”改为“允许”

3、Error code 1:File not found

指定的文件夹不存在;或tftpd启动参数中没有指定-c选项,允许上传文件

4、Error code 2:Only absolute filenames allowed

TFTP_OPTIONS="-l -c -s",中的选项注意一下,是否没 -c

5、Error code 2:Access violation

上传的文件要有相应的可读写(覆盖)的权限才能上传,要对文件的权限进行修改

chmod 777 (文件名)

3.1.3 主机端NFS配置

NFS是Network File System的简写,即网络文件系统。

网络文件系统是许多操作系统都支持的文件系统中的一种,也被成为NFS。NFS允许一个系统在网络上与他人共享目录和文件。通过使用NFS,用户可以像访问本地文件一样访问远端系统上的文件。

NFS所提供的共享文件服务是建议在高度信任的基础上的,所以,向其他用户释放共享资源之前,一定要确保对方的可靠性。

NFS的应用:在我们嵌入式开发过程中,NFS是一个重要环节,我们常常·把“根文件”系统放在主机上,然后在开发板启动的时候通过NFS来挂载主机上的根文件系统。这样省去了每次都要把文件系统烧写到存储设备上的步骤,可以说比tftp更方便。

下面我们将以Ubuntu为例,讲解一下NFS的配置过程:

Server: PC

CLient : ARM(这里是用同一台机器模拟的,主要是安装过程)

1 检查是否安装nfs

命令:sudo dpkg -s install nfs-kernel-server

2 如果未安装则需要安装nfs-server

命令:sudo apt-get install nfs-kernel-server

3 修改配置文件及权限

命令:

sudo vim /etc/exports

sudo chmod 777 /tftpboot/rootfs

修改后的文件:

# /etc/exports: the access control list for filesystems which may be exported
#		to NFS clients.  See exports(5).
#
# Example for NFSv2 and NFSv3:
# /srv/homes       hostname1(rw,sync,no_subtree_check) hostname2(ro,sync,no_subtree_check)
#
# Example for NFSv4:
# /srv/nfs4        gss/krb5i(rw,sync,fsid=0,crossmnt,no_subtree_check)
# /srv/nfs4/homes  gss/krb5i(rw,sync,no_subtree_check)
#/tftpboot/rootfs  *(rw,sync,no_root_squash,no_subtree_check)

格式说明:

共享目录:主机名称

主机名称或共享IP:允许按照指定权限访问这个目录的远程主机(如:开发板)

参数:

ro:只读权限

rw:读写权限

no_root_squash:如果是客户端root,那么他对这个目录具有root权限

root_squash:如果是客户端root,那么他的权限被限制为匿名使用者

all_squash:如果是客户端是什么身份,那么他的权限被限制为匿名使用者

4手动启停NFS服务

命令:

sudo/etc/init.d/nfs-kernel-server start

sudo /etc/init.d/nfs-kernel-server restart

sudo/etc/init.d/nfs-kernel-server stop

sudo/etc/init.d/nfs-kernel-server restart//重新启动

5 共享操作

sudo/etc/init.d/nfs-kernel-server status//查看NFS服务当前状态

showmount –e 192.168.3.51 //查看NFS服务器的共享资源

sudo mount –t nfs 192.168.3.51: /tftpboot/rootfs/mnt/nfs//挂载共享资源

-t 指类型,这里是NFS;

192.168.3.51是服务端的IP地址;

/tftpboot/rootfs 是服务端的共享目录;

/mnt/nfs是挂载点,是客户端的目录;

当客户端使用mount命令讲NFS服务器上的到处文件系统挂载到本地后,接下来对挂载的文件系统的操作与使用本地文件系统没有任何区别。

sudo umount/mnt/nfs//卸载共享资源

需要说明的是,当有用户正在使用某个已加载的共享目录上的文件时,则不能卸载该文件系统,如果用户确认无误,可以使用“umount -f”命令强行卸载共享的目录。

6测试

第一种方法)showmount -e

第二种方法)自己挂载

$ mount -t nfs 127.0.0.1:/nfsboot /mnt/xxx

注意:必须是超级用户权限

连接串口和板子,运行串口通信程序(putty在工具),设置相关参数。

1687791069357b7k8bfjd7h

图8

1687791069848jwersw5mxz

图9

然后开发板上电,在如图10所示的界面中,选择2。

1687791070129ce4924gs27

图10

在图10所示界面中,我们输入y以确定我们是要烧写固件到Flash中。接着便会进入到如图11所示界面。

1687791070371a7ckslbd5j

图11

1).如图11所示的1中,输入设备IP,这个IP可以是任意的,但是必须要和2中输入的服务器IP是同一个网段;

2).如图11所示的2中,输入服务器IP;

3).如图11所示的3中,输入我们要下载的固件的名字。以上3点设置好以后,最后回车,便开始下载程序了。如图12所示。

1687791070630i20j2cco2s

图12下载过程

注意:

1).出现#####,表示下载正在下载,一切正常;出现TTTTT,则说明我们哪里设置不对,需要从头重新设置一下。

2).如图12所示,当串口打印出raspi_erase信息的时候,表示正在擦除Flash中的数据,此时一定不要强行断电和退出,否则开发板就变砖了。

3.2 通过tftpd32软件

Tftpd32软件适用于32位系统和部分64位系统。首先启动软件,Tftpd32的界面如下。

1687791070887k6yviwxtdy

图13 Tftpd32界面

①对应的CurrentDirectory用于选择固件所在的目录,通过Browse按钮来进行选择设置。比如,我将固件放在了G:盘的tftpboot目录,则需要进行如图2所示的设置。

②对应的Serverinterface用于选择服务器的IP地址。此时,如果你是通过网线和开发板或者路由器进行连接,那么这里就应该选择为本地有线网卡的IP地址;如果是通过WiFi和路由器进行连接,那么这里应该选择为无线网卡的IP地址。

注意:电脑的IP地址通过在运行(win+R就可打开,方法很多)中CMD中输入ipconfig命令得到,如图14所示。

1687791071419rmnyc4ubx5

图14查看电脑IP

当Tftpd32软件设置完成以后,接下来就是将开发板的Mini-USB口通过USB线和电脑的USB口进行连接,然后安装串口驱动和设置好相应的串口(8N1,57600),然后开发板上电,在如图15所示的界面中,选择2。

1687791071920n8uq9ov9qt

图15

在图15所示界面中,我们输入y以确定我们是要烧写固件到Flash中。接着便会进入到如图16所示界面。

1687791072238k5ndr25cbo

图16

1).如图16所示的1中,输入设备IP,这个IP可以是任意的,但是必须要和2中输入的服务器IP是同一个网段;

2).如图16所示的2中,输入服务器IP;

3).如图16所示的3中,输入我们要下载的固件的名字。以上3点设置好以后,最后回车,便开始下载程序了。如图17所示。

1687791072460ibaukj6nqy

图17下载过程

注意:

1).出现#####,表示下载正在下载,一切正常;出现TTTTT,则说明我们哪里设置不对,需要从头重新设置一下。

2).如图17所示,当串口打印出raspi_erase信息的时候,表示正在擦除Flash中的数据,此时一定不要强行断电和退出,否则开发板就变砖了。

3.3 通过3CDaemon软件

3CDaemon适用于64位系统。首先启动软件,3CDaemon的界面如下。

1687791072739jvijw4bupk

图18 CDaemon软件界面

当我们启动好3CDaemon软件以后,我们发现它监听了电脑上所有网卡的IP地址,这也是较Tftpd32软件好的地方,不用我们自己选择指定IP。但是,任然需要我们来设置固件所在目录。点如图18所示的,点击“设置TFTP服务器”按钮,会弹出如图19所示的对话框。在该对话框中选中固件的存放目录即可。

1687791073173z5ewxg9utk

图19设置固件的目录

当3CDaemon软件设置好以后,接下来的操作又和使用Tftpd32软件的过程一样了。开发板上电,选2,输入y,设置设备IP、服务器IP、固件的名字。

注意:对于不会从Ubuntu下载固件的朋友,编者也将固件放在附件里,直接使用就行了。但是想更好地掌握openwrt的朋友,还是要多学习啊。
审核编辑:汤梓红

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 嵌入式系统
    +关注

    关注

    40

    文章

    3436

    浏览量

    128234
  • 内核
    +关注

    关注

    3

    文章

    1309

    浏览量

    39862
  • Linux
    +关注

    关注

    87

    文章

    10993

    浏览量

    206747
  • 烧写
    +关注

    关注

    0

    文章

    55

    浏览量

    14119
  • OpenWrt
    +关注

    关注

    10

    文章

    117

    浏览量

    38880
收藏 人收藏

    评论

    相关推荐

    Openwrt开发指南 第25章 配置OpenWrt支持网络摄像头

    Openwrt开发指南 第25章 配置OpenWrt支持网络摄像头
    的头像 发表于 07-13 08:56 1598次阅读
    <b class='flag-5'>Openwrt</b><b class='flag-5'>开发指南</b> 第25章 配置<b class='flag-5'>OpenWrt</b>支持网络摄像头

    Openwrt开发指南 第1章 OpenWrt入门

    如果要学习openwrt的话,买些列表中二手的路由器来实践下更容易学习,大部分要升级一下rom芯片和内存芯片,典型配置都是4M、64M。
    的头像 发表于 06-27 09:09 3406次阅读

    Openwrt开发指南 第2章 OpenWrt开发环境搭建

    开发PC机上的软件时,可以直接在PC机上编辑、编译、调试软件,最终发布的软件也是在PC机上运行。对于物联网OpenWrt开发,最初的嵌入式设备是一个空白的系统,需要通过主机为它构建基本的软件系统
    的头像 发表于 06-27 09:09 4536次阅读
    <b class='flag-5'>Openwrt</b><b class='flag-5'>开发指南</b> 第2章 <b class='flag-5'>OpenWrt</b><b class='flag-5'>开发</b>环境搭建

    Openwrt开发指南 第3章 OpenWrt下载及配置

    编译OpenWrt首先需要下载源码,OpenWrt的源码是通过git下载,OpenWrt目前已经很好的支持了MT7620、MT7821等芯片,因此OpenWrt系统完全可以用于MT76
    的头像 发表于 06-27 09:10 3966次阅读
    <b class='flag-5'>Openwrt</b><b class='flag-5'>开发指南</b> 第3章 <b class='flag-5'>OpenWrt</b>下载及配置

    Openwrt开发指南 第12章 添加OpenWrt软件包

    OpenWrt是一个比较完善的嵌入式Linux开发平台,在无线路由器应用上已有4000多个软件包。我们可以在其基础上增加软件包,以扩大其应用范围。在OpenWrt中增加软件包极其方便,按照
    的头像 发表于 06-29 09:09 6846次阅读

    Openwrt开发指南 第13章 OpenWrt启动流程

    任何系统的启动都是开发人员首要关注的问题,因为只有了解了系统的启动流程和启动机制,才能真正掌握一个系统,如果对启动的启动不熟悉的话,是不可能真正用好一个系统,openwrt系统也不例外,他的启动和一般的嵌入式系统启动还有所区别,现在咱们就分析一下
    的头像 发表于 06-29 09:09 2575次阅读
    <b class='flag-5'>Openwrt</b><b class='flag-5'>开发指南</b> 第13章 <b class='flag-5'>OpenWrt</b>启动流程

    Openwrt开发指南 第24章 配置开发板支持U盘

    Openwrt开发指南 第24章 配置开发板支持U盘
    的头像 发表于 07-13 08:55 1384次阅读
    <b class='flag-5'>Openwrt</b><b class='flag-5'>开发指南</b> 第24章 配置<b class='flag-5'>开发</b>板支持U盘

    Openwrt开发指南 第29章 OpenWrt 防火墙介绍

    Openwrt 是一个 GNU/Linux 的发行版, 和其他大多数的发行版一样,Openwrt 的防火墙同样也是基于 iptables。 在 OpenWRT 下防火墙的默认行为已经可以满足路由器的需要,一般情况下也无需修改。
    的头像 发表于 07-15 16:24 2356次阅读
    <b class='flag-5'>Openwrt</b><b class='flag-5'>开发指南</b> 第29章 <b class='flag-5'>OpenWrt</b> 防火墙介绍

    【WRTnode2R试用体验】+固件

    本帖最后由 stone927 于 2015-11-4 22:43 编辑 【WRTnode2R试用体验】+固件篇上一篇帖子介绍了编译自己的o
    发表于 11-04 22:40

    【NetRouter试用体验】netrouter上使用openwrt固件

    完成进行写入flash。写入完成后启动内核。openwrt内核启动完成。这样,netrouteropenwrt固件就完成了。
    发表于 02-26 16:41

    【NetRouter试用体验】四、Ubuntu下编译openwrt固件(NetRouter版)

    编译碎片后重新执行编译指令。3.固件烧录编译好后固件烧录请参照鸿宇的【NetRouter试用体验】netrouter上使用openwrt
    发表于 04-15 23:16

    RT5350 Wi-Fi 模块开发指导_物联网 openwrt 开发概述

    物联网的资料 物联网openwrt开发概述 物联网openwrt开发概述 物联网openwrt开发
    发表于 11-16 14:52 0次下载

    openwrt开发教程1~6章

    openwrt开发教程1~6章
    发表于 03-17 14:23 49次下载

    openwrt都有什么功能_openwrt详细功能介绍_openwrt刷机教程

    penWrt作为一个嵌入式的Linux发行版已经得到广泛的运用,本文主要介绍了openWRT开发背景、OpenWrt功能、openWRT特点以及op
    发表于 12-27 10:21 16.3w次阅读
    <b class='flag-5'>openwrt</b>都有什么功能_<b class='flag-5'>openwrt</b>详细功能介绍_<b class='flag-5'>openwrt</b>刷机教程

    Openwrt通用固件 make menuconfig配置教程

    Openwrt通用固件 make menuconfig配置教程
    发表于 09-07 12:01 4次下载