7
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

ZYNQのLinuxアプリをVSCodeでビルドする方法

Last updated at Posted at 2021-04-29

VSCodeを使ってZYNQのLinuxで動くプログラムをビルドし、さらにデバッグまですることができたので、そのやり方を紹介します。

image.png

用意するもの

  • Linuxが動くZYNQのボード (Cosmo-Z とか Zynqberry とか・・)
  • VSCode と C/C++拡張
  • LAN接続。sambaでファイル共有すると便利
  • ZYNQ上で動作するgdbserver
  • XILINX SDK (XSDK)

VSCodeのインストールとC/C++拡張

まずVSCodeをインストールし、C/C++拡張wインストールします。
image.png
特に説明は不要かと思います。

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)を開きます。

image.png

C/C++拡張の設定が開くので、構成名のところにArmLinuxとか適当な名前を付けます。

image.png

コンパイラパスには、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パスを指定しておきます。

image.png

D:/Xilinx/SDK/2018.3/gnu/aarch32/nt/gcc-arm-linux-gnueabi/arm-linux-gnueabihf/libc/usr/include/**

これで.vscodeフォルダの中にc_cpp_properties.json というファイルが作られているはずです。

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を選びます。
image.png

この時点ではcl.exeを使うものが出てくるので、それを選びます。

image.png
そうしたら、tasks.jsonがcl.exeを使うように出来ているのでいったん全部消して、gccを使うように変更します。

tasks.json
{
    // 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}でもいいかもしれません。

適当なプログラムを書く

ファイルを新規作成して、ビルドしましょう。

test.cpp
#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にビルド結果が表示されます。コンパイルエラーもここに表示されます。
image.png

実行

出来上がったプログラム、test.elf ををZYNQのLinuxに転送します。
image.png

SCPとか意識高いコマンドを使ってもいいですが、私はsambaで共有させておいてWindowsのExplorerでファイルコピーするのが好きです。もしくはZYNQ Linux上にsambaで共有するフォルダを作って、その上にVSCodeにプロジェクトフォルダを作ってもいいかもしれませんね。

そして、Linuxにログインしたら実行してみましょう!

image.png

まとめ

c_cpp_properties.json にはファイルの属性などが書かれる。
tasks.json にはビルドするためのコマンドの起動方法が書かれる。

感想

はじめてVSCodeでエディタ以上の使い方をしてみようと思ったのですが、無事に動いてよかったです。
これでもうXSDKやVitisのEclipse環境から抜けられるかも!?

↓↓↓↓↓↓↓↓ 続く
デバッグ編に続く
↑↑↑↑↑↑↑↑ 続く

7
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?