VSCodeを使ってZYNQのLinuxで動くプログラムをビルドし、さらにデバッグまですることができたので、そのやり方を紹介します。
用意するもの
- Linuxが動くZYNQのボード (Cosmo-Z とか Zynqberry とか・・)
- VSCode と C/C++拡張
- LAN接続。sambaでファイル共有すると便利
- ZYNQ上で動作するgdbserver
- XILINX SDK (XSDK)
VSCodeのインストールとC/C++拡張
まずVSCodeをインストールし、C/C++拡張wインストールします。
特に説明は不要かと思います。
XILINX SDKのインストール
ZYNQで動くLinuxに入っているGLIBCのバージョンが2.19とかならXSDK2018.3以前を、2.27とかならXSDK2019.1以降を選びます。
ややこしいのですが、詳しくは 「XILINX SDKをアップデートしたらGLIBCのバージョン相違で動かない」 を参照してください。
熱心なXILINXユーザならいろんなバージョンのツールが入っているから大丈夫だと思います。
プロジェクトのフォルダを作ってVSCodeで開く
VSCodeで作業するためのフォルダを作り、VSCodeでOpen Folderで開きます。
ここでは D:\naitou\vstest
としておきます。
C/C++ファイルの設定をする
私自身がVSCodeを使い始めて間もないのでよくわかっていませんが、CTRL+SHIFT+Pでプルダウンが開いたら、C++と打って、C/C++: Edit Confiturations (UI)
を開きます。
C/C++拡張の設定が開くので、構成名のところにArmLinuxとか適当な名前を付けます。
コンパイラパスには、XSDKのarm-linux-gnueabihf-gcc.exeへのパスを指定します。
私の環境では D:\Xilinx\SDK\2018.3\gnu\aarch32\nt\gcc-arm-linux-gnueabi\bin\arm-linux-gnueabihf-gcc.exe
です。ターゲットのLinuxのGLIBCのバージョンに合わせてXSDKのバージョンを変えてください。
IntelliSenseモードをlinux-gcc-armにして、インクルードパスには、XSDKのディレクトリの中のincludeパスを指定しておきます。
D:/Xilinx/SDK/2018.3/gnu/aarch32/nt/gcc-arm-linux-gnueabi/arm-linux-gnueabihf/libc/usr/include/**
これで.vscodeフォルダの中にc_cpp_properties.json というファイルが作られているはずです。
{
"configurations": [
{
"name": "ArmLinux",
"includePath": [
"${workspaceFolder}/**",
"D:/Xilinx/SDK/2018.3/gnu/aarch32/nt/gcc-arm-linux-gnueabi/arm-linux-gnueabihf/libc/usr/include/**"
],
"defines": [
"_DEBUG",
"UNICODE",
"_UNICODE"
],
"windowsSdkVersion": "10.0.19041.0",
"compilerPath": "D:/Xilinx/SDK/2018.3/gnu/aarch32/nt/gcc-arm-linux-gnueabi/bin/arm-linux-gnueabihf-gcc.exe",
"cStandard": "c17",
"cppStandard": "c++17",
"intelliSenseMode": "linux-gcc-arm"
}
],
"version": 4
}
これはコード補完や、テキストエディタ上でのWarningを出すための設定なので、実際に使われるコンパイラとは違っていてもいいのだと思います。
タスクの設定
次に、VSCodeに戻ってCTRL+SHIFT+P
を押しbuild
と打ちます。候補が出てくるのでTasks:Configure Default Buld Task
を選びます。
この時点ではcl.exeを使うものが出てくるので、それを選びます。
そうしたら、tasks.jsonがcl.exeを使うように出来ているのでいったん全部消して、gccを使うように変更します。
{
// tasks.json 形式の詳細についての資料は、
// https://go.microsoft.com/fwlink/?LinkId=733558 をご覧ください
"version": "2.0.0",
"tasks": [
{
"type": "shell",
"label": "Build by ARM g++",
"command": "D:/Xilinx/SDK/2018.3/gnu/aarch32/nt/gcc-arm-linux-gnueabi/bin/arm-linux-gnueabihf-g++.exe",
"args": [
"-g",
"${file}",
"-o",
"${fileDirname}\\${fileBasenameNoExtension}.elf"
],
"options": {
"cwd": "D:/Xilinx/SDK/2018.3/gnu/aarch32/nt/gcc-arm-linux-gnueabi/bin"
},
"problemMatcher": [
"$gcc"
],
"group": {
"kind": "build",
"isDefault": true
}
}
]
}
commandのパスはXSDKをインストールしたフォルダに合わせてください。cwdは${workspaceFolder}でもいいかもしれません。
適当なプログラムを書く
ファイルを新規作成して、ビルドしましょう。
#include <stdio.h>
int main() {
printf("Hello World, Zynq!\n");
for(int i = 0 ; i < 100 ; i++)
{
printf("%d\n" , i);
}
return 0;
}
ビルド
VSCodeでCTRL+SHIFT+Bを押すとtasks.jsonに書かれたタスクのうち、
"group": {
"kind": "build",
"isDefault": true
}
が指定されたタスクが実行されます。今回は"Build by ARM g++"というタスクで、"command"で指定されたg++のプログラムが実行されます。VSCodeの下段にあるTerminalにビルド結果が表示されます。コンパイルエラーもここに表示されます。
実行
出来上がったプログラム、test.elf ををZYNQのLinuxに転送します。
SCPとか意識高いコマンドを使ってもいいですが、私はsambaで共有させておいてWindowsのExplorerでファイルコピーするのが好きです。もしくはZYNQ Linux上にsambaで共有するフォルダを作って、その上にVSCodeにプロジェクトフォルダを作ってもいいかもしれませんね。
そして、Linuxにログインしたら実行してみましょう!
まとめ
c_cpp_properties.json にはファイルの属性などが書かれる。
tasks.json にはビルドするためのコマンドの起動方法が書かれる。
感想
はじめてVSCodeでエディタ以上の使い方をしてみようと思ったのですが、無事に動いてよかったです。
これでもうXSDKやVitisのEclipse環境から抜けられるかも!?
↓↓↓↓↓↓↓↓ 続く
デバッグ編に続く
↑↑↑↑↑↑↑↑ 続く