2017/07/02

[zybo]ZYBO向けのLinux (3)

前回はXilinx wikiを見ながらビルドしたまでだった。
wikiも読んでいたが、FPGAマガジンNo.12も読んでいたので、実はクロス開発環境の構築も済ませている。

本の方はXilinxとAlteraの両方で動く環境を作ろうとしていたので、初心者の私はカスタマイズせずにXilinx用の環境だけを作ろうとしている。


クロス開発環境はbuild/tmp/deploy/sdk/petalinux-glibc-x86_64-petalinux-minimal-cortexa9hf-neon-toolchain-2017.2.shというファイルがインストーラらしく、そのまま走らせると/opt/petalinux/2017.2にインストールされた。
そこに環境変数を設定するスクリプトがあるので、sourceなどで読込むようになっているようだ。

x86_64-petalinux-linuxとcortexa9hf-neon-xilinx-linux-gnueabiが入っている。
prefixはarm-xilinx-linux-みたい。
なんか、yoctoのコンパイラといえばpokyという名前のような印象を受けていたのだが、Xilinxの提供している設定だからこういう名前なのだろうか。
そもそも、SDKがいるのかどうかすらわかってない。

まあいい。


次はブートローダをビルドするようだ。
U-bootだ。
http://git.denx.de/?p=u-boot.git;a=summary

本では、Xilinx用の場合"hsi"コマンドを使って初期化ファイルを生成しているのだが、yoctoのbuild/tmp/deploy/images/zybo-zynq7を見ると、中にu-boot.elfがあるし、u-boot-dtb.binやu-boot-zybo-zynq7.binなんかもある。
一緒に作ってくれたのだろうか?
作ってくれたものとして話を進めよう。


これをSDカードにコピーすればよいのだろうが、さて、どれをコピーするのだろうか。


Xilinx Wiki - Getting Started

Yoctoだけしか見ていなかったが、Linux環境の作り方がちゃんと書かれていた。
回り道しすぎだ。。。

ここの説明はYoctoを使っておらず、menuconfigなどで地道にビルドしているようだ。


Xilinx Wiki - Prepare Boot Medium
この順番にSDカードの準備をしていった。
コピーするのはboot.binだけなのだけど、カーネルなんかはいらないのだろうか?
よくわからんので、このままZyboに挿して、DIPスイッチをSDに変更して起動してみた。

U-Boot SPL 2016.03 (Jun 26 2017 - 09:07:42)
mmc boot
Trying to boot from MMC
reading system.dtb
spl_load_image_fat_os: error reading image system.dtb, err - -1
reading u-boot-dtb.img
spl_load_image_fat: error reading image u-boot-dtb.img, err - -1
SPL: failed to boot from all boot devices
### ERROR ### Please RESET the board ###

system.dtbもないし、u-boot-dtb.imgもない。
まあ、何もコピーしてないしね・・・。
一番近そうなファイル名はu-boot-dtb.binなのだけど、リネームすればよいのだろうか。

*** Warning - bad CRC, using default environment

In:    serial@e0001000
Out:   serial@e0001000
Err:   serial@e0001000
Model: Zynq ZYBO Development Board
Board: Xilinx Zynq
Net:   ZYNQ GEM: e000b000, phyaddr 0, interface rgmii-id

Warning: ethernet@e000b000 (eth0) using random MAC address - xx:xx:xx:xx:xx:xx
eth0: ethernet@e000b000
Hit any key to stop autoboot:  0
Copying FIT from SD to RAM...
reading fit.itb
** Unable to read file fit.itb **
Zynq> version

U-Boot 2016.03 (Jun 26 2017 - 09:07:42 +0900)
arm-xilinx-linux-gnueabi-gcc (Linaro GCC 6.2-2016.11) 6.2.1 20161016
GNU ld (GNU Binutils) 2.27.0.20160806


USBシリアル変換だから、もしかしたら電源ON直後は切れてるかもしれんが、それっぽい出力だ。
Yoctoのビルドをしたのが数日前だから、versionで出てきている日付も自分でビルドした時間になっているようだ。


fit.itbというファイルがない。
これはFPGAマガジンNo.12に書いてあったのだが、FITというのはLinuxカーネルとInitRam, Device Treeなどをパックしたもので、最近のU-bootはそれを使うのがデフォルトになっているらしい。
本では、uImageとDevice Treeを別々にして起動させるようにしているのだが、Yoctoが作ってくれたものはデフォルトで動いているということだろう。
そげなことせんでよかとに。。。
まあ、ファイルが少ない方が起動なんかは速くできそうだし、サイズも小さくしやすいのかも。

だが、ビルドしてくれたものにFITなどの名前が入ったファイルがない。
リリースページを見ると image.ubがFITファイルらしいが、そういうのもない。
ITSファイルをコンパイルしてITBファイルを作るみたいだから、DTSとDTBの関係みたいなものか?
しかし、itcというコンパイラはなさそうだし、そもそもITSファイルを持っていないからコンパイラだけあっても困る。

https://github.com/Xilinx/u-boot-xlnx/blob/master/doc/uImage.FIT/source_file_format.txt#L70
mkimage + dtcでFITファイルを作るようだ。
ramdiskって何だろうか? initramfsみたいなものか?


ここは、考え方を変えてみよう。
fit.itbが無いというのは、autobootが出しているメッセージのようだから、手動だったらuImageでもよいのではなかろうか。
uImageをコピーして試してみよう。

Zynq> fatls
fatls - list files in a directory (default /)

Usage:
fatls <interface> [<dev[:part]>] [directory]
     - list files from 'dev' on 'interface' in a 'directory'
Zynq> fatls mmc 0:1
     63732   boot.bin
    439322   u-boot-dtb.img
   3741112   uimage

3 file(s), 0 dir(s)


Zynq> fatload mmc 0:1 0x00008000 uimage
reading uimage
3741112 bytes read in 360 ms (9.9 MiB/s)
Zynq> fatload mmc 0:1 0x00000100 uimage-zynq-zybo.dtb
reading uimage-zynq-zybo.dtb
9235 bytes read in 17 ms (530.3 KiB/s)
Zynq> bootm 0x00008000
## Booting kernel from Legacy Image at 00008000 ...
    Image Name:   Linux-4.9.0-xilinx-v2017.2
    Image Type:   ARM Linux Kernel Image (uncompressed)
    Data Size:    3741048 Bytes = 3.6 MiB
    Load Address: 00008000
    Entry Point:  00008000
    Verifying Checksum ... OK
    Loading Kernel Image ... OK
FDT and ATAGS support not compiled in - hanging
### ERROR ### Please RESET the board ###

FPGAマガジンNo.12を真似して、uimage-zynq-zybo.dtbを0x1000に、uimageを0x8000に読込んだ。
あっちはbootzでfdtaddrを指定しているのだけど、うちのはhelpを見てもbootzがないのよねぇ。。。
FITを使うから不要だろう、ということか?


bootzを使えるように改造しているサイトもあるが、今回はそこら辺をやらずに進めたいのだ。
となると、FITファイルを作るしかないか。。。

0 件のコメント:

コメントを投稿

コメントありがとうございます。
スパムかもしれない、と私が思ったら、
申し訳ないですが勝手に削除することもあります。

注: コメントを投稿できるのは、このブログのメンバーだけです。