嵌入式Linux之vs code開發環境搭建


在之前我們介紹過嵌入式Linux之Eclipse開發環境搭建,我們介紹了如何使用eclipse進行代碼調試。這一節我們同樣的我們介紹一下vs code在嵌入式linux平台下的代碼調試。

我們首先回顧一下程序是如何被調試的?

如下圖所示,使用GDB調試目標系統需要滿足以下條件:

1.pc端得運行gdb程序

2. pc端還得運行GDB Server

  • GDB Server起到承上啟下的作用:

1)通過TCP/IP Port與gdb程序通信,GDB Server接受來自gdb的命令;
2)GDB Server 通過USB控制Debugger,讓Debugger執行gdb命令對應的動作;

3.連接Debugger

  • Debugger收到gdb的命令,通過JTAG去Access CPU的Debug uint;

4.CPU的Debug uint

  • CPU中的Debug uint實現各種Debug event, 例如Instruction Breakpiont, Data Breakpoint,單步執行等;

vs code下debug架構:

  • vs code 對應着 IDE;
  • gdb對應着 arm-linux-gdb;
  • GDB Server 對應着 JLinkGDBServer;
  • Debug Probe 對應着 JLink;
  • Microcontroller 對應着微控制器,比如S3C2440;

arm-linux-gdb、JLinkGDBServer安裝步驟參考嵌入式Linux開發環境搭建

一、安裝配置

以下步驟均是在ubuntu系統下操作。

1.1 下載

官網:https://code.visualstudio.com/,注意選擇自己發行版對應的包。注意選擇linux版本。

下載完后運行命令安裝即可:

sudo dpkg -i code_1.63.2-1639562499_amd64.deb

成功安裝后終端輸入如下命令可以查看到版本號:

code -v

在終端運行code即可打開vs code界面。

1.2 插件 C/C++安裝

1.3 插件C/C++ CLang command adaper安裝

1.4 插件C++ intellisense安裝

1.5 插件GBKtoUTF8安裝

1.6 插件include Autocomplete安裝

1.7 插件rainbow Brackets安裝

1.8 插件Chinese安裝

1.9 插件Arm Assembly安裝

 

二、新建項目

2.1 項目新建

新建工作目錄,將u-boot源碼拷貝進去。

啟動vs code,文件->打開文件夾:選擇新建的工作目錄。

 

2.2 配置頭文件

我們使用vs code,是希望能使用“代碼自動補全”這一功能。要想實現這一點,IDE自然要知道包含那些函數、變量聲明的頭文件所在的路徑。

vs code的每一個工程都需要我們自己設置頭文件的查找路徑,我們也可以保存一份配置文件,新建工程時把它復制過來再改改。

vs code配置頭文件查找路徑以及宏定義的文件叫做c_cpp_properties.json,打開它的方法如下,ctrl + shift +P 輸入:

C/C++:edit configurations(json)

選中之后回車,會打開c_cpp_propertoes.json文件。

我們需要在“includePath”中填寫需要包含的頭文件路徑,用於讓IDE知道如何補全代碼。紅色的是自己添加的,注意最后兩條是根據你的板子決定的,我使用的samsung的 SoC S3C2440。

{
    "configurations": [
        {
            "name": "Linux",
            "includePath": [
                "${workspaceFolder}/**",
                "${workspaceFolder}/include",
                "${workspaceFolder}/include/linux",
                "${workspaceFolder}/arch/arm/include"
            ],
            "defines": [],
            "compilerPath": "/usr/local/arm/4.3.2/bin/arm-linux-gcc",
            "cStandard": "gnu11",
            "cppStandard": "gnu++98",
            "intelliSenseMode": "linux-gcc-x64"
        }
    ],
    "version": 4
}

這里頭文件添加哪些,可以參考Mini440之uboot移植之源碼分析start.S(一),直接搜索include即可。

除此之外,我們還需要在 "compilerPath"中填寫我們使用的交叉編譯工具中的具體編譯器的路徑,如"compilerPath": "/usr/local/arm/4.3.2/bin/arm-linux-gcc"。

2.3 編譯

最后,我們點擊vs code下方的terminal或者菜單欄Terminal->New Terminal來使用內置的終端,在里面輸入:
make distclean
make smdk2440_config
make ARCH=arm CROSS_COMPILE=arm-linux- V=1

 2.4 調試環境配置

我們需要創建vs code的launch.json文件並進行一些修改:

選擇C++(GDB/LLDB):

修改文件為:

{
    // 使用 IntelliSense 了解相關屬性。 
    // 懸停以查看現有屬性的描述。
    // 欲了解更多信息,請訪問: https://go.microsoft.com/fwlink/?linkid=830387
    "version": "0.2.0",
    "configurations": [

        {
            "name": "(gdb) 啟動",
            "type": "cppdbg",
            "request": "launch",
            "program": "${workspaceRoot}/u-boot",
            "args": [],
            "stopAtEntry": false,
            "cwd": "${fileDirname}",
            "miDebuggerPath":"/usr/local/gdb/bin/arm-linux-gdb",  
            "targetArchitecture": "arm",
            "environment": [],
            "externalConsole": false,
            "MIMode": "gdb",    
            "setupCommands": [
                {
                    "text": "file ${workspaceRoot}/u-boot"
                },
                {                
                    "text": "source ${workspaceRoot}/u-boot.gdbinit", } ]
        }
    ]
}

配置如下:

  • "miDebuggerPath": 表示的是arm格式gdb的路徑,這里我設置為"/usr/local/gdb/bin/arm-linux-gdb;
  • "miDebuggerServerAddress":表示的是我們server端的地址,如:192.168.3.12為開發板的ip,9001為端口號,可自行設置,其范圍為:0~65536,0~1023 的端口一般由系統分配給特定的服務程序。這里我們不設置該參數。

  •  "program": 表示的是編譯生成的elf文件,這里我們設置為"${workspaceRoot}/u-boot";
  • "setupCommands":初始化執行的arm-linux-gdb命令,第一個元素設置為"text": "file ${workspaceRoot}/u-boot",第二個元素配置未gdb命令腳本,用來連接J-Link gdb server、初始化CPU、加載程序;

u-boot.gdbinit文件:

# connect to the J-Link gdb server
target remote localhost:2331
# Set JTAG speed to 30 kHz
monitor endian little
monitor speed 30
# Reset the target
monitor reset
monitor sleep 10
#
# CPU core initialization (to be done by user)
#
# Set the processor mode
monitor reg cpsr = 0xd3
#config MMU 配置MMU
#flush v3/v4 cache
monitor cp15 7, 7, 0, 0 = 0x0
#/* flush v4 TLB  協處理器*/
monitor cp15 8, 7, 0, 0 = 0x0
#disable MMU stuff and caches
monitor cp15 1, 0, 0, 0 =0x1002
#Peri port setup
monitor cp15 15, 2, 0, 4 = 0x70000013
#disable watchdog kangear 關閉看門狗
monitor MemU32 0x53000000  =  0x00000000
monitor sleep 10
#disable interrupt kangear 關閉中斷
monitor MemU32 0x4A000008  =  0xffffffff
monitor MemU32 0x4A00001C  =  0x7fff
 
#set clock 
 
#initialize system clocks --- locktime register
monitor MemU32 0x4C000000 = 0xFF000000
     
#initialize system clocks --- clock-divn register
monitor MemU32 0x4C000014 = 0x5            #CLKDVIN_400_148
     
#initialize system clocks --- mpll register
monitor MemU32 0x4C000004 = 0x7f021    #default clock
 
 
#config sdram
monitor MemU32 0x53000000 0x00000000  
monitor MemU32 0x4A000008 0xFFFFFFFF  
monitor MemU32 0x4A00001C 0x000007FF  
monitor MemU32 0x53000000 0x00000000  
monitor MemU32 0x56000050 0x000055AA  
monitor MemU32 0x4C000014 0x00000007  
monitor MemU32 0x4C000000 0x00FFFFFF  
monitor MemU32 0x4C000004 0x00061012  
monitor MemU32 0x4C000008 0x00040042  
monitor MemU32 0x48000000 0x22111120  
monitor MemU32 0x48000004 0x00002F50  
monitor MemU32 0x48000008 0x00000700  
monitor MemU32 0x4800000C 0x00000700  
monitor MemU32 0x48000010 0x00000700  
monitor MemU32 0x48000014 0x00000700  
monitor MemU32 0x48000018 0x0007FFFC  
monitor MemU32 0x4800001C 0x00018005  
monitor MemU32 0x48000020 0x00018005  
monitor MemU32 0x48000024 0x008E0459  
monitor MemU32 0x48000028 0x00000032  
monitor MemU32 0x4800002C 0x00000030  
monitor MemU32 0x48000030 0x00000030 
  
# Setup GDB for faster downloads
#set remote memory-write-packet-size 1024
monitor speed auto
#break _start
load

2.4 開始調試

在終端啟動JLinkGDBServer:

cd /usr/local# cd JLink_Linux_V434a/
./JLinkGDBServer:

vs code在arch/arm/lib/crt0.s開始設下斷點,並運行程序:

終端輸出gdb命令執行結果:

 

參考文章

[1]Linux下使用VSCode和CMake搭載C/C++開發環境

[2]使用IDE(vs code)進行嵌入式linux驅動開發

[3]原來gdb的底層調試原理這么簡單

[4]手把手教你使用VSCode + gdb + gdbserver調試ARM程序

[5]在ubuntu18.04版本安裝vscode 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM