Posted at

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