Kinaconの技術ブログ

Ubuntuはじめました。

Jetson nanoでusb boot & swapfile

Jetson nanoを入手してやっとセットアップしました。

2019.08.02 JETPackを更新したので、記事も編集しました。

インストールしたJatPack

L4T 32.2 (JetPack 4.2.1)


microSDにOS書き込み

以下のサイトを参考にしました。

developer.nvidia.com

Ubuntuで作成したがEtcherでは
うまくいかなかったのでコマンドラインから作成した。

# SDカードのデバイス名の確認
dmesg | tail | awk '$3 == "sd" {print}'

# 以下のように61.9GBのSDカードを発見 デバイス名はsdc
#[ 4568.474656] sd 6:0:0:0: [sdc] 120946688 512-byte logical blocks: (61.9 GB/57.7 GiB)

# ダウンロードしたOSイメージ(zip)データをSDカードに書き込む
unzip -p ~/Downloads/jetson-nano-sd-r32.2-2019-07-16.zip | sudo dd of=/dev/sdc bs=1M status=progress


HDMIやマウスやキーボードをちゃんと接続して起動しないと
あとから接続しても認識しなかったのでちゃんと接続してから起動しよう。


USB(SSD)ドライブからブートする

以下のサイトを参考にしました。

www.jetsonhacks.com


git clone https://github.com/JetsonHacksNano/rootOnUSB
cd rootOnUSB/
./buildKernel.sh

# ! EXT4にフォーマットしたSSDを接続する

# mount pointを作成
sudo mkdir /mnt/ssd

# デバイス名を確認
lsblk

#sda            8:0    0    59G  0 disk
#└─sda1         8:1    0    59G  0 part

# マウントする
sudo mount -t ext4 -o defaults /dev/sda1 /mnt/ssd

# ラベル名をつける
sudo e2label /dev/sda1 NanoSSD64GB

# ラベル名を確認
sudo e2label /dev/sda1

./copyRootToUSB.sh  -v NanoSSD64GB

# ルートドライブを設定
cd /boot/extlinux/
sudo cp extlinux.conf extlinux.conf.orig
sudo gedit extlinux.conf

# 編集前
## LABEL primary
##       MENU LABEL primary kernel
##       LINUX /boot/Image
##       INITRD /boot/initrd
##       APPEND ${cbootargs} quiet

# 編集後
## LABEL primary
##       MENU LABEL primary kernel
##       LINUX /boot/Image
##       INITRD /boot/initrd
##       APPEND ${cbootargs} rootfstype=ext4 root=/dev/sda1 rw rootwait
##
## LABEL sdcard
##       MENU LABEL primary kernel
##       LINUX /boot/Image
##       INITRD /boot/initrd
##       APPEND ${cbootargs} rootfstype=ext4 root=/dev/mmcblk0p1 rw rootwait

# 再起動
sudo reboot

# ルートドライブを確認
df

## Filesystem     1K-blocks     Used          Available   Use% Mounted on
## /dev/sda1       60630892     16112052  41409260  29%   /
## none               1780892       0               1780892     0%    /dev
## tmpfs              2025464       4               2025460     1%    /dev/shm
## tmpfs              2025464       20120       2005344     1%    /run
## tmpfs              5120             4               5116           1%    /run/lock
## tmpfs              2025464       0               2025464     0%    /sys/fs/cgroup
## tmpfs              405092         12             405080       1%    /run/user/120
## tmpfs              405092         116           404976       1%    /run/user/1000
## /dev/mmcblk0p1 119808192 16101980  98690652  15% /media/kinacon/d0a54240-9799-4f63-a90b-1a3f5ca4eda8

途中でエラー発生

OS書き込み完了したもの(updateしていない状態)を使用しないと
./buildKernel.shで躓くっぽい。


解決方法

以下をインストールすることでうまく行きました。

sudo apt install bzip2=1.0.6-8.1 libbz2-1.0=1.0.6-8.1


スワップファイルでメモリ領域不足を解消

SDカードだとスワップファイルで何度も読み書きされると故障しやすい。
でも、SSDならその可能性はぐっと下がる(SSDのほうが耐久性が高い)
消耗品なので気にしないならSDカードでもOKかとおもいます。


以下のサイトを参考にした。

www.jetsonhacks.com


/varにswapfileを作成して、自動でマウントするようにした。

# swapfileを作成
sudo fallocate -l 6G /var/swapfile
sudo chmod 600 /var/swapfile

# swapfileをスワップに割り当てる
sudo mkswap /var/swapfile
sudo swapon /var/swapfile

# 起動時にマウントさせる
sudo gedit /etc/fstab

# 以下を記入
#
# /var/swapfile swap swap defaults 0 0
#

# 確認
free -m


Swapに6Gがある。

              total        used        free      shared  buff/cache   available
Mem:           3964         600        2168          27        1194        3163
Swap:          6143           0        6143

以上。