Shield Android TVはJetson TX1の代わりに使える か?
NVIDIA Shield Android TV
● テレビに繋げてゲームをしたり4K動画を鑑賞できる ● Android TVが入ってる ● $199.99 ● 日本からAmazon.comで購入すると合計約3万円 ● 略してSATVNVIDIA Shield Android TV
● Tegra X1
– 256 core GPU
● 64bit ARM Cortex A57 CPU
● ストレージ 16GB
NVIDIA Shield Android TV
● MicroSD card slot ● USB 3.0
● Gigabit Ethernet ● HDMI 2.0
Shield Android TV, Jetson TK1,
NVIDIA Jetson TX1
● 組み込みビジュアルコンピューティング開発向け
ボード
● $599
● Tegra X1
● Linux For Tegra(L4T) ● 64-bit ARM® A57 CPU ● 4GB memory
● 16GB フラッシュストレージ
● 802.11ac Wi-Fi
NVIDIA Jetson TX1
● Full-SizeSD ● USB 3.0/2.0 ● HDMI ● Gigabit Ethernet ● SATA● GPIO, I2C, I2S, SPI
● PCI-E x4
● TTL UART
SATV 対 Jetson TX1
● GPUは同じ ● SATVのほうが安い ● インターフェースはJetson TX1のほうが多い ● SATVのOSはAndroid TV – プログラム開発はホストPCで– NVIDIA CodeWorks for Android
– CUDA, OpenGL, OpenCVなども使える ● Jetson TX1はLinux For Tegra
– 本体でプログラム開発できる – Linuxのほうが柔軟性が高い
Jetsonを小型PCとして使う
● 動画再生 ● プログラミング学習 ● ネット閲覧 ● サーバー Jetson TK1は性能の割に値段が安くて小型PCとしても使う人 がいる けどJetson TX1はちょっと高い SATVでLinuxが使えたらいいなと思う人は多いSATVにLinuxを入れられるか
● 海外フォーラムでSATVにインストールできるLinuxが公開される
– Ubuntu Utopic for nvidia shield tv
– Linuxは動くがGPUが使えない
● その後Jetson TX1公開
● その後SATVにJetson TX1向けL4Tをインストールする方法がみつかる
– Build kernel from source and boot to Ubuntu using L4T (Linux for Tegra) ro
otfs
– LinuxでGPUが使える!
● 公式サポート無し
● 保証を受けられなくなるかも ● 自己責任で
SATVにL4Tをインストールできた
● CUDAサンプルをビルドして動かすことができた – 一部ビルドに失敗するサンプルもあり ● 元々入っていたAndroid TVもブートできる ● Jetson TK1より速い ● Jetson TK1と同じUbuntuなので使用感も同じ現状の
Linuxインストールの問題点
● 公式にサポートされていない ● 起動時にLinuxのコンソールが表示されない ● シリアルコンソールがない – もし起動中に失敗しても原因がわからない ● 最悪壊れて直せなくなる – 海外フォーラムでそういう人がいるらしい – 自分は何回かboot.imgを書き換えたが大丈夫だった– Shield Android TV SW Version 1.3以前ならファイルを書き込まなくてもLinuxを起動させられるらしい – 次のアップデートでfastboot bootが使えるようになるらしい – https://forums.geforce.com/default/topic/893616/shield-android-tv/bootloader-issues/post/473785 4/#4737854 ● ディスプレイによっては何も表示されないこともあるらしい ● SDカードも物によっては動かないこともあるらしい – Jetson TK1もそんな感じだが ● 多くの人が開発に関われば安定するようになるかも
L4Tは32bit
● カーネルは64bitで動くが, プログラムは32bitで動く – これはSATVもJetson TX1も同じ ● 全プログラムを64bitにできるらしいが, ドライバは 32bitのみ対応 ● 将来的にはすべて64bit化されるかもSATVにL4Tを入れるのに必要な基礎知識 Boot loaderについて
Boot loaderについて
● JetsonはU-Boot ● SATVはfastboot – U-BootやGRUBのように直接本体でコンソールを動か せない – SATVとホストPCをUSBケーブルで繋ぐとホストPCから fastbootのコマンドを送れるfastboot
● bootパーティションかrecoveryパーティションからbootイメージを読み込ん でOSを起動 – デフォルトではbootパーティションから起動 – bootイメージはkernel, ramdisk, 起動設定ファイルをまとめたもの – abootimgというツールで作成 ● SATVをfastbootモードで起動するとホストPCからコマンドを送れる – ホストPCからコマンドを送るツールの名前もfastboot– Android SDKまたはNVIDIA CodeWorks for AndroidからホストPCに入れる fastbootとadbをインストールできる
– adbはSATVをfastbootモードで起動するときに使う
● recoveryパーティションからブートする場合もfastbootモードになる必要が る
SATVをfastbootモードで起動する
こんな画面になります
fastbootモードで起動するときは
SATVをfastbootモードで起動する
● SATVでAndroid TVが動いている場合
1.Android TVのホーム画面からSettings→Device→Aboutの画面に移動 2.Buildを選択してAボタンを8回ぐらい連続で押すとDeveloperモードになる
3.Settings->Preferences->Developer options->Debugging->USB debuggingをon にする
4.ホストPCから以下のコマンドを実行して, “List of devices attached”の下にシリアル ナンバーが表示されていれば, ホストPCとShield Android TVがUSBで通信できる 状態になっている
➢ $ adb devices
● このときにAndroidの画面にHost PCからデバッグを許可するか確認する画面が表示される
のでOKする
5.以下のコマンドでSATVが再起動してfastboot modeになる
SATVをfastbootモードで起動する
● SATVの電源ボタンを使う方法
– Shield Android TV SW Versionが2.1(2016/1/24時点で最新)の場合
– SW Versionによって電源ボタンを押すタイミングや時間が違う – 失敗するとそのまま起動する – Android TVが起動しない場合はこれしかない 1.一度電源を切る ● Android TV起動中はシャットダウンが開始するまで電源ボタンを押し続ける(約10秒) ● (途中で画面にコントローラが表示されても気にせず押し続ける) ● Linux起動中だと
● $ sudo shutdown -h now
2.電源ボタンを一度触って電源を入れる。(緑のLEDが光る) 3.約一秒待つ
fastbootモード
● ホストPCから以下のコマンドを実行してシリアルナ ンバーが表示されていれば, SATVがfastboot modeになっていてホストPCと通信できる ➢ $ fastboot devices ● 以後はホストPCからfastbootコマンドを実行できるSATVにL4Tを入れる方法
必要なもの
● ホストPC – Ubuntu 14.04か15 – カーネルビルド, fastboot操作, SD cardの書き込み ● ホストPC上で必要なソフト – fastboot(boot imageの書き込み等) – クロスコンパイラ(カーネルをビルドしない場合は不要) ● micro SD card 16GB以上(ここにL4Tを入れる)microSD cardにL4T書き込み
● Linuxの入ったホストPCから書き込む
1.Linux For Tegra Archiveから最新のJetson TX1用Linux for Tegraの”Driver Packages”と”Sample Root Filesystem”をダウンロードする
2.Driver Packageを解凍
➢ $ sudo tar xpf Tegra210_Linux_R23.1.1_armhf.tbz2 ● Linux_for_Tegraというディレクトリができる
3.microSDをext4にフォーマット
➢ $ sudo mkfs.ext4 /dev/<デバイスファイル>
4.microSDをLinux_for_Tegra/rootfsにマウント
➢ $ sudo mount /dev/<デバイスファイル> Linux_for_Tegra/rootfs
5.Sample Root Filesystemを書き込む
➢ $ cd Linux_for_Tegra/rootfs/
➢ $ sudo tar xpf ../../Tegra_Linux_Sample-Root-Filesystem_R23.1.1_armhf.tbz2
6.NVIDIAのドライバ等を書き込むスクリプトを実行
➢ $ cd ../
boot.imgを用意する
● 作成済みのものをホストPCへダウンロード ● tomohiroがビルドしたboot.img – 自分のSATVで動作確認済み ● またはboot.imgを作成 – UbuntuがインストールされたホストPC上で作業boot.imgに入れるkernelをビルド
1.SATV用kernelのソースコードをダウンロード 2.ソースコードを解凍 ➢ $ tar xzvf cm-12.1.tar.gz ➢ $ cd cm-12.1 ● 一応first.shの中身を確認する● “make O=$TEGRA_KERNEL_OUT zImage”の行の最後に-jN(NをCPUのコア数+1の数字に置
き換える)を付けるとビルドが速くなる 3.コンパイラのインストールとkernelコンパイルを開始する。 ➢ $ source first.sh ● コンパイラをインストールするときにインストールの確認メッセージが表示されるのでyを押してエン ターを押す。 ● -jNオプションを付けると約15分ぐらいかかる ● 問題が無ければ../cmOutDir1/arch/arm64/bootに”image”ファイル(kernel本体)が作 られる
boot.imgを作成
1.initrd.tar.gzをcm-12.1と同じディレクトリへダウンロード 2.解凍する ➢ $ cd .. ➢ $ tar xzvf initrd.tar.gz 3.abootimgをインストールする➢ $ sudo apt-get install abootimg
4.boot.imgを作成する
➢ $ cd initrd ➢ $ make ➢ $ cd ..
boot.imgの書き込み
1.fastbootモードでSATVを起動 2.Boot loaderをアンロックする。
➢ $ fastboot oem unlock
● このときにデバイス内のユーザデータが削除される。
● 詳しくは以下のテキストを参照
3.boot.imgを書き込む
● リカバリ領域にboot.imgを書き込む
➢ $ sudo fastboot flash recovery boot.img ● boot領域にboot.imgを書き込む
➢ $ sudo fastboot flash boot boot.img
● Host PCからboot.imgを読み込んで起動する ➢ $ sudo fastboot boot boot.img
● SATVには書き込みされない
L4Tを起動
● boot.imgを書き込んだ後は1回終了しないと起動に失敗
することが多い気がする・・・
● リカバリ領域に書き込んだ場合はfastboot menuを出し
て”Boot recovery kernel”を選ぶ
● L4Tが起動したら以下のコマンドを一回呼び出す
➢ $ sudo apt-mark hold xserver-xorg-core
● apt-get upgradeでNVIDIAのドライバが上書きされるのを防ぐ
● 以下のコマンドでNVIDIAのドライバが正常か確認できる
元に戻す方法
● NVIDIAから公開されているリカバリーOS imageを
以下からダウンロードしてSATVに書き込む
– https://developer.nvidia.com/gameworksdownload
#?search=SHIELD ANDROID TV Recovery&tx=$additi onal,shield