Linux
Ubuntu
NVIDIA
JetsonTK1

Jetson TK1にUbuntu Core 16.04をインストール

More than 1 year has passed since last update.

モチベーション

Jetson TK1に用意されているLinux環境はUbuntu 14.04 LTSであり、あまりにも古すぎる。CUDAをはじめとするNVIDIA GPUのうまみを失ってでも16.04 LTSに変更し、Cortex A15クアッドのサーバー機として使えないか。

概要

Linux For TegraのrootfsディレクトリにUbuntu Core 16.04の内容を展開、SDカードブート形式で動作させた。不具合は検証中。

他のOSのインストール例

http://elinux.org/Jetson_TK1#Linux_distributions_running_on_Tegra
Jetson TK1に標準以外のOSをインストールする試みは何件か行われており、基本的には公式提供されているLinux For Tegraのrootfsディレクトリに別のディストリビューションのファイル群を展開するとうまくいくようだ。

Ubuntu Coreの利用

https://www.ubuntu.com/core
Ubuntu Coreのarmhf(hard-float)用イメージファイルを、ここでは単なる最小構成のUbuntuとして扱う。収録内容が厳選されすぎてsudoやviすら入っておらず、もちろんUbuntuなのでrootは無効化されているという初心者には困った仕様ではある。
また、正規の方法でインストールすると作業途中で初期アカウントの通知があるとのことだが、今回の方法ではその通知がなく実際にアカウントも作成されない。

作業内容

作業はParallels上のUbuntu 14.04で行った。

配布ファイルの展開

$ wget https://developer.nvidia.com/embedded/dlc/l4t-Jetson-TK1-Driver-Package-R21-5
$ sudo tar jxpf l4t-Jetson-TK1-Driver-Package-R21-5
$ cd Linux_for_Tegra/rootfs/
$ wget http://cdimage.ubuntu.com/ubuntu-base/releases/16.04/release/ubuntu-base-16.04-core-armhf.tar.gz
$ sudo tar xpf ubuntu-base-16.04-core-armhf.tar.gz
$ sudo mv ubuntu-base-16.04-core-armhf.tar.gz ../..
$ sudo rm README.txt
$ cd ..
$ sudo ./apply_binaries.sh

SDカードブートのための変更

$ cd Linux_for_Tegra/rootfs/boot/extlinux/
$ sudo cp jetson-tk1_extlinux.conf.sdcard extlinux.conf

書き込み前の初期設定

実機転送前にroot作業をしてしまう。ARMバイナリをx64環境で走らせるためQEMUをインストールし、ユーザーモードエミュレーションを利用する。
下準備後は以下の作業を行っている。

  • sudoを使えるユーザubuntuの作成
  • aptリポジトリの編集
  • sudoそのものやvim, lessの導入
  • ネット接続パッケージ導入 (net-tools, isc-dhcp-client, r8168-dkms)
$ sudo apt-get install qemu-user-static
$ cd Linux_for_Tegra/rootfs/
$ sudo cp /usr/bin/qemu-arm-static usr/bin/
$ sudo mount chproc ./proc -t proc
$ sudo mount chsys ./sys -t sysfs
$ sudo cp /etc/resolv.conf ./etc/resolv.conf
$ sudo LC_ALL=C LANGUAGE=C LANG=C chroot .
# adduser ubuntu
# gpasswd -a ubuntu sudo
# vim /etc/apt/sources.list
# apt-get update
# apt-get install sudo vim less net-tools isc-dhcp-client
# apt-get install r8168-dkms
# exit
$ sudo reboot

SDカードへ転送

SDカードを/dev/sdb1とする。

$ sudo umount /dev/sdb1
$ sudo mkfs.ext4 /dev/sdb1
$ sudo mkdir -p /mnt/sdcard
$ sudo mount /dev/sdb1 /mnt/sdcard
$ cd Linux_for_Tegra/rootfs/
$ sudo cp -a * /mnt/sdcard
$ sync
$ sudo umount /dev/sdb1

実機をSDカードブートに変更

$ cd Linux_for_Tegra
$ sudo ./flash.sh jetson-tk1 mmcblk1p1

実機でのネット接続操作

$ sudo dhclient eth0