<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Bpif3 on SROEMER</title>
    <link>/tags/bpif3/</link>
    <description>Recent content in Bpif3 on SROEMER</description>
    <generator>Hugo -- gohugo.io</generator>
    <language>en</language>
    <copyright>Stefan Römer</copyright>
    <lastBuildDate>Mon, 13 Jan 2025 01:00:00 +0700</lastBuildDate><atom:link href="/tags/bpif3/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Building a custom firmware for the Banana Pi BPI-F3</title>
      <link>/posts/2025/01/bpi-f3_fw_build/</link>
      <pubDate>Mon, 13 Jan 2025 01:00:00 +0700</pubDate>
      
      <guid>/posts/2025/01/bpi-f3_fw_build/</guid>
      <description>&lt;p&gt;I started building the firmware components for booting the &lt;code&gt;BPI-F3&lt;/code&gt; myself. While &lt;code&gt;SpacemiT&lt;/code&gt; provides the source code
of the different components the official firmware is built from forks of older versions and without the
commit history. In my attempt to build a custom firmware I will use mainline versions where possible and
otherwise create my own forks from mainline sources and merge necessary changes into it.&lt;/p&gt;
&lt;p&gt;Contents:
&lt;nav id=&#34;TableOfContents&#34;&gt;
  &lt;ul&gt;
    &lt;li&gt;&lt;a href=&#34;#status&#34;&gt;Status&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href=&#34;#bootinfo&#34;&gt;Bootinfo&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href=&#34;#fsbl-u-boot-spl&#34;&gt;FSBL (U-Boot SPL)&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href=&#34;#opensbi&#34;&gt;OpenSBI&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href=&#34;#u-boot&#34;&gt;U-Boot&lt;/a&gt;&lt;/li&gt;
  &lt;/ul&gt;
&lt;/nav&gt;&lt;/p&gt;</description>
      <content>&lt;p&gt;I started building the firmware components for booting the &lt;code&gt;BPI-F3&lt;/code&gt; myself. While &lt;code&gt;SpacemiT&lt;/code&gt; provides the source code
of the different components the official firmware is built from forks of older versions and without the
commit history. In my attempt to build a custom firmware I will use mainline versions where possible and
otherwise create my own forks from mainline sources and merge necessary changes into it.&lt;/p&gt;
&lt;p&gt;Contents:
&lt;nav id=&#34;TableOfContents&#34;&gt;
  &lt;ul&gt;
    &lt;li&gt;&lt;a href=&#34;#status&#34;&gt;Status&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href=&#34;#bootinfo&#34;&gt;Bootinfo&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href=&#34;#fsbl-u-boot-spl&#34;&gt;FSBL (U-Boot SPL)&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href=&#34;#opensbi&#34;&gt;OpenSBI&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href=&#34;#u-boot&#34;&gt;U-Boot&lt;/a&gt;&lt;/li&gt;
  &lt;/ul&gt;
&lt;/nav&gt;&lt;/p&gt;
&lt;h1 id=&#34;status&#34;&gt;Status&lt;/h1&gt;
&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th&gt;name&lt;/th&gt;
          &lt;th style=&#34;text-align: center&#34;&gt;build&lt;/th&gt;
          &lt;th style=&#34;text-align: center&#34;&gt;test&lt;/th&gt;
          &lt;th&gt;comment&lt;/th&gt;
      &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
      &lt;tr&gt;
          &lt;td&gt;bootinfo&lt;/td&gt;
          &lt;td style=&#34;text-align: center&#34;&gt;✅&lt;/td&gt;
          &lt;td style=&#34;text-align: center&#34;&gt;✅&lt;/td&gt;
          &lt;td&gt;generated files are identical to vendor files&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;fsbl&lt;/td&gt;
          &lt;td style=&#34;text-align: center&#34;&gt;❌&lt;/td&gt;
          &lt;td style=&#34;text-align: center&#34;&gt;❌&lt;/td&gt;
          &lt;td&gt;no build yet&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;opensbi&lt;/td&gt;
          &lt;td style=&#34;text-align: center&#34;&gt;✅&lt;/td&gt;
          &lt;td style=&#34;text-align: center&#34;&gt;✅&lt;/td&gt;
          &lt;td&gt;boot ok (opensbi messages shown in console)&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;u-boot&lt;/td&gt;
          &lt;td style=&#34;text-align: center&#34;&gt;✅&lt;/td&gt;
          &lt;td style=&#34;text-align: center&#34;&gt;❌&lt;/td&gt;
          &lt;td&gt;doesn&amp;rsquo;t boot linux and only detects 4GB RAM&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;h1 id=&#34;bootinfo&#34;&gt;Bootinfo&lt;/h1&gt;
&lt;p&gt;The first part of the boot process we have control of is the &lt;code&gt;bootinfo&lt;/code&gt; binary. In the &lt;code&gt;SpacemiT&lt;/code&gt; &lt;code&gt;BSP&lt;/code&gt;
&lt;a href=&#34;https://gitee.com/bianbu-linux&#34;&gt;Bianbu Linux&lt;/a&gt; the &lt;code&gt;bootinfo&lt;/code&gt; is generated by a Python script during
the build of &lt;a href=&#34;https://gitee.com/bianbu-linux/uboot-2022.10&#34;&gt;u-boot&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;With &lt;a href=&#34;https://github.com/sroemer/bpif3_gen_binary&#34;&gt;bpif3_gen_binary&lt;/a&gt; I extracted and slightly modified this
script and according configuration files to be used independent from the &lt;code&gt;u-boot&lt;/code&gt; source tree.&lt;/p&gt;
&lt;p&gt;The content of the generated &lt;code&gt;bootinfo&lt;/code&gt; is specified in a &lt;code&gt;JSON&lt;/code&gt; file and could be modified.
However, currently I do not see a need for that.&lt;/p&gt;
&lt;h1 id=&#34;fsbl-u-boot-spl&#34;&gt;FSBL (U-Boot SPL)&lt;/h1&gt;
&lt;p&gt;The &lt;code&gt;FSBL&lt;/code&gt; (First Stage Boot Loader) is generated by the same script as the &lt;code&gt;bootinfo&lt;/code&gt; but requires &lt;code&gt;u-boot-spl.bin&lt;/code&gt; at a path
specified in the according &lt;code&gt;JSON&lt;/code&gt; configuration file.&lt;/p&gt;
&lt;p&gt;While mainline &lt;code&gt;u-boot&lt;/code&gt; already has support for the &lt;code&gt;BPI-F3&lt;/code&gt;, it only generates a &lt;code&gt;u-boot proper&lt;/code&gt; stage
but not a &lt;code&gt;u-boot spl&lt;/code&gt; stage.&lt;/p&gt;
&lt;h1 id=&#34;opensbi&#34;&gt;OpenSBI&lt;/h1&gt;
&lt;p&gt;Mainline &lt;a href=&#34;https://github.com/riscv-software-src/opensbi&#34;&gt;OpenSBI&lt;/a&gt; does not have support for the &lt;code&gt;SpacemiT K1&lt;/code&gt; (yet).
Luckily &lt;a href=&#34;https://github.com/cyyself&#34;&gt;cyyself&lt;/a&gt; already merged support for the &lt;code&gt;SoC&lt;/code&gt; into a clean fork of &lt;code&gt;OpenSBI&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;With &lt;a href=&#34;https://github.com/sroemer/bpif3_opensbi&#34;&gt;bpif3_opensbi&lt;/a&gt; I merged &lt;a href=&#34;https://github.com/cyyself/opensbi/tree/k1-opensbi&#34;&gt;his work&lt;/a&gt;
on to the latest version of mainline &lt;code&gt;OpenSBI&lt;/code&gt;.&lt;/p&gt;
&lt;h1 id=&#34;u-boot&#34;&gt;U-Boot&lt;/h1&gt;
&lt;p&gt;Mainline &lt;a href=&#34;https://github.com/u-boot/u-boot&#34;&gt;u-boot&lt;/a&gt; has support for the &lt;code&gt;BPI-F3&lt;/code&gt;. It lacks support for the &lt;code&gt;u-boot spl&lt;/code&gt;
stage but builds the &lt;code&gt;u-boot proper&lt;/code&gt; main stage.&lt;/p&gt;
</content>
    </item>
    
    <item>
      <title>Getting started with the Banana Pi BPI-F3</title>
      <link>/posts/2025/01/bpi-f3/</link>
      <pubDate>Fri, 10 Jan 2025 00:20:00 +0700</pubDate>
      
      <guid>/posts/2025/01/bpi-f3/</guid>
      <description>&lt;p&gt;I recently bought an &lt;a href=&#34;https://docs.banana-pi.org/en/BPI-F3/BananaPi_BPI-F3&#34;&gt;Banana Pi BPI-F3&lt;/a&gt;.
The BPI-F3 is a development board based on an
&lt;a href=&#34;https://docs.banana-pi.org/en/BPI-F3/SpacemiT_K1_datasheet&#34;&gt;SpacemiT K1&lt;/a&gt; 8-core RISC-V chip.&lt;/p&gt;
&lt;p&gt;Here I will write up how I get it up and running. My plan is to build a custom Gentoo linux
image for it - but that&amp;rsquo;s a long way to go. At first I will connect everything and use an
existing image.&lt;/p&gt;
&lt;p&gt;Requirements:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;BPI-F3&lt;/li&gt;
&lt;li&gt;12V Power Supply&lt;/li&gt;
&lt;li&gt;USB to serial adapter (3.3V TTL)&lt;/li&gt;
&lt;li&gt;USB-C to USB-A cable for connecting the BPI-F3 to the host&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Contents:
&lt;nav id=&#34;TableOfContents&#34;&gt;
  &lt;ul&gt;
    &lt;li&gt;&lt;a href=&#34;#serial-console&#34;&gt;1 - Serial console&lt;/a&gt;
      &lt;ul&gt;
        &lt;li&gt;&lt;a href=&#34;#11-connecting-a-usb-to-serial-adapter&#34;&gt;1.1 Connecting a USB to serial adapter&lt;/a&gt;&lt;/li&gt;
        &lt;li&gt;&lt;a href=&#34;#12-output-with-empty-emmc-and-no-sd-card-inserted&#34;&gt;1.2 Output with empty eMMC and no SD card inserted&lt;/a&gt;&lt;/li&gt;
      &lt;/ul&gt;
    &lt;/li&gt;
    &lt;li&gt;&lt;a href=&#34;#install-image&#34;&gt;2 - Installing an image&lt;/a&gt;
      &lt;ul&gt;
        &lt;li&gt;&lt;a href=&#34;#boot-select&#34;&gt;2.1 - Boot selection settings&lt;/a&gt;&lt;/li&gt;
        &lt;li&gt;&lt;a href=&#34;#download-mode&#34;&gt;2.2 - Enter download mode&lt;/a&gt;&lt;/li&gt;
        &lt;li&gt;&lt;a href=&#34;#fastboot-mode&#34;&gt;2.3 - Enter U-Boot fastboot mode&lt;/a&gt;&lt;/li&gt;
        &lt;li&gt;&lt;a href=&#34;#flash-emmc&#34;&gt;2.4 - Flash eMMC&lt;/a&gt;&lt;/li&gt;
      &lt;/ul&gt;
    &lt;/li&gt;
    &lt;li&gt;&lt;a href=&#34;#3---what-to-do-next&#34;&gt;3 - What to do next?&lt;/a&gt;&lt;/li&gt;
  &lt;/ul&gt;
&lt;/nav&gt;&lt;/p&gt;</description>
      <content>&lt;p&gt;I recently bought an &lt;a href=&#34;https://docs.banana-pi.org/en/BPI-F3/BananaPi_BPI-F3&#34;&gt;Banana Pi BPI-F3&lt;/a&gt;.
The BPI-F3 is a development board based on an
&lt;a href=&#34;https://docs.banana-pi.org/en/BPI-F3/SpacemiT_K1_datasheet&#34;&gt;SpacemiT K1&lt;/a&gt; 8-core RISC-V chip.&lt;/p&gt;
&lt;p&gt;Here I will write up how I get it up and running. My plan is to build a custom Gentoo linux
image for it - but that&amp;rsquo;s a long way to go. At first I will connect everything and use an
existing image.&lt;/p&gt;
&lt;p&gt;Requirements:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;BPI-F3&lt;/li&gt;
&lt;li&gt;12V Power Supply&lt;/li&gt;
&lt;li&gt;USB to serial adapter (3.3V TTL)&lt;/li&gt;
&lt;li&gt;USB-C to USB-A cable for connecting the BPI-F3 to the host&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Contents:
&lt;nav id=&#34;TableOfContents&#34;&gt;
  &lt;ul&gt;
    &lt;li&gt;&lt;a href=&#34;#serial-console&#34;&gt;1 - Serial console&lt;/a&gt;
      &lt;ul&gt;
        &lt;li&gt;&lt;a href=&#34;#11-connecting-a-usb-to-serial-adapter&#34;&gt;1.1 Connecting a USB to serial adapter&lt;/a&gt;&lt;/li&gt;
        &lt;li&gt;&lt;a href=&#34;#12-output-with-empty-emmc-and-no-sd-card-inserted&#34;&gt;1.2 Output with empty eMMC and no SD card inserted&lt;/a&gt;&lt;/li&gt;
      &lt;/ul&gt;
    &lt;/li&gt;
    &lt;li&gt;&lt;a href=&#34;#install-image&#34;&gt;2 - Installing an image&lt;/a&gt;
      &lt;ul&gt;
        &lt;li&gt;&lt;a href=&#34;#boot-select&#34;&gt;2.1 - Boot selection settings&lt;/a&gt;&lt;/li&gt;
        &lt;li&gt;&lt;a href=&#34;#download-mode&#34;&gt;2.2 - Enter download mode&lt;/a&gt;&lt;/li&gt;
        &lt;li&gt;&lt;a href=&#34;#fastboot-mode&#34;&gt;2.3 - Enter U-Boot fastboot mode&lt;/a&gt;&lt;/li&gt;
        &lt;li&gt;&lt;a href=&#34;#flash-emmc&#34;&gt;2.4 - Flash eMMC&lt;/a&gt;&lt;/li&gt;
      &lt;/ul&gt;
    &lt;/li&gt;
    &lt;li&gt;&lt;a href=&#34;#3---what-to-do-next&#34;&gt;3 - What to do next?&lt;/a&gt;&lt;/li&gt;
  &lt;/ul&gt;
&lt;/nav&gt;&lt;/p&gt;
&lt;h1 id=&#34;serial-console&#34;&gt;1 - Serial console&lt;/h1&gt;
&lt;h2 id=&#34;11-connecting-a-usb-to-serial-adapter&#34;&gt;1.1 Connecting a USB to serial adapter&lt;/h2&gt;
&lt;p&gt;Connect GND, RX and TX of the &lt;code&gt;UART0 Debug&lt;/code&gt; connector to an USB serial adapter (3.3V TTL).
Once connected a terminal can be used to connect with the following settings:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;baud rate: 115200
data bits: 8
parity   : none
stop bits: 1
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;12-output-with-empty-emmc-and-no-sd-card-inserted&#34;&gt;1.2 Output with empty eMMC and no SD card inserted&lt;/h2&gt;
&lt;p&gt;In the default configuration the BPI-F3 tries to boot from SD card first and falls back to booting
from eMMC. However, on a new BPI-F3 the eMMC doesn&amp;rsquo;t contain any data and therefore without an SD card the
output looks as shown below:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;␀sys: 0x0
try sd...
bm:3
ERROR:   CMD8
ERROR:   sd f! l:76
bm:0
ERROR:   emmc: invalid bootinfo magic code:0x0
ERROR:   invalid bootinfo image.
ERROR:   entering download mode.
ROM: usb download handler
usb2d_initialize : enter
Controller Run
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;So in the next step we need to prepare an SD card and/or write an image to the eMMC.&lt;/p&gt;
&lt;h1 id=&#34;install-image&#34;&gt;2 - Installing an image&lt;/h1&gt;
&lt;p&gt;I initially planned to start with &lt;a href=&#34;http://archive.spacemit.com/image/k1/version/bianbu/&#34;&gt;Bianbu Linux&lt;/a&gt;
installed on an SD card, but for some reason this was not booting. The image was written correctly to the SD
card and I could not figure out the problem yet. A &lt;a href=&#34;https://dev.gentoo.org/~lu_zero/riscv/&#34;&gt;Gentoo Linux image&lt;/a&gt;
however booted scuccessfully after sorting out one old SD card which corrupted the image on my first attempt.
I therefore went on and installed Bianbu linux on eMMC.&lt;/p&gt;
&lt;h2 id=&#34;boot-select&#34;&gt;2.1 - Boot selection settings&lt;/h2&gt;
&lt;p&gt;For booting from eMMC the DIP switches must be set correctly. In the factory default settings all 4 switches
are set to &lt;code&gt;off&lt;/code&gt;. Switch 1 and 2 are used for selecting the boot device and the factory default already
selects eMMC as we want it.&lt;/p&gt;
&lt;p&gt;Here some details about the DIP switch functions (see BPI-F3 schematic from the BananaPi Docs):&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;# BPI-F3 SW1 functions

-------------
|   off   on |
| 1 -o------ | - boot select 1 (QSPI_DATA0)
| 2 -o------ | - boot select 2 (QSPI_DATA1)
| 3 -o------ | - not connected
| 4 -o------ | - not connected
-------------
     ^---------- factory defaults (all 4 switches set to off)

Boot select:
     1  |  2  | function
    ====|=====|====================
    off | off | TF card -&amp;gt; eMMC (factory default)
    off | on  | TF card -&amp;gt; SPI NAND
    on  | off | TF card -&amp;gt; SPI NOR
    on  | on  | TF card only
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;download-mode&#34;&gt;2.2 - Enter download mode&lt;/h2&gt;
&lt;p&gt;To enter &lt;code&gt;download&lt;/code&gt; mode on the BPI-F3 hold down the &lt;code&gt;FDL&lt;/code&gt; button and then reset the device.
Under some circumstances the device also enters &lt;code&gt;download&lt;/code&gt; mode automatically. This for example
is the case on a failed boot attempt with an empty eMMC.&lt;/p&gt;
&lt;p&gt;Once the device is in &lt;code&gt;download&lt;/code&gt; mode it shows following messages on the serial debug console:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;ROM: usb download handler
usb2d_initialize : enter
Controller Run
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;After connecting the &lt;code&gt;PD12V&lt;/code&gt; USB port of the BPI-F3 to the host a &lt;code&gt;fastboot devices&lt;/code&gt; command
should show the device as shown below:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;$ fastboot devices
dfu-device	 DFU download
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Now we can continue to install the image with &lt;code&gt;fastboot&lt;/code&gt;.&lt;/p&gt;
&lt;h2 id=&#34;fastboot-mode&#34;&gt;2.3 - Enter U-Boot fastboot mode&lt;/h2&gt;
&lt;p&gt;At the current state we only have a simple download mode provided by the boot ROM running.
Now we need to upload the &lt;code&gt;FSBL&lt;/code&gt; (First Stage Boot Loader) which in case of the BPI-F3 is the
&lt;code&gt;U-Boot SPL&lt;/code&gt; stage (U-Boot Secondary Program Loader - second after the code from the boot ROM).
After this we also can upload the main &lt;code&gt;U-Boot&lt;/code&gt; binary (a.k.a. &lt;code&gt;U-Boot proper&lt;/code&gt;) which then provides
the &lt;code&gt;fastboot&lt;/code&gt; mode we use for flashing the firmware.&lt;/p&gt;
&lt;p&gt;The &lt;a href=&#34;https://bianbu-linux.spacemit.com/en/device/boot/&#34;&gt;Boot Development Guide&lt;/a&gt; in the
&lt;a href=&#34;https://bianbu-linux.spacemit.com/en/&#34;&gt;Bianbu Linux Docs&lt;/a&gt; describes this and provides
additional information about the boot process of the &lt;code&gt;SpacemiT K1&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;For entering the &lt;code&gt;U-Boot&lt;/code&gt; &lt;code&gt;fastboot&lt;/code&gt; mode run the following commands:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;fastboot stage factory/FSBL.bin
fastboot continue

# wait some time to ensure u-boot is ready
sleep 1

fastboot stage u-boot.itb
fastboot continue
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;The required files can be found in the &lt;code&gt;zip&lt;/code&gt; files available for &lt;a href=&#34;http://archive.spacemit.com/image/k1/version/bianbu/&#34;&gt;download&lt;/a&gt;
on the &lt;code&gt;SpacemiT&lt;/code&gt; server. Downloads ending in &lt;code&gt;img.zip&lt;/code&gt; contain an image to be written onto an SD card. On the other hand
downloads ending in only &lt;code&gt;zip&lt;/code&gt; contain separate files we can use to upload the firmware via fastboot - that&amp;rsquo;s what we need.&lt;/p&gt;
&lt;p&gt;-&amp;gt; Here the file for &lt;a href=&#34;http://archive.spacemit.com/image/k1/version/bianbu/v2.0.4/bianbu-24.04-minimal-k1-v2.0.4-release-20241205234138.zip&#34;&gt;Bianbu Linux v2.0.4&lt;/a&gt; (minimal variant for K1)&lt;/p&gt;
&lt;h2 id=&#34;flash-emmc&#34;&gt;2.4 - Flash eMMC&lt;/h2&gt;
&lt;p&gt;Once the transition to the &lt;code&gt;U-Boot&lt;/code&gt; &lt;code&gt;fastboot&lt;/code&gt; mode is performed we can create the required partitions and
write the firmware to the eMMC. All required files are included in the &lt;code&gt;zip&lt;/code&gt; file we already downloaded.&lt;/p&gt;
&lt;p&gt;For creating the partitions and writing the firmware run following commands:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;fastboot flash gpt partition_universal.json
fastboot flash bootinfo factory/bootinfo_emmc.bin
fastboot flash fsbl factory/FSBL.bin
fastboot flash env env.bin
fastboot flash opensbi fw_dynamic.itb
fastboot flash uboot u-boot.itb
fastboot flash bootfs bootfs.ext4
fastboot flash rootfs rootfs.ext4
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Now a reset should result in the &lt;code&gt;BPI-F3&lt;/code&gt; booting up the installed &lt;code&gt;Linux&lt;/code&gt;.
The boot process can be watched on the serial debug console.&lt;/p&gt;
&lt;h1 id=&#34;3---what-to-do-next&#34;&gt;3 - What to do next?&lt;/h1&gt;
&lt;ul&gt;
&lt;li&gt;Play around with the device&lt;/li&gt;
&lt;li&gt;Understand the boot process etc.&lt;/li&gt;
&lt;li&gt;Investigate why the SD card images of Bianbu Linux did not boot&lt;/li&gt;
&lt;li&gt;Custom builds of OpenSBI, U-Boot and Linux&lt;/li&gt;
&lt;li&gt;and maybe more &amp;hellip;&lt;/li&gt;
&lt;/ul&gt;
</content>
    </item>
    
  </channel>
</rss>
