idkqh7の研究日誌

基本は翻訳。{セキュリティ|プログラミング|バイオインフォマティクス|数学}について。

Jetson TK1のセットアップ&Ubuntu 14.04 (zsh) でのクロスコンパイル環境を整える

Jetson TK1側での設定

とりあえずX Windowを起動できるように。

giste7584b84952ec3ad8102

CUDAの開発環境を整える。

gistf85713ac8d06dd1c3b5f (この手順をとばすと、/usr/lib/arm-linux-gnueabihf/tegraのフォルダが配置されない)

ホストPCの設定

基本的にはNVIDIA Nsight Eclipse Edition for Jetson TK1 | Parallel Forallを参考に。 zshでない人は、各自のターミナル環境に合わせて臨機応変にお願いします。

※かなりバッドノウハウ感があるので、dpkg --add-architecture armhfしたあとにapt-get updateしても404 Not Foundを出さない方法を募集!

gist48366550721a45593810

boxfilterを動作させてみる

プロジェクト作成
  1. Nsight起動
  2. File->New->CUDA C/C++ Projectを押す
    • Project Name は「boxfilter-arm」
    • Import CUDA Sample を選択
    • Toolchainsが“CUDA Toolkit 6.0”になっていることを確認
  3. Select the CUDA sample で「boxfilter」を選択
  4. そのままNext
  5. CPU architecture を「ARM」に変更
  6. Finishを押す

※Toolchainsが“CUDA Toolkit 6.0”になっていない人は、ls -la /usr/local/などで cuda -> cuda-6.0というシンボリックリンクになっているか確認。cuda-6.5になってる人は削除orリネームして

sudo ln -s /usr/local/cuda-6.0 /usr/local/cuda

シンボリックリンクを貼り直す。

プロジェクト設定
  1. (boxfilter-armのプロパティから)Properties->Build->Settings->Tool Settings->NVCC Linker->Librariesを選択
    • Library Search Pathを 「linux/x86_64」から「linux/armv7l」へ変更
    • GLUを削除(使わないので)
  2. NVCC Linker->Miscellaneous を選択
    • Other roption(-Xlinker[option])に「--unresolved-symbols=ignore-in-shared-libs」を追加(※参考元では−−の2本棒がつながっていたのでコピペに注意)
  3. Applyを押してOKで完了
ソースコード修正

boxFilter.cppにsetenv ("DISPLAY", ":0", 0);を追加。

int
main(int argc, char **argv)
{

    int devID = 0;
    char *ref_file = NULL;

#if defined(__linux__)
    setenv ("DISPLAY", ":0", 0);
#endif

    pArgc = &argc;
    pArgv = argv;

時間経過で終了するように変更。

void display()
{
    static int icnt = 120;
    while(!icnt--)
    {
        cudaDeviceReset();
        _exit(EXIT_SUCCESS);
    }
    sdkStartTimer(&timer);
  1. Build Projectでエラーが出てないことを確認
  2. Run As->Remote C/C++ Application
  3. Jetson TK1へのssh接続と同じ要領で、Remote Connectionにターゲットを指定
  4. Toolkit pathをDetectで自動指定(通常は/usr/local/cuda-6.0/binになる)
  5. Finishで実行

デバッグもこんな感じで頑張る。

参考文献