LoginSignup
3
3

More than 5 years have passed since last update.

ZYBOのクロス開発環境の構築(2) SDカードからのLinux起動⇒失敗

Last updated at Posted at 2017-10-20

はじめに

ZYBOのクロス開発環境の構築 (2017年10月時点)でLinuxのビルドが完了してから、実際にDigilentのZYBOでLinuxが起動するまでを記載する。(結局本稿内ではまだBoot完了できておらず…) 実働工数は12h程度。

ビルド生成物の確認

bitbakeコマンド実行後、ビルドが完了したら/poky/build/tmp/deploy/images/zybo-zynq7に以下のファイルが出来ていることを確認する。(各ファイルの役割は前回に続きikwzmさんの記事を参照されたい)

  • boot.bin (u-boot-spl)
  • u-boot.img (u-boot)
  • uImage (Linuxカーネル)
  • uImage-zybo-zynq7.dtb (デバイスツリー)
  • uEnv.txt (u-bootの定義ファイル)
  • core-image-minimal-zybo-zynq7.tar.gz (root filesystem)

上記のファイルに加えて、FPGAロジック(PL)のビットストリームファイルを別途準備する必要がある。今回はDigilentのZYBOベースシステムをダウンロードした上でVivado 2017.3で再生成した.bitファイルを利用した。

Boot手順のサマリ

meta-XilinxディレクトリにあるREADME.booting.mdの『Loading via SD』の項に記載がある通り、SDカードのパーティションを2つに分けたうえで、FAT16/32でフォーマットしたパーティション1にU-bootやデバイスツリーを、EXT4でフォーマットしたパーティション2にroot filesystem関連ファイルを置くという流れ。

SDカードの準備

8GB以上のMicro SDカードを使いパーティションを作成する。ちなみに私はラップトップPCのSDカードスロットを使ったことが祟ったのか、下記2件の対応で一夜を無駄にしてしまった。100均で購入したUSB-SDカードリーダーを使用することで一瞬で解決したのだが。。(追記:file systemマウント時のハングはVM設定のSATAの"ホストのI/Oキャッシュを使う"にチェックを入れて解決した)

SDカードの準備諸々は有難いことにmarseeさんのブログで丁寧に説明されており、このままの手順で参考にさせて頂いたため省略。最後にVivadoで生成したZYBOベースシステムのbitstream(.bit)をパーティション1にコピーしたら準備完了。

ZYBO動作確認⇒Boot失敗

ZYBOのMicro SDスロットにカードを入れ、JP5のジャンパをSDカードブートモードに変更したらボードに電源を投入。J11にUSBケーブルを繋ぎシリアルコンソールで起動ログを確認する。(ボーレートは115200)

U-Boot SPL 2017.01 (Oct 13 2017 - 20:26:56)
mmc boot
Trying to boot from MMC1reading system.dtb
spl_load_image_fat_os: error reading image system.dtb, err - -1
reading u-boot.img
reading u-boot.img

U-Boot 2017.01 (Oct 13 2017 - 20:26:56 +0900)

Model: Zynq ZYBO Development Board
Board: Xilinx Zynq
I2C: ready
DRAM: ECC disabled 512 MiB
MMC: sdhci@e0100000: 0
SF: Detected s25fl128s_64k with page size 256 Bytes, erase size 64 KiB, total 16 MiB
*** 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
I2C EEPROM MAC address read failed

Warning: ethernet@e000b000 (eth0) using random MAC address - 06:34:4e:34:c3:63
eth0: ethernet@e000b000
** Bad device size - mmc 0 **
Checking if uenvcmd is set ...
Hit any key to stop autoboot: 2 1 0
Copying FIT from SD to RAM...
** Bad device size - mmc 0 **
Zynq>

ステージ1のu-boot-splの起動(SDカードからの読出し)に失敗している?ようだ。検索すると似たような報告がされており、解決のためにmeta-Xilinxにパッチを2件適用してみろとのこと。

https://github.com/nathanrossi/meta-xilinx/commit/20ae90016aaacec9569c1cb34a60552231fe733d
https://github.com/nathanrossi/meta-xilinx/commit/6472328917c240d1ad03561f038a6fe2de8bb382

試しにBoot失敗後、下記のようにコンソールからmmcinfofatls mmc 0を実行するとSDカードのパーティション1のファイル群(6つ)が認識できていることが分かる。mmcをRe-scanすれば解決ということだろうか?

Zynq> mmcinfo
Device: sdhci@e0100000
Manufacturer ID: 2
OEM: 544d
Name: SA16G
Tran Speed: 50000000
Rd Block Len: 512
SD version 3.0
High Capacity: Yes
Capacity: 14.5 GiB
Bus Width: 4-bit
Erase Group Size: 512 Bytes
Zynq> fatls mmc 0
67184 boot.bin
475479 u-boot.img
3600208 uimage
582 uenv.txt
9235 uimage-zynq-zybo.dtb
2083850 system_wrapper.bit

6 file(s), 0 dir(s)

おわりに

次回は上記の不具合原因を掘り下げて解決した上で、Linuxの起動までを追っていきたい。

3
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
3