作 者:道哥,10+年的嵌入式开发老兵。

公众号:【IOT物联网小镇】,专注于:C/C++、Linux操作系统、应用程序设计、物联网、单片机和嵌入式开发等领域。 公众号回复【书籍】,获取 Linux、嵌入式领域经典书籍。

转 载:欢迎转载文章,转载需注明出处。

作为一名嵌入式软件开发工程师,在 Linux 系统下写代码、编译、调试是避免不了的事情。

但是很少有同学会直接拿一台 Linux 真机来作为工作平台,除非是那种利用远程服务器来编译的场景。

更普遍的使用场景是:在一台 Windows/Mac 系统中,安装虚拟机,然后在虚拟机中安装 Linux 操作系统。

Windows 系统中常用的虚拟机有:VirtualboxVMWareMac 系统中一般都是用 Parallels Desktop,速度确实比较快!

在很久以前,我参与的项目主要是物联网网关,只需要编译 Linux 系统下的可执行程序,因此在日常工作中,都是直接在 Ubuntu 虚拟机中敲代码(编辑器:VSCodeSubLime)、编译、调试。

后来需要开发跨平台的应用,开发模式就变成了:

  1. 敲代码:indows 系统中中的 Visual Studio;

  2. 编译 Windows 应用程序: 直接用 Visual Studio 中的 VC 编译器来编译;

  3. 编译 Linux 应用程序:通过远程部署的方式,把代码同步到 Ubuntu 虚拟机中,然后远程编译、调试;

这样的开发模式是属于比较常见的,只不过每次 Ubuntu 虚拟机比较耗费资源,启动比较慢而已!

编写跨平台的代码,使用 CMake 工具来管理构建过程,也是非常方便的。

之前写过 2 篇相关的文章:

《使用 cmake 来搭建跨平台的应用程序框架:C语言版本》

《使用 cmake 来搭建跨平台的应用程序框架:C++版本》

2 篇总结,算是一个简单的工程模板吧。

平时如果我需要写一些简单的 Demo 发给别人,我就会直接复制一下,然后添加上演示代码就可以了。

说了这么多,都是在描述跨平台开发的工作场景,或者说是开发模式。

其实,在 Windows 系统中,还有一种安装 Linux 系统的方式,这就是 WSL/WSL2!

下面,我就把自己的安装、配置过程与大家分享一下!

什么是 WSL?

这部分没有什么好掰扯的,直接从微软官网摘录如下:

WSL(Windows Subsystem for Linux):Windows 系统中的一个子系统,在这个子系统上可以运行 Linux 操作系统。

可以让开发人员直接在 Windows 上按原样运行 GNU/Linux 环境(包括大多数命令行工具、实用工具和应用程序),且不会产生传统虚拟机或双启动设置开销。

什么是 WSL2?

WSL2 是适用于 LinuxWindows 子系统体系结构的一个新版本,它是对基础体系结构的一次重大改造。

它使用虚拟化技术和 Linux 内核来实现其新功能,主要目标是提高文件系统性能和添加完全的系统调用兼容性。

个人理解:

WSL: 并不是一个真正的 Linux 操作系统,仅仅是 Linux 应用程序与 Windows 操作系统之间的一个适配层。

在这个适配层之上,可以运行 Linux 应用程序,有点类似于以前的 cygwin 的方式。

WSL2:它就是一个虚拟机,类似于 Vitual Box,在这个虚拟机之上,运行一个完整的 Linux 操作系统。

相对于 Virtual BoxVMWare 来说,WSL2提供更全面的兼容性、与 Windows 系统的互操作性更好、运行速度更快、占用系统资源更少。

激活 WSL 服务

Win+X, 启动 Windows PowerShell (管理员),注意:是带有管理员的这个啊:

或者直接在搜索窗口中输入 Power, 然后选择以管理员方式运行:

PowerShell 的窗口是:

可以把 PowerShell 理解成升级版的、功能更强劲的 cmd

PowerShell 窗口中,输入如下指令来激活 WSL 服务:

Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux

此时,提示需要重启系统(不用说,肯定选择 Y):

电脑重启之后,按下 Win + R,调出命令输入窗口。输入指令 appwiz.cpl

点击左侧的 【启动或关闭 Windows 功能】:

弹出下面这个窗口:

可以看到:【适用于 Linux 的 Windows 子系统】这一栏已经被勾选了,说明 WSL 服务已经启动。

接下来要做的事情,就是安装 Ubuntu 操作系统。

安装 Ubuntu-18.04 操作系统

启动 【Windows Store】:

在右上角的搜索栏中,输入: Ubuntu

我们这里就选择 Ubuntu-18.04 吧,这也是我工作中使用的版本。

下载速度挺快的:

安装完成之后,点击【启动】按钮:

第一次打开速度稍微慢一些,大约 1 分钟左右吧,提示设置用户名、密码,然后就进入我们熟悉的窗口了:

这样,Ubuntu-18.04 系统就安装好了!

我一般在系统安装之后,会把 root 用户的密码也设置一下,以后总会需要使用 root 身份来登录系统的。

$ sudo passwd

系统安装之后,第一件事情一般都是更换软件源。

可以选择阿里、清华或者中科大的源,这里就直接使用清华的软件源:

$ cd /etc/apt
$ sudo cp sources.list source.list.bak
$ sudo vim sources.list

把下面软件源复制、粘贴进去:

deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-updates main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-updates main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-backports main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-backports main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-security main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-security main restricted universe multiverse

保存之后,执行更新指令:

$ sudo apt-get update
$ sudo apt-get upgrade 这个步骤,请同学们耐心等待,稍安勿躁。出现提示输入,选择 Y 就行了。

通过 ssh 远程登录

如果您觉得这个黑乎乎的窗口有点丑,那么可以通过 Windows 系统中的 Xshell 工具来远程登录(ssh)。

为了这个目的,我们需要在 Ubuntu-18.04 中重新安装 sshd 服务:

$ sudo apt purge openssh-server
$ sudo apt install openssh-server

安装完毕之后,需要修改配置文件,以运行远程登录:

$ sudo vim  /etc/ssh/sshd_config

修改1:把 13 行的 #Port 22 改为 Port 22

修改2:把 32 行的 #PermitRootLogin prohibit-password 改为 PermitRootLogin yes

修改3:把 56 行的 #PasswordAuthentication yes 改为 PasswordAuthentication yes

修改之后,启动 sshd 服务:

$ sudo service ssh restart

此时,启动 Windows 系统中的 Xshell 来远程登录一下,主机名只需要填写:localhost 即可:

建立链接的时候,需要保存秘钥:

然后输入用户名和密码:

如果出现下面这个提示,先不用理会它,直接选择【否】,这是与 Linux 的图形窗口相关的,后面会解释。

此时,就可以在 Xshell 中愉快的操作 Ubuntu 的命令行窗口了。

是不是感觉少了点什么东西?那些 DesktopDocumentsPicture 等默认文件夹怎么都不见了?

这个问题,后面在演示 WSL2 的时候就见分晓了!

编译 Hello,World!

最后,我们来编译一个应用程序。首先安装 gcc 编译器:

$ sudo apt-get install gcc

再写一个 hello.c 文件:

#include <stdio.h>

int main()
{
printf("Hello,World! \n");
return 0;
}

然后编译、执行:

ccc@DESKTOP-5LT2QM5:~/tmp$ gcc hello.c -o hello
ccc@DESKTOP-5LT2QM5:~/tmp$ ./hello
Hello,World!

完美!

------ End ------

接下来要介绍的就是 WSL2 以及 图形窗口了,过程我已经验证完毕,等整理好之后再分享给大家,谢谢!

推荐阅读

【1】C语言指针-从底层原理到花式技巧,用图文和代码帮你讲解透彻

【2】一步步分析-如何用C实现面向对象编程

【3】原来gdb的底层调试原理这么简单

【4】内联汇编很可怕吗?看完这篇文章,终结它!

其他系列专辑:精选文章C语言Linux操作系统应用程序设计物联网

星标公众号,能更快找到我!

</stdio.h>

WSL2:在Windows系统中开发Linux程序的又一神器的更多相关文章

  1. cygwin,在win中开发linux程序

    cygwin,在win中开发linux程序 http://www.cygwin.cn/site/info/show.php?IID=1001  很多用windows的朋友不习惯于用linux的开发环境 ...

  2. Windows系统中设置Python程序定时运行方法

    Windows系统中设置Python程序定时运行方法 一.环境 win7 + Python3.6 二.步骤 1,在Windows开始菜单中搜索“计划任务”,并且点击打开“计划任务”: 2.点击“创建基 ...

  3. 如何在Windows系统中设置Python程序定时运行

    文章出处:http://blog.csdn.net/wwy11/article/details/51100432 首先,我们肯定是要用到Windows下的[计划任务]功能 之后点击右侧的[创建基本任务 ...

  4. gcc和MinGW的异同(在cygwin/gcc做的东西可以无缝的用在linux下,没有任何问题,是在windows下开发linux程序的一个很好的选择)

    cygwin/gcc和MinGW都是gcc在windows下的编译环境,但是它们有什么区别,在实际工作中如何选择这两种编译器. cygwin/gcc完全可以和在linux下的gcc化做等号,这个可以从 ...

  5. [Java.File]如果写 File filesFolder = new File("/") ,在windows系统中,filesFolder 会去找哪个盘符? 答案:程序运行路径的根盘符.

    首先这段代码在Unix/Linux系统上会去找根路径,但在Windows系统上会去找C:盘还是D:盘还是其它盘呢? 其实它会去找user.dir所在盘符的根目录,user.dir即用户的当前工作目录, ...

  6. 在windows系统下打包linux平台运行的go程序

    在windows系统下打包linux平台运行的go程序 1.先在main.go下打包成.exe可执行程序测试代码是否正确 //cd到main.go目录 go build //打包命令 如果打包成功则表 ...

  7. 关于Linux系统和Windows系统中文件夹的命名规范

    Windows系统中. 1.在创建文件夹的时候不能以"."开头(但是文件以多个点开头并且还有其他合法字符的话就是合法的) 但是在windows系统中确实见过以一个点".& ...

  8. 在Windows系统中安装集成的PHP开发环境

    原文:在Windows系统中安装集成的PHP开发环境 刚想学php的,又不会配置复杂php的环境,可以使用集成的,目前网上提供常用的PHP集成环境主要有AppServ.phpStudy.WAMP和XA ...

  9. Windows系统中Xshell与Linux连接时遇到的问题

    前提条件:在Windows系统中已经安装了Xshell,并且安装了虚拟机软件和Linux系统 步骤1.在Linux系统中root用户下,使用ifconfig命令查看虚拟系统Linux的IP地址.如图1 ...

随机推荐

  1. K8S集群etcd备份与恢复

    参考链接: K8S集群多master:Etcd v3备份与恢复 K8S集群单master:Kubernetes Etcd 数据备份与恢复 ETCD系列之一:简介:https://developer.a ...

  2. 人脸标记检测:ICCV2019论文解析

    人脸标记检测:ICCV2019论文解析 Learning Robust Facial Landmark Detection via Hierarchical Structured Ensemble 论 ...

  3. 适用于Windows和Linux的Yolo-v3和Yolo-v2(上)

    适用于Windows和Linux的Yolo-v3和Yolo-v2(上) https://github.com/eric-erki/darknetAB (用于对象检测的神经网络)-Tensor Core ...

  4. 中国人工智能AI框架自主研发

    中国人工智能AI框架自主研发 中国AI界争相构建AI开源框架的背后,技术和业务层面的考量因素当然重要,但也不应忽视国家层面的政策支持.对于AI基础设施的建设,中国政府在<新一代人工智能发展规划& ...

  5. WizTree——一个扫描快似Everything的硬盘空间分析工具

    虽然我平时用的主要是Linux,但是由于实际环境是win10,对于磁盘资源的控制,我主要是通过Windows自带的文件资源管理器来查看的,但是显然这个工具不够直观.于是,我也被安利过SpaceSnif ...

  6. 【NX二次开发】Block UI 目录

    Block UI 目录  基本   标签/位图   切换开关   枚举   字符串   多行字符串   操作按钮   列表框   分割线   对象颜色选择器   RGB颜色选择器   绘图区   图层 ...

  7. 【NX二次开发】Block UI 指定轴

    属性说明 属性   类型   描述   常规           BlockID    String    控件ID    Enable    Logical    是否可操作    Group    ...

  8. 循序渐进BootstrapVue,开发公司门户网站(1)---基于Bootstrap网站模板构建组件界面

    在前面随笔<使用BootstrapVue相关组件,构建Vue项目界面>概括性的介绍了BootstrapVue的使用过程,其实选用这个主要就是希望能够用来构建一些公司门户网站的内容,毕竟基于 ...

  9. 「csp-s模拟测试(9.18)」Set·Read·Race

    昨天考试考得有点迷??? 一看内存限制,T1 64MB T2 16MB 当场懵比......... T1 set 考场打的背包问题和随机化,其实能randA掉,但不小心数组开小了????(长记性!!! ...

  10. Linux命令大全之基本命令

    命令提示符中:    ~:表示家目录   #:表示超级用户   $:表示普通用户 命令 [选项] [参数] ls(list):查询目录中的内容 ls  [选项]  [文件或目录] -a:显示所有文件, ...