WSL:在 Windows 系統中開發 Linux 程序的又一神器
- 什么是 WSL?
- 什么是 WSL2?
- 激活 WSL 服務
- 安裝 Ubuntu-18.04 操作系統
- 通過 ssh 遠程登錄
- 編譯 Hello,World!
作為一名嵌入式軟件開發工程師,在 Linux 系統下寫代碼、編譯、調試是避免不了的事情。
但是很少有同學會直接拿一臺 Linux 真機來作為工作平臺,除非是那種利用遠程服務器來編譯的場景。
更普遍的使用場景是:在一臺 Windows/Mac 系統中,安裝虛擬機,然后在虛擬機中安裝 Linux 操作系統。
Windows 系統中常用的虛擬機有:Virtualbox、VMWare,Mac 系統中一般都是用 Parallels Desktop,速度確實比較快!
在很久以前,我參與的項目主要是物聯網網關,只需要編譯 Linux 系統下的可執行程序,因此在日常工作中,都是直接在 Ubuntu 虛擬機中敲代碼(編輯器:VSCode、SubLime)、編譯、調試。
后來需要開發跨平臺的應用,開發模式就變成了:
- 敲代碼:indows 系統中中的 Visual Studio;
- 編譯 Windows 應用程序: 直接用 Visual Studio 中的 VC 編譯器來編譯;
- 編譯 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 是適用于 Linux 的 Windows 子系統體系結構的一個新版本,它是對基礎體系結構的一次重大改造。
它使用虛擬化技術和 Linux 內核來實現其新功能,主要目標是提高文件系統性能和添加完全的系統調用兼容性。
個人理解:
WSL:并不是一個真正的 Linux 操作系統,僅僅是 Linux 應用程序與 Windows 操作系統之間的一個適配層。
在這個適配層之上,可以運行 Linux 應用程序,有點類似于以前的 cygwin 的方式。
WSL2:它就是一個虛擬機,類似于 Vitual Box,在這個虛擬機之上,運行一個完整的 Linux 操作系統。
相對于 Virtual Box、VMWare 來說,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 multive
保存之后,執行更新指令:
- $ 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 的命令行窗口了。

是不是感覺少了點什么東西?那些 Desktop、Documents、Picture 等默認文件夾怎么都不見了?
這個問題,后面在演示 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!
完美!
本文轉載自微信公眾號「IOT物聯網小鎮 」,可以通過以下二維碼關注。轉載本文請聯系IOT物聯網小鎮 公眾號。