[[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]]

*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 サポートもなし。
--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
--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