[[labs.beatcraft.com]] ~

#contents


* CUDA6/Jetson TK1 (Tegra K1 SOC) [#e67e67cf]
Kelper Core GPU を搭載した Tegra K1 SOC ボード ~
Jetson TK1 (以降 Jetson と記載)に Linux for Tegra と ~
CUDA 6.0 Toolkit を再インストールする手順について記載します。 ~
~
#ref(jetson01.jpg,,40%); ~
~

* Jetson の主なハードウェア仕様 [#l9746da4]
Jetson の主なハードウェア仕様は以下のとおりです。 ~

- Kepler GPU with 192 CUDA cores
- 4-Plus-1 quad-core ARM Cortex A15 CPU
- 2 GB DDR3L
- 16 GB 4.51 eMMC memory
~

* 再インストール手順 について [#i1231dd8]
Jetson には L4T(Linux for Tegra) がプリインストールされていますが、 ~
Jetson に その L4T と CUDA 6.0 Toolkit を再インストールする手順について記載します。 ~
~
手順については以下の URL を参考にしています。~
~
https://developer.nvidia.com/sites/default/files/akamai/mobile/files/L4T/l4t_quick_start_guide.txt ~
~
注:以下の手順ではプリインストール時に /home/ubuntu/ にある ~
NVIDIA-INSTLLER/ ディレクトリ以下はリカバリされません。~
~
ホスト OS は Ubuntu 12.04 LTS (64bit版)で作業を行います ~
(OSはインストールされているものとして記載しています)。~
~

** CUDA 6.0 Toolkit for L4T Rel -19.2 について [#ke2cb71d]
CUDA 6.0 Toolkit for L4T Rel -19.2 を入手するため ~
CUDA Registered Developer Program へ登録が必要です。 ~
また登録後ダウンロード可能になるまで数時間かかります。~
~
詳細は下記 URL を参照してください。 ~
~
https://developer.nvidia.com/user ~
~

** L4T の再インストール [#n8a9f9a2]
Jetson から AC アダプタをはずし、ホスト PC と ~
Jetson に microUSBケーブルを接続します。 ~
~
ホストマシン(Ubuntu 12.04)上に作業用ディレクトリを作成し、以下の URL から ~
Tegra_Linux_Sample-Root-Filesystem_R19.2.0_armhf.tbz2 ~
Tegra124_Linux_R19.2.0_armhf.tbz2 をダウンロードします。 ~
~
https://developer.nvidia.com/linux-tegra-rel-19 ~
~

 $ mkdir ~/Jetson
 $ cd Jetson/
 $ wget https://developer.nvidia.com/sites/default/files/akamai/mobile/files/L4T/Tegra_Linux_Sample-Root-Filesystem_R19.2.0_armhf.tbz2
 $ wget https://developer.nvidia.com/sites/default/files/akamai/mobile/files/L4T/Tegra124_Linux_R19.2.0_armhf.tbz2

Tegra124_Linux_R19.2.0_armhf.tbz2をroot権限で展開します。 ~
Linux_for_Tegra というディレクトリが作成されていますので、 ~
その中の rootfs というディレクトリへ移動します。 ~
~

 $ sudo tar xpf Tegra124_Linux_R19.2.0_armhf.tbz2
 $ cd Linux_for_Tegra/rootfs/

移動先ディレクトリ内でもうひとつのダウンロードファイル ~
Tegra_Linux_Sample-Root-Filesystem_R19.2.0_armhf.tbz2 を展開します。 ~
~

 $ sudo tar xpf ../../Tegra_Linux_Sample-Root-Filesystem_R19.2.0_armhf.tbz2


*** USB 3.0 ポートの設定 [#p08dfffe]
下記URL(PDF)のように Jetson の USB 3.0 ポートは再インストール時、 ~
デフォルト設定ではUSB 2.0 デバイスとして認識されます。 ~
~
https://developer.nvidia.com/sites/default/files/akamai/mobile/files/L4T/Tegra_Linux_Driver_Package_Release_Notes_R19.2.pdf ~
~
Linux_for_Tegra/jetson-tk1.conf を以下のように変更し ~
USB 3.0 として認識するようします。 ~
~

 $ vi jetson-tk1.conf
 
 # USB 2.0 operation on USB2 port(J1C2 connector)/for use as root device use ODMDATA=0x6009C000;
 # USB 3.0 operation on USB2 port(J1C2 connector) use ODMDATA=0x6209C000, requires firmware load from userspace or initial ramdisk
 ODMDATA=0x6209C000;     <- コメントイン
 #ODMDATA=0x6009C000;    <- コメントアウト

jetson.conf 変更完了後、apply_binaries.sh を実行します。 ~
apply_binaries.sh は各バイナリを rootfs に配置などを行うスクリプトです。 ~
~

 $ cd ..
 $ sudo ./apply_binaries.sh 
 Using rootfs directory of: /home/beat/Jetson/Linux_for_Tegra/rootfs
 
 ... <snip>...
 
 Extracting the firmwares and kernel modules to /home/beat/Jetson/Linux_for_Tegra/rootfs
 Installing the board *.dtb files into /home/beat/Jetson/Linux_for_Tegra/rootfs/boot
 Success!

Jetson 本体の FORCE RECOVERY ボタンを押下しながら電源を入れ ~
RESET ボタンを押下するとホスト OS 上に Jetson が認識されますので ~
lsusb で確認します。 ~
もし確認できない場合は再度 RESET ボタンを押下してください。~
~

 $ lsusb | grep -i nvidia
 Bus 001 Device 002: ID 0955:7140 NVidia Corp.

root 権限で以下のコマンドを実行し、 Kernel と rootfs を転送します。 ~
NFS マウントと tft での転送のため転送完了まで約30分以上かかります。 ~
#手元の環境では1時間強かかりました。 ~
~
また完了後 reset が実行されない場合 Jetson 本体の RESET ボタンを押下して ~
resetを実行してください。 ~
~
reset が完了すれば L4T のリカバリは完了です。~
~

 $ sudo ./flash.sh -S 8GiB jetson-tk1 mmcblk0p1
  
 copying dtbfile(/home/beat/Jetson/Linux_for_Tegra/kernel/dtb/tegra124-pm375.dtb) to tegra124-pm375.dtb... done.
 Making system.img...
          populating rootfs from /home/beat/Jetson/Linux_for_Tegra/rootfs... done.
          Sync'ing... done.
 System.img built successfully.
 copying bctfile(/home/beat/Jetson/Linux_for_Tegra/bootloader/ardbeg/BCT/PM375_Hynix_2GB_H5TC4G63AFR_RDA_924MHz.cfg) to bct.cfg... done.
 copying cfgfile(/home/beat/Jetson/Linux_for_Tegra/bootloader/ardbeg/cfg/gnu_linux_fastboot_emmc_full.cfg) to flash.cfg... done.
 creating gpt(ppt.img)...
 *** GPT Parameters ***
 device size -------------- 15766388736
 bootpart size ------------ 8388608
 userpart size ------------ 15758000128
 Erase Block Size --------- 2097152
 sector size -------------- 4096
 Partition Config file ---- flash.cfg
 Visible partition flag --- GP1
 Primary GPT output ------- PPT->ppt.img
 Secondary GPT output ----- GPT->gpt.img
 Target device name ------- none
 
 ...<snip>...
 
 Create, format and download  took 4315 Secs
 Time taken for flashing 4317 Secs
 *** The target ardbeg has been flashed successfully. ***
 Reset the board to boot from internal eMMC.


* Jetson 上での確認と設定 [#u9aabaa3]
L4T を再インストールした Jetson 上で下記の項目の確認と ~
設定を行います。 ~
~
ユーザ名とパスワードは ubuntu/ubuntu です。 ~
~

*** Jetson の Kernel バージョン [#lfd0b785]
Jetson の Kernel バージョンは以下のとおりです。 ~
~

 $ uname -a
 Linux tegra-ubuntu 3.10.24-g6a2d13a #1 SMP PREEMPT Fri Apr 18 15:56:45 PDT 2014 armv7l armv7l armv7l GNU/Linux


*** Jetson USB 3.0 ポートの確認 [#x8348495]
上記USB 3.0 ポートの設定が反映されていることを確認します。 ~
~

 $ lsusb
 Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
 Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

*** libglx.so のバックアップ [#n046b048]
下記URL(PDF)にあるように、libglx.so のバックアップを作成します。 ~
これは xserver のアップデート時に libxglx.so が上書きされても ~
元ファイルに戻せるようにするためです。 ~
~
https://developer.nvidia.com/sites/default/files/akamai/mobile/files/L4T/Tegra_Linux_Driver_Package_Release_Notes_R19.2.pdf ~
~

 $ cd /usr/lib/modules/extensions/
 $ sudo cp libglx.so __libglx.so_orig


*** リポジトリの追加 [#xcc17daa]
下記 URL にあるように開発用コードを取得しやすくするため、 ~
リポジトリを追加し更新を行います。 ~
~
http://elinux.org/JetsonTK1 ~
~

 $ sudo apt-add-repository universe
 $ sudo apt-get update
 $ sudo apt-get upgrade

注;sudo apt-get upgrade実行中に更新が停止してしまうことがあります。 ~
その際は reset し sudo dpkg --configure -aを実行してから ~
再度sudo apt-get update、sudo apt-get upgrade を実行してください。 ~

** CUDA 6.0 Toolkit の再インストール [#c98ae7a6]
注:cuda-repo-l4t-r19.2_6.0-42_armhf.deb をダウンロードしている前提で記載します。 ~
~
CUDA 6.0 Toolkit を再インストールする前に、ntpdate コマンドで時刻あわせを行います。 ~
これは cuda-repo-l4t-r19.2_6.0-42_armhf.deb を導入する際に時刻が合わないという ~
警告メッセージをなくすためです。 ~
~

 $ sudo ntpdate ntp.nict.jp
 $ date

cuda-repo-l4t-r19.2_6.0-42_armhf.deb を導入し、リポジトリの更新後 CUDA 6.0 Toolkitを ~
インストールします。 ~
~

 $ sudo dpkg -i cuda-repo-l4t-r19.2_6.0-42_armhf.deb
 $ sudo apt-get update
 $ sudo apt-get install cuda-toolkit-6-0

デフォルトユーザ: ubuntu を video グループにいれます。 ~
~

 $ sudo usermod -a -G video ubuntu

また .bashrc の末尾に以下の2行を追加し CUDA の環境変数を設定します。~
~

 export PATH=/usr/local/cuda-6.0/bin:$PATH
 export LD_LIBRARY_PATH=/usr/local/cuda-6.0/lib:$LD_LIBRARY_PATH


** CUDA Samples の導入と実行 [#q2c7f66a]
以下のコマンドを実行し CUDA Samples を導入します。 ~
また導入した CUDA Samples をビルドします。 ~
~
ビルド完了後  ~/NVIDIA_CUDA-6.0_Samples/bin/armv7l/linux/release/gnueabihf に ~
移動し、NVIDIA CUDA Getting Started Guide for Linux のページ内 Running the Binaries に ~
記載されている deviceQuery を実行します。 ~
~
http://docs.nvidia.com/cuda/cuda-getting-started-guide-for-linux/index.html#running-binaries ~
~

 $ cuda-install-samples-6.0.sh ~/
 $ cd NVIDIA_CUDA-6.0_Samples/
 $ make
 $ cd bin/armv7l/linux/release/gnueabihf/
 $ ./deviceQuery
 ./deviceQuery Starting...
 
 CUDA Device Query (Runtime API) version (CUDART static linking)
 
 Detected 1 CUDA Capable device(s)
 
 Device 0: "GK20A"
   CUDA Driver Version / Runtime Version          6.0 / 6.0
   CUDA Capability Major/Minor version number:    3.2
   Total amount of global memory:                 1746 MBytes (1831051264 bytes)
   ( 1) Multiprocessors, (192) CUDA Cores/MP:     192 CUDA Cores
   GPU Clock rate:                                852 MHz (0.85 GHz)
   Memory Clock rate:                             924 Mhz
    Memory Bus Width:                              64-bit
    L2 Cache Size:                                 131072 bytes
   M aximum Texture Dimension Size (x,y,z)         1D=(65536), 2D=(65536, 65536), 3D=(4096, 4096, 4096)
   Maximum Layered 1D Texture Size, (num) layers  1D=(16384), 2048 layers
   Maximum Layered 2D Texture Size, (num) layers  2D=(16384, 16384), 2048 layers
   Total amount of constant memory:               65536 bytes
   Total amount of shared memory per block:       49152 bytes
   Total number of registers available per block: 32768
   Warp size:                                     32
   Maximum number of threads per multiprocessor:  2048
   Maximum number of threads per block:           1024
   Max dimension size of a thread block (x,y,z): (1024, 1024, 64)
   Max dimension size of a grid size    (x,y,z): (2147483647, 65535, 65535)
   Maximum memory pitch:                          2147483647 bytes
   Texture alignment:                             512 bytes
   Concurrent copy and kernel execution:          Yes with 1 copy engine(s)
   Run time limit on kernels:                     No
   Integrated GPU sharing Host Memory:            Yes
   Support host page-locked memory mapping:       Yes
   Alignment requirement for Surfaces:            Yes
   Device has ECC support:                        Disabled
   Device supports Unified Addressing (UVA):      Yes
   Device PCI Bus ID / PCI location ID:           0 / 0
   Compute Mode:
       < Default (multiple host threads can use ::cudaSetDevice() with device simultaneously) >
 
 deviceQuery, CUDA Driver = CUDART, CUDA Driver Version = 6.0, CUDA Runtime Version = 6.0, NumDevs = 1, Device0 = GK20A
 Result = PASS


* 更新履歴 [#cdd26ab0]
2014/06/24 初稿公開 ~
~

RIGHT:syariten

BC::labsへの質問は、bc9-dev @ googlegroups.com までお願い致します。
トップ   新規 一覧 単語検索 最終更新   最終更新のRSS