OrangePi-ZEROを使ってみる

USBデバイスからブートする

ZEROのPCB Rev1.4からは、裏面に2MByteのSPI Flashが実装されました。
ようやくこの使い方が分かりましたので紹介します。
まずはこちらから flashrom-0.9.9.tar.bz2 をダウンロードしてインストールします。
$ sudo apt install pciutils
$ sudo apt install libftdi-dev
$ sudo apt install libusb-dev
$ sudo apt install libpci-dev

$ bzip2 -d flashrom-0.9.9.tar.bz2
$ tar xvf flashrom-0.9.9.tar
$ cd flashrom-0.9.9/
$ make
$ sudo make install

次に、SPI Flashに書き込むイメージを準備してSPI Flashに書き込みます。
「linux-u-boot-orangepizero_5.31_armhf」の部分はカーネルバージョンにより変わります。
$ cd
$ dd if=/dev/zero count=2048 bs=1K | tr '\000' '\377' > spi.img
$ dd if=/usr/lib/linux-u-boot-orangepizero_5.31_armhf/u-boot-sunxi-with-spl.bin of=spi.img bs=1k conv=notrunc
413+1 records in
413+1 records out
423327 bytes (423 kB) copied, 0.0255765 s, 16.6 MB/s

$ sudo flashrom -p linux_spi:dev=/dev/spidev0.0 -c MX25L1605 -w spi.img
flashrom v0.9.9-r1955 on Linux 3.4.113-sun8i (armv7l)
flashrom is free software, get the source code at https://flashrom.org

Calibrating delay loop... OK.
Found Macronix flash chip "MX25L1605" (2048 kB, SPI) on linux_spi.
Reading old flash chip contents... done.
Erasing and writing flash chip... Erase/write done.
Verifying flash... VERIFIED.


ここで一旦Shutdownし、SDカードを抜いてリブートしてみました。
U-Boot SPL 2017.05-armbian (Jun 15 2017 - 03:38:31)
DRAM: 512 MiB
Trying to boot from sunxi SPI


U-Boot 2017.05-armbian (Jun 15 2017 - 03:38:31 +0200) Allwinner Technology

CPU:   Allwinner H3 (SUN8I 1680)
Model: Xunlong Orange Pi Zero
DRAM:  512 MiB
MMC:   SUNXI SD/MMC: 0
MMC: no card present
mmc_init: -123, time 2
*** Warning - MMC init failed, using default environment

In:    serial
Out:   serial
Err:   serial
Net:   phy interface0
eth0: ethernet@1c30000
Hit any key to stop autoboot:  0
MMC: no card present
mmc_init: -123, time 2
MMC: no card present
mmc_init: -123, time 2
** Bad device mmc 0 **
MMC: no card present
mmc_init: -123, time 2
MMC: no card present
mmc_init: -123, time 2
** Bad device mmc 0 **
MMC: no card present
mmc_init: -123, time 2
starting USB...
USB0:   USB EHCI 1.00
USB1:   USB OHCI 1.0
scanning bus 0 for devices... 1 USB Device(s) found
       scanning usb for storage devices... 0 Storage Device(s) found

USB device 0: unknown device
BOOTP broadcast 1
data abort
pc : [<5ff9a84c>]       lr : [<000052ea>]
reloc pc : [<4a03984c>]       lr : [<ea0a42ea>]
sp : 5bf3c940  ip : 00000000     fp : 5ffecff8
r10: 5ffecb4c  r9 : 5bf40ee8     r8 : 0000000e
r7 : 5ffeee84  r6 : 5ffeee8c     r5 : 00000000  r4 : 5ffed04e
r3 : 00060101  r2 : 00000008     r1 : 5ffecffe  r0 : 0000000e
Flags: nZCv  IRQs off  FIQs off  Mode SVC_32
Resetting CPU ...

resetting ...


USBデバイスからブートしようとしますが、USBデバイスが無いのでリセットが掛かります。
そこで、手元に有ったUSBメモリーにイメージを書き込んで、USBを刺してリブートしたら、無事起動することができました。
写真ではわかりずらいですが、右側のSDカードは抜いた状態となっています。

SDカードからブートしたとき


USBメモリーからブートしたとき



USBメモリーからブートするとルートデバイスは /dev/sda1 になります。
SDカードとUSBメモリーの両方が刺さっているときは、USBメモリーが優先されます。
USBのSDカード・リーダー+SDカードからもブートすることができました。
低消費電力のUSBハードディスクでもブートできるかもしれませんが、持ってません。

ddコマンドを使ってパフォーマンスを測ってみました。
数年前のUSBメモリーですが多少良くなっています。
新しいUSBメモリーを入手したら再度パフォーマンスを測ってみます。



<2017年10月10日 追記>
SanDiskとToshibaの16GのUSBメモリーを入手しました。

SanDisk




Toshiba






USBの転送スピードに依存するのか、パフォーマンスに変化は有りませんでした。
次回はもう一つ、ブートネタを紹介します。