FrontPage

SoCNVIDIA Tegra K1
CPUArm Cortex A15 Quad core 2.3GHz
GPUCUDA capable 192 core
Memory2GB
Storage16GB eMMC

Arm

スペック

  • CPU:Cortex-A15
  • cpuinfo
    $ cat /proc/cpuinfo
    processor       : 0
    model name      : ARMv7 Processor rev 3 (v7l)
    Features        : swp half thumb fastmult vfp edsp neon vfpv3 tls vfpv4 idiva idivt
    CPU implementer : 0x41
    CPU architecture: 7
    CPU variant     : 0x3
    CPU part        : 0xc0f
    CPU revision    : 3
    
    processor       : 1
    model name      : ARMv7 Processor rev 3 (v7l)
    Features        : swp half thumb fastmult vfp edsp neon vfpv3 tls vfpv4 idiva idivt
    CPU implementer : 0x41
    CPU architecture: 7
    CPU variant     : 0x3
    CPU part        : 0xc0f
    CPU revision    : 3
    
    processor       : 2
    model name      : ARMv7 Processor rev 3 (v7l)
    Features        : swp half thumb fastmult vfp edsp neon vfpv3 tls vfpv4 idiva idivt
    CPU implementer : 0x41
    CPU architecture: 7
    CPU variant     : 0x3
    CPU part        : 0xc0f
    CPU revision    : 3
    
    processor       : 3
    model name      : ARMv7 Processor rev 3 (v7l)
    Features        : swp half thumb fastmult vfp edsp neon vfpv3 tls vfpv4 idiva idivt
    CPU implementer : 0x41
    CPU architecture: 7
    CPU variant     : 0x3
    CPU part        : 0xc0f
    CPU revision    : 3
    
    Hardware        : jetson-tk1
    Revision        : 0000
    Serial          : 0177000003450000
    Processor       : ARMv7 Processor rev 3 (v7l)
  • auxv
    0x00000010 0x000fb0d7
    0x00000006 0x00001000
    0x00000011 0x00000064
    0x00000003 0x00008034
    0x00000004 0x00000020
    0x00000005 0x00000009
    0x00000007 0xb6fa7000
    0x00000008 0x00000000
    0x00000009 0x00008d0d
    0x0000000b 0x000003e8
    0x0000000c 0x000003e8
    0x0000000d 0x000003e8
    0x0000000e 0x000003e8
    0x00000017 0x00000000
    0x00000019 0xbedbb7fe
    0x0000001f 0xbedbbfed
    0x0000000f 0xbedbb80e
    0x00000000 0x00000000
  • cpufreq
    $ sudo cat /sys/devices/system/cpu/cpu*/cpufreq/cpuinfo_cur_freq
    2320500
    2320500
    2320500
    2320500
  • OS
    $ lsb_release -a
    No LSB modules are available.
    Distributor ID: Ubuntu
    Description:    Ubuntu 14.04.5 LTS
    Release:        14.04
    Codename:       trusty
  • kernel
    $ uname -a
    Linux tegra-ubuntu 3.10.40-ged4f697 #1 SMP PREEMPT Mon Dec 1 14:34:46 PST 2014 armv7l armv7l armv7l GNU/Linux
  • gcc
    $ 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.
    

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: 2018-04-10 (火) 13:42:29 (163d)