一、目的
二、wsl子系統(tǒng)的安裝適配
0. wsl的官方安裝教程
1. wsl的開啟
2. 下載對應(yīng)的wsl系統(tǒng)
3. LxRunOffline的下載和安裝
4. 使用LxRunOffline的安裝wsl子系統(tǒng)
三、 wsl子系統(tǒng)的基礎(chǔ)環(huán)境搭建
四、wsl開發(fā)環(huán)境的搭建
五、vscode開發(fā)環(huán)境的搭建
六、vscode調(diào)試環(huán)境的測試
一、目的
?? 本文的目的是,讓想要接觸linux開發(fā)的小伙伴,通過wsl體驗相關(guān)linux操作,及l(fā)inux應(yīng)用程序開發(fā)的過程,文末會提供相應(yīng)的鏡像包地址,并提供一個簡單的linux的demo應(yīng)用。個人感覺相比使用虛擬機的方式開發(fā)有下面幾個優(yōu)勢
1、代碼可以直接放在Windows的目錄下,因為wsl可以訪問整個Windows系統(tǒng)的文件系統(tǒng)。
2、vscode可以通過ssh直接使用代碼進行斷點調(diào)試開發(fā)。
3、對于wsl1來說(本文只針對wsl1說明,wsl2也可實現(xiàn)調(diào)試功能,但是不能訪問主機的外設(shè),因為wsl2是通過hyper-v,生成的linux虛擬機,和linux環(huán)境完全相同),可以使用Windows下的串口,win10中的COMx對應(yīng)的是wsl中的/dev/ttySx,比如com5對應(yīng)的是wsl的/dev/ttyS5。(目前只支持串口,usb好像不行,需要通過usbovernet的工具實現(xiàn)usb的訪問,這個不太好)
但是缺點也是明顯的,因為是和Windows公用的一個文件系統(tǒng),也就是系統(tǒng)底層相關(guān)的開發(fā)是不適用的,比如開發(fā)uboot和kernel是不太適用的。本身不是真正的ext文件系統(tǒng)。
二、wsl子系統(tǒng)的安裝適配
0. wsl的官方安裝教程
?? wsl全稱Windows Subsystem for Linux,即Windows上的linux子系統(tǒng),是win10特定版本之后新加入的特性功能,可以通過啟用或關(guān)閉Windows功能,把wsl打開。wsl上面的linux子系統(tǒng)對應(yīng)希望入門linux應(yīng)用開發(fā)或者運維的小伙伴來說,是個不錯的入門選擇。下面的連接是官方的安裝連接,Manual installation steps for older versions of WSL | Microsoft Docs
但是本文介紹另外一個開源的工具軟件LxRunOffline (GitHub - DDoSolitary/LxRunOffline: A full-featured utility for managing Windows Subsystem for Linux (WSL))來實現(xiàn)wsl的安裝和管理,相關(guān)的說明可以通過這個網(wǎng)站了解LxRunOffline使用手冊 | 0opsdc (oopsdc.com)
1. wsl的開啟
??滿足微軟官方的win10版本要求,即可開啟wsl功能
To update to WSL 2, you must be running Windows 10.
* For x64 systems: **Version 1903** or higher, with **Build 18362** or higher.
* For ARM64 systems: **Version 2004** or higher, with **Build 19041** or higher.
* Builds lower than 18362 do not support WSL 2\. Use the [Windows Update Assistant]
(https://www.microsoft.com/software-download/windows10) to update your version of Windows.
2. 下載對應(yīng)的wsl系統(tǒng)
??wsl系統(tǒng)支持多個linux的發(fā)行版本,可以通過微軟的應(yīng)用商店直接獲取也可以通過下面的連接下載下載對應(yīng)的linux發(fā)行版本的wsl,下圖是現(xiàn)在支持的wsl子系統(tǒng),下載好后,把對應(yīng)的后綴修改為zip后,解壓到相應(yīng)的目錄,這個目錄是后面要使用的安裝文件目錄,比如我這里的目錄是I:\wsl\images\Ubuntu_2004.2021.825.0_x64
,可以看出下載的是ubuntu2004版本支持x64的wsl系統(tǒng)。
3. LxRunOffline的下載和安裝
??從github找到最新的LxRunOffline的release (3.5版本)版本,下載并解壓到相應(yīng)的目錄,比如我這里解壓到I:\wsl\
,解壓后會出現(xiàn)相應(yīng)版本的目錄,我這里的是I:\wsl\LxRunOffline-v3.5.0-msvc
,解壓之后需要把相關(guān)目錄加入的win10的環(huán)境變量中。如下圖所示:
如果安裝正確后在cmd終端輸入
LxRunOffline version
,會出現(xiàn)相應(yīng)LxRunOffline 版本信息
4. 使用LxRunOffline的安裝wsl子系統(tǒng)
1、輸入命令LxRunOffline i -n ubt2004 -f I:\wsl\images\Ubuntu_2004.2021.825.0_x64\install.tar.gz -d I:\wsl\images\ubt2004 -s
,成功安裝顯示如下:
2、安裝的各個參數(shù)說明如下
3、成功安裝后,可以看到在-d參數(shù)后的輸出目錄有一個rootfs文件,這個就算linux的根文件系統(tǒng),另外所有的Windows盤符都會掛載到rootfs/mnt/目錄下面,比如c盤對應(yīng)的會掛載到wsl系統(tǒng)的/mnt/c/目錄
三、 wsl子系統(tǒng)的基礎(chǔ)環(huán)境搭建
1、wsl子系統(tǒng)(ubuntu2004)安裝好了,通過任意的cmd命令輸入wsl
或者直接在桌面點擊相應(yīng)快捷方式即可進入wsl子系統(tǒng),如下所示
2、溫馨提示,wsl默認是用root用戶操作,這里建議新增一個用戶,以免某些軟件默認不允許root用戶使用,可以通過
adduser
命令新增用戶如下3、把新建的用戶加入sudoer,通過
vi /etc/sudoers
修改如下部分內(nèi)容,把對應(yīng)的用戶加入sudoer,我這里添加的是vencol4、修改apt的源,這里建議使用阿里源,1.通過指令
sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak
備份原文件,2.通過sudo vi /etc/apt/sources.list
修改文件內(nèi)容如下
deb http://mirrors.aliyun.com/ubuntu/ focal main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ focal-security main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ focal-updates main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ focal-proposed main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ focal-backports main restricted universe
# 把源代碼部分的更新源屏蔽
# deb-src http://mirrors.aliyun.com/ubuntu/ focal main restricted universe multiverse
# deb-src http://mirrors.aliyun.com/ubuntu/ focal-security main restricted universe multiverse
# deb-src http://mirrors.aliyun.com/ubuntu/ focal-updates main restricted universe multiverse
# deb-src http://mirrors.aliyun.com/ubuntu/ focal-proposed main restricted universe multiverse
# deb-src http://mirrors.aliyun.com/ubuntu/ focal-backports main restricted universe multiverse
5、通過指令sudo apt-get update
更新一下源,完成基礎(chǔ)的wsl安裝處理
四、wsl開發(fā)環(huán)境的搭建
1、通過指令sudo apt-get install build-essential
搭建基本的編譯開發(fā)環(huán)境
2、通過指令sudo apt-get install openssh-server
安裝sshd服務(wù)端
3、通過指令修改sudo vi /etc/ssh/sshd_config
文件,修改內(nèi)容涉及如下,因為wsl和主機共享環(huán)境資源,也就是網(wǎng)卡也是一樣的,該端口是為了防止主機也默認啟動了sshd服務(wù)
Port 22222
PasswordAuthentication yes
4、通過命令ssh vencol@127.0.0.1 -p 22222
輸入對應(yīng)用戶的密碼測試是否成功,如果成功會顯示對應(yīng)用戶的ssh應(yīng)答
五、vscode開發(fā)環(huán)境的搭建
1、 vscode下載Download Visual Studio Code - Mac, Linux, Windows,這里建議下載壓縮包,就是zip的格式,這樣可以把插件放在非c盤。如果下載的是非壓縮包格式(非zip)的話,可以跳過后面2~4點的設(shè)置。
2、把下載的壓縮包,解壓到相應(yīng)的目錄,我這里解壓到G:\soft\VSCode\
目錄
3、在目錄G:\soft\VSCode\
下,添加VSCode.bat的腳本,內(nèi)容如下,其中VSCode-win32-x64-1.63.2
是我這邊解壓之后的vscode軟件所在的目錄
set VSCODEPATH=%~dp0
if "%1"=="hide" goto CmdBegin
start mshta vbscript:createobject("wscript.shell").run("""%~0"" hide",0)(window.close)&&exit
:CmdBegin
%VSCODEPATH%VSCode-win32-x64-1.63.2\Code.exe --extensions-dir %VSCODEPATH%VSCode-extensions
4、通過腳本G:\soft\VSCode\VSCode.bat
的快捷方式,復(fù)制到你想要執(zhí)行的地方,比如桌面或者啟動菜單等,通過雙擊快捷方式,啟動vscode,而不是通過直接雙擊vscode的圖標(biāo)啟動,這樣做的好處是,所有安裝的擴展插件都不會安裝到c盤,而是安裝到腳本所在的目錄的VSCode-extensions文件夾,我這里的情況是安裝到G:\soft\VSCode\VSCode-extensions
文件夾里面,還有一個好處是升級vscode的時候,只需要下載壓縮包,并解壓到腳本目錄,之后修改腳本中的vscode路徑即可完成升級。
5、通過VSCode.bat腳本運行vscode程序,點擊擴展按鈕或者通過快捷鍵(Ctrl + Shift +x)打開擴展目錄,安裝c插件和Remote SSH插件
6、通過側(cè)邊欄的“遠程資源管理器”,打開添加ssh界面的+號添加,輸入對應(yīng)的用戶賬號和密碼,比如我這里輸入
ssh vencol@127.0.0.1 -p 22222
其中22222是設(shè)置的端口號7、保存好配置文件后,會多出一個127.0.0.1的主機,點擊下圖的加,會提示重新打開窗口
8、選擇對應(yīng)的平臺,這里我們的wsl是linux,并且輸入對應(yīng)的密碼,第一次會長時間一點,因為需要在wsl系統(tǒng)里面安裝vscode配置,如果成功將顯示如下圖,連接127.0.0.1
9、打開工程代碼對應(yīng)的文件夾,比如我這里的test
10、會提示安裝c插件,如果沒有提示請自行安裝,這里是因為wsl里面沒有c插件,所以需要安裝一個。
六、vscode調(diào)試環(huán)境的測試
1、通過命令sudo apt-get install gdb
安裝gdb,通過命令gdb -v
進行測試
2、編寫測試代碼如下
#include <stdlib.h>
int main (void) {
char buf[128]="echo ";
for (int i=0; i<100; i++) {
printf("this is %d \n", i);
snprintf(buf, sizeof(buf), "echo num:%d >> ./testout.txt", i);
system(buf);
sleep(1);
}
return 0;
}
3、通過運行---》啟動調(diào)試,或者快捷鍵F5開啟調(diào)試,第一次會彈出配置gdb,選擇如圖,選擇gcc,內(nèi)容為輸出文件
launch.json文件內(nèi)容如下
{
// 使用 IntelliSense 了解相關(guān)屬性。
// 懸停以查看現(xiàn)有屬性的描述。
// 欲了解更多信息,請訪問: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"name": "gcc - 生成和調(diào)試活動文件",
"type": "cppdbg",
"request": "launch",
"program": "${fileDirname}/test",
"args": ["-g"],
"stopAtEntry": false,
"cwd": "${fileDirname}",
"environment": [],
"externalConsole": false,
"MIMode": "gdb",
"setupCommands": [
{
"description": "為 gdb 啟用整齊打印",
"text": "-enable-pretty-printing",
"ignoreFailures": true
}
],
"preLaunchTask": "C/C++: gcc 生成活動文件",
"miDebuggerPath": "/usr/bin/gdb"
}
]
}
4、通過F5啟動調(diào)試,同時也會自動編譯測試代碼,通過指令tail -f testout.txt
關(guān)注testout的文件輸出,不難看出,調(diào)試終端和文件都以1s一個值的方式輸出,如圖所示可以看到,點前斷點停止了i為63的地方
5、通過修改i的值,是程序重新重10開始輸出,如圖,明顯可以看出,終端是從11開始輸出,而文件則是從10開始輸出的,這是因為斷點在輸出文件執(zhí)行的行。
6、通過指令
LxRunOffline e -n ubt2004 -f ubt2004.tar.gz
導(dǎo)出配置的wsl,可以方便移植到其他支持wsl的win10系統(tǒng)上。成功導(dǎo)出如圖至此,利用wsl+vscode+gdb調(diào)試的過程完成,最后,祝大家工作順利