jetson nanoに、yoctoを導入するhow-toの記事がないので、書いてみました。
bitbakeするまで
sourceのダウンロード
- poky (https://git.yoctoproject.org/git/poky)
meta-tegra (https://github.com/madisongh/meta-tegra)- meta-tegra (https://github.com/OE4T/meta-tegra)
meta-linaro (https://git.linaro.org/openembedded/meta-linaro.git)- meta-arm (https://github.com/jonmason/meta-arm.git)
- meta-openembedded (https://git.openembedded.org/meta-openembedded)
この2つと、nvidia developperからbspをダウンロードします。
これがないと、bitbakeがエラーですすみません。
それぞれのフォルダにて、気になるバージョンに揃えること。たとえば、dunfellを利用するなら、dunfellに揃える。poky/meta-tegra/meta-armsそれぞれで実行。
$ git checkout -b dunfell origin/dunfell
TegraのBSPは、ここからダウンロード (R32.3.1) (ログインが必要かも)
https://developer.nvidia.com/l4t-3231-archive
もしくは、sdkmanagerを利用してダウンロード
環境設定
bblayer.conf
BBLAYERS ?= " \
/home/ubuntu/xxx/yocto/poky/meta \
/home/ubuntu/xxx/yocto/poky/meta-poky \
/home/ubuntu/xxx/yocto/poky/meta-yocto-bsp \
/home/ubuntu/xxx/yocto/poky/meta-arm/meta-arm-toolchain \
/home/ubuntu/xxx/yocto/poky/meta-tegra \
"
ここでは、poky指定のものに加えて、tegraとlinaroを追加しています。
linaroを追加したのは、ここの記事に基づいて、gcc7.xでビルドするためです。
https://github.com/madisongh/meta-tegra/wiki/Using-linaro-gcc7-for-CUDA-support
local.conf
最後に、以下を追記
MACHINE = "jetson-nano-devkit"
LICENSE_FLAGS_ACCEPTED = "commercial"
GCCVERSION = "7.%"
require contrib/conf/include/gcc-compat.conf
CUDA_VERSION = "10.0"
NVIDIA_DEVNET_MIRROR = "file:///home/ubuntu/xxx/nvidia/downloads"
CORE_IMAGE_EXTRA_INSTALL += " openssh "
PACKAGE_EXCLUDE += " packagegroup-core-ssh-dropbear " <-- core-image-satoにおいてdropbearとopensshとのconflictを回避するために必要
TEGRAFLASH_SDCARD_SIZE = "2G"
IMAGE_OVERHEAD_FACTOR = "1.0"
IMAGE_CLASSES += " image_types_tegra "
IMAGE_FSTYPES = "tegraflash"
NVIDIA_DEVNET_MIRRORに、sdkmanagerを利用して、nvidiaからダウンロードした一式(debだらけ)があるフォルダを指定します。うちの環境は、nvidia/downloadsに落としたので、そこを指定しました。
解説
TEGRAFLASH_SDCARD_SIZE: デフォルトは、16Gです。大きくしたければ大きな数字、小さくしたければ、小さい数字を入れます。サイズが大きくなると、dd時間がかかるなど、弊害が出ます
IMAGE_ROOTFS_SIZE: 教科書には、ファイルサイズを司ると書かれていますが、TEGRAFLASH_SDCARD_SIZEが優先される模様。したがって、指定せず。
IMAGE_OVERHEAD_FACTOR: 空きスペースの指定。
MACHINE: meta-tegra/conf/machine 配下にある(machine名).confのmachine名を設定する。ここにあるファイル名と異なるとsanity checkでエラーではじかれる。
bitbake.conf
fmacro-prefix-mapがあると、ビルドが通らないので、削除。
# GCC 7 doesn't support fmacro-prefix-map, results in "error: cannot compute suffix of object files: cannot compile"
# Change the value from bitbake.conf DEBUG_PREFIX_MAP to remove -fmacro-prefix-map
DEBUG_PREFIX_MAP = "-fdebug-prefix-map=${WORKDIR}=/usr/src/debug/${PN}/${EXTENDPE}${PV}-${PR} \
-fdebug-prefix-map=${STAGING_DIR_HOST}= \
-fdebug-prefix-map=${STAGING_DIR_NATIVE}= \
bitbake中
$ source poky/oe-init-build-env nano-build
$ bitbake core-image-minimal
教科書通り。sourceして、bitbakeです。
やり直しの手順
$ bitbake -c cleanall core-image-minimal
$ rm -Rf tmp/*
$ bitbake core-image-minimal
試してみよう!!
SD Cardへの展開
https://github.com/OE4T/meta-tegra/wiki/Flashing-the-Jetson-Dev-Kit
ここに本家のやり方がかかれています。そのままトレースします。
なお、tegraflash.tar.gzに一式詰め込まれているので、ビルドしたPCと書き込むPCは、別々でも大丈夫です。例えば、クラウドでビルドして、ローカルPCで焼く、ということが可能です。
必要ツールの展開
build dir -> tmp -> deploy -> images -> jetson-nano-devkit -> *-jetson-nano-devkit.tegraflash.tar.gz を解凍します。
$ mkdir ~/tegraflash
$ cd ~/tegraflash
$ tar -x -f $BUILDDIR/tmp/deploy/images/${MACHINE}/<image-type>-${MACHINE}.tegraflash.tar.gz
書き込みの実行
$ sudo ./dosdcard.sh /dev/<sdcard>
途中、以下のように聞かれるので、yes/noで答えましょう。
About to make an SDcard image on /dev/sdg. OK?
SD Cardへの展開 古い情報 (残しておきます)
いつものおまじないです。gzip形式が多い中、".sdcard"という拡張子のimageファイルです。細工せず、DDします。
$ sudo dd if=core-image-minimal-jetson-nano.sdcard of=/dev/sdx bs=4M conv=fsync status=progress
なお、デフォルトでは、17GBあるので、32Gのmicro SDカードが必要です。
上記の設定は、2Gにしたので、適当なサイズのSDカードでOKです。
起動
SD CardをJetson Nanoに装着し、起動。
ID: root, PW:なし
root@jetson-nano:~# cat /proc/version
Linux version 4.9.140-l4t-r32.2.1+g7467bde43b5d (oe-user@oe-host) (gcc version 7.2.1 20171011 (Linaro GCC 7.2-2017.11) ) #1 SMP PREEMPT xxx Oct xx xx:xx:xx UTC 2019
root@jetson-nano:~# df
Filesystem 1K-blocks Used Available Use% Mounted on
none 1782740 0 1782740 0% /dev
/dev/mmcblk0p1 1887056 166920 1601352 10% /
tmpfs 2025568 216 2025352 1% /run
tmpfs 2025568 156 2025412 1% /var/volatile
起動 part2
core-image-satoも作ったので、起動してみた。
なお、TEGRAFLASH_SDCARD_SIZE ?= "2G"では、起動せず。4Gにしても、92%の使用率でした。
おしまい