一禁悠、目的
二、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默認(rèn)是用root用戶操作烟逊,這里建議新增一個用戶铺根,以免某些軟件默認(rèn)不允許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)卡也是一樣的洲胖,該端口是為了防止主機也默認(rèn)啟動了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)試的過程完成掸哑,最后约急,祝大家工作順利