[[FrontPage]]
|SoC|NVIDIA Tegra K1|
|CPU|Arm Cortex A15 Quad core 2.3GHz|
|GPU|CUDA capable 192 core|
|Memory|2GB|
|Storage|16GB eMMC|

#contents
[[Arm]]
*スペック [#x5bd7e55]

-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を入れる [#aa8b75d9]
-Jetson TK1のLinuxは結構ボロボロ
-USB 機器の認識や、画面が勝手にスリープに入ったりと、細かいところの出来が悪い
-nvidiaのフォーラムでも話題になっており、[[有志が作ったgrinch版>https://devtalk.nvidia.com/default/topic/906018/jetson-tk1/-customkernel-the-grinch-21-3-4-for-jetson-tk1-developed/]]&note{cutom-kernel-grinch-21-3-4:[[ [CustomKernel] The Grinch 21.3.4 for Jetson TK1 / developed - NVIDIA Developer Forums>https://devtalk.nvidia.com/default/topic/906018/jetson-tk1/-customkernel-the-grinch-21-3-4-for-jetson-tk1-developed/]], 2015-12-27投稿, 2016-02-24閲覧};が出来がよいと評判が高い&note{how-to-use-pci-express-wireless-on-jetson-tk1:[[Jetson TK1 で mini PCI-Express カードによる無線LAN 接続を行う方法 - Rabbit Note>http://rabbit-note.com/2014/08/16/jetson-tk1-use-intel-7260/]], 2014-08-16公開, 2016-02-24閲覧};
-というわけで、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までリリース>https://developer.nvidia.com/linux-tegra-r214]]されているが、残念ながら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 のサポートがある>https://developer.nvidia.com/cuda-toolkit-65]]が、
--CUDA 7.0 から[[なくなっており>https://developer.nvidia.com/cuda-toolkit-70]]、当然最新(2016-02-25現在)の CUDA 7.5 の Arm サポートもなし。
--さらにJetson X1にはL4T [[R23.1>https://developer.nvidia.com/embedded/linux-tegra]]が出ており、こちらではCUDA 7.0 がサポートされている。Jetson TK1もサポートしてよー
--http://elinux.org/Jetson/Installing_CUDA の手順を参考にインストール
--CUDAのリポジトリを追加[[ここ>https://developer.nvidia.com/linux-tegra-r213]]&note{where_to_download_cuda_6_5:[[Linux For Tegra R21.3 | NVIDIA Developer>https://developer.nvidia.com/linux-tegra-r213]], 2016-02-25閲覧};からダウンロード
--その後に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キーの入れ替え
--[[UbuntuTips/Desktop/HowToSetCapsLockAsCtrl - Ubuntu Japanese Wiki>https://wiki.ubuntulinux.jp/UbuntuTips/Desktop/HowToSetCapsLockAsCtrl]]&note{how-to-ctrl-caps:[[UbuntuTips/Desktop/HowToSetCapsLockAsCtrl - Ubuntu Japanese Wiki>https://wiki.ubuntulinux.jp/UbuntuTips/Desktop/HowToSetCapsLockAsCtrl]], 2014-08-09 15:39:24版, 2016-03-03閲覧};
--dconfコマンドで変換する

*Jetson TK1 spec [#o80127cd]
-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 [#b5bd528f]
-[[Jetson TK1 で OpenCV を使って顔認識 - Rabbit Note>http://rabbit-note.com/2014/08/21/jetson-tk1-opencv-face-detection/]]
-[[Jetson TK1 Development Pack>https://developer.nvidia.com/jetson-tk1-development-pack]]

*Jetson参考資料 [#gdc63cd8]
-[[Buy Jetson TK1 DevKit>https://developer.nvidia.com/jetson-tk1]]

*リカバリー [#c46356c4]
-以下の記述は 21.2 を焼き直した時の記述
-grinch版は21.3、まっさらの最新版は21.4 (2016-02-25現在)なので、新しい版を入れるときは読み替えが必要
-何か悪い子をしたのか、起動時にグラフィカルな画面がでずに真っ暗になってしまった
-なのでリカバリに挑戦
**全体 [#b186d11a]
-Tegra124 R21 での話
-ホストPCはUbuntu12.04(64bit)を使用
**必要なもの [#zb5e044a]
-まずは、
--Tegra124_Linux_R21.2.0_armhf.tbz2
--Tegra_Linux_Sample-Root-Filesystem_R21.2.0_armhf.tbz2
-の2つを[[公式サイト>https://developer.nvidia.com/linux-tegra-rel-21]]&note{tegra4linux-r21:[[Linux For Tegra R21.2>https://developer.nvidia.com/linux-tegra-rel-21]], 2015-01-14閲覧};からダウンロードする。
-ファイル名がすごい似ているので注意。
 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
**解凍とイメージ作成 [#n8bdbb88]
-解凍する。必ず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の接続 [#y457b14b]
-ここで、JetsonをリカバリーモードでPCに接続する
-JetsonとホストPCをUSBケーブルで接続する
-リカバリーボタンを長押しする
-リセットをかける
-リカバリーボタンを離す
-これでホストPCにデバイスとして認識される
-Virtual Machineを使ったので、必ずゲストPCに接続する(ホストPCのホストから切断する。ああ!ややこしい!)
**焼きこむ [#je5f9cc7]
-最後に、flash.shを使って焼きこむ
 sudo ./flash.sh jetson-tk1 mmcblk0p1
-このコマンドラインを変えることで、eMMCのサイズを変更できるらしい&note{If_you_need_more_disk_space_on_the_eMMC:[[Jetson TK1 - eLinux.org>http://elinux.org/Jetson_TK1#If_you_need_more_disk_space_on_the_eMMC]], 00:26, 8 January 2015‎版, 2015-01-14閲覧};
-焼きこみには1241秒かかった。
-quick start guide には less than 10minutes と書いてあったけれど、おそらく使ったホストPCがVirtual Machineだったから、であろう
**参考 [#r342ab06]
-http://developer.download.nvidia.com/mobile/tegra/l4t/r21.2.0/pm375_release_armhf/l4t_quick_start_guide.txt
-https://developer.nvidia.com/linux-tegra-rel-21
-[[tyokota's blog -various topics-: Jetson TK1がやってきた!〜購入・OSインストール編〜>http://tyokotabb.blogspot.jp/2014/06/jetson-tk1.html]]&note{jetson-tk1-tyokotabb:[[tyokota's blog -various topics-: Jetson TK1がやってきた!〜購入・OSインストール編〜>http://tyokotabb.blogspot.jp/2014/06/jetson-tk1.html]], 2014-06-04公開, 2015-01-14閲覧};
-[[Flashing the rootfs on a NVIDIA Jetson TK1 | Cyclic Redundancy>https://cyclicredundancy.wordpress.com/2014/05/10/flashing-the-rootfs-on-a-nvidia-jetson-tk1/]]&note{cyclic-redunduncy-flashing-rootfs-on-a-jetson-tk1:[[Flashing the rootfs on a NVIDIA Jetson TK1 | Cyclic Redundancy>https://cyclicredundancy.wordpress.com/2014/05/10/flashing-the-rootfs-on-a-nvidia-jetson-tk1/]], 2014-05-10公開 2015-01-14閲覧};

*nvcc の predefined macro を調べる [#k1a8f15e]
-Jetson TK1 のnvccをチェック

#geshi(c++,number=on){{
#ifdef __arm__
volatile unsigned int _ARM__ = 0;
#else
volatile unsigned int _NON_ARM__ = 0;
#endif

#ifdef __GNUC__
volatile unsigned int _GNUC__ = 0;
#else
volatile unsigned int _NON_GNUC__ = 0;
#endif

volatile unsigned int _GNUC_NUMBER_ = __GNUC__;
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コマンド>http://www.mersenneforum.org/showpost.php?s=b2fee8b7ae7c7b6c5a2c2c2884637cd7&p=356064&postcount=4]]&note{strings-nvcc:[[mersenneforum.org - View Single Post -  List of nvcc compiler macros?>http://www.mersenneforum.org/showpost.php?s=b2fee8b7ae7c7b6c5a2c2c2884637cd7&p=356064&postcount=4]], 2013-10-12投稿, 2016-09-20閲覧};を使えば、多少は調べられる。

 $ 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

トップ   編集 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS