モチベーション
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