FrontPage

Jetson の'grinch' L4T 21.3.4を入れる

  • Jetson TK1のLinuxは結構ボロボロ
  • USB 機器の認識や、画面が勝手にスリープに入ったりと、細かいところの出来が悪い
  • nvidiaのフォーラムでも話題になっており、有志が作ったgrinch版*1が出来がよいと評判が高い*2
  • というわけで、Jetsonの焼き直しから
  • 事前準備
    • Jetsonを焼きなおすので、Jetsonをつなげる別のLinuxマシンが必要
    • ダウンロードするイメージ、作業容量を合わせると、7GBぐらい容量が必要。残容量が少ないマシンの場合注意
    • また、外部ディスク(USBメモリなど)だとowner権限の書き換えで失敗するので、これまたやめたほうが無難。
  • イメージのダウンロード
    • まずはまっ更なL4Tをダウンロードする
      wget http://developer.download.nvidia.com/embedded/L4T/r21_Release_v3.0/Tegra124_Linux_R21.3.0_armhf.tbz2
      wget http://developer.download.nvidia.com/embedded/L4T/r21_Release_v3.0/Tegra_Linux_Sample-Root-Filesystem_R21.3.0_armhf.tbz2
  • イメージの展開
    • 展開した後、rootfsを展開するので、2回tarコマンドを叩く
      time tar -xvf Tegra124_Linux_R21.3.0_armhf.tbz2
      (中略)
      real    0m38.337s
      user    0m19.935s
      sys     0m1.170s
      cd Linux_for_Tegra/rootfs
      sudo tar xpf ../../Tegra_Linux_Sample-Root-Filesystem_R21.3.0_armhf.tbz2
      cd ..
      sudo ./apply_binaries.sh
  • Jetson TK1の接続
    • Jetson TK1 のmicroUSBを、ホストマシンのUSBポートに接続する
    • Jetson TK1 のリカバリーボタンを押しながら、リセットボタンを押す。これでリカバリーモードに入る
    • これでホストマシンに /dev/mmcblk0p1 として見える(はず)
    • VMWareでも焼き込める。名前を確認したら'NVidia APX'というデバイスが見える
  • Jetson TK1の焼きこみ
    • コマンドで焼きこむ
      sudo ./flash.sh jetson-tk1 mmcblk0p1
    • だいたい20分ぐらいかかった
  • Jetson 側で起動イメージの差し替え
    • ここからはJetson TK1にログインして作業する
    • ここまでは通常のLinuxの入れ替え作業と同じ。
    • ちなみに、初期状態では ユーザ名 ubuntu パスワード ubuntu が初期状態
    • Grinch Kernelをダウンロードする
      wget http://www.jarzebski.pl/files/jetsontk1/grinch-21.3.4/zImage
      wget http://www.jarzebski.pl/files/jetsontk1/grinch-21.3.4/jetson-tk1-grinch-21.3.4-modules.tar.bz2
      wget http://www.jarzebski.pl/files/jetsontk1/grinch-21.3.4/jetson-tk1-grinch-21.3.4-firmware.tar.bz2
    • ドライバ群を展開する
      sudo tar -C /lib/modules -vxjf jetson-tk1-grinch-21.3.4-modules.tar.bz2
      sudo tar -C /lib -vxjf jetson-tk1-grinch-21.3.4-firmware.tar.bz2
    • 起動イメージを差し替える
      sudo cp zImage /boot/zImage
    • これで再起動すれば、良い
    • これで入れ替えたところ、手持ちのUSB Wifi アダプタ(NEC の Aterm WL300NU-GS 802.11n 対応アダプタ)が認識された
    • あと、USBキーボードの接続が頻繁に切断されていたのが、全く起きなくなった。(普通に使えるようになった)
    • 2016年2月25日現在、Jetson TK1用のL4Tは21.4までリリースされているが、残念ながらgrinchは21.3までしか対応してない。
    • 21.4に無理やり入れたら動くかも知れないが、試してないのでわからない。
  • その他諸々初期設定
    • universe をrepositoryに入れて、もろもろアップデートする
      sudo apt-add-repository universe
      'universe' distribution component enabled for all sources.
      sudo apt-get update
      sudo apt-get upgrade
    • 何故かc++が無いので、g++をインストールする
      time sudo apt-get install  g++
    • それからCUDA 6.5のインストール
    • L4TにはCUDAがデフォルトで入ってると聞いていたが、何故か入ってないので、諦めて手動で入れる。
    • ちなみに調べてみると、
    • CUDA 6.5 までは ARM のサポートがあるが、
    • CUDA 7.0 からなくなっており、当然最新(2016-02-25現在)の CUDA 7.5 の ARM サポートもなし。
    • さらにJetson X1にはL4T R23.1が出ており、こちらではCUDA 7.0 がサポートされている。Jetson TK1もサポートしてよー
    • http://elinux.org/Jetson/Installing_CUDA の手順を参考にインストール
    • CUDAのリポジトリを追加ここ*3からダウンロード
    • その後にapt-getでインストール
      time wget http://developer.download.nvidia.com/embedded/L4T/r21_Release_v3.0/cuda-repo-l4t-r21.3-6-5-prod_6.5-42_armhf.deb
      (中略)
      real    1m36.382s
      user    0m0.625s
      sys     0m12.099s
      sudo dpkg -i cuda-repo-l4t-r21.3-6-5-prod_6.5-42_armhf.deb
      (中略)
      sudo apt-get update
      (中略)
      time sudo apt-get install cuda-toolkit-6-5
      (中略)
      real    1m50.897s
      user    0m52.091s
      sys     0m33.918s
    • これでCUDA6.5 とまでがインストールできた。
    • あとはGPUを使える様に、自身をvideoグループに追加しておく
      sudo usermod -a -G video $USER
    • あとはPATHを通しておく
      echo "export PATH=/usr/local/cuda/bin:$PATH" >> ~/.bashrc
      echo "export LD_LIBRARY_PATH=/usr/local/cuda/lib:$LD_LIBRARY_PATH" >> ~/.bashrc
      source ~/.bashrc
    • インストールが終われば、nvccのバージョンを確認できるはず
      nvcc -V
      nvcc: NVIDIA (R) Cuda compiler driver
      Copyright (c) 2005-2014 NVIDIA Corporation
      Built on Fri_Dec_12_11:12:07_CST_2014
      Cuda compilation tools, release 6.5, V6.5.35
  • gtk 2.0 をインストールする
    time sudo apt-get -y install libgtk2.0-dev
    
    real    1m19.477s
    user    0m10.490s
    sys     0m15.887s
  • Time zoneが日本になってないので、日本にする
    • GUIの時計のアイコンからTime & Date settings でタイムゾーンを変更する
  • ctrlキーとcapsキーの入れ替え

Jetson TK1 spec

  • Tegra K1 SOC
    • Kepler GPU with 192 CUDA cores
    • 4-Plus-1 quad-core ARM Cortex A15 CPU
  • 2 GB x16 memory with 64 bit width
  • 16 GB 4.51 eMMC memory
  • 1 Half mini-PCIE slot
  • 1 Full size SD/MMC connector
  • 1 Full-size HDMI port
  • 1 USB 2.0 port, micro AB
  • 1 USB 3.0 port, A
  • 1 RS232 serial port
  • 1 ALC5639 Realtek Audio codec with Mic in and Line out
  • 1 RTL8111GS Realtek GigE LAN
  • 1 SATA data port
  • SPI 4MByte boot flash

JetsonTK1でOpenCV

Jetson参考資料

リカバリー

  • 以下の記述は 21.2 を焼き直した時の記述
  • grinch版は21.3、まっさらの最新版は21.4 (2016-02-25現在)なので、新しい版を入れるときは読み替えが必要
  • 何か悪い子をしたのか、起動時にグラフィカルな画面がでずに真っ暗になってしまった
  • なのでリカバリに挑戦

全体

  • Tegra124 R21 での話
  • ホストPCはUbuntu12.04(64bit)を使用

必要なもの

  • まずは、
    • Tegra124_Linux_R21.2.0_armhf.tbz2
    • Tegra_Linux_Sample-Root-Filesystem_R21.2.0_armhf.tbz2
  • の2つを公式サイト*5からダウンロードする。
  • ファイル名がすごい似ているので注意。
    wget http://developer.download.nvidia.com/mobile/tegra/l4t/r21.2.0/pm375_release_armhf/Tegra124_Linux_R21.2.0_armhf.tbz2
    wget http://developer.download.nvidia.com/mobile/tegra/l4t/r21.2.0/pm375_release_armhf/Tegra_Linux_Sample-Root-Filesystem_R21.2.0_armhf.tbz2

解凍とイメージ作成

  • 解凍する。必ずsudoで行うこと
    sudo tar xpf Tegra124_Linux_R21.2.0_armhf.tbz2
    cd Linux_for_Tegra/rootfs/
    sudo tar xpf ../../Tegra_Linux_Sample-Root-Filesystem_R21.2.0_armhf.tbz2
    cd ../
    sudo ./apply_binaries.sh
  • これでイメージが作成される

Jetsonの接続

  • ここで、JetsonをリカバリーモードでPCに接続する
  • JetsonとホストPCをUSBケーブルで接続する
  • リカバリーボタンを長押しする
  • リセットをかける
  • リカバリーボタンを離す
  • これでホストPCにデバイスとして認識される
  • Virtual Machineを使ったので、必ずゲストPCに接続する(ホストPCのホストから切断する。ああ!ややこしい!)

焼きこむ

  • 最後に、flash.shを使って焼きこむ
    sudo ./flash.sh jetson-tk1 mmcblk0p1
  • このコマンドラインを変えることで、eMMCのサイズを変更できるらしい*6
  • 焼きこみには1241秒かかった。
  • quick start guide には less than 10minutes と書いてあったけれど、おそらく使ったホストPCがVirtual Machineだったから、であろう

参考

nvcc の predefined macro を調べる

  • Jetson TK1 のnvccをチェック
  1. #ifdef __arm__
  2. volatile unsigned int _ARM__ = 0;
  3. #else
  4. volatile unsigned int _NON_ARM__ = 0;
  5. #endif
  6.  
  7. #ifdef __GNUC__
  8. volatile unsigned int _GNUC__ = 0;
  9. #else
  10. volatile unsigned int _NON_GNUC__ = 0;
  11. #endif
  12.  
  13. volatile unsigned int _GNUC_NUMBER_ = __GNUC__;
  14. volatile unsigned int _GNUC_MINOR_NUMBER_ = __GNUC_MINOR__;
$ nvcc -E sample.cu | grep volatile | tail -4
volatile unsigned int _ARM__ = 0;
volatile unsigned int _GNUC__ = 0;
volatile unsigned int _GNUC_NUMBER_ = 4;
volatile unsigned int _GNUC_MINOR_NUMBER_ = 8;
$ nvcc --version
nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2014 NVIDIA Corporation
Built on Fri_Dec_12_11:12:07_CST_2014
Cuda compilation tools, release 6.5, V6.5.35
$ gcc --version
gcc (Ubuntu/Linaro 4.8.4-2ubuntu1~14.04.3) 4.8.4
Copyright (C) 2013 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
  • nvccのバックエンドでgccがcallされるっぽい。
  • そのために、nvccなのに__GNUC__ マクロが predefine されている。
  • gcc なら gcc -xc -dM -E /dev/null とかすればpredefineされたマクロが列挙されるが、
  • nvcc だと、そのオプションは存在しない。適当なファイルを nvcc -E でpreprocessする必要がある
  • その他のマクロをチェックするためには stringsコマンド*9を使えば、多少は調べられる。
$ strings /usr/local/cuda/bin/nvcc | grep [-]D
-DFATBINFILE="\"
-D__CUDA_FTZ
-D__CUDA_PREC_DIV
-D__CUDA_PREC_SQRT
-DLL
-DEBUG
-D__USE_FAST_MATH__
-D__CUDACC__ -D__NVCC__ -D__CUDACC_RDC__
-D__CUDACC__ -D__NVCC__
-D__NVCC__
-D__CUDANVVM__
-D__CUDABE__
-DREGISTERLINKBINARYFILE="\"
-D__CUDA_ARCH__=200
-D__CUDA_ARCH__=210
-D__CUDA_ARCH__=300
-D__CUDA_ARCH__=320
-D__CUDA_ARCH__=350
-D__CUDA_ARCH__=370
-D__CUDA_ARCH__=500
-D__CUDA_ARCH__=520
      -DCUDA_DOUBLE_MATH_FUNCTIONS
     -DCUDA_DOUBLE_MATH_FUNCTIONS
    -DCUDA_DOUBLE_MATH_FUNCTIONS
   -DCUDA_DOUBLE_MATH_FUNCTIONS

*1  [CustomKernel] The Grinch 21.3.4 for Jetson TK1 / developed - NVIDIA Developer Forums, 2015-12-27投稿, 2016-02-24閲覧
*2  Jetson TK1 で mini PCI-Express カードによる無線LAN 接続を行う方法 - Rabbit Note, 2014-08-16公開, 2016-02-24閲覧
*3  Linux For Tegra R21.3 | NVIDIA Developer, 2016-02-25閲覧
*4  UbuntuTips/Desktop/HowToSetCapsLockAsCtrl - Ubuntu Japanese Wiki, 2014-08-09 15:39:24版, 2016-03-03閲覧
*5  Linux For Tegra R21.2, 2015-01-14閲覧
*6  Jetson TK1 - eLinux.org, 00:26, 8 January 2015‎版, 2015-01-14閲覧
*7  tyokota's blog -various topics-: Jetson TK1がやってきた!〜購入・OSインストール編〜, 2014-06-04公開, 2015-01-14閲覧
*8  Flashing the rootfs on a NVIDIA Jetson TK1 | Cyclic Redundancy, 2014-05-10公開 2015-01-14閲覧
*9  mersenneforum.org - View Single Post - List of nvcc compiler macros?, 2013-10-12投稿, 2016-09-20閲覧

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2016-09-20 (火) 12:52:59 (187d)