勉強しないとな~blog

ちゃんと勉強せねば…な電気設計エンジニアです。

ZYBOを進める - 11. ZYBO用のLinuxイメージを作成

Petalinuxツールを使用し、ZYBO上でLinuxを起動してみたいと思います。
ここを参照しました。

ZYBO (Zynq) 初心者ガイド (8) Linux起動する - Qiita

少し準備

参照サイトを見ると、ターミナル起動後に設定が必要とのこと。
また、Petalinux専用で使うのであれば、.bashrcに書いておけば毎回設定する必要はないと。

ということで、.bashrcをいじります。
これは次を参照。

.bash_profileと.bashrcのまとめ - Qiita

.bashrcというのはホームディレクトリにあるようで、ターミナルを起動して見てみると、

f:id:nokixa:20190630181751p:plain

確かにありました。.bashrc_profileはありませんでした。
exportで設定する変数(環境変数)は.bashrc_profileに書いておけばいいとのことですが、 Petalinux使用前の設定にはシェルスクリプトの実行も含まれているので、 .bashrcに書いておくこととします。

で、.bashrcを編集する必要があるのですが、Linuxではvimというものを使っていたような。

f:id:nokixa:20190630182845p:plain

入ってませんでした。
インストールします。

sudo apt install vim
noki@ubuntu:~$ sudo apt install vim
[sudo] password for noki: 
Reading package lists... Done
Building dependency tree       
Reading state information... Done

~~~~なんやかんや~~~~

Processing triggers for man-db (2.7.5-1) ...
Setting up vim-runtime (2:7.4.1689-3ubuntu1.3) ...
Setting up vim (2:7.4.1689-3ubuntu1.3) ...
update-alternatives: using /usr/bin/vim.basic to provide /usr/bin/vim (vim) in auto mode
update-alternatives: using /usr/bin/vim.basic to provide /usr/bin/vimdiff (vimdiff) in auto mode
update-alternatives: using /usr/bin/vim.basic to provide /usr/bin/rvim (rvim) in auto mode
update-alternatives: using /usr/bin/vim.basic to provide /usr/bin/rview (rview) in auto mode
update-alternatives: using /usr/bin/vim.basic to provide /usr/bin/vi (vi) in auto mode
update-alternatives: using /usr/bin/vim.basic to provide /usr/bin/view (view) in auto mode
update-alternatives: using /usr/bin/vim.basic to provide /usr/bin/ex (ex) in auto mode
noki@ubuntu:~$ 

ということで、もう一度トライ。

# ~/.bashrc: executed by bash(1) for non-login shells.
# see /usr/share/doc/bash/examples/startup-files (in the package bash-doc)
# for examples

# If not running interactively, don't do anything
case $- in
    *i*) ;;
      *) return;;
esac

# don't put duplicate lines or lines starting with space in the history.
# See bash(1) for more options
HISTCONTROL=ignoreboth

# append to the history file, don't overwrite it
shopt -s histappend

# for setting history length see HISTSIZE and HISTFILESIZE in bash(1)
HISTSIZE=1000
HISTFILESIZE=2000

# check the window size after each command and, if necessary,
# update the values of LINES and COLUMNS.
".bashrc" 124L, 3889C                     

vimで開けました。
vimの使い方も調べて、編集、保存してみます。使いこなせるようになりたい。
以下の4行を、.bashrcの最後に追加します。

export LC_ALL=en_US.UTF-8
export LANG=en_US.UTF-8
export LANGUAGE=en_US.UTF-8
source /opt/pkg/petalinux/settings.sh

その後、再読み込みしておきます。

source .bashrc

FSBLの作成

順番が前後してしまいますが、Windows側に戻って、Xilinx SDKで今回のデザイン用のFSBL (First Stage Boot Loader)を作成します。 FSBLでは、電源投入直後の処理~OS起動前のSecond Stage Boot Loaderの起動までをやってくれます。
詳細はリファレンスマニュアル参照。

Zybo Reference Manual [Reference.Digilentinc]

まず、Application Project作成画面へ。
プロジェクト名として適当に名前を入れて、"Next>"を押します。

f:id:nokixa:20190630222517p:plain

続いて、"Templates"の中で"Zynq FSBL"を選んで、"Finish"を押します。
説明を読んでみると、

  • まずFPGAを所定のビットストリームでコンフィグレーションする
  • OS、Standalone、もしくは2nd Stage Boot Loaderを不揮発メモリからRAMに読み込む
  • 最後に、上記を実行する

となっています。

f:id:nokixa:20190630222847p:plain

プロジェクトを作成したら、このプロジェクトを選択した状態でビルドボタンを押して、ビルドします。 ※Project > Build Automatically にチェックが入っていれば、プロジェクト作成後に自動でビルドされます。
私は自動ビルドが邪魔くさいので、オフにしています。

f:id:nokixa:20190630232627p:plain

これで、FSBLのelfファイルができました。
これとビットストリームファイルを使って、Petalinuxでブートイメージを作成します。

ブートイメージの作成

仮想マシンUbuntuのほうに移ります。
こちらで、Petalinux用のワークディレクトリを作っておいて、ここで作業をします。

noki@ubuntu:~$ ls
Desktop    Downloads         Music                       Pictures  Templates
Documents  examples.desktop  petalinux_installation_log  Public    Videos
noki@ubuntu:~$ mkdir work
noki@ubuntu:~$ cd work
noki@ubuntu:~/work$ mkdir Petalinux
noki@ubuntu:~/work$ ls
Petalinux
noki@ubuntu:~/work$ cd Petalinux/
noki@ubuntu:~/work/Petalinux$ 


ワークディレクトリを作ったら、まずここにXilinx SDKの作業ディレクトリとしていたものを、共有フォルダ経由で持ってきます。
ついでにディレクトリ名も変えておきます。

noki@ubuntu:~/work/Petalinux$ cp -r /mnt/hgfs/Shared/sdk/ ./
noki@ubuntu:~/work/Petalinux$ ll
total 12
drwxrwxr-x  3 noki noki 4096 Jun 30 10:30 ./
drwxrwxr-x  3 noki noki 4096 Jun 30 10:15 ../
drwxrwxr-x 13 noki noki 4096 Jun 30 10:30 sdk/
noki@ubuntu:~/work/Petalinux$ ll sdk
total 832
drwxrwxr-x 13 noki noki   4096 Jun 30 10:30 ./
drwxrwxr-x  3 noki noki   4096 Jun 30 10:30 ../
drwxrwxr-x  4 noki noki   4096 Jun 30 10:30 cpp_test/
drwxrwxr-x  3 noki noki   4096 Jun 30 10:30 cpp_test_bsp/
drwxrwxr-x  4 noki noki   4096 Jun 30 10:30 fsbl/
drwxrwxr-x  3 noki noki   4096 Jun 30 10:30 fsbl_bsp/
-rwxrwxr-x  1 noki noki      0 Jun 30 10:30 .keep*
drwxrwxr-x  3 noki noki   4096 Jun 30 10:30 .metadata/
drwxrwxr-x  2 noki noki   4096 Jun 30 10:30 RemoteSystemsTempFiles/
drwxrwxr-x  3 noki noki   4096 Jun 30 10:30 .sdk/
-rwxrwxr-x  1 noki noki  43009 Jun 30 10:30 SDK.log*
-rwxrwxr-x  1 noki noki 753422 Jun 30 10:30 system_wrapper.hdf*
drwxrwxr-x  3 noki noki   4096 Jun 30 10:30 system_wrapper_hw_platform_0/
drwxrwxr-x  2 noki noki   4096 Jun 30 10:30 webtalk/
drwxrwxr-x  4 noki noki   4096 Jun 30 10:30 zybo_test/
drwxrwxr-x  3 noki noki   4096 Jun 30 10:30 zybo_test_bsp/
noki@ubuntu:~/work/Petalinux$ mv sdk Zybo-base-linux-sdk
noki@ubuntu:~/work/Petalinux$ ls
Zybo-base-linux-sdk
noki@ubuntu:~/work/Petalinux$ 


次に、Petalinuxプロジェクトの作成。 指定したプロジェクト名と同じ名前のディレクトリができます。

noki@ubuntu:~/work/Petalinux$ petalinux-create --type project --template zynq --name Zybo-base-linux-peta
INFO: Create project: Zybo-base-linux-peta
INFO: New project successfully created in /home/noki/work/Petalinux/Zybo-base-linux-peta
noki@ubuntu:~/work/Petalinux$ ls
Zybo-base-linux-peta  Zybo-base-linux-sdk
noki@ubuntu:~/work/Petalinux$ 


Zybo-base-linux-sdkディレクトリ内のハードウェア定義ファイル(.hdf)を元に、Linuxカーネル設定をします。

noki@ubuntu:~/work/Petalinux/Zybo-base-linux-peta$ petalinux-config --get-hw-description=../Zybo-base-linux-sdk
INFO: Getting hardware description...
cp: omitting directory '/home/noki/work/Petalinux/Zybo-base-linux-sdk/cpp_test'
cp: omitting directory '/home/noki/work/Petalinux/Zybo-base-linux-sdk/cpp_test_bsp'

... 

途中、カーネルの設定画面が出てきます。
参考サイトに従って、そのままExitします。

f:id:nokixa:20190701024619p:plain:w400

この後がなかなか時間がかかります。
しばらく待つと、完了します。10分くらいだったかな。

... 

*** End of the configuration.
*** Execute 'make' to start the build or try 'make help'.

[INFO] sourcing bitbake
[INFO] generating plnxtool conf
[INFO] generating meta-plnx-generated layer
~/work/Petalinux/Zybo-base-linux-peta/build/misc/plnx-generated ~/work/Petalinux/Zybo-base-linux-peta
~/work/Petalinux/Zybo-base-linux-peta
[INFO] generating machine configuration
[INFO] generating bbappends for project . This may take time ! 
~/work/Petalinux/Zybo-base-linux-peta/build/misc/plnx-generated ~/work/Petalinux/Zybo-base-linux-peta
~/work/Petalinux/Zybo-base-linux-peta
[INFO] generating u-boot configuration files
                                                                                
[INFO] generating kernel configuration files
[INFO] generating kconfig for Rootfs
Generate rootfs kconfig
[INFO] oldconfig rootfs
[INFO] generating petalinux-user-image.bb
noki@ubuntu:~/work/Petalinux/Zybo-base-linux-peta$ 


次はLinuxのビルド。これも時間がかかります。

noki@ubuntu:~/work/Petalinux/Zybo-base-linux-peta$ petalinux-build
[INFO] building project
[INFO] sourcing bitbake
INFO: bitbake petalinux-user-image
Parsing recipes:  39% |################                          | ETA:  0:02:20

... 

INFO: Copying Images from deploy to images
INFO: Creating images/linux directory
NOTE: Failed to copy built images to tftp dir:  /tftpboot
[INFO] successfully built project
noki@ubuntu:~/work/Petalinux/Zybo-base-linux-peta$

次はブートイメージの作成ですが、参照サイトを見ると、

petalinux-package --boot --force --fsbl images/linux/zynq_fsbl.elf --fpga images/linux/system_wrapper.bit --u-boot

※bitファイル名は今回のものに合わせて変えています。

Xilinx SDKで用意したfsbl.elfは使っていない...?
確かにhdfファイルさえあればFSBLは作れるので、Petalinux上で生成してくれるということ?

ということで、FSBLプロジェクトの作成は不要でした。

実際に作成してみると、

noki@ubuntu:~/work/Petalinux/Zybo-base-linux-peta$ petalinux-package --boot --force --fsbl images/linux/zynq_fsbl.elf --fpga images/linux/system_wrapper.bit --u-boot
INFO: File in BOOT BIN: "/home/noki/work/Petalinux/Zybo-base-linux-peta/images/linux/zynq_fsbl.elf"
INFO: File in BOOT BIN: "/home/noki/work/Petalinux/Zybo-base-linux-peta/images/linux/system_wrapper.bit"
INFO: File in BOOT BIN: "/home/noki/work/Petalinux/Zybo-base-linux-peta/images/linux/u-boot.elf"
INFO: Generating zynq binary package BOOT.BIN...
INFO: Binary is ready.
WARNING: Unable to access the TFTPBOOT folder /tftpboot!!!
WARNING: Skip file copy to TFTPBOOT folder!!!
webtalk failed:Invalid tool in the statistics file:petalinux-yocto!
webtalk failed:Failed to get PetaLinux usage statistics!
noki@ubuntu:~/work/Petalinux/Zybo-base-linux-peta$ 
noki@ubuntu:~/work/Petalinux/Zybo-base-linux-peta$ ls
BOOT.BIN  build  components  config.project  images  project-spec
noki@ubuntu:~/work/Petalinux/Zybo-base-linux-peta$ ls images/linux/
BOOT.BIN               rootfs.ext3      rootfs.tar.gz       u-boot.elf
image.ub               rootfs.ext4      system.dtb          vmlinux
rootfs.cpio            rootfs.ext4.gz   System.map.linux    zImage
rootfs.cpio.gz         rootfs.jffs2     system_wrapper.bit  zynq_fsbl.elf
rootfs.cpio.gz.u-boot  rootfs.manifest  u-boot.bin
noki@ubuntu:~/work/Petalinux/Zybo-base-linux-peta$ 

BOOT.BIN, image.ubができていました。

実機でLinuxを起動

前までの手順でできたBOOT.BIN、image.ubをSDカードにコピーします。
私は共有フォルダ経由でWindows側に渡して、そこでSDに書き込みました。
ちゃんとやればPCに挿入したSDカードを、Ubuntuからマウントすることもできるのではないか。

このSDカードをZYBOに挿入します。また、起動モードジャンパを、"SD"の位置にしておきます。

f:id:nokixa:20190703013921p:plain

ZYBOとPCをUSBケーブルで接続しておきます。
この状態でZYBOの電源を入れ、PC上でTeratermを使ってCOMポートに接続します。
ボーレートは115200bpsに設定しておきます。

この状態で、ZYBOのBTN7 (PS-SRST : PS部のリセットボタン)を押すと、Linuxの起動ログが出ます!
起動してる!

f:id:nokixa:20190703014524p:plain

最後に、ログインメッセージが表示されるので、ユーザ名 root、パスワード rootでログインすると、 Linuxにアクセスできます。

f:id:nokixa:20190703014823p:plain

pwdlsのコマンドも通りました。
めでたし!

Linux起動しました!

ということで、一旦の目標が達成できました。
引き続き、参照サイトを見ながらLinuxの設定を変えてみるなどしてみようと思います。