MacでのJetsonTX2ホスト環境構築とJetPackの導入まで

Mac環境でJetsonTX2のホスト環境の構築、それとJetPackの導入までのメモです。


## 参考
以下の記事を参考にさせていただきました。
[MacBookProでJetson TX2のセットアップ](https://qiita.com/baba5246/items/916c292662c9af5b7e44)
[JetsonTX2初期セットアップ(Jetpack)からサンプルのコンパイルまでの手順](https://qiita.com/akrian/items/54c321bfa95d8eaef17d#3jetpack%E3%82%92host%E5%81%B4pcubuntu%E3%81%B8%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB)
[macOS_HighSierraにVirtualBox-5.2.2とUbuntu-16.04をインストールする方法](https://qiita.com/kouichiyoshihara/items/8e177a5b26a586c9d083)


## 環境

- iMac (Retina 4K, 21.5-inch, 2017, OSX High Sierra)
- VirtualBox（VirtualBox-5.2.16-123759-OSX）上に、Ubuntu16.04を構築（2.にて説明）


# 0. 事前準備

以下のNVIDIAのサイトからJetPackを入手しておいて下さい。
JetPack-L4T-3.3-linux-x64_b39.run　：　https://developer.nvidia.com/embedded/jetpack


# 1. Jetsonの起動と初期設定


## 1.1. 起動と初期設定

Jetsonに電源、ディスプレイ、キーボードを接続し、電源ボタン（一番右の「S4 POWERBTN」と書かれたボタン）を押下します。

ちなみに以下が４つのボタンの役割になります。

| S1 (RST) | S2 (VOL) | S3 (REC) | S4 (POWERBTN) |
|:--------:|:--------:|:--------:|:-------------:|
| リセット  | ボリューム | リカバリ  | 電源           |


起動するとコンソールが立ち上がるので、「nvidia」でログイン後、以下の操作を行います。
（2018.08.06時点　起動すると自動でログインされるみたいです。）

```shell
$ cd ~/NVIDIA-INSTALLER
$ sudo ./installer.sh
$ sudo reboot
```
reboot後にGUIが立ち上がるので、電源ボタンを押下後、シャットダウンを選択して電源OFFにします。


## 1.2. Jetsonをリカバリーモードで起動
以下の手順でJetsonをリカバリーモードで起動させます。
1. 電源ケーブルを抜き、MicroUSB-USBケーブルでMacとJetsonTX2を繫ぐ。
2. 電源ケーブルを挿し直し、電源ボタンを押す。
3. 電源ボタンを離したと同時にリカバリボタンを押しぱなしにする。
4. リセットボタンを２秒以上押下する。
5. リセットボタンを離し、リカバリボタンを離す。

ディスプレイに信号入力がなければ、リカバリモードでの起動が成功しているみたいです。



# 2. ホスト環境の構築

以下のファイルを用意しておきます。

- VirtualBox-5.2.16-123759-OSX.dmg ： https://www.virtualbox.org/wiki/Downloads
- ubuntu-ja-16.04-desktop-amd64.iso ： http://www.ubuntulinux.jp/News/ubuntu1604-ja-remix

## 2.1. VirtualBoxのインストール

以下の手順でVirtualBoxをインストールします。

1. VirtualBox-5.2.16-123759-OSX.dmgを実行し、VirtualBox.pkgのアイコンをダブルクリック。
2. 基本的に次へを選んでいけばOK。
3. 最後にセキュリティで弾かれるので、「セキュリティとプライバシー」でOracleの許可を選択。
4. 1.2.を再度実行。今度は問題なくインスールできるはず。


## 2.2. VirtualBoxの設定

以下の手順でVirtualBoxの設定を行います。

1. アプリケーションに「VirtualBox」が作成されているので実行する。
2. 「新規」のアイコンをクリック。
3. 「名前とオペレーティングシステム」で各項目を設定。

    | 名前 | タイプ | バージョン        |
    |:---:|:-----:|:----------------:|
    | 任意 | Linux | Ubuntu（64-bit） |

4. 「メモリーサイズ」でメモリ割り当てを1024MB以上にする。（1024MBあればとりあえず大丈夫みたいです）
5. 「ハードディスク」で、「仮想ハードディスクを作成する」を選択。
6. 「ハードディスクのファイルタイプ」で、「VDI(VirtualBox Disk Image)」を選択。
7. 「物理ハードディスクにあるストレージ」で、「固定サイズ」を選択。（ハードディスクに空きがあれば「可変サイズでも良いみたいです」）
8. 「ファイルの場所とサイズ」で、32GB以上で設定。（32GBくらいあれば大丈夫みたいです）「作成」をクリック。
9. 数分後、設定が完了する。


## 2.3. VirtualBox上にUbuntu環境を構築

以下の手順でVirtualBox上にUbuntu環境を構築していきます。

1. 「起動」のアイコンをクリック。
2. フォルダのアイコンをクリックして、事前にダウンロードしておいたUbuntuイメージ（ubuntu-ja-16.04-desktop-amd64.iso）を選択。
3. 「日本語」を選択し、「Ubuntuをインストール」を選択。
4. 「キーボードレイアウト」では、使用しているキーボードにあった設定を選択。
（Mac標準のキーボードなら「日本語-日本語(Macintosh)」で大丈夫）
5. デフォルトで「通常インストール」が選択されているので、そのまま「続ける」をクリック。
6. 「ディスクを削除してUbuntuをインストール」を選択。（ホスト側（Mac）には影響なし）
7. 「タイムゾーン」を設定。（特に問題なければデフォルトの「Tokyo」のままでOK）
8. ユーザーの設定を行うとインストール開始。
9. 数十分でインストール完了。再起動を求められるので再起動する。
10. 立ち上がったら完了。

## 2.4. Ubuntuの設定

このままだと動作がもっさりして、windowサイズに合わせた表示がされないので、以下の手順で設定を行なっていきます。

### Guest Additionsのインストール

1. まずはExtension Packを入手する。
Oracle_VM_VirtualBox_Extension_Pack-5.2.16.vbox-extpack ： https://www.virtualbox.org/wiki/Downloads

2. 「VirtualBox」→「環境設定」→「機能拡張」で、入手したExtension Packを選択。
3. 「Devices」→「Insert Guest Addition CD image…」を選択。
4. 「VBox_GAs_5.2.16」が現れるのでダブルクリック。
5. 管理者のパスワードを聞かれるので入力して「認証する」をクリック。
6. ターミナルを起動し、以下を実行で完了。

```shell
$ cd /media/[ユーザー名]/VBox_GAs_5.2.16
$ sudo sh VBoxLinuxAdditions.run
```

### 3Dアクセラレーションの有効化とビデオメモリの割り当て

1. VirtualBoxの、「設定」 →　「ディスプレイ」 で「ビデオメモリー」をMaxに、「3Dアクセラレーションを有効化」にチェックを入れる。
2. ついでに共有フォルダの設定もやっておく。「共有フォルダ」で、フォルダの追加のアイコンをクリック。
3. 任意のフォルダを選択し、「自動マウント」にチェックを入れ、「OK」をクリック。
（Ubuntu側に、「/media/sh_[作成したフォルダ名]」が作成されるはずです）
4. Ubuntuを立ち上げ、以下のコマンドを実行すれば完了。

```shell
$ sudo bash -c 'echo vboxvideo >> /etc/modules'
```

# 3. JetPackのインストール

## 3.1. USBポートの割り当て

「設定」 →　「ポート」 → 「USB」で、追加のアイコンをクリックし、「NVIDIA　Corp.APX」を選択して追加する。
※USB3.0で設定しないとJetsonTX2への書き込みが失敗します。
https://devtalk.nvidia.com/default/topic/1002827/jetson-tx2/problem-flashing-tx-2/3

## 3.2. ホスト側へのJetPackのインストール

1. まずはJetsonインストーラを実行する。

    ```shell
    $ chmod u+x JetPack-L4T-3.0-linux-x64.run
    $ ./JetPack-L4T-3.0-linux-x64.run
    ```

2. 「JetPack 3.3 installer」で、「Next」をクリック。
3. 「Installation Configure」で、「Next」をクリック。
4. 「Select Development Environment」で、「Jetson TX2」を選択し、「Next」をクリック。
5. 「Jetson Components Manager」で、「Next」をクリック。
6. 「Terms and Confidentions」で、「Accept ALL」にチェックを入れ、「Next」をクリック。
7. インストールには数十分かかります。インストールが終わると、「Completed」と表示されるので「Next」をクリック。
8. 「Network Layout - Jetson TX2」で、「Next」をクリック。
9. 「Network Inteface Selection」で、「Next」をクリック。
10. 「Post Installation Jetson TX2」で、「Next」をクリック。
 （うまくいかない場合は、JetsonTX2をリカバリモードで再度立ち上げる）

11. 以下が表示され、JetsonTX2が自動で通常起動されればOK。（IPアドレスを控えておく）

    ```
    Finished Flashing OS.
    Determing the IP address of Target ...
    ```


## 3.3. JetsonTX2側へのJetPackのインストール

1. ホスト側でJetPack-L4T-3.0-linux-x64.runを実行。
2. 基本的に「Next」を押していけば良いが、「Component Manager」では以下の設定変更を行う。

　「Flash OS Image to Target」のActionを、　「install」　→ 「no action」に変更。
3. 「Device Information - Jetson TX2/TX2i」で、JetsonのIPアドレス、アカウント名、パスワードを入力し、「Next」をクリック。
4. 「Post Installation Jetson TX2/TX2i」で、「Next」をクリック。
5. 「Installation Complete」が表示されれば完了。


# 4. サンプルの実行
Jetsonで以下の操作を行い、煙のシミュレーションが表示されればOKです。

```shell
$ cd ~/NVIDIA_CUDA-9.0_Samples/bin/aarch64/linux/release
$ ./smokeParticles
```