[ARM]ようやくESPRESSObinを稼働させた。

ARMarm, Armada, Espressobin, Marvell

以前に上記のような記事を書いていたのですが、とある個人的な問題で今までお蔵入りしていたのですが、一念発起して稼働させることにしました。

何が問題だったか

私はクラウドファンディングで入手したのですが、その際のボードのリビジョンはv5というものでした。その後アップデートがあって現在はv7になっているのですが、v5とv7ではSATA周りに変更がありまして、

v5ではSATAデータと4pin電源なのが、使いにくかったのかv7ではシングルのSATAデータ/電源ポートに変更になっています。

この4ピン電源(メスーメス)ケーブルはあまり見かけないなぁということで手間取っていたというのが経緯になります。

公式ドキュメント

使用OS

UbuntuとDebian stretch/busterのものが用意されていましたが、Ubuntuのイメージはうまく起動させることが出来ませんでした。今回はDebian busterのものを使用しました。

$ cat /etc/os-release 
PRETTY_NAME="Debian GNU/Linux 10 (buster)"
NAME="Debian GNU/Linux"
VERSION_ID="10"
VERSION="10 (buster)"
VERSION_CODENAME=buster
ID=debian
HOME_URL="https://www.debian.org/"
SUPPORT_URL="https://www.debian.org/support"
BUG_REPORT_URL="https://bugs.debian.org/"
$ cat /etc/armbian-image-release 
# PLEASE DO NOT EDIT THIS FILE
BOARD=espressobin
BOARD_NAME="Espressobin"
BOARDFAMILY=mvebu64
BUILD_REPOSITORY_URL=https://github.com/armbian/build
BUILD_REPOSITORY_COMMIT=c865c065-dirty
VERSION=5.91
LINUXFAMILY=mvebu64
BRANCH=next
ARCH=arm64
IMAGE_TYPE=stable
BOARD_TYPE=conf
INITRD_ARCH=arm64
KERNEL_IMAGE_TYPE=Image
IMAGE_UUID=

色々と手間取ったこと

u-bootのflash

今回も面倒を嫌ってArmbianを使用しています。一応公式からは一からOSイメージをbuildする方法が記載されていますが結構難易度が高いと思います。

またArmbianを使用するときも注意が必要でしてこれもダウンロードページに書いてありますが、搭載メモリ別に合わせてu-bootの更新をするようにという注意があります。u-bootプロンプトに落ちたら、

bubt flash-image-ddr3/ddr4-MEM-RAM_CHIPS-CPU_DDR.bin spi usb
POINT

あと起動順とbootを正常にするように以下の環境変数もu-bootプロンプトで実行しておいた方が良いかも。ただ、これはシリアル接続時に一括でベタッとやると失敗しやすいので面倒でも1行ずつ実施した方が良いかと思います。

env default -a
setenv fdt_addr 0x6000000
setenv kernel_addr 0x7000000
setenv loadaddr 0x8000000
setenv initrd_size 0x2000000
setenv initrd_addr 0x1100000
setenv scriptaddr 0x6d00000
setenv initrd_image uInitrd
setenv image_name Image
setenv boot_targets 'usb sata mmc1 mmc0'
setenv boot_prefixes '/ /boot/'
setenv bootcmd_mmc0 'setenv devnum 0; setenv boot_interface mmc; run scan_dev_for_boot;'
setenv bootcmd_mmc1 'setenv devnum 1; setenv boot_interface mmc; run scan_dev_for_boot;'
setenv bootcmd_sata 'setenv devnum 0; scsi scan; scsi dev 0; setenv boot_interface scsi; run scan_dev_for_boot;'
setenv bootcmd_usb 'setenv devnum 0; usb start;setenv boot_interface usb; run scan_dev_for_boot;'
setenv bootcmd 'for target in ${boot_targets}; do run bootcmd_${target}; done'
setenv scan_dev_for_boot 'for prefix in ${boot_prefixes}; do echo ${prefix};run boot_a_script; done'
setenv boot_a_script 'ext4load ${boot_interface} ${devnum}:1 ${scriptaddr} ${prefix}boot.scr;source ${scriptaddr};'
saveenv
# Including this line to make sure saveenv is executed.

※私はいっぺんにベタッとやってうまいこと起動しない問題でつまずきました。

また設定等を書き込んだら、u-bootプロンプトでのresetやresetスイッチなどでリセットせず、一旦12Vアダプターを抜いて、再度投入する形にした方が良いかもしれません。

私の場合はu-bootの設定がうまく反映されず起動に失敗することがありました。

シリアル接続について

あと、付属のUSB-microUSBが実はシリアル接続のためのケーブルなので無くさないように使用した方が良いかと思います。

POINT

ボーレート: 115200 8N1

ネットワーク設定について

見て分かるようにEthernetが3ポート用意されています。が、Armbian(Debian 10)では以下のように見えます。

$ ip l
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP mode DEFAULT group default qlen 1024
    link/ether f0:ad:4e:03:64:7f brd ff:ff:ff:ff:ff:ff
3: wan@eth0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue master br0 state LOWERLAYERDOWN mode DEFAULT group default qlen 1000
    link/ether f0:ad:4e:03:64:7f brd ff:ff:ff:ff:ff:ff
4: lan0@eth0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue master br0 state LOWERLAYERDOWN mode DEFAULT group default qlen 1000
    link/ether f0:ad:4e:03:64:7f brd ff:ff:ff:ff:ff:ff
5: lan1@eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master br0 state UP mode DEFAULT group default qlen 1000
    link/ether f0:ad:4e:03:64:7f brd ff:ff:ff:ff:ff:ff
6: br0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP mode DEFAULT group default qlen 1000
    link/ether f0:ad:4e:03:64:7f brd ff:ff:ff:ff:ff:ff
$ sudo brctl show
bridge name     bridge id               STP enabled     interfaces
br0             8000.f0ad4e03647f       no              lan0
                                                        lan1
                                                        wan

ブリッジインターフェース(br0)に対して、eth0が、そしてそのエイリアスとしてwan、lan0、lan1が個別に見えるという形になっています。

そちらをsystemd-networkdで管理するのがまた面倒くさい。

所感

とりあえず2コアで2GBメモリなので、よほどヘビーなことをさせない限りは使用できると思います(Arm SBCでそんなことを想定する人はいないと思いますが)。

また公式にもあるようにEthernetが3ポートもあるので、思い切ってYoctoなどをインストールしてルータなどとしても使用できるかと思います。スループットによる負荷をかけたときにどうなるかは確認していませんが。

おまけ

今回SATAには以下のディスクをぶら下げています。昔@xmmsさんから購入したものです。

$ sudo hdparm -I /dev/sda
/dev/sda:
ATA device, with non-removable media
        Model Number:       SAMSUNG MZ-5S71000/003                  
        Serial Number:      
        Firmware Revision:  VBC3D03Q
        Transport:          Serial, ATA8-AST, SATA 1.0a, SATA II Extensions, SATA Rev 2.5, SATA Rev 2.6
Standards:
        Used: unknown (minor revision code 0x0028) 
        Supported: 8 7 6 5 
        Likely used: 8
Configuration:
        Logical         max     current
        cylinders       16383   16383
        heads           16      16
        sectors/track   63      63
        --
        CHS current addressable sectors:    16514064
        LBA    user addressable sectors:   195371568
        LBA48  user addressable sectors:   195371568
        Logical Sector-0 offset:                  0 bytes
        device size with M = 1024*1024:       95396 MBytes
        device size with M = 1000*1000:      100030 MBytes (100 GB)
        cache/buffer size  = unknown
        Form Factor: 2.5 inch
        Nominal Media Rotation Rate: Solid State Device
Capabilities:
        LBA, IORDY(can be disabled)
        Queue depth: 32
        Standby timer values: spec'd by Standard, no device specific minimum
        R/W multiple sector transfer: Max = 8   Current = 8
        DMA: mdma0 mdma1 mdma2 udma0 udma1 udma2 udma3 udma4 udma5 *udma6 
             Cycle time: min=120ns recommended=120ns
        PIO: pio0 pio1 pio2 pio3 pio4 
             Cycle time: no flow control=120ns  IORDY flow control=120ns
Commands/features:
        Enabled Supported:
           *    SMART feature set
                Security Mode feature set
           *    Power Management feature set
           *    Write cache
           *    Look-ahead
           *    Host Protected Area feature set
           *    WRITE_BUFFER command
           *    READ_BUFFER command
           *    NOP cmd
           *    DOWNLOAD_MICROCODE
                SET_MAX security extension
           *    48-bit Address feature set
           *    Device Configuration Overlay feature set
           *    Mandatory FLUSH_CACHE
           *    IDLE_IMMEDIATE with UNLOAD
           *    Write-Read-Verify feature set
           *    WRITE_UNCORRECTABLE_EXT command
           *    {READ,WRITE}_DMA_EXT_GPL commands
           *    Segmented DOWNLOAD_MICROCODE
           *    Gen1 signaling speed (1.5Gb/s)
           *    Gen2 signaling speed (3.0Gb/s)
           *    Native Command Queueing (NCQ)
           *    Phy event counters
                Non-Zero buffer offsets in DMA Setup FIS
                DMA Setup Auto-Activate optimization
           *    Software settings preservation
           *    SMART Command Transport (SCT) feature set
           *    SCT Write Same (AC2)
           *    SCT Error Recovery Control (AC3)
           *    SCT Features Control (AC4)
           *    SCT Data Tables (AC5)
Security: 
        Master password revision code = 65534
                supported
        not     enabled
        not     locked
        not     frozen
        not     expired: security count
                supported: enhanced erase
        2min for SECURITY ERASE UNIT. 2min for ENHANCED SECURITY ERASE UNIT.
Logical Unit WWN Device Identifier: 5002538050019d84
        NAA             : 5
        IEEE OUI        : 002538
        Unique ID       : 050019d84
Checksum: correct

ARMarm, Armada, Espressobin, Marvell