「正点原子Linux连载」第四章开发环境搭建(1)
nanshan 2024-12-05 14:58 16 浏览 0 评论
1)实验平台:正点原子Linux开发板
2)摘自《正点原子I.MX6U嵌入式Linux驱动开发指南》
关注官方微信号公众号,获取更多资料:正点原子
第四章开发环境搭建
要进行裸机开发肯定要先搭建好开发环境,我们在开始学习STM32的时候肯定需要安装一堆的软件,比如MDK、IAR、串口调试助手等等,这个就是STM32的开发环境搭建。同样的,要想在Ubuntu下进行Cortex-A(I.MX6U)开发也需要安装一些软件,也就是网上说的开发环境搭建,环境搭建好以后我们就可以进行开发了。环境搭建分为Ubuntu和Windows,因为我们最熟悉Windows,所以代码编写、查找资料啥的肯定是在Windows下进行的。但是Linux开发又必须在Ubuntu下进行,所以还需要搭建Ubuntu下的开发环境,主要是交叉编译器的安装,本章我们就分为Ubuntu和Windows,讲解这两种操作系统下的环境搭建。
4.1Ubuntu和Windows文件互传
在开发的过程中会频繁的在Windows和Ubuntu下进行文件传输,比如在Windwos下进行代码编写,然后将编写好的代码拿到Ubuntu下进行编译。Windows和Ubuntu下的文件互传我们需要使用FTP服务,设置方法如下:
1、开启Ubuntu下的FTP服务
打开Ubuntu的终端窗口,然后执行如下命令来安装FTP服务:
sudo apt-get install vsftpd
等待软件自动安装,安装完成以后使用如下VI命令打开/etc/vsftpd.conf,命令如下:
sudo vi /etc/vsftpd.conf
打开以后vsftpd.conf文件以后找到如下两行:
local_enable=YES
write_enable=YES
确保上面两行前面没有“#”,有的话就取消掉,完成以后如图4.1.1所示:
修改完vsftpd.conf以后保存退出,使用如下命令重启FTP服务:
sudo /etc/init.d/vsftpd restart
2、Windows下FTP客户端安装
Windows下FTP客户端我们使用FileZilla,这是个免费的FTP客户端软件,可以在FileZilla官网下载,下载地址如下:https://www.filezilla.cn/download,下载界面如图4.1.2所示:
我们已经下载好FileZilla并放到开发板光盘中了,路径为:3、软件->FileZilla_3.39.0_win64-setup_bundled.exe,双击安装即可。安装完成以后找到安装目录,找到图标,然后发送图标快捷方式到桌面,完成以后如图4.1.3所示:
打开FileZilla软件,界面如图4.1.4所示:
3、FileZilla软件设置
Ubuntu作为FTP服务器,FileZilla作为FTP客户端,客户端肯定要连接到服务器上,打开站点管理器,点击:文件->站点管理器,打开以后如图4.1.5所示:
点击图4.1.5中的“新站点(N)”按钮来创建站点,新建站点以后就会在“我的站点”下出现新建的这个站点,站点的名称可以自行修改,比如我将新的站点命名为“Ubuntu”如图4.1.6所示:
选中新创建的“Ubuntu”站点,然后对站点的“常规”进行设置,设置如图4.1.7所示:
按照图4.1.7中设置好以后,点击“连接”按钮,第一次连接可能会弹出提示是否保存密码的对话框,点击确定即可。连接成功以后如图4.1.8所示:
连接成功以后如图4.1.8所示,其中左边就是Windows文件目录,右边是Ubuntu文件目录,默认进入用户根目录下(比如我电脑的“/home/zuozhongkai”)。但是注意观察在图4.1.8中Ubuntu文件目录下的中文目录都是乱码的,这是因为编码方式没有选对,先断开连接,点击:服务器(S)->断开连接,然后打开站点管理器,选中要设置的站点“Ubuntu”,选择“字符集”,设置如图4.1.9所示:
按照图4.1.9设置好字符集以后重新连接到FTP服务器上,重新链接到FTP服务器以后Ubuntu下的文件目录中文显示就正常了,如图4.1.10所示:
如果要将Windows下的文件或文件夹拷贝到Ubuntu中,只需要在图4.1.10中左侧的Windows区域选中要拷贝的文件或者文件夹,然后直接拖到右侧的Ubuntu中指定的目录即可。将Ubuntu中的文件或者文件夹拷贝到Windows中也是直接拖放。
4.2 Ubuntu下NFS和SSH服务开启
4.2.1 NFS服务开启
后面进行Linux驱动开发的时候需要NFS启动,因此要先安装并开启Ubuntu中的NFS服务,使用如下命令安装NFS服务:
sudo apt-get install nfs-kernel-server rpcbind
等待安装完成,安装完成以后在用户根目录下创建一个名为“linux”的文件夹,以后所有的东西都放到这个“linux”文件夹里面,在“linux”文件夹里面新建一个名为“nfs”的文件夹,如图4.2.1所示:
图4.2.1中创建的nfs文件夹供nfs服务器使用,以后我们可以在开发板上通过网络文件系统来访问nfs文件夹,要先配置nfs,使用如下命令打开nfs配置文件/etc/exports:
sudo vi /etc/exports
打开/etc/exports以后在后面添加如下所示内容:
/home/zuozhongkai/linux/nfs *(rw,sync,no_root_squash)
添加完成以后的/etc/exports如图4.2.2所示:
重启NFS服务,使用命令如下:
sudo /etc/init.d/nfs-kernel-server restart
4.2.2 SSH服务开启
开启Ubuntu的SSH服务以后我们就可以在Windwos下使用终端软件登陆到Ubuntu,比如使用SecureCRT,Ubuntu下使用如下命令开启SSH服务:
sudo apt-get install openssh-server
上述命令安装ssh服务,ssh的配置文件为/etc/ssh/sshd_config,使用默认配置即可。
4.3Ubuntu交叉编译工具链安装
4.3.1交叉编译器安装
ARM裸机、Uboot移植、Linux移植这些都需要在Ubuntu下进行编译,编译就需要编译器,我们在第三章“Linux C编程入门”里面已经讲解了如何在Liux进行C语言开发,里面使用GCC编译器进行代码编译,但是Ubuntu自带的gcc编译器是针对X86架构的!而我们现在要编译的是ARM架构的代码,所以我们需要一个在X86架构的PC上运行,可以编译ARM架构代码的GCC编译器,这个编译器就叫做交叉编译器,总结一下交叉编译器就是:
1、它肯定是一个GCC编译器。
2、这个GCC编译器是运行在X86架构的PC上的。
3、这个GCC编译器是编译ARM架构代码的,也就是编译出来的可执行文件是在ARM芯片上运行的。
交叉编译器中“交叉”的意思就是在一个架构上编译另外一个架构的代码,相当于两种架构“交叉”起来了。
交叉编译器有很多种,我们使用Linaro出品的交叉编译器,Linaro一间非营利性质的开放源代码软件工程公司,Linaro开发了很多软件,最著名的就是Linaro GCC编译工具链(编译器),关于Linaro详细的介绍可以到Linaro官网查阅。Linaro GCC编译器下载地址如下:
https://releases.linaro.org/components/toolchain/binaries/latest-7/arm-linux-gnueabihf/,打开以后下载界面如图4.3.1.1所示:
在图4.3.1.1中有很多种GCC交叉编译工具链,因为我们所使用的I.MX6U-ALPHA开发板是一个Cortex-A7内核的开发板,因此选择arm-linux-gnueabihf,点击后面的“Binaries”进入可执行文件下载界面,如图4.3.1.2所示:
在写本教程的时候最新的编译器版本是7.3.1,但是笔者在测试7.3.1版本编译器的时候发现编译完成后的uboot无法运行。所以这里不推荐使用最新版的编译器。笔者测试过4.9版本的编译器可以正常工作,所以我们需要下载4.9版本的编译器,下载地址为:https://releases.linaro.org/components/toolchain/binaries/4.9-2017.01/arm-linux-gnueabihf/,如图4.3.1.3所示:
图4.3.1.3中有很多种交叉编译器,我们只需要关注这两种: gcc-linaro-4.9.4-2017.01-i686_arm-linux-gnueabihf.tar.tar.xz和gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf.tar.xz,第一个是针对32位系统的,第二个是针对64位系统的。大家根据自己所使用的Ubuntu系统类型选择合适的版本,比如我安装的Ubuntu16.04是64位系统,因此我要使用gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf.tar.xz。
这两种交叉编译器我们已经下载好放到了开发板光盘中,路径:5、开发工具->1、交叉编译器。我们要先将交叉编译工具拷贝到Ubuntu中,在4.2.1小节中我们在当前用户根目录下创建了一个名为“linux”的文件夹,在这个linux文件夹里面再创建一个名为“tool”的文件夹,用来存放一些开发工具。使用前面已经安装好的FileZilla将交叉编译器拷贝到Ubuntu中刚刚新建的“tool”文件夹中,操作如图4.3.1.4所示:
拷贝完成的话FileZilla会有提示,如图4.3.1.5:
在Ubuntu中创建目录:/usr/local/arm,命令如下:
sudo mkdir /usr/local/arm
创建完成以后将刚刚拷贝的交叉编译器复制到/usr/local/arm这个目录中,在终端使用命令“cd”进入到存放有交叉编译器的目录,比我前面将交叉编译器拷贝到了目录“/home/zuozhongkai/linux/tool”中,然后使用如下命令将交叉编译器复制到/usr/local/arm中:
sudo cp gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf.tar.xz /usr/local/arm/ -f
操作步骤如图4.3.1.6所示:
拷贝完成以后在/usr/local/arm目录中对交叉编译工具进行解压,解压命令如下:
sudo tar -vxf gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf.tar.xz
等待解压完成,解压完成以后会生成一个名为“gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf”的文件夹,这个文件夹里面就是我们的交叉编译工具链。
修改环境变量,使用VI打开/etc/profile文件,命令如下:
sudo vi /etc/profile
打开/etc/profile以后,在最后面输入如下所示内容:
export PATH=$PATH:/usr/local/arm/gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf/bin
添加完成以后的/etc/profile如图4.3.1.7所示:
修改好以后就保存退出,重启Ubuntu系统,交叉编译工具链(编译器)就安装成功了。
4.3.2 安装相关库
在使用交叉编译器之前还需要安装一下其它的库,命令如下:
sudo apt-get install lsb-core lib32stdc++6
等待这些库安装完成。
4.3.3交叉编译器验证
首先查看一下交叉编译工具的版本号,输入如下命令:
arm-linux-gnueabihf-gcc -v
如果交叉编译器安装正确的话就会显示版本号,如图4.3.3.1所示:
从图4.3.3.1中可以看出当前交叉编译器的版本号为4.9.4,说明交叉编译工具链安装成功。第三章“Linux C编程入门”中使用Ubuntu自带的GCC编译器,我们用的是命令“gcc”。要使用刚刚安装的交叉编译器的时候使用的命令是“arm-linux-gnueabihf-gcc”,“arm-linux-gnueabihf-gcc”的含义如下:
1、arm表示这是编译arm架构代码的编译器。
2、linux表示运行在linux环境下。
3、gnueabihf表示嵌入式二进制接口。
4、gcc表示是gcc工具。
最好的验证验证方法就是直接编译一个例程,我们就编译第一个裸机例程“1_leds”试试,裸机例程在开发板光盘中的路径为:1、程序源码->1、裸机例程-> 1_leds。在前面创建的linux文件夹下创建driver/board_driver文件夹,用来存放裸机例程,如图4.3.3.2所示:
将第一个裸机例程“1_leds”拷贝到board_driver中,然后执行make命令进行编译,如图4.3.3.3所示:
从图4.3.3.3可以看到例程“1_leds”编译成功了,编译生成了led.o和led.bin这两个文件,使用如下命令查看led.o文件信息:
file led.o
结果如图4.3.3.4所示:
从图4.3.3.4可以看到led.o是32位LSB 的ELF格式文件,目标机架构为ARM,说明我们的交叉编译器工作正常。
4.4 Source Insight软件安装和使用
4.4.1 Source Insight安装
Source Inisght是一款功能强大的代码编辑、阅读工具,工作在Windows下,我们可以用Source Insight来进行代码编写和阅读,编写完成以后将代码拷贝到Ubuntu中去编译即可。Source Insight下载地址为:https://www.sourceinsight.com/download/,如图4.4.1.1所示:
我们已经下载好并放到了开发板光盘中,路径为:3、软件->Source Insight 4.0->sourceinsight4096-setup.exe,双击“sourceinsight4096-setup.exe”即可开始安装,首先是图4.4.1.2所示欢迎界面:
点击图4.4.1.2中的“Next”按钮进入下一步,如图4.4.1.3所示:
选择图4.4.1.3中的“I accept the terms in the license adreement”,然后点击“Next”按钮,进入安装目录选择界面,根据自己的实际情况选择合适的安装目录,如图4.4.1.4所示:
选择好安装目录以后点击“Next”按钮,进入图4.4.1.5所示的准备安装界面:
点击图4.4.1.5中的“Install”按钮开始安装,等待安装完成,安装完成以后如图4.4.1.6所示:
点击图4.4.1.6中的“Finish”按钮退出安装,安装成功以后会在桌面上出现Source Insight 4.0的图标,如图4.4.1.7所示:
双击图标打开Source Inisght4.0,第一次打开的话会有Licese提示,如图4.4.1.8所示:
因为Source Insight4.0是个收费软件,所以是需要购买License的,如果没有购买的话可以免费体验30天,点击图4.4.1.9中的“确定”按钮,进入图4.4.1.10所示界面:
在图4.4.1.10中,如果你已经购买了licese那么就选择第一个,如果没有购买licese的话就选择第二个免费体验30天,选择好以后点击“Next”按钮,进入图4.4.1.11所示界面:
填写图4.4.1.11中的信息,然后点击“Next”,填写好以后一路“Next”下去就可以了,打开以后的默认界面如图4.4.1.12所示:
至此Source Insight安装完成。
4.4.2 Source Insight新建工程
1、新建工程
跟MDK、IAR一样,Source Insight是需要创建工程的,但是远没有MDK和IAR那么复杂,先新建一个工程文件夹,比如test,test用来存放工程所有文件,包括Source Insight工程文件和C语言源码文件。
注意!Source Insight的工程不能有中文路径!!!!!!
注意!Source Insight的工程不能有中文路径!!!!!!
注意!Source Insight的工程不能有中文路径!!!!!!
在刚刚创建的test文件夹中新建一个SI文件夹,用来存放Source Insight的所有工程文件,完成以后如图4.4.2.1所示:
工程文件夹准备好以后就可以创建工程了,点击Source Insight的:Project->New Project,如图4.4.2.2所示:
点击“New Project”后进入图4.4.2.3所示界面:
在图4.4.2.3中设置好工程名字和路径以后点击“OK”按钮,会进入另外一个设置界面,如图4.4.2.4所示:
在图4.4.2.4中我们一般不需要做任何修改,主要是检查一下路径是否正确,如果没问题的话就点击“OK”按钮即可,进入向工程添加文件界面,如图4.4.2.5所示:
如果你的工程文件夹已经有源文件了,那么就可以按照图4.4.2.5所示方法将所有的源文件添加到工程中,添加完成以后点击“Close”按钮关闭即可。新建工程完成以后Source Insight如图4.4.2.6所示:
我们发现图4.4.2.6好像和没有新建工程的界面没有区别?那是因为我们新建的工程是个空的工程,没有任何的源文件,所以看起来没啥变化。
2、新建源文件
我们在刚刚新建的工程里面新建两个文件:main.c和main.h,先新建main.c文件,点击:File->new,如图4.4.2.7所示:
设置c文件的名字为main.c,如图4.4.2.8所示:
文件命名完成以后点击“OK”按钮,文件创建完成,main.c只是创建了但是还没有保存,更没有添加到我们的工程中,所以我们点击:File->Save,或者直接按下键盘上的“Ctrl+S”键来保存,保存界面如图4.4.2.9所示:
设置好图4.4.2.9中的保存路径以后点击“保存”按钮即可,保存以后会弹出一个对话框,询问你是否要将刚刚保存的C文件添加到工程中,如图4.4.2.10所示:
我们肯定要选择“是”了,要将main.c添加到工程中的,添加完成以后的Source Insight界面如图4.4.2.11所示:
在图4.4.2.11中可以看到我们正在操作main.c这个文件,当前工程只有main.c这一个文件,中间部分就是我们的代码编辑区,我们可以在里面写代码。同样的方法我们在新建一个main.h头文件,
3、编写代码
我们在工程中创建了main.c和main.h两个源文件,接下来在这两个文件中编写代码,在main.c和main.h中分别写入如下代码:
示例代码4.4.2.1 main.c文件代码
1 #include "main.h"
2 #include "stdio.h"
3
4void main(int argc,char*argv[])
5{
6 printf("this is a test file");
7}
8
示例代码4.4.2.2 main.h文件代码
9 #ifndef _MAIN_H
10 #define _MAIN_H
11
12
13 #endif
编写完成以后Source Insight界面如图4.4.2.12所示:
4、工程同步
代码编写完成以后需要对Source Insight做一次同步操作,同步的目的是为了可以进行函数跟踪,比如MDK中直接跳转到某个函数的定义处查看函数源码。同步的方法很简单,点击Project->Synchronize Files,如图4.4.2.13所示:
点击“Synchronize Files”以后打开同步对话框,如图4.4.2.14所示:
按照图4.4.2.14所示设置同步,设置好以后点击“Start”开始同步,等待同步完成,如果工程很小的话同步速度会很快!可能看不到同步的过程,如果工程比较大的话同步就会多花一点时间。
关于Source Insight的安装以及使用就讲解到这里,大家自行多练习几遍Source Insight创建工程和新建文件操作。
4.4.3 Source Insight解决中文乱码
第一次装好Source Insight,如果打开有中文的文件,可能中文显示会乱码,如图4.4.3.1所示:
这是因为编码方式没有选对,点击Options->Preferences…,如图4.4.3.2所示:
打开以后按照图4.4.3.3所示设置:
将文件编码改为GB2312以后中文显示就正常了,如果中文还是显示乱码的话那就试着将图4.4.3.3中的“Default line ending”改为“Unix(LF)”,将“Defaultencoding”改为“UTF8”,如图4.4.3.4所示:
这是因为Linux下是UTF-8编码的,如果你的工程是从Linux下拷贝出来的,那么肯定就要使用UTF8编码才能正常显示。中文正常显示如图4.4.3.5所示:
- 上一篇:K8S使用群晖DS218+的NFS
- 下一篇:嵌入式裸机开发
相关推荐
- Let’s Encrypt免费搭建HTTPS网站
-
HTTPS(全称:HyperTextTransferProtocoloverSecureSocketLayer),是以安全为目标的HTTP通道,简单讲是HTTP的安全版。即HTTP下加入...
- 使用Nginx配置TCP负载均衡(nginx tcp负载)
-
假设Kubernetes集群已经配置好,我们将基于CentOS为Nginx创建一个虚拟机。以下是实验种设置的详细信息:Nginx(CenOS8Minimal)-192.168.1.50Kube...
- Nginx负载均衡及支持HTTPS与申请免费SSL证书
-
背景有两台minio文件服务器已做好集群配置,一台是192.168.56.41:9000;另一台是192.168.56.42:9000。应用程序通过Nginx负载均衡调用这两台minio服务,减轻单点...
- HTTPS配置实战(https配置文件)
-
原因现在网站使用HTTPS是规范操作之一,前些日子买了腾讯云服务,同时申请了域名http://www.asap2me.top/,目前该域名只支持HTTP,想升级为HTTPS。关于HTTPS的链接过程大...
- 只有IP地址没有域名实现HTTPS访问方法
-
一般来说,要实现HTTPS,得有个注册好的域名才行。但有时候呢,咱只有服务器的IP地址,没注册域名,这种特殊情况下,也能照样实现HTTPS安全访问,按下面这些步骤来就行:第一步,先确认公网...
- 超详解:HTTPS及配置Django+HTTPS开发环境
-
众所周知HTTP协议是以TCP协议为基石诞生的一个用于传输Web内容的一个网络协议,在“网络分层模型”中属于“应用层协议”的一种。在这里我们并不研究该协议标准本身,而是从安全角度去探究使用该协议传输数...
- Godaddy购买SSL之后Nginx配置流程以及各种错误的解决
-
完整流程:参考地址:https://sg.godaddy.com/zh/help/nginx-generate-csrs-certificate-signing-requests-3601生成NGI...
- Nginx从安装到高可用,一篇搞定(nginx安装与配置详解)
-
一、Nginx安装1、去官网http://nginx.org/下载对应的nginx包,推荐使用稳定版本2、上传nginx到linux系统3、安装依赖环境(1)安装gcc环境yuminstallgc...
- 阿里云免费证书申请,配置安装,使用tomcat,支持http/https访问
-
参数说明商品类型默认已选择云盾证书服务(无需修改)。云盾证书服务类型SSL证书服务的类型。默认已选择云盾SSL证书(无需修改),表示付费版SSL证书。如果您需要免费领取或付费扩容DV单域名证书【免费试...
- 你试过两步实现Nginx的规范配置吗?极速生成Nginx配置小工具
-
NGINX是一款轻量级的Web服务器,最强大的功能之一是能够有效地提供HTML和媒体文件等静态内容。NGINX使用异步事件驱动模型,在负载下提供可预测的性能。是当下最受欢迎的高性能的Web...
- 从零开始搭建HTTPS服务(搭建https网站)
-
搭建HTTPS服务的最初目的是为了开发微信小程序,因为wx.request只允许发起HTTPS请求,并且还必须和指定的域名进行网络通信。要从零开始搭建一个HTTPS的服务需要下面4...
- 群晖NAS使用官网域名和自己的域名配置SSL实现HTTPS访问
-
安全第一步,群晖NAS使用官网域名和自己的域名配置SSL实现HTTPS访问【新手导向】NAS本质还是一个可以随时随地访问的个人数据存储中心,我们在外网访问的时候,特别是在公网IP下,其实会面临着很多安...
- 让网站快速升级HTTPS协议提高安全性
-
为什么用HTTPS网络安全越来越受到重视,很多互联网服务网站,都已经升级改造为https协议。https协议下数据包是ssl/tcl加密的,而http包是明文传输。如果请求一旦被拦截,数据就会泄露产生...
- 用Https方式访问Harbor-1.9版本(https访问流程)
-
我上周在头条号写过一篇原创文章《Docker-Harbor&Docker-kitematic史上最详细双系统配置手册》,这篇算是它的姊妹篇吧。这篇文章也将用到我在头条写的另一篇原创文章的...
- 如何启用 HTTPS 并配置免费的 SSL 证书
-
在Linux服务器上启用HTTPS并配置免费的SSL证书(以Let'sEncrypt为例)可以通过以下步骤完成:---###**一、准备工作**1.**确保域名已解析**...
你 发表评论:
欢迎- 一周热门
-
-
极空间如何无损移机,新Z4 Pro又有哪些升级?极空间Z4 Pro深度体验
-
如何在安装前及安装后修改黑群晖的Mac地址和Sn系列号
-
爱折腾的特斯拉车主必看!手把手教你TESLAMATE的备份和恢复
-
10个免费文件中转服务站,分享文件简单方便,你知道几个?
-
日本海上自卫队的军衔制度(日本海上自卫队的军衔制度是什么)
-
[常用工具] OpenCV_contrib库在windows下编译使用指南
-
【系统配置】信创终端挂载NAS共享全攻略:一步到位!
-
UOS服务器操作系统防火墙设置(uos20关闭防火墙)
-
Ubuntu系统Daphne + Nginx + supervisor部署Django项目
-
WindowsServer2022|配置NTP服务器的命令
-
- 最近发表
- 标签列表
-
- linux 查询端口号 (58)
- docker映射容器目录到宿主机 (66)
- 杀端口 (60)
- yum更换阿里源 (62)
- internet explorer 增强的安全配置已启用 (65)
- linux自动挂载 (56)
- 禁用selinux (55)
- sysv-rc-conf (69)
- ubuntu防火墙状态查看 (64)
- windows server 2022激活密钥 (56)
- 无法与服务器建立安全连接是什么意思 (74)
- 443/80端口被占用怎么解决 (56)
- ping无法访问目标主机怎么解决 (58)
- fdatasync (59)
- 405 not allowed (56)
- 免备案虚拟主机zxhost (55)
- linux根据pid查看进程 (60)
- dhcp工具 (62)
- mysql 1045 (57)
- 宝塔远程工具 (56)
- ssh服务器拒绝了密码 请再试一次 (56)
- ubuntu卸载docker (56)
- linux查看nginx状态 (63)
- tomcat 乱码 (76)
- 2008r2激活序列号 (65)