ConnectCore i.MX6UL スターターキット:ネットワーク越しにLinuxを起動する

前回の続き。

次のような構成でLinuxを起動する。

コンポーネント 読み込み方法
u-boot NANDフラッシュ(デフォルト)
linuxカーネル tftpサーバ
バイスツリー tftpサーバ
rootfs NFS

tftpサーバ

Ubuntu16.04では次のように設定する。

インストール

$ sudo apt-get install -y tftpd-hpa

起動

インストール直後は起動済みなので不要のはず。

$ sudo systemctl start tftpd-hpa

ファイルの格納

Ubuntuではデフォルトで/var/lib/tftpbootがtftpの公開ディレクトリに設定されているため、 ダウンロードしたいファイルはここにファイルを格納する。

ここではカーネルとデバイスツリーをコピーする。

$ sudo cp tmp/deploy/images/ccimx6ulstarter/zImage-ccimx6ulstarter.bin /var/lib/tftpboot
$ sudo cp tmp/deploy/images/ccimx6ulstarter/zImage-imx6ul-ccimx6ulstarter-id129.dtb /var/lib/tftpboot

nfsサーバ

インストール

$ sudo apt-get install -y nfs-kernel-server

公開ディレクトリの設定

tftpサーバとは異なり、デフォルトの公開ディレクトリは設定されていないため、この設定をおこなう。

/etc/exportsに下記の内容を追加する。

/exports 192.168.21.0/255.255.255.0(rw,no_root_squash,subtree_check)

/exportsを作成する。

$ sudo mkdir /exports

起動

$ sudo systemctl restart nfs-kernel-server

ファイルの展開

bitbakeで生成されたrootfsのイメージを/exportsに展開する。

$ sudo tar xvf ./tmp/deploy/images/ccimx6ulstarter/core-image-base-ccimx6ulstarter.tar.bz2 -C /exports/

u-bootの設定

以下のようにネットワークの設定を行う。

変数 説明 設定例
ipaddr ccimx6ulstarterのIPアドレス 192.168.21.100
serverip tftpサーバのIPアドレス 192.168.21.42
setenv ipaddr 192.168.21.100
setenv serverip 192.168.21.42

次にLinux起動のための設定を行う

setenv fdt_file zImage-imx6ul-ccimx6ulstarter-id129.dtb
setenv bootargs console=${console},${baudrate} ${bootargs_linux} ip=192.168.21.100 root=/dev/nfs nfsroot=192.168.21.42:/exports rw
setenv bootcmd 'tftp ${loadaddr} ${zimage};tftp ${fdt_addr} ${fdt_file}; bootz ${loadaddr} - ${fdt_addr}'
saveenv

saveenvで設定した内容がNANDフラッシュに設定される。

u-bootでは起動すると、最初にbootcmdの内容を実行しようとするため、次回起動時からはLinuxがネットワーク越しに起動されるようになる。