Kelper Core GPU を搭載した Tegra K1 SOC ボード
Jetson TK1 (以降 Jetson と記載)に Linux for Tegra と
CUDA 6.0 Toolkit を再インストールする手順について記載します。
Jetson の主なハードウェア仕様は以下のとおりです。
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 を入手するため
CUDA Registered Developer Program へ登録が必要です。
また登録後ダウンロード可能になるまで数時間かかります。
詳細は下記 URL を参照してください。
https://developer.nvidia.com/user
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
下記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.
L4T を再インストールした Jetson 上で下記の項目の確認と
設定を行います。
ユーザ名とパスワードは ubuntu/ubuntu です。
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
上記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
下記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
下記 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-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 を導入します。
また導入した 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
2014/06/24 初稿公開