导航:首页 > 源码编译 > 如何编译x86openwrt

如何编译x86openwrt

发布时间:2024-02-05 23:49:22

㈠ 如何编译OpenWrt

搭建编译环境。编译建议在Linux下进行。我的系统是Linux mint 17,执行以下命令,构建编译环境:

sudo apt-get update
sudo apt-get install git-core build-essential

获取openwrt源码。在当前用户主目录下执行

git clone git://git.openwrt.org/openwrt.git

等待代码下载。结束后,目录下会出现openwrt文件夹
配置软件源。进入openwrt目录,执行

./scripts/feeds update -a

./scripts/feeds install -a

检查编译环境是否完整:

make defconfig

make prereq

根据提示信息安装需要的软件包。如果提示类似

“tmp/.config-package.in:22022:warning: multi-line strings not supported”

的信息,打开 openwrt/tmp/.config-package.in,定位到对应行,添上丢掉的一个引号就可以了。
编译选项:

执行 make menuconfig,根据路由器情况,选择 Target System 和 Subtarget。如意云一代和极壹S的 Target System 均为 Ralink RT288x/RT3xxx 。对于Subtarget ,前者为 MT7620n based boards ,后者为 MT7620a based boards。

其他选项根据个人喜好选择。一般来说要选中LuCI界面,选中中文语言包等等。
开始编译:

执行 make -j2 V=s 进行编译。-j后面的数字是电脑物理CPU数量加一。V=s可以显示出编译的详细信息。首次编译大概需要几个小时的时间。
错误排查:

编译失败,一般有两种情况:

1.代码下载链接失效。首次编译时,编译程序会实时从网上下载一些软件包的代码。如果下载链接失效,编译就会失败。这时需要根据软件包的名称,从网上自行下载,然后放在 openwrt/dl/ 目录下,执行 make -j2 V=s 继续编译即可。

2.软件包自身有问题。这时重新执行 make menuconfig ,取消对应软件包选中即可。这种情况比较少见,目前已知的有 tor 等。

编译成功,但没有生成固件。这种情况一般是因为选中的软件包过多,导致固件大小超过16MB。重新执行 make menuconfig,去掉一些软件包,重新执行编译即可。
得到固件。在排除了所有错误后,现在终于得到了固件。对于如意云RY-1,固件在 openwrt/bin/ramips 目录下,形如

openwrt-ramips-mt7620n-rt-n14u-squashfs-sysupgrade.bin
openwrt-ramips-mt7620n-wrtnode-squashfs-sysupgrade.bin
openwrt-ramips-mt7620n-mlw221-squashfs-sysupgrade.bin
openwrt-ramips-mt7620n-wr8305rt-squashfs-sysupgrade.bin

等等。

㈡ 如何编译OpenWrt

准备工作
在开始编译Openwrt之前需要您做些准备工作;与其他编译过程一样,类似的编译工具和编译环境是必不可少的:
一个构建OpenWrt映像的系统平台,简单说就是准备一个操作系统(比如Ubuntu、Debian等);
确保安装了所需的依赖关系库, (在debian系统中就是安装各种需要的软件包)
OpenWrt源代码副本
首先, 开机登陆到支持编译Openwrt的操作系统(废话了)。实体机或者虚拟机(Vmware 或者 Qemu)里的操作系统都行,这里推荐使用Linux系统。 bsd和mac osx系统也可以编,但不推荐,且未验证是否可编译成功。下文假定您使用的是Debian操作系统,使用 apt-get 来管理包. 替代的选择是 Ubuntu (分支 Kubuntu, Xubuntu 等即可)。
第二步, 就是安装所需要的各种软件包, 包括编译器,解压工具,特定的库等. 这些工作可以简单的通过键入以下命令 (通常需要root 或者是 sudo 权限),以root权限安装下列软件包(可能并不完整,会有提示,提示缺少即装就可以了):
32位(x86)请执行下列命令:
# apt-get install build-essential asciidoc binutils bzip2 gawk gettext \
git libncurses5-dev libz-dev patch unzip zlib1g-dev

64位(x86_64)请执行下列命令(多装了哪些库或软件包呢?请您仔细看一看哦):
# apt-get install build-essential asciidoc binutils bzip2 gawk gettext \
git libncurses5-dev libz-dev patch unzip zlib1g-dev ia32-libs \
lib32gcc1 libc6-dev-i386

参考 本列表中 所列的编译环境所需要软件包或库。
某些依赖的为库或软件包也许操作系统中已经安装过,此时apt-get会作出提示(提示您忽略或重新安装的),别紧张,放轻松些,编译Openwrt不会像编译DD-WRT那样难的(至少本人是体会到了编译DD-WRT的难)。
最后下载一份完整的 Openwrt 源码到编译环境中。关于Openwrt的源代码下载,途径有二,一是通过 svn ,一是通过 git,建议使用 svn ,因为Openwrt主要以 svn 来维护Openwrt系统的版本。另外,请注意Openwrt中不同的分支版本,一个是用得较多的开发快照,俗称 trunk,二是稳定版,俗称 backfire。

㈢ 如何编译自己的openwrt中文固件

今天路由固件的世界几乎都是linksys WRT54G 开创出来的, 这个型号的固件开源之后,逐渐衍生出来今天的强尽的DDWRT/tomato/openwrt固件。linksys WRT54G 是博通的芯片。 正是因为这个历史原因,DDWRT/tomato/openwrt固件 对博通芯片的支持最好,对其他的芯片比较差, 或者根本不支持其他的芯片。 个人认为,3个固件里面,tomato的用户体验相对最好。但是仅仅支持博通芯片。DDWRT对博通芯片的支持好, 对一些athero也可以,对螃蟹的支持很差。但是DDWRT固件过于陈旧,比 tomato落后很多。openwrt固件可以支持很多芯片,但是用户体验相对最差,但是如果想用好openwrt固件,用户需要自己编译openwrt固件适应各种芯片/功能,或者说用户需要具有独立开发新产品的能力。国内的很多垃圾路由原厂固件就是盗用的openwrt固件,开发的时候把硬件要求降到最低,一旦售出,概不维护。因为没有优秀固件的连续支持,找到螃蟹的好芯有啥意义,难道您想帮螃蟹开发维护固件。用户需要的功能来自于优异的固件。但是目前看来,优秀固件的只支持博通的芯片。难道您的仓库里积压了太多的螃蟹芯片路由,需要用新手上路的第一贴,来论坛打软广告。

㈣ 如何编译OpenWrt

本教程的编译环境:win7 专业版+VMwareWorkstation6.5虚拟机+Ylmf OS 3.0
编译的过程中要保持电脑联网
搭建编译环境
应用程序--附件--终端
sudo apt-get update (更新)
安装编译需要的组件:
sudo apt-get install gcc
sudo apt-get install g++
sudo apt-get install binutils
sudo apt-get install patch
sudo apt-get install bzip2
sudo apt-get install flex
sudo apt-get install bison
sudo apt-get install make
sudo apt-get install autoconf
sudo apt-get install gettext
sudo apt-get install texinfo
sudo apt-get install unzip
sudo apt-get install sharutils
sudo apt-get install subversion
sudo apt-get install libncurses5-dev
sudo apt-get install ncurses-term
sudo apt-get install zlib1g-dev
sudo apt-get install gawk
sudo apt-get install asciidoc
sudo apt-get install libz-dev
编译环境搭建完成
mkdir openwrt 创建一个openwrt文件夹
cd openwrt 进入openwrt文件夹
svn co svn://svn.openwrt.org/openwrt/branches/backfire 下载官网的源码
./scripts/feeds update -a 更新软件包
./scripts/feeds install -a 安装软件包
make menuconfig 进入定制界面(里面可以选择芯片的型号,集成的组件等等,根据实际情况选择)
defconfig
make V=99 (开始编译)
剩下的就是等待了,第一次编译需要的时间相对比较长,这个跟你的电脑配置和网速有关。

下面以编译TP-LINK 741N的openwrt固件为例,只编译基本的功能:

make menuconfig
Target System---AR71xx/AR7240/AR913x/AR934x CPU型号
Target Profile---TP-LINK 741
LuCI—>Collections—– <*> luci 添加Luci
LuCI—>Translations—- <*> luci-i18n-chinese 添加中文
EXT----YES
make V=99 开始编译
成功后在bin文件夹里有编译好的固件。

㈤ 如何为现有的openwrt编译一个opkg上没有的软件

这是我去年编辑一个软件时记下的过程,希望对你有所帮助,我也是新手,按照官方提供的教程一步步修改,中间断断续续弄了近两个月,最后总算编译成功了。
一、安装编译环境(以ubuntu10.10为例)
依次输入以下命令:
1.ubuntu开发环境需要的软件:
sudo apt-get install gcc g++ binutils patch bzip2 flex bison make
autoconf gettext texinfo unzip sharutils subversion libncurses5-dev
ncurses-term zlib1g-dev gawk
sudo apt-get update
2.创建目录
mkdir openwrt
3.获取OpenWrt源代码和安装包,更新
svn checkout svn://svn.openwrt.org/openwrt/backfire
cd backfire
./scripts/feeds update -a
./scripts/feeds install -a
4.配置编译选项
make menuconfig
在target system里选择Broadcom BCM63xx,根据需要选择其他的软件,
*:表示该模块直接编译到核心中
M:该模块以被核心支持,可以后再安装
空白:不支持该模块
具体模块的起什么作用需要多google;
5.编译选项配置保存后,开始编译
make V=99
V=99表示输出详细的debug信息;
二、编译准备
1.下载源文件
下载地址:http://ftp.awk.cz/cntlm/ ,最新的版本是0.91rc6;
2.获取md5sum码
进入下载文件目录,在终端里输入
md5sum cntlm-0.91rc6.tar.gz
获得md5验证码:
3.编写makefile文件
在openwrt/backfire目录中的package目录下新建cntlm目录,在cntlm目录下新建文件,命名为makefile,编辑makefile文件,加入如下内容:
---------------------------------------------------------------------------------------------------------------------------
#
# Copyright (C) 2006-2008 OpenWrt.org
#
# This is free software, licensed under the GNU General Public License v2.
# See /LICENSE for more information.
#

include $(TOPDIR)/rules.mk

PKG_NAME:=cntlm
PKG_VERSION:=0.91rc6
PKG_RELEASE:=1

PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
PKG_SOURCE_URL:=http://ftp.awk.cz/cntlm/
PKG_MD5SUM:=

PKG_INSTALL:=1

include $(INCLUDE_DIR)/package.mk

define Package/cntlm
SUBMENU:=Proxy Servers
SECTION:=net
CATEGORY:=Network
TITLE:=Cntlm is a Fast NTLM Authentication Proxy
URL:=http://cntlm.sourceforge.net/
endef

define Package/cntlm/install
$(INSTALL_DIR) $(1)/usr/sbin
$(CP) $(PKG_INSTALL_DIR)/usr/sbin/cntlm $(1)/usr/sbin/
$(INSTALL_DIR) $(1)/usr/share/man/man1
$(CP) $(PKG_INSTALL_DIR)/usr/share/man/man1/$(PKG_NAME).1 $(1)/usr/share/man/man1
$(INSTALL_DIR) $(1)/etc/
$(CP) $(PKG_INSTALL_DIR)/etc/cntlm.conf $(1)/etc/
endef

$(eval $(call BuildPackage,cntlm))
---------------------------------------------------------------------------------------------------------------------------
4.编写patch文件
由于BCM63xx核心是big endian,而我们常用的intel或AMD的cpu都是little
endian的,cntlm虽然能够自己检测编译环境的endian,但我们是在交叉编译环境中编译,cntlm检测出来的还是ubuntu系统的
endian,因此需要设置手动endian为big endian。具体就是将源码文件中的config/endian.c文件的rc设定为0.
将源码文件中的endian.c文件分别复制到a目录下的config目录和b目录下的config目录,打开b目录下的config目录中的endian.c文件,并将其修改为:
-------------------------------------------------------------------------------------------------------------------------
#include <stdio.h>
#include <stdint.h>

int main(int argc, char **argv) {
int rc;

rc = 0;
printf("%s\n", rc ? "little endian" : "big endian");

return rc;
}
---------------------------------------------------------------------------------------------------------------------------
然后保存。
运行:
diff -Naur a/config/endian.c b/config/endian.c >endian.patch
endian.patch文件内容如下:
---------------------------------------------------------------------------------------------------------------------------
--- a/config/endian.c 2007-08-20 07:23:17.000000000 +0800
+++ b/config/endian.c 2010-11-01 18:36:32.000000000 +0800
@@ -1,15 +1,11 @@

#include <stdio.h>

#include <stdint.h>

-uint8_t num[] = { 0xEF, 0xBE };

-/*
- * RC: 1 = LE, 0 = BE
- */

int main(int argc, char **argv) {
int rc;

- rc = (*((uint16_t *)num) == 0xBEEF);
+ rc = 0;
printf("%s\n", rc ? "little endian" : "big endian");

return rc;
---------------------------------------------------------------------------------------------------------------------------
将endian.patch文件复制到package/cntlm/patches/目录下(没有patches目录就新建一个)。

三、编译
1.选定安装包
终端输入:
make menuconfig
在Network——》Proxy Severs中选择cntlm;
2.开始编译
终端输入:
make package/cntlm/compile V=99
中间可能会出现一些提示(Note),可以不用理会。编译完成后在bin/packages目录下可以看到cntlm_0.91rc6-1_brcm63xx.ipk文件啦。

四、补充
上面提到在编译过程中出会现提示(Note),一般如下:
utils.c:1: note: someone does not honour COPTS correctly, passed 0 times
这是由于cntlm源码文件中CFLAG的设置是覆盖而不是续接,与openwrt要求不同,在openwrt一般写成CFLAG += 的方式。可以通过如下修改去除note:
将源码包中的Makefile文件复制到a目录和b目录,打开b目录下的Makefile文件,作如下修改:
CFLAGS+=$(FLAGS)
即增加上面的“+”号,保存。
运行:
diff -Naur a/Makefile b/Makefile > makefile.patch
得到的makefile.patch文件如下:
---------------------------------------------------------------------------------------------------------------------------
--- a/Makefile 2010-04-29 19:18:58.000000000 +0800
+++ b/Makefile 2010-11-09 20:17:33.405177000 +0800
@@ -16,7 +16,7 @@

CC=gcc

VER=`cat VERSION`

OBJS=utils.o ntlm.o xcrypt.o config.o socket.o acl.o auth.o http.o forward.o direct.o scanner.o pages.o main.o
-CFLAGS=$(FLAGS) -std=c99 -Wall -pedantic -O3 -D__BSD_VISIBLE
-D_ALL_SOURCE -D_XOPEN_SOURCE=600 -D_POSIX_C_SOURCE=200112
-D_ISOC99_SOURCE -D_REENTRANT -DVERSION=\"`cat VERSION`\" -g
+CFLAGS+=$(FLAGS) -std=c99 -Wall -pedantic -O3 -D__BSD_VISIBLE
-D_ALL_SOURCE -D_XOPEN_SOURCE=600 -D_POSIX_C_SOURCE=200112
-D_ISOC99_SOURCE -D_REENTRANT -DVERSION=\"`cat VERSION`\" -g

OS=$(shell uname -s)

OSLDFLAGS=$(shell [ $(OS) = "SunOS" ] && echo "-lrt -lsocket -lnsl")

LDFLAGS:=-lpthread $(OSLDFLAGS)
---------------------------------------------------------------------------------------------------------------------------
将makefile.patch文件复制到package/cntlm/patches目录下,重新编译即可。

㈥ 如何编译openwrt固件

朋友你好,想要编译oPEnwrt的固件需要用到编程技术,必须要有很高的计算机技术才可以进行编译

㈦ 如何在OpenWRT环境下做开发

1、搭建开发环境
首先,在执行make menuconfig后,会出现下图:

其中,图中红框部分是我定制路由器的系统版本,大家可以根据不同的路由器进行不同的选择;绿框部分表示我们需要编译一个SDK开发环境(默认情况下,此项未勾选)。

编译过程中需要通过官网下载很多相关的软件包,所以必须保证能够顺利连上外网。由于下载速度的限制,编译过程大概需要数小时。编译结束后,所有的产品都会放在编译根目录下的bin/yourtarget/. 例如:我所编译的产物都放在./bin/brcm47xx/下,其中文件主要有几类:

(1).bin/.trx 文件: 这些都是在我们所选的target-system的类别之下,针对不同路由器型号、版本编译的路由器固件。这些不同路由器的型号和版本是openwrt预先设置好的,我们不需要更改。至于.bin和.trx的区别,一种说法是,第一次刷路由器的时候,需要用.bin文件,如果需要再升级,则不能再使用.bin文件,而需要用.trx文件。原因是,.bin是将路由器的相关配置信息和.trx封装在一起而生成的封包,也就是说是包含路由器版本信息的.trx。在第一次刷固件的时候,我们需要提供这样的信息,而在后续升级时,则不再需要,用.trx文件即可。

(2)packages文件夹: 里面包含了我们在配置文件里设定的所有编译好的软件包。默认情况下,会有默认选择的软件包。

(3)OpenWrt-SDK.**.tar.bz2: 这个也就是我们定制编译好的OpenWRT SDK环境。我们将用这个来进行OpenWrt软件包的开发。例如,我所编译好的SDK环境包为:/bin/brcm47xx/OpenWrt-SDK-brcm47xx-for-Linux-x86_64-gcc-4.3.3+cs_uClibc-0.9.30.1.tar.bz2
可以从名称上看出,target system是brcm47xx,host system是Linux-x86_64,使用的编译工具以及库是4.3.3+cs_uClibc-0.9.30.1。

(4)md5sums 文件: 这个文件记录了所有我们编译好的文件的MD5值,来保证文件的完整性。因为文件的不完整,很容易将路由器变成“砖头”。

需要主要的是,编译完成后,一定要将编译好的bin目录进行备份(如果里面东西对你很重要的话),因为在下次编译之前,执行make clean 会将bin目录下的所有文件给清除掉!!

2、 更改原有packages

在编译根目录下会有一个dl的目录,这个目录其实是“download”的简写,在编译前期,需要从网络下载的数据包都会放在这个目录下,这些软件包的一个特点就是,会自动安装在所编译的固件中,也就是我们make menuconfig的时候,为固件配置的一些软件包。如果我们需要更改这些源码包,只需要将更改好的源码包打包成相同的名字放在这个目录下,然后开始编译即可。编译时,会将软件包解压到build_dir目录下。
当然,你也可以自己在dl里面创建自己的软件包,然后更改相关的配置文件,让openwrt可以识别这个文件包。

由于我的项目更改的内容是底层的,需要跟固件一起安装。所以,我使用的方法就是直接更改dl目录下软件包,然后重新进行固件编译。感觉类似于Linux的内核编译。反复编过十多次,没有任何问题。

3、 新建自己的packages
对于自己新建的package,而这个package又不需要随固件一起安装,换句话说,就是可以当做一个可选软件包的话。我们可以利用我们的SDK环境来单独编译,编译后会生成一个ipk的文件包。然后利用 opkg install xxx.ipk 来安装这个软件。

下面具体说下,如何编译一个helloword的软件包。
(1)首先,编写helloworld程序
编写helloworld.c
/****************
* Helloworld.c
* The most simplistic C program ever written.
* An epileptic monkey on crack could write this code.
*****************/

#include <stdio.h>
#include <unistd.h>
int main(void)
{
printf("Hell! O' world, why won't my code compile? ");
return 0;
}

编写Makefile文件
# build helloworld executable when user executes "make"

helloworld: helloworld.o
$(CC) $(LDFLAGS) helloworld.o -o helloworld

helloworld.o: helloworld.c
$(CC) $(CFLAGS) -c helloworld.c

# remove object files and executable when user executes "make clean"
clean:
rm *.o helloworld
在这两个文件的目录下,执行make 应该可以生成helloworld的可执行文件。执行helloworld后,能够打印出“Hell! O' world, why won't my code compile?”。 这一步,主要保证我们的源程序是可以正常编译的。下面我们将其移植到OpenWRT上。

(2)将OpenWrt-SDK-brcm47xx-for-Linux-x86_64-gcc-4.3.3+cs_uClibc-0.9.30.1.tar.bz2解压
tar –xvf OpenWrt-SDK-brcm47xx-for-Linux-x86_64-gcc-4.3.3+cs_uClibc-0.9.30.1.tar.bz2

(3)进入SDK
cd OpenWrt-SDK-brcm47xx-for-Linux-x86_64-gcc-4.3.3+cs_uClibc-0.9.30.1
可以看到里面的目录结构跟我们之前source的目录结构基本相同,所需要编译的软件包,需要放置在package目录下

(4)在package目录下创建helloworld目录
cd package
mkdir helloworld
cd helloworld

(5)创建src目录,拷贝 helloworld文件
mkdir src
cp /home/wrt/test/helloworld.c src
cp /home/wrt/test/Makefile src

(6)在helloworld目录下创建Makefile文件
这个Makefile文件是给OpenWRT读的,而之前写的那个Makefile文件是针对helloworld给编译其读的。两个Makefile不在同一层目录下。

touch Makefile
vim Makefile

Makefile文件模板内容如下:
##############################################
# OpenWrt Makefile for helloworld program
#
#
# Most of the variables used here are defined in
# the include directives below. We just need to
# specify a basic description of the package,
# where to build our program, where to find
# the source files, and where to install the
# compiled program on the router.
#
# Be very careful of spacing in this file.
# Indents should be tabs, not spaces, and
# there should be no trailing whitespace in
# lines that are not commented.
#
##############################################

include $(TOPDIR)/rules.mk

# Name and release number of this package
PKG_NAME:=helloworld
PKG_RELEASE:=1

# This specifies the directory where we're going to build the program.
# The root build directory, $(BUILD_DIR), is by default the build_mipsel
# directory in your OpenWrt SDK directory
PKG_BUILD_DIR := $(BUILD_DIR)/$(PKG_NAME)

include $(INCLUDE_DIR)/package.mk

# Specify package information for this program.
# The variables defined here should be self explanatory.
# If you are running Kamikaze, delete the DESCRIPTION
# variable below and uncomment the Kamikaze define
# directive for the description below
define Package/helloworld
SECTION:=utils
CATEGORY:=Utilities
TITLE:=Helloworld -- prints a snarky message
endef

# Uncomment portion below for Kamikaze and delete DESCRIPTION variable above
define Package/helloworld/description
If you can't figure out what this program does, you're probably
brain-dead and need immediate medical attention.
endef

# Specify what needs to be done to prepare for building the package.
# In our case, we need to the source files to the build directory.
# This is NOT the default. The default uses the PKG_SOURCE_URL and the
# PKG_SOURCE which is not defined here to download the source from the web.
# In order to just build a simple program that we have just written, it is
# much easier to do it this way.
define Build/Prepare
mkdir -p $(PKG_BUILD_DIR)
$(CP) ./src/* $(PKG_BUILD_DIR)/
endef

# We do not need to define Build/Configure or Build/Compile directives
# The defaults are appropriate for compiling a simple program such as this one

# Specify where and how to install the program. Since we only have one file,
# the helloworld executable, install it by ing it to the /bin directory on
# the router. The $(1) variable represents the root directory on the router running
# OpenWrt. The $(INSTALL_DIR) variable contains a command to prepare the install
# directory if it does not already exist. Likewise $(INSTALL_BIN) contains the
# command to the binary file from its current location (in our case the build
# directory) to the install directory.
define Package/helloworld/install
$(INSTALL_DIR) $(1)/bin
$(INSTALL_BIN) $(PKG_BUILD_DIR)/helloworld $(1)/bin/
endef

# This line executes the necessary commands to compile our program.
# The above define directives specify all the information needed, but this
# line calls BuildPackage which in turn actually uses this information to
# build a package.
$(eval $(call BuildPackage,helloworld))

(7)返回到SDK的根目录
执行make进行编译
编译过程会在build_dir目录下完成
编译结果会放在 bin/[yourtarget]/package目录下helloworld_1_bcm47xx.ipk

(8)上传helloworld_1_bcm47xx.ipk
使用sftp软件上传helloworld_1_bcm47xx.ipk至路由器
执行 opkg install helloworld_1_bcm47xx.ipk
输入hello然后按Tab键,发现openwrt中已经有helloworld可执行命令。
执行 helloworld 查看程序的效果。

Hell! O' world, why won't my code compile?

【End】

希望对大家能有帮助 :)

㈧ 【疑问】openwrt里如何使用make编译源码

这有一个安装包,不知对你有用没。在X86虚拟机安装后,就有make了。不过我这还是用不了,提示没有cc 命令。 http://downloads.openwrt.org/backfire/10.03.1/x86_generic/packages/make_3.81-1_x86.ipk

阅读全文

与如何编译x86openwrt相关的资料

热点内容
centos开机命令行模式 浏览:695
遍历所有listpython 浏览:660
力控加密文件夹 浏览:515
如何更改移动服务器密码 浏览:686
苹果8p手机加密 浏览:749
ipad建文件夹怎么弄 浏览:833
iphone13对wap3加密 浏览:555
pdf文件打开失败 浏览:913
dubbo怎么调用不同服务器接口 浏览:40
全能解压王app历史版本 浏览:75
优先队列与拓扑排序算法 浏览:281
pdf转换formacbook 浏览:871
pdf文件内容怎么编辑 浏览:48
134压缩机排气温度多少 浏览:256
unity等待编译后 浏览:806
黑鲨手机锁屏视频在哪个文件夹 浏览:781
wow地图解压后怎么压缩 浏览:823
有pdf却打不开 浏览:461
七星彩软件app怎么下载 浏览:219
32单片机的重映射哪里改 浏览:818