[[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/]]¬e{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閲覧};が出来がよいと評判が高い¬e{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]]¬e{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]]¬e{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]]¬e{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のサイズを変更できるらしい¬e{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]]¬e{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/]]¬e{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]]¬e{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