メモ置き場

メモ置き場です.開発したものや調べたことについて書きます.

[tex: ]

ZYBO-Z7-20でUbuntu 16.04 LTSを動かす(4) : BOOT.binの作成とZynq上での実行

ZYBO-Z7でUbuntu 16.04 LTSを動かす - メモ置き場
第4回目.

ZYBO-Z7-20でUbuntu 16.04 LTSを動かす(2) : FSBLとデバイスツリーの作成 - メモ置き場
ZYBO-Z7-20でUbuntu 16.04 LTSを動かす(3) : U-BootとuEnv.txtの作成 - メモ置き場
で作成した

  • bitstreamファイル
  • fsbl.elf
  • u-boot.elf

からBOOT.binを生成する.SDカードに生成したBOOT.binを入れて実際にブートしてみる.

BOOT.binの生成

SDKに含まれるbootgenを使う.適当なディレクトリを作成し,bitstreamファイル,fsbl.elf,u-boot.elfをコピーしておく.次のような中身のbootimg.bifを作成する.

the_ROM_image:
{
    [bootloader] ./fsbl.elf
    ./design_1_wrapper.bit
    ./u-boot.elf
}

bootgenコマンドでBOOT.binを生成する.

bootgen -image bootimg.bif -w on -o BOOT.bin

SDカードの準備

ZYBO-Z7ではmicorSDカードしか使えない.僕が使っているのはこちら

SDカードはパーティションを切って,第一パーティションにはブート関連のファイルやLinux kernel,第二パーティションにはLinuxのrootfile systemを入れる必要がある.

パーティションを作成するにはgpartedを使う.SDカードを挿入してterminalから

sudo gparted

で起動する.
f:id:okchan08:20190128224334p:plain
第一パーティションは64.00 MiBをfat32でフォーマット,第2パーティションext4でフォーマットした.

第一パーティションに作成したBOOT.binを入れる.
f:id:okchan08:20190128224548p:plain

BOOT.binの起動メッセージ

この記事にあるように,ZYBO-Z7とPCをシリアルポートでつなぐ.作成したSDカードをスロットに入れ電源を入れるとfsbl.elfとu-boot.elfの起動メッセージが表示される.このときブート方法のジャンパピン(JP5)をSDにしておく必要がある.
以下に起動メッセージを貼っておく.u-boot.elfの起動後はu-bootのコンソールに入れるようになる.作業としては折り返し地点くらい.後はLinux kernel,ramdisk,devicetreeの作成を行う.

Xilinx First Stage Boot Loader 
Release 2018.2	Jan 28 2019-01:47:55
Devcfg driver initialized 
Silicon Version 3.1
Boot mode is SD
SD: rc= 0
SD Init Done 
Flash Base Address: 0xE0100000
Reboot status register: 0x60600000
Multiboot Register: 0x0000C000
Image Start Address: 0x00000000
Partition Header Offset:0x00000C80
Partition Count: 3
Partition Number: 1
Header Dump
Image Word Len: 0x000F6EC0
Data Word Len: 0x000F6EC0
Partition Word Len:0x000F6EC0
Load Addr: 0x00000000
Exec Addr: 0x00000000
Partition Start: 0x000075D0
Partition Attr: 0x00000020
Partition Checksum Offset: 0x00000000
Section Count: 0x00000001
Checksum: 0xFFD13B7E
Bitstream
In FsblHookBeforeBitstreamDload function 
PCAP:StatusReg = 0x40000A30
PCAP:device ready
PCAP:Clear done
Level Shifter Value = 0xA 
Devcfg Status register = 0x40000A30 
PCAP:Fabric is Initialized done
PCAP register dump:
PCAP CTRL 0xF8007000: 0x4C00E07F
PCAP LOCK 0xF8007004: 0x0000001A
PCAP CONFIG 0xF8007008: 0x00000508
PCAP ISR 0xF800700C: 0x0802000B
PCAP IMR 0xF8007010: 0xFFFFFFFF
PCAP STATUS 0xF8007014: 0x00004A30
PCAP DMA SRC ADDR 0xF8007018: 0x00100001
PCAP DMA DEST ADDR 0xF800701C: 0xFFFFFFFF
PCAP DMA SRC LEN 0xF8007020: 0x000F6EC0
PCAP DMA DEST LEN 0xF8007024: 0x000F6EC0
PCAP ROM SHADOW CTRL 0xF8007028: 0xFFFFFFFF
PCAP MBOOT 0xF800702C: 0x0000C000
PCAP SW ID 0xF8007030: 0x00000000
PCAP UNLOCK 0xF8007034: 0x757BDF0D
PCAP MCTRL 0xF8007080: 0x30800100

DMA Done ! 

FPGA Done ! 
In FsblHookAfterBitstreamDload function 
Partition Number: 2
Header Dump
Image Word Len: 0x000205DA
Data Word Len: 0x000205DA
Partition Word Len:0x000205DA
Load Addr: 0x04000000
Exec Addr: 0x04000000
Partition Start: 0x000FE490
Partition Attr: 0x00000010
Partition Checksum Offset: 0x00000000
Section Count: 0x00000001
Checksum: 0xF7EA0770
Application
Handoff Address: 0x04000000
In FsblHookBeforeHandoff function 
SUCCESSFUL_HANDOFF
FSBL Status = 0x1


U-Boot 2018.01-dirty (Jan 28 2019 - 02:04:53 +0900)

Model: Zynq ZYBO Development Board
Board: Xilinx Zynq
Silicon: v3.1
I2C:   ready
DRAM:  ECC disabled 1 GiB
MMC:   sdhci@e0100000: 0 (SD)
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
Net:   ZYNQ GEM: e000b000, phyaddr 0, interface rgmii-id
I2C EEPROM MAC address read failed
eth0: ethernet@e000b000
Hit any key to stop autoboot:  0 
Device: sdhci@e0100000
Manufacturer ID: 27
OEM: 5048
Name: SD16G 
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
** Unable to read file uEnv.txt **
Copying Linux from SD to RAM...
** Unable to read file uImage **
switch to partitions #0, OK
mmc0 is current device
Scanning mmc 0:1...
starting USB...
USB0:   USB EHCI 1.00
scanning bus 0 for devices... 1 USB Device(s) found
       scanning usb for storage devices... 0 Storage Device(s) found

Device 0: unknown device
ethernet@e000b000 Waiting for PHY auto negotiation to complete......... TIMEOUT !
missing environment variable: pxefile_addr_r
ethernet@e000b000 Waiting for PHY auto negotiation to complete......... TIMEOUT !
ethernet@e000b000 Waiting for PHY auto negotiation to complete......... TIMEOUT !
Zynq>