Jetson TK1のセットアップ&Ubuntu 14.04 (zsh) でのクロスコンパイル環境を整える
Jetson TK1側での設定
とりあえずX Windowを起動できるように。
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を出さない方法を募集!
boxfilterを動作させてみる
プロジェクト作成
- Nsight起動
- File->New->CUDA C/C++ Projectを押す
- Project Name は「boxfilter-arm」
- Import CUDA Sample を選択
- Toolchainsが“CUDA Toolkit 6.0”になっていることを確認
- Select the CUDA sample で「boxfilter」を選択
- そのままNext
- CPU architecture を「ARM」に変更
- 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
でシンボリックリンクを貼り直す。
プロジェクト設定
- (boxfilter-armのプロパティから)Properties->Build->Settings->Tool Settings->NVCC Linker->Librariesを選択
- NVCC Linker->Miscellaneous を選択
- Other roption(-Xlinker[option])に「--unresolved-symbols=ignore-in-shared-libs」を追加(※参考元では−−の2本棒がつながっていたのでコピペに注意)
- 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);
- Build Projectでエラーが出てないことを確認
- Run As->Remote C/C++ Application
- Jetson TK1へのssh接続と同じ要領で、Remote Connectionにターゲットを指定
- Toolkit pathをDetectで自動指定(通常は/usr/local/cuda-6.0/binになる)
- Finishで実行
デバッグもこんな感じで頑張る。