作 者:道哥,10+年的嵌入式開發老兵。
公眾號:【IOT物聯網小鎮】,專注於:C/C++、Linux作業系統、應用程式設計、物聯網、微控制器和嵌入式開發等領域。 公眾號回覆【書籍】,獲取 Linux、嵌入式領域經典書籍。
轉 載:歡迎轉載文章,轉載需註明出處。
作為一名嵌入式軟體開發工程師,在 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 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
的命令列視窗了。
是不是感覺少了點什麼東西?那些 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!
完美!
接下來要介紹的就是 WSL2
以及 圖形視窗了,過程我已經驗證完畢,等整理好之後再分享給大家,謝謝!
推薦閱讀
【1】C語言指標-從底層原理到花式技巧,用圖文和程式碼幫你講解透徹
【2】一步步分析-如何用C實現物件導向程式設計
【3】原來gdb的底層除錯原理這麼簡單
【4】內聯彙編很可怕嗎?看完這篇文章,終結它!
其他系列專輯:精選文章、C語言、Linux作業系統、應用程式設計、物聯網
</stdio.h>