aki_iic’s blog

己の欲せざる処人に施す事無かれ、狂人の真似するは即ち狂人なり

Ox64(Boot編)

 色々ありましたがOx64(BL808)のlinuxがbootする様になりました。という事で起動画面:

Ox64(BL808)Linux boot start

(中略)

Ox64(BL808)Linux boot login prompt

1.謝辞

 Ox64(BL808)でlinuxがboot出来る様になったのは以下のサイトの方のおかげです(感謝):

adventurist.me

2.参照すべき情報源

 2.1. GitHub

github.com

2.2. YouTube

www.youtube.com

3.手順

 3.1 ファームウェア(sdcardイメージ含む)を入手:

https://github.com/openbouffalo/buildroot_bouffalo/releases/download/v1.0.1/bl808-linux-pine64_ox64_full_defconfig.tar.gz

 3.2 tar zxvf で展開

-rw-r--r-- 1 naka naka  7340032 Mar  6 21:07 bl808-firmware.bin
-rw-r--r-- 1 naka naka    31360 Mar  6 21:07 d0_lowload_bl808_d0.bin
-rw-r--r-- 1 naka naka    65760 Mar  6 21:07 m0_lowload_bl808_m0.bin
-rw-r--r-- 1 naka naka 43859444 Mar  6 21:07 sdcard-pine64_ox64_full_defconfig.img.xz

3.3 BL社の書込ツールの1.8.3を入手(重要:1.8.4では正常に書き込めないのにエラーにならない。なので1.8.3の入手は重要且つ必須):

https://dev.bouffalolab.com/media/upload/download/BouffaloLabDevCube-v1.8.3.zip

3.4.1 zipを解凍してUbuntuならば sudo ./BLDevCube-ubuntuを起動し、BL808を選択し書込ツールを起動(重要:1.8.3である事。1.8.4では正常に書き込んだ様に見えても、起動しません(騙された、よくある話:)。

firmware書込(1.8.3である事を確認)

 各パラメタが変わっているので確認の上、書込(group,address,file名全てを確認)。

3.4.2 IOTタブに切り替えてファームウェアを書込(kernelローダー?)

IOTタブに切り替えて書込(アドレスに注意)

 アドレス、ファイル名を確認の上、書込。

3.5マイクロSDカードの書込

 3.5.1 xz圧縮されたマイクロSDイメージを展開

$ unxz sdcard-pine64_ox64_full_defconfig.img.xz 

 3.5.2 展開された .imgファイルをマイクロSDカードのddコマンドで書込(デバイス名は環境に合わせて適当に:)

sudo dd bs=10M if=./sdcard-pine64_ox64_full_defconfig.img of=/dev/sda

 3.5.3 マイクロSDをBL808のマイクロSD スロットに挿す

3.6 Linux用シリアルコンソール接続。

Ox64(BL808)のpin32(GPIO16:TXD)にUSB-serialのRXDを接続し、pin31(GPIO17:RXD)にUSB-serialのTXDを接続。下図参照:

3.7 USB-serialでターミナル(例えば gtkterm)を起動しておく sudo gtkterm

 3.7.1 通信パラメタ設定(gtktermの場合):

gtkterm BL808 linux serial console GPIO16,17

 3.7.2 gtktermを開いておく

sudo gtkterm

3.8 電源Off/On or BL808のpin30をgndに接続/開放してハードウェアリセット

[I] 
[I]
  ____                   ____               __  __      _       
[I]  / __ \                 |  _ \             / _|/ _|    | |      
[I]
| |  | |_ __   ___ _ __ | |_) | ___  _   _| |_| |_ __ _| | ___  
[I] | |  | | '_ \ / _ \ '_ \|  _ < / _ \| | | |  _|  _/ _` | |/ _ \ 
[I]
| |__| | |_) |  __/ | | | |_) | (_) | |_| | | | || (_| | | (_) |
[I]  \____/| .__/ \___|_| |_|____/ \___/ \__,_|_| |_| \__,_|_|\___/ 
[I]
       | |                                                      
[I]        |_|                                                      
[I]
 
[I] Powered by BouffaloLab
[I]
Build:11:52:04,Mar  6 2023
[I] Copyright (c) 2023 OpenBouffalo team
[I]
Copyright (c) 2022 Bouffalolab team
[I][] dynamic memory init success,heap s[I][LowLoad] D0 start...
[I][LowLoad] low_load start... 
[I][LowLoad] Header at 0x5d5ff000
[I][LowLoad] Section dtb(1) - Start 0x5d5ff100, Size 14314
[I][LowLoad] Copying DTB to 0x51ff8000...0x51ffb7ea
[I][LowLoad] Done!
[I][LowLoad] Section OpenSBI(2) - Start 0x5d60f100, Size 109864
[I][LowLoad] Copying OpenSBI to 0x3ef80000...0x3ef9ad28
[I][LowLoad] Done!
[I][LowLoad] Section Kernel(3) - Start 0x5d62f100, Size 315597
[I][LowLoad] Uncompressing Kernel to 0x50000000...
[I][LowLoad] Done!
[I][LowLoad] CRC: 00000000
[I][LowLoad] load time: 61312 us 
[I][LowLoad] Setting PMP
[I][LowLoad] Booting OpenSBI at 0x000000003ef80000 with DTB at 0x51ff8000

OpenSBI v1.2
   ____                    _____ ____ _____
  / __ \                  / ____|  _ \_   _|
 | |  | |_ __   ___ _ __ | (___ | |_) || |
 | |  | | '_ \ / _ \ '_ \ \___ \|  _ < | |
 | |__| | |_) |  __/ | | |____) | |_) || |_
  \____/| .__/ \___|_| |_|_____/|____/_____|
        | |
        |_|

Platform Name             : Pine64 Ox64 (D0)
Platform Features         : medeleg
Platform HART Count       : 1
Platform IPI Device       : aclint-mswi
Platform Timer Device     : aclint-mtimer @ 1000000Hz
Platform Console Device   : bflb_uart
Platform HSM Device       : ---
Platform PMU Device       : ---
Platform Reboot Device    : ---
Platform Shutdown Device  : ---
Firmware Base             : 0x3ef80000
Firmware Size             : 200 KB
Runtime SBI Version       : 1.0

Domain0 Name              : root
Domain0 Boot HART         : 0
Domain0 HARTs             : 0*
Domain0 Region00          : 0x00000000e4008000-0x00000000e400bfff (I)
Domain0 Region01          : 0x00000000e4000000-0x00000000e4007fff (I)
Domain0 Region02          : 0x000000003ef80000-0x000000003efbffff ()
Domain0 Region03          : 0x0000000000000000-0xffffffffffffffff (R,W,X)
Domain0 Next Address      : 0x0000000050000000
Domain0 Next Arg1         : 0x0000000051ff8000
Domain0 Next Mode         : S-mode
Domain0 SysReset          : yes

Boot HART ID              : 0
Boot HART Domain          : root
Boot HART Priv Version    : v1.11
Boot HART Base ISA        : rv64imafdcvx
Boot HART ISA Extensions  : time
Boot HART PMP Count       : 8
Boot HART PMP Granularity : 4096
Boot HART PMP Address Bits: 38
Boot HART MHPM Count      : 8
Boot HART MIDELEG         : 0x0000000000000222
Boot HART MEDELEG         : 0x000000000000b109


U-Boot 2023.04-rc2 (Mar 06 2023 - 11:48:40 +0000)

DRAM:  64 MiB
Core:  36 devices, 17 uclasses, devicetree: board
MMC:   mmc@20060000: 0
Loading Environment from FAT... Unable to read "uboot.env" from mmc0:2... 
Loading Environment from nowhere... OK
In:    serial@30002000
Out:   serial@30002000
Err:   serial@30002000
Net:   
Warning: emac@20070000 (eth0) using random MAC address - 6e:2b:28:00:c7:91
eth0: emac@20070000
Hit any key to stop autoboot:  0 
switch to partitions #0, OK
mmc0 is current device
Scanning mmc 0:2...
Found /extlinux/extlinux.conf
Retrieving file: /extlinux/extlinux.conf
Select the boot mode
1:    Pine64 0X64 Kernel
2:    Sipeed M1SDock Kernel
Enter choice: 1:    Pine64 0X64 Kernel
Retrieving file: /extlinux/../Image
append: root=PARTLABEL=rootfs rootwait rw rootfstype=ext4 console=ttyS0,2000000 loglevel=8 earlycon=sbi
Retrieving file: /extlinux/../bl808-pine64-ox64.dtb
## Flattened Device Tree blob at 51ff8000
   Booting using the fdt blob at 0x51ff8000
Working FDT set to 51ff8000
   Loading Device Tree to 0000000053f22000, end 0000000053f25fab ... OK
Working FDT set to 53f22000

Starting kernel ...

[    0.000000] Linux version 6.2.0 (runner@fv-az587-938) (riscv64-unknown-linux-gnu-gcc (Xuantie-900 linux-5.10.4 glibc gcc Toolchain V2.6.1 B-20220906) 10.2.0, GNU ld (GNU Binutils) 2.35) #1 Mon Mar  6 11:17:27 UTC 2023
[    0.000000] OF: fdt: Ignoring memory range 0x50000000 - 0x50200000
[    0.000000] Machine model: Pine64 Ox64
[    0.000000] earlycon: sbi0 at I/O port 0x0 (options '')
[    0.000000] printk: bootconsole [sbi0] enabled
[    0.000000] efi: UEFI not found.
[    0.000000] Zone ranges:
[    0.000000]   DMA32    [mem 0x0000000050200000-0x0000000053ffffff]
[    0.000000]   Normal   empty
[    0.000000] Movable zone start for each node
[    0.000000] Early memory node ranges
[    0.000000]   node   0: [mem 0x0000000050200000-0x0000000053ffffff]
[    0.000000] Initmem setup node 0 [mem 0x0000000050200000-0x0000000053ffffff]
[    0.000000] SBI specification v1.0 detected
[    0.000000] SBI implementation ID=0x1 Version=0x10002
[    0.000000] SBI TIME extension detected
[    0.000000] SBI IPI extension detected
[    0.000000] SBI RFENCE extension detected
[    0.000000] riscv: base ISA extensions acdfim
[    0.000000] riscv: ELF capabilities acdfim
[    0.000000] pcpu-alloc: s0 r0 d32768 u32768 alloc=1*32768
[    0.000000] pcpu-alloc: [0] 0 
[    0.000000] Built 1 zonelists, mobility grouping on.  Total pages: 15655
[    0.000000] Kernel command line: root=PARTLABEL=rootfs rootwait rw rootfstype=ext4 console=ttyS0,2000000 loglevel=8 earlycon=sbi
[    0.000000] Dentry cache hash table entries: 8192 (order: 4, 65536 bytes, linear)
[    0.000000] Inode-cache hash table entries: 4096 (order: 3, 32768 bytes, linear)
[    0.000000] mem auto-init: stack:off, heap alloc:off, heap free:off
[    0.000000] Memory: 48084K/63488K available (3941K kernel code, 4584K rwdata, 2048K rodata, 2118K init, 301K bss, 15404K reserved, 0K cma-reserved)
[    0.000000] SLUB: HWalign=64, Order=0-3, MinObjects=0, CPUs=1, Nodes=1
[    0.000000] NR_IRQS: 64, nr_irqs: 64, preallocated irqs: 0
[    0.000000] riscv-intc: 64 local interrupts mapped
[    0.000000] plic: interrupt-controller@e0000000: mapped 64 interrupts with 1 handlers for 2 contexts.
[    0.000000] riscv-timer: riscv_timer_init_dt: Registering clocksource cpuid [0] hartid [0]
[    0.000000] clocksource: riscv_clocksource: mask: 0xffffffffffffffff max_cycles: 0x1d854df40, max_idle_ns: 3526361616960 ns
[    0.000003] sched_clock: 64 bits at 1000kHz, resolution 1000ns, wraps every 2199023255500ns
[    0.000921] Console: colour dummy device 80x25
[    0.001166] Calibrating delay loop (skipped), value calculated using timer frequency.. 2.00 BogoMIPS (lpj=4000)
[    0.001687] pid_max: default: 32768 minimum: 301
[    0.002408] Mount-cache hash table entries: 512 (order: 0, 4096 bytes, linear)
[    0.002749] Mountpoint-cache hash table entries: 512 (order: 0, 4096 bytes, linear)
[    0.007711] cblist_init_generic: Setting adjustable number of callback queues.
[    0.008028] cblist_init_generic: Setting shift to 0 and lim to 1.
[    0.008941] ASID allocator using 16 bits (65536 entries)
[    0.010161] EFI services will not be available.
[    0.011193] devtmpfs: initialized
[    0.014878] clocksource: jiffies: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 7645041785100000 ns
[    0.015374] futex hash table entries: 256 (order: 0, 6144 bytes, linear)
[    0.016003] pinctrl core: initialized pinctrl subsystem
[    0.018538] NET: Registered PF_NETLINK/PF_ROUTE protocol family
[    0.019438] DMA: preallocated 128 KiB GFP_KERNEL pool for atomic allocations
[    0.019826] DMA: preallocated 128 KiB GFP_KERNEL|GFP_DMA32 pool for atomic allocations
[    0.025450] bflb-ipc 30005000.mailbox: Bouffalo Lab IPC mailbox interrupt controller
[    0.030632] SCSI subsystem initialized
[    0.033281] clocksource: Switched to clocksource riscv_clocksource
[    0.061848] NET: Registered PF_INET protocol family
[    0.062512] IP idents hash table entries: 2048 (order: 2, 16384 bytes, linear)
[    0.064609] tcp_listen_portaddr_hash hash table entries: 512 (order: 0, 4096 bytes, linear)
[    0.065045] Table-perturb hash table entries: 65536 (order: 6, 262144 bytes, linear)
[    0.065560] TCP established hash table entries: 512 (order: 0, 4096 bytes, linear)
[    0.065969] TCP bind hash table entries: 512 (order: 1, 8192 bytes, linear)
[    0.066403] TCP: Hash tables configured (established 512 bind 512)
[    0.067087] UDP hash table entries: 256 (order: 1, 8192 bytes, linear)
[    0.067423] UDP-Lite hash table entries: 256 (order: 1, 8192 bytes, linear)
[    0.068191] NET: Registered PF_UNIX/PF_LOCAL protocol family
[    0.070727] workingset: timestamp_bits=62 max_order=14 bucket_order=0
[    0.073035] NET: Registered PF_ALG protocol family
[    0.073472] Block layer SCSI generic (bsg) driver version 0.4 loaded (major 252)
[    0.073818] io scheduler mq-deadline registered
[    0.074072] io scheduler kyber registered
[    0.074403] io scheduler bfq registered
[    0.075586] bflb-gpio-pinctrl 200008c4.pinctrl: No cache defaults, reading back from HW
[    0.077971] bflb-gpio-pinctrl 200008c4.pinctrl: Bouffalo Lab pinctrl+GPIO(+interrupt) controller - Registered 32 function(s) for 46 pin(s)
[    0.083822] 30002000.serial: ttyS0 at MMIO 0x30002000 (irq = 2, base_baud = 2500000) is a BFLB UART
[    0.084305] printk: console [ttyS0] enabled
[    0.084305] printk: console [ttyS0] enabled
[    0.084751] printk: bootconsole [sbi0] disabled
[    0.084751] printk: bootconsole [sbi0] disabled
[    0.086420] 2000aa00.serial: ttyS1 at MMIO 0x2000aa00 (irq = 3, base_baud = 2500000) is a BFLB UART
[    0.115150] brd: module loaded
[    0.131867] loop: module loaded
[    0.133153] physmap-flash 58500000.xip_flash: physmap platform flash device: [mem 0x58500000-0x588fffff]
[    0.139046] wireguard: WireGuard 1.0.0 loaded. See www.wireguard.com for information.
[    0.139542] wireguard: Copyright (C) 2015-2019 Jason A. Donenfeld <Jason@zx2c4.com>. All Rights Reserved.
[    0.140176] PPP generic driver version 2.4.2
[    0.140878] PPP BSD Compression module registered
[    0.141191] PPP Deflate Compression module registered
[    0.142301] sdhci: Secure Digital Host Controller Interface driver
[    0.142692] sdhci: Copyright(c) Pierre Ossman
[    0.142962] sdhci-pltfm: SDHCI platform and OF driver helper
[    0.144299] mmc0 bounce up to 128 segments into one, max segment size 65536 bytes
[    0.145462] ledtrig-cpu: registered to indicate activity on CPUs
[    0.146267] bflb-seceng 20004000.seceng: No cache defaults, reading back from HW
[    0.149813] random: crng init done
[    0.150060] bflb-seceng 20004000.seceng: Bouffalo Lab Secure Engine
[    0.151022] riscv-pmu-sbi: SBI PMU extension is available
[    0.151429] riscv-pmu-sbi: 16 firmware and 10 hardware counters
[    0.153260] NET: Registered PF_INET6 protocol family
[    0.156113] Segment Routing with IPv6
[    0.156482] In-situ OAM (IOAM) with IPv6
[    0.156919] sit: IPv6, IPv4 and MPLS over IPv4 tunneling driver
[    0.158824] NET: Registered PF_PACKET protocol family
[    0.159197] Key type dns_resolver registered
[    0.183282] debug_vm_pgtable: [debug_vm_pgtable         ]: Validating architecture page table helpers
[    0.197397] mmc0: SDHCI controller on 20060000.sdhci [20060000.sdhci] using DMA
[    0.198162] Waiting for root device PARTLABEL=rootfs...
[    0.488725] mmc0: new high speed SDXC card at address 0001
[    0.491219] mmcblk0: mmc0:0001 ASTC 58.2 GiB 
[    0.509000]  mmcblk0: p1 p2 p3
[    0.689970] EXT4-fs (mmcblk0p3): recovery complete
[    0.692941] EXT4-fs (mmcblk0p3): mounted filesystem c0eebeb6-58dd-4946-bc48-e8c2c43098cc with ordered data mode. Quota mode: disabled.
[    0.693839] VFS: Mounted root (ext4 filesystem) on device 179:3.
[    0.696006] devtmpfs: mounted
[    0.704259] Freeing unused kernel image (initmem) memory: 2116K
[    0.704747] Run /sbin/init as init process
[    0.705025]   with arguments:
[    0.705219]     /sbin/init
[    0.705454]   with environment:
[    0.705661]     HOME=/
[    0.705819]     TERM=linux
[    0.952148] EXT4-fs (mmcblk0p3): re-mounted c0eebeb6-58dd-4946-bc48-e8c2c43098cc. Quota mode: disabled.
[    1.176205] FAT-fs (mmcblk0p2): Volume was not properly unmounted. Some data may be corrupt. Please run fsck.
[    1.289656] Adding 1048572k swap on /dev/mmcblk0p1.  Priority:-2 extents:1 across:1048572k SS
Root Partition Already resized
Starting syslogd: OK
Starting klogd: OK
Running sysctl: OK
Starting mdev... OK
Initializing random number generator: OK
Saving random seed: OK
Starting rpcbind: OK
Starting iptables: OK
Starting network: OK
Starting dhcpcd...
dhcpcd-9.4.1 starting
dhcp_vendor: Invalid argument
forked to background, child pid 103
Starting sntp: sntp 4.2.8p15@1.3728-o Mon Mar  6 10:45:15 UTC 2023 (1)
pool.ntp.org lookup error Temporary failure in name resolution
FAIL
Starting ntpd: OK
Starting dropbear sshd: OK

Welcome to Buildroot
ox64 login: 

4.再び謝辞

 記載させて頂いた方々(ハンダ付け編、書込編含めて)の情報が無ければ(説くに1.8.3の件:)今でも起動しない状況を彷徨っていた事と思います。コミュニティの方々に重ねて感謝申し上げます。ありがとう!

5.環境確認

Ox64(BL808)環境確認

 Linuxが起動した、嬉しい:)のだけどメモリ64MB(桁数合ってます。64メガバイトです:)であるのを忘れてはならない。ネットワークは設定方法が分からない(Ox64(BL808)にはWifi/BT/ZigbeeのチップがRV32ベースで搭載されているのだが)ので今は何もネットワークに繋がっていない、つまり使えない状態:

# ifconfig
lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 1000  (Local Loopback)
        RX packets 1032  bytes 76352 (74.5 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 1032  bytes 76352 (74.5 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

 他力本願ではありますが、情報収集に努める事にしよう。今はこれでお腹いっぱいであります(良かったよかった:)。