加入星計劃,您可以享受以下權益:

  • 創(chuàng)作內容快速變現
  • 行業(yè)影響力擴散
  • 作品版權保護
  • 300W+ 專業(yè)用戶
  • 1.5W+ 優(yōu)質創(chuàng)作者
  • 5000+ 長期合作伙伴
立即加入
  • 正文
    • 前言
    • vscode插件安裝
    •  
    • 圖書推薦 
    • 本文參考
  • 相關推薦
  • 電子產業(yè)圖譜
申請入駐 產業(yè)圖譜

干貨 | 利用vscode遠程調試Linux內核

2022/05/01
2874
閱讀需 12 分鐘
加入交流群
掃碼加入
獲取工程師必備禮包
參與熱點資訊討論

前言

上一遍文章介紹了利用QEMU+GDB調試Linux內核。但是,有時候直接利用GDB調試查看代碼還不是很方便,所以,在這么重要的場合,怎么能少的了vscode這個神器呢。本篇文章介紹如何使用vscode遠程調試內核。

本文環(huán)境:

  • windows10vscodeubuntu 20.04

我個人使用的是騰訊云服務器,所以就省去了安裝虛擬機的過程。直接從vscode配置開始。

vscode插件安裝

remote-ssh

在插件庫中找到Remote-SSH插件并且安裝。

 

安裝完成后右邊工具欄會多出一個功能

 

按F1呼出對話框,輸入remote-ssh,選擇open ssh configuration file。

選擇第一個配置文件

 

# Read more about SSH config files: https://linux.die.net/man/5/ssh_config
Host ubuntu
    HostName 服務器IP地址
    User 用戶名
    IdentityFile 私鑰路徑

我這里使用的是私鑰方式登陸服務器,IdentityFile填寫的是私鑰的絕對路徑。

配置好后,點擊加號按鈕,就可以登陸服務器了

 

報錯:Setting up SSH Host XX:Copying VS Code Server to host with scp

在進行連接的時候卡住了,一直在等待Setting up SSH Host XX:Copying VS Code Server to host with scp。

原因

是因為在遠程的服務器下 家目錄~/.vscode-server/bin/commit_id/vscode-servlet.tar.gz 沒有下載下來。

commit_id 可以在vscode 【幫助】->【終端】中查看。

解決辦法

那我們就手動進行下載vscode-servlet.tar.gz。通過下面的鏈接進行下載。

#注意把:${commit_id}替換成對應的Commit ID
https://update.code.visualstudio.com/commit:${commit_id}/server-linux-x64/stable

運行下面這行命令。把~/.vscode-server/bin目錄下的東西刪除干凈。

rm ~/.vscode-server/bin/* -rf

沒有~/.vscode-server/bin目錄的話進行創(chuàng)建,有的話請忽略這一步*。

mkdir -p ~/.vscode-server/bin

將下載的壓縮包vscode-server-linux-x64.tar.gz放在~/.vscode-server/bin目錄下。

運行下面這三行命令,其中${commit_id}需要替換成第2步記錄的commit_id.

cd ~/.vscode-server/bin
tar -zxf vscode-server-linux-x64.tar.gz
mv vscode-server-linux-x64 ${commit_id}

 

報錯:Permissions for 'vscode_rsa' are too open.

然后就可以在原來的文件瀏覽界面,打開遠程的文件夾。但是在配置好進行連接的時候,VScode的終端報錯了:

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@     WARNING: UNPROTECTED PRIVATE KEY FILE!     @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
Permissions for 'vscode_rsa' are too open.
It is required that your private key files are NOT accessible by others.
This private key will be ignored.
Load key "vscode_rsa": bad permissions

根本原因是私鑰的權限問題。這要是在Linux里,直接使用chmod,就可以修改,修改為644即可,但是windows,就稍微麻煩點。

在私鑰上右擊選擇屬性,然后選擇【安全】選項卡,然后點擊下面的【高級】按鈕,然后在新彈出的窗口下方點擊【禁用繼承】,然后點擊繼承那個按鈕上面的【添加】按鈕重新將當前window登錄用戶設置為私鑰的所有者,并勾選所有權限。最后跟下面一樣即可:

這時再次打開VScode遠程連接,就沒有問題了。

C/C++

安裝C/C++插件

 

依次點擊【運行】->【打開配置】,將以下配置復制到launch.json中。

{
    "version": "0.2.0",
    "configurations": [
        {
            "name": "kernel-debug",
            "type": "cppdbg",
            "request": "launch",
            "miDebuggerServerAddress": "127.0.0.1:1234",
            "program": "${workspaceFolder}/vmlinux",
            "args": [],
            "stopAtEntry": false,
            "cwd": "${workspaceFolder}",
            "environment": [],
            "externalConsole": false,
            "logging": {
                "engineLogging": false
            },
            "MIMode": "gdb",
        }
    ]
}

然后在main函數中,打上兩個斷點,在服務器上開啟QEMU,F5即可開啟調試。

在vscode中調試內核,和正常的在windows調試代碼是一樣的,側邊欄可以看到變量,監(jiān)視變量,調用堆棧等,非常方便。

大功告成,以后就可以在可視化界面調試內核了!

 

圖書推薦 

圖書簡介

嵌入式實時操作系統是嵌入式人工智能物聯網終端的重要工具和運行載體。本書以國產RT-Thread實時操作系統為背景,闡述實時操作系統的線程、調度、延時函數、事件、消息隊列、信號量、互斥量等基本知識要素,并給出實時操作系統下的程序設計方法。全書分為基礎應用(第1~7章)、原理剖析(第8~12章)及綜合實踐(第13~14章)三篇,如果讀者只從事實時操作系統下的應用開發(fā),可只閱讀基礎應用篇與綜合實踐篇;如果希望理解實時操作系統原理,則建議通讀全書。

本書是RT-Thread官方推薦圖書,面向嵌入式人工智能與物聯網領域,將應用與原理分開闡述,分基礎應用、原理剖析、綜合實踐三篇,循序漸進,更利于讀者學習和應用RTOS。

本文參考

https://www.it610.com/article/1295167638502187008.htm

https://blog.csdn.net/weixin_39529413/article/details/108775129

https://learnku.com/articles/57161

https://blog.csdn.net/AhznuIOT/article/details/117459364

https://blog.csdn.net/Taylor_0522/article/details/118733368

https://blog.csdn.net/code_peak/article/details/118769074

https://www.bilibili.com/read/cv15173707/

https://zhuanlan.zhihu.com/p/445453676

https://wenfh2020.com/2021/12/03/ubuntu-qemu-linux/

相關推薦

電子產業(yè)圖譜

作者就職于某500強公司,擔任BSP工程師。具有豐富的嵌入式開發(fā)經驗。專欄主要分享計算機基礎,操作系統,Linux驅動開發(fā),Arm體系與架構,C/C++,數據結構與算法等相關文章。歡迎關注我的公眾號【嵌入式與Linux那些事】,一起學習交流。