こちらが、Xilinxのyocto-manifestsで、ブランチがrel-v2017.2の内容。
https://github.com/Xilinx/yocto-manifests/blob/rel-v2017.2/default.xml
revisionが"rel-v2017.2"になっているので、それぞれのgitからブランチrel-v2017.2を取ってくるようになっている。
そして当面の問題は、meta-xilinxにZYBOの設定ファイルがないのだけどどうしようか、である。
こちらは、rel-v2017.2の設定ファイル一覧。
https://github.com/Xilinx/meta-xilinx/tree/rel-v2017.2/conf/machine
リビジョンが過去になれば存在するかというと、そういうわけでもない。
Yocto 2.1にはまだ入っていない、というQAがあった。
2.1は、krogothというブランチ名のようだ。
How to install Yocto Project 2.1 on ZYBO - FPGA - Digilent Forum
ということは、それより前のバージョンだったらサポートがあるということだろうか?
Digilentのgithubに、repoできるものがあった。
https://github.com/Digilent/meta-manifest
ブランチ名がjethroなので、2.0(2015/11/23)か。
meta-xilinxだと、rel-v2016.2がjethroなのだが、Vivadoなどがv2017.2でもビルドできるのだろうか?
それとも、あまり関係ないのだろうか。。
default.xmlを見ると、かなりシンプルだ。
meta-xilinxもDigilentのもので、こちらもjethroという名前になっていた。
では、やっていこう。
$ repo init -u https://github.com/Digilent/meta-manifest.git -b jethro
$ repo sync
$ repo start jethro --all
ここから先は、Digilent Wikiを見ながらやっていく。
$ export layer_root=`pwd`
$ export target_machine="zybo-linux-bd-zynq7"
$ mkdir tmp
$ cd tmp
$ source ${layer_root}/poky/oe-init-build-env ${target_machine}
$ sed -i "/meta-yocto-bsp/a \ ${layer_root}/meta-openembedded/meta-oe \\\ " conf/bblayers.conf
$ sed -i "/meta-yocto-bsp/a \ ${layer_root}/meta-xilinx \\\ " conf/bblayers.conf
$ sed -i "s/MACHINE ??= \"qemux86\"/MACHINE ?= \"${target_machine}\"/" conf/local.conf
conf/local.confの一番下に、これらを追加。
最後の2行は、いるのかどうかわからんが、あった方がよさそうな気がする。
PREFERRED_PROVIDER_virtual/bootloader = "u-boot-digilent"
PREFERRED_PROVIDER_u-boot = "u-boot-digilent"
PREFERRED_PROVIDER_virtual/kernel = "linux-digilent"
PREFERRED_PROVIDER_virtual/boot-bin = "u-boot-digilent"
IMAGE_INSTALL_append = " mtd-utils"
IMAGE_INSTALL_append = " kernel-modules"
そして、menuconfig。
2つ書いてあるが、うーん、digilentと書いてある方が無難な気がする。
でも、今回はpreferred kernelでも同じかもしれん。
$ bitbake linux-digilent-dev -c menuconfig
何やらダウンロードが始まり、いつものmenuconfig画面が出るのに30分くらいかかった。
General setupで、Local versionが「-digilent」になっているのは気付いたが、それ以外はよくわからんな。
System TypeはXilinx Zynq ARM Cortex A9 Platformになっていた。
まあ、今回は何も変更せずによかろう。
次はBuildだ。
core-image-minimalとcore-image-satoがあるらしい。
satoは佐藤さんではなく、GTK+をベースにしたUIになっていそうだ。
ZYBOには画面出力もあるので、satoでビルドしよう。
$ bitbake core-image-sato
local.confにxtermを追加するような記載があったけど、ビルドする説明の前に書いてくれよ。。。
もうコマンドを打ってダウンロードなどが始まっているから、このまま進めよう。
買い物から帰ってくると、エラーで止まっていた。。。
どうも、ダウンロードにあれこれ失敗しているためか、xserver-xf86-configのconf.dが無いなどといわれている。
こういうときは、UIをあきらめるのがよいだろう。
$ bitbake core-image-minimal
こちらは、あまり時間がかからずに終わった。
core-image-satoをやっていたおかげかもしれん。
次は、build productsだ。
bitbakeした場所から見ると、tmp/deploy/images/zybo-linux-bd-zynq7にできているようだ。
boot.bin@
boot.bin-zybo-linux-bd-zynq7@
boot.bin-zybo-linux-bd-zynq7-v2016.03digilent+gitAUTOINC+4dd0f06c46-u-boot-digilent*
core-image-minimal-zybo-linux-bd-zynq7-20170708062821.rootfs.cpio
core-image-minimal-zybo-linux-bd-zynq7-20170708062821.rootfs.cpio.gz.u-boot
core-image-minimal-zybo-linux-bd-zynq7-20170708062821.rootfs.ext4
core-image-minimal-zybo-linux-bd-zynq7-20170708062821.rootfs.manifest
core-image-minimal-zybo-linux-bd-zynq7-20170708062821.rootfs.tar.gz
core-image-minimal-zybo-linux-bd-zynq7-20170708062821.rootfs.xilinx-sdimg
core-image-minimal-zybo-linux-bd-zynq7.cpio@
core-image-minimal-zybo-linux-bd-zynq7.cpio.gz.u-boot@
core-image-minimal-zybo-linux-bd-zynq7.ext4@
core-image-minimal-zybo-linux-bd-zynq7.manifest@
core-image-minimal-zybo-linux-bd-zynq7.tar.gz@
core-image-minimal-zybo-linux-bd-zynq7.xilinx-sdimg@
download.bit@
download.bit-+gitAUTOINC+63ca49fe02-r0-zybo-linux-bd-zynq7.bit
fitImage-1.0-r0-zybo-linux-bd-zynq7
fit.itb@
linux.bin@
modules--4.0-digilent+git0+86b46b6606-r0-zybo-linux-bd-zynq7-20170708062821.tgz
modules-zybo-linux-bd-zynq7.tgz@
README_-_DO_NOT_DELETE_FILES_IN_THIS_DIRECTORY.txt
sdimg@
sdimg-zybo-linux-bd-zynq7@
sdroot-fitImage@
sdroot-fitImage-zybo-linux-bd-zynq7-1.0-r0
sdroot-uImage-its-1.0-r0-zybo-linux-bd-zynq7.its
sdroot-zybo-linux-bd-zynq7.dtb
system.dtb@
system-top.dtb
u-boot.bin@
u-boot.bin-zybo-linux-bd-zynq7-v2016.03digilent+gitAUTOINC+4dd0f06c46-u-boot-digilent*
u-boot-dtb.bin@
u-boot-dtb.bin-zybo-linux-bd-zynq7-v2016.03digilent+gitAUTOINC+4dd0f06c46-u-boot-digilent*
u-boot-dtb.img@
u-boot-dtb.img-zybo-linux-bd-zynq7-v2016.03digilent+gitAUTOINC+4dd0f06c46-u-boot-digilent*
u-boot-spl.bin@
u-boot-spl.bin-zybo-linux-bd-zynq7-v2016.03digilent+gitAUTOINC+4dd0f06c46-u-boot-digilent*
uImage@
uImage--4.0-digilent+git0+86b46b6606-r0-zybo-linux-bd-zynq7-20170708062821.bin
uImage-its-1.0-r0-zybo-linux-bd-zynq7.its
uImage-its-zybo-linux-bd-zynq7.its@
uImage-linux.bin-4.0-digilent+gitAUTOINC+86b46b6606-r0-zybo-linux-bd-zynq7.bin
uImage-zybo-linux-bd-zynq7.bin@
zybo-linux-bd-zynq7.dtb@
多いね。
wicというツールを使えばブートできるSDカードができるらしいのだが、SDカードの場所はどこで指定するのだろうか?
まあいい、やってみよう。
$ wic create -e core-image-minimal ${layer_root}/meta-xilinx/scripts/lib/image/canned-wks/sdimage-xilinx.wks
SDカードを作るのではなく、SDカードに書き込むimageを作るだけのようだ。
SDブートを見ていこう。
boot.bin, fit.itb, download.bit, u-boot-dtb.imgの4ファイルを最初のパーティションにコピーすればよいらしい。
が、注意書きがある。
IMPORTANT Note: User must have u-boot SPL (the FSBL) automatically load the FPGA bitstream or stop at u-boot and load it manually!!! Otherwise the kernel will not boot. The next two sections describe these two methods
内容は、
ユーザはu-boot SPL(FSBL)を持っていなくてはならない!!! さもなくばkernelはブートしないであろう。
くらいの解釈でよいのかな?
"automatically"以下はFSBLの説明だと考えたのだけど、自信がないのでGoogle翻訳してもらおう。
ユーザーはu-boot SPL(FSBL)を自動的にFPGAビットストリームをロードするか、またはu-bootで停止して手動でロードする必要があります。
うーん、mustはhaveではなくloadにかかっているようだ。
2つ方法が書かれていて、u-bootで読込む方法と、SPLから読込む方法があるそうだ。
FPGAマガジンに書かれているのは、たぶん後者だろう。
"bitstream"というファイル名にしておくと、bit形式かbin形式だったら読込んでくれるそうだ。
ここでは、download.bitファイルがFSBLらしいので、download.bitをbitstreamにリネームするようだ。
ここまでやったあとで、先ほどのwicコマンドで作ったイメージを使ってSDカードを作る方法が書かれていた。
最初からこっちだけ説明すればいいやん。。。
https://github.com/Digilent/meta-manifest/wiki/Quick-start-guide#using-sdimg
ddコマンドでSDカードの先頭から書込むと、パーティションまで分けたSDカードができあがるのだ。
fdiskで見ると2つパーティションがあるのだが、gpartedで見ると4つある。
16GBのSDカードなのだが、wicの時点ではサイズが分からないのでこうなるのだろう。
まあ、このままでよい。
このSDカードをZYBOに挿すと、起動した。
(前略)
Starting syslogd/klogd: donePoky (Yocto Project Reference Distro) 2.0.3 zybo-linux-bd-zynq7 /dev/ttyPS0
zybo-linux-bd-zynq7 login:
rootでログインもできる。
やれやれ。
では、bitstreamを書き換えれば、自分の作ったものが自動的にロードされるのだろうか。
SDSoC 2017.1で作ったとき、拡張子がbitになっているファイルがあったので、それを上書きしてみよう。
・・・ダメだ。
Linuxがちゃんと起動しない。
あれは、SDSoCの例だから、Linux側もセットになっているのかも?
その前に作った、VHDLでLEDを点滅させるbitファイルを上書きした。
これは動いて、LEDが点滅しているのだが、Linuxの方が「Starting kernel ...」で止まってしまった。
確か、このメッセージはkernel側が出していたような気がするんだけど、どうなんだろう?
kernelが動いていたときのbitstreamを上書きするとちゃんと起動したので、bitstreamファイルに関係があるのは間違いない。
コンソールログとLED点滅を見比べていくと、かなり早い段階でLED点滅が始まっている。
PL部が何かやっていないためにkernelが待ち状態になっているのだろうか?
http://qiita.com/ikwzm/items/1614c35233e1836c7a26
「FSBLをVivado SDKで作った場合」と書いてあるので、何かしてやらんといかん気がする。
ここを見ると、SDKでアプリを作るとき、FSBLを選択してfsbl_hooks.cだけ変更すればよいらしい。
5. Zynq SDKでFSBLを作る – yuki-sato.com
「zybo_base_system」から持ってくるそうだが、これだろうか?
fsbl_hooks.cファイルは、これと同じようだ。
ZYBO/fsbl_hooks.c at master · Digilent/ZYBO
置き換えてビルドしたのだが、xiicps.hがないということでエラーになった。
SDKのtarget/aarch32-none/includeにあったので、Eclipseの設定でパスを追加。
ビルドすると、今度は「XPAR_PS7_I2C_0_DEVICE_ID」が未定義だと。。。
I2Cは今回使わないからコメントアウトすると、その一帯がエラーになるようなので、もうエラーになるところは全部コメントアウト。
ここまでやって、ようやくFSBLがビルドできた。
あれ、ELF ?
メニューから「Create Image」で作っていくようだけど、これでできるのはBOOT.binだ。
説明では、ここにu-bootのELFファイルを追加するようなのだが、Yoctoで作ったimagesの中にはELFファイルはないように見える。
深みにはまりそうなので、ここは、一時撤退だ。
FPGAマガジンにはU-bootのSPLはFSBLの代わりになるような書き方をしてあったので、FSBLは作らなくてよいと思うのだ。
しかし、bitstreamを上書きして動かないというのも事実なので、何かしないといけないはずだ。
次はそこを調べよう。
0 件のコメント:
コメントを投稿
コメントありがとうございます。
スパムかもしれない、と私が思ったら、
申し訳ないですが勝手に削除することもあります。
注: コメントを投稿できるのは、このブログのメンバーだけです。