前回の続き。
次のような構成で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がネットワーク越しに起動されるようになる。