Petalinuxツールを使用し、ZYBO上でLinuxを起動してみたいと思います。
ここを参照しました。
ZYBO (Zynq) 初心者ガイド (8) Linux起動する - Qiita
少し準備
参照サイトを見ると、ターミナル起動後に設定が必要とのこと。
また、Petalinux専用で使うのであれば、.bashrcに書いておけば毎回設定する必要はないと。
ということで、.bashrcをいじります。
これは次を参照。
.bash_profileと.bashrcのまとめ - Qiita
.bashrcというのはホームディレクトリにあるようで、ターミナルを起動して見てみると、
確かにありました。.bashrc_profileはありませんでした。
exportで設定する変数(環境変数)は.bashrc_profileに書いておけばいいとのことですが、
Petalinux使用前の設定にはシェルスクリプトの実行も含まれているので、
.bashrcに書いておくこととします。
で、.bashrcを編集する必要があるのですが、Linuxではvimというものを使っていたような。
入ってませんでした。
インストールします。
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>"を押します。
続いて、"Templates"の中で"Zynq FSBL"を選んで、"Finish"を押します。
説明を読んでみると、
- まずFPGAを所定のビットストリームでコンフィグレーションする
- OS、Standalone、もしくは2nd Stage Boot Loaderを不揮発メモリからRAMに読み込む
- 最後に、上記を実行する
となっています。
プロジェクトを作成したら、このプロジェクトを選択した状態でビルドボタンを押して、ビルドします。
※Project > Build Automatically にチェックが入っていれば、プロジェクト作成後に自動でビルドされます。
私は自動ビルドが邪魔くさいので、オフにしています。
これで、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します。
この後がなかなか時間がかかります。
しばらく待つと、完了します。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"の位置にしておきます。
ZYBOとPCをUSBケーブルで接続しておきます。
この状態でZYBOの電源を入れ、PC上でTeratermを使ってCOMポートに接続します。
ボーレートは115200bpsに設定しておきます。
この状態で、ZYBOのBTN7 (PS-SRST : PS部のリセットボタン)を押すと、Linuxの起動ログが出ます!
起動してる!
最後に、ログインメッセージが表示されるので、ユーザ名 root、パスワード rootでログインすると、 Linuxにアクセスできます。
pwd
やls
のコマンドも通りました。
めでたし!
Linux起動しました!
ということで、一旦の目標が達成できました。
引き続き、参照サイトを見ながらLinuxの設定を変えてみるなどしてみようと思います。