DeepComputing RISC-V Board Initial Notes

Just want to note something to everyone here that I discovered tonight:

If you flip both dip switches (to the bottom left of the sd card) to the right, it allows you to boot from an EMMC module.

The board will not show signs of life if it can’t find a valid bootable storage connected to the designated device. But, the dip switches control where it looks.

I’m not sure what the other two options are. One might even be pcie - if someone has an SSD that will fit in the WiFi slot, give it a try! I’m going to mess around with it a bit myself, but I don’t have an SSD that will fit in that slot.

@ryanpetris, you may want to update your initial post with this. In the other post (board schematics thread) I’ve been messing around with the board a bit with some others, too. I’d love to figure out exactly what we have to work with!

2 Likes

The options are:

  1. spi flash
  2. sd card
  3. eMMC
  4. UART

Found some docs here some time ago:
https://docs.u-boot.org/en/latest/board/starfive/pine64_star64.html#boot-source-selection

Note: this is where it will look for the firmware, it does not determine what is actually used to boot Linux of off. So the u-boot/sbi firmware gets loaded from this location, then it does its usual efi boot procedure trying to find an EFI executable at the place it expects, and then boots that. This EFI partition can be on any storage device that is compatible with the firmware, I believe USB is currently not in that list if I’m not mistaken, so only the sd-card or eMMC module are actually valid places for the EFI partition.

In that picture I am running from eMMC actually, that is the 256GB orangepi module

You can also boost the speed of the eMMC:

did some testing, sd-card did not really want to go faster.

4 Likes

In the other thread, someone else mentioned similar documentation for the dip switches, but it was on the DC Roma reference board. I’m just excited to confirm it did, in fact, work - since there’s absolutely no real documentation for this specific board.

And yeah, I sort of misspoke, and meant that the switches are where it would be looking for uboot. I’m unsurprised that it wouldn’t be able to boot an efi partition from USB - though I’d certainly love to try - but what I’m particularly interested in is the idea of having just uboot/grub on the EMMC/SD, but then having the actual root partition be on the USB. This wouldn’t work with a unified kernel, but it MIGHT work with a more traditional kernel loading process. I’ve done something like this before on several ARM boards that didn’t support booting from USB. You could boot into grub from an SD card, but then grub to USB.

It could lead to some level of performance gain - though, I’m not entirely sure how noticeable it would be. The board is definitely limited entirely by the CPU - 4 cores at 1.5GHz just isn’t really enough to do anything substantial. Still, any improvement is an improvement.

Part of the reason I’m particularly interested in this idea is that I’d love to build an arch linux root partition to point it to. I know, that’s very much a living “arch btw” meme, but I’m just more familiar with arch as a whole so it would be more comfortable to use while “playing”.

I’ll have to take a look at the EMMC “overclock” though - my module is pretty old, so I’m not expecting much out of it, but it’s currently only really getting 40MB/s read and write, which is… not great.

1 Like

once you get to grub from sd/eMMC you can indeed hop over to USB, I did this to test a bit with the rEFInd boot loader.

  1. get to grub
  2. go to grub cmdline
  3. navigate to boot partition on USB
  4. load the dtb/initrd/kernel and boot or chainload a different bootloader that is on there

As a fellow arch btw enjoyer I fully understand, so far my experience with arch riscv has been quite good, seems a bit better than arch linux arm in some aspects, but the patch mechanism feels quite manual, mainline kernel updates are not as frequent as I am used to on regular arch/alarm

Yeah I just discovered by accident it’ll work fine. But the way I discovered it annoys me.

My EMMC had a fresh install on it. My previous install that I had on a microSD I moved to USB. I put that in, and booted from EMMC - and it grabbed the root partition from USB.

So, the grub config isn’t going by disk UUID, which is absolutely insane to me. Arch recommends you do UUID by default, for this exact reason.

Funny enough though, just from that limited time using it, there was DEFINITELY a noticeable improvement in system smoothness. This is encouraging.

I will play with it more later. I’ve now stayed up all night tinkering, which was dumb of me. The keyboard also stopped working (I have it in a laptop chassis) - which I’ve seen is a not uncommon problem with the 13 inch boards, so, I’ll have to figure that out too. Fun.

Hmm interesting, I’ve had no issues whatsoever with the keyboard, I have one from the presale program, lucky maybe?

Jeah on my eMMC I have it set up to use UUID.

My biggest issue right now is that it takes very long to load the kernel in grub, I believe there is a fix already out there, I believe it is actually related to the keyboard polling if I’m not mistaken.

Some stats I got using simple-iotest · PyPI

device ( all ext4 except tempfs ) (writev calls) 1M files 8 thread (R/W) 4k files 64 thread Comments
micro sd (ddr225 rated 500GB) 22.60 / 19.86 MiB/s 3.54 / 11.28 MiB/s
eMMC (orange pi 256GB) 42.17 / 35.13 MiB/s 16.01 / 8.79 MiB/s
USB drive (framework 1TB) (connected to lower left port) Too Many IO USB resets 2.91 / 8.57 MiB/s under heavy loads, lots of reset SuperSpeed USB device number 4 using xhci-hc happened ( Oh no )
USB drive (framework 1TB) (connected to upper left port) 152.47 / 130 MiB/s 38.93 / 9.43 MiB/s
memory (tmpfs) 730 / 1198 MiB/s 134.7 / 154.7 MiB/s
USB NVMe enclosure (dockcase) (lower left) 148.67 / 123.05 MiB/s 38.73 / 8.65 MiB/s
USB NVMe enclosure (upper left) Cannot detect
1 Like

Can you post a little note on what you did to get Arch up to date on this? I switched from fedora to ubuntu already and am looking pretty good, but not using the 6.13 kernel like you and have an ancient version of firefox, I could build from scratch but if arch is looking good might play over there.

just arch is not really workable right now, you will have to build your own kernel. The kernel I run doesn´t have gpu acceleration and many other features, you might be able to install firefox but it will be unusable.

I have not yet put a lot of effort into getting the 6.6 vendor kernel working with arch.

In all practicality you’ll still be building from scratch.

But I’ll post a bit:

  1. pacstrap an archriscv rootfs, very similar to the arch wiki but tweak some stuff to use the archriscv sources instead of upstream arch. some info here
  2. build the kernel from what source you want here is my source do a make defconfig and you’ll have a pretty minimal config to get it booted (plus whatever it takes to cross compile/install)
  3. set up mkinitcpio
Modules required in mkinitcpio

MODULES=(
backlight
bluetooth
bridge
btintel
cdns3
cdns3-pci-wrap
cdns3-starfive
clk-starfive-jh7100-audio
clk-starfive-jh7110-aon
clk-starfive-jh7110-isp
clk-starfive-jh7110-stg
clk-starfive-jh7110-vout
drm
dw-hdmi
efivarfs
hci_uart
hid-multitouch
i2c-core
i2c-hid
i2c-hid-of
inno-hdmi
jh7110_pwmdac
jh7110_tdm
jh7110-trng
overlay
phy-generic
phy-jh7110-dphy-rx
phy-jh7110-pcie
phy-jh7110-usb
pcie-starfive
stmmac
video
vs_drm
)

My partitions are set up like this:

mmcblk0      179:0    0   233G  0 disk
├─mmcblk0p1  179:1    0   500M  0 part /efi
├─mmcblk0p2  179:2    0     1G  0 part /boot
└─mmcblk0p3  179:3    0 231.5G  0 part /

my boot partition looks like:

tree /boot/
/boot/
├── grub
│   ├── fonts
│   │   └── unicode.pf2
│   ├── grub.cfg
│   └── grubenv
├── initramfs-linux-fallback.img
├── initramfs-linux.img
├── mainline
│   ├── Image
│   ├── initramfs-linux.img
│   └── jh7110-deepcomputing-fml13v01.dtb
├── test
│   ├── Image
│   ├── initramfs-linux.img
│   └── jh7110-deepcomputing-fml13v01.dtb
├── vendor
│   ├── Image
│   ├── initramfs-linux.img
│   └── jh7110-starfive-visionfive-2-framework.dtb
└── vmlinuz-linux

I should set up a package repo and make an image that can be flashed…

3 Likes

Thanks for this. If you wanted to make a repo w/ a flashable image you would be a hero. (But don’t hurt yourself doing it)

I ordered one of the first waves of mainboards and 13 inch chassis packages. I’ve been really enjoying using the RISC-V Fedora and Ubuntu images inside the chassis but wanted to use the UART/Serial port that was documented on USB port 4 (right side further from the hinge). I designed a simple expansion card to JST and pin header while I wait for the parts to arrive from overseas. I designed this to use with my raspberry pi debug probe and thought that it would be useful for the rest of the group that wants to use the serial channel.

3 Likes

So… I finally have my own RISC-V board up and running after wrestling with incompatible SD cards and having to swap out the 2.8k display. Got Fedora on a 256 gb card now, and it’s OK, though lacking in the multimedia department, and uBlock Origin and Ghostery both seem to mess Firefox up somehow so that it won’t load pages at all.

I’m left with many questions now, including:
• What eMMC would be compatible?
• What would the process be to transfer my SD card installation to it, or what would I have to do to install a fresh system on it?
• Would Ubuntu offer a better experience? I am not eager to redo this SD card after having so much trouble getting any card to work at all. The system hated both 64 gb SanDisk Ultras that I tried, as well as a 128 gb Samsung.

Part of why I went ahead with this crazy experiment is that my AMD board was poorly behaved with every Linux distro I tried. I figured it would be nice to try a RISCy alternative, even if it’s not a consumer-oriented product. I have a couple of Pis and know how janky the experience outside of x86 or Apple can be, but alternatives to x86 are still fairly rare and less than ideal for various reasons.

It’s “janky” IMO because x86 for a long time has had autodiscovery features where the operating system can probe various busses/systems for hardware along with the bios feeding it information about what’s available. ARM has relied on device trees to do the same but they have to be provided for every device, though this is getting better as there is now a way of the bios providing this to the kernel on boot. However not even the brand new snapdragon ultra processors are doing this thus it’s taking a while to get those devices working.

On top of that, arm devices typically use things like gpus that are, I’ll say, allergic, to providing open source drivers. While they might work on Android and ChromeOS, they’ll have proprietary drivers (like Nvidia) that are made for the very specific kernel version they’ve shipped with, and without an update from the manufacturer, won’t be compatible with any other kernel version. This is why for some devices you might have to choose between an older kernel that provides GPU acceleration vs. a newer kernel that does not.

Thus, it’s not really the processor architecture that’s “janky”, it’s the ecosystem around it. A lot of people are wanting ARM or something else to take over the CPU landscape, and maybe it’s time for that, but I hope before that happens we have some sort of standard autodiscovery mechanism to make it as easy as it is today to throw a distro on new hardware it wasn’t designed for and just have it work.

2 Likes

Absolutely. x86 has been developed into a standard, but at the center of it is something proprietary, and that’s a crying shame. No better than having Microsoft’s OS and office products treated as de facto standards. I love the idea of computer hardware and software being 100% open, with manufacturers adding value on top of that free IP. I hope RISC-V will evolve into something like this, an entirely open computing standard.

While the CPU architecture is open, if it’s ever used by mainstream manufacturers, you can bet that the firmware/bios/whatever you want to call it will be closed source and locked down. It has to be for something like Secure Boot to “work,” which is never going to go away. Those of us that actually care about things being open are a tiny minority; the sad truth is that most people see their computers as just an appliance they use to access the internet.

for the eMMC you can see this

Moving it over is going to be interesting, I have a usb eMMC adapter which helps a lot. But you might need to do some funky bootloader stuff if you want to do it on the laptop itself. By default it will load the efi partition from the sd-card first. So whatever is at /efi/boot/boot*.efi on the efi partition of the sd-card. If there is nothing there it should switch over to checking the efi partitoin on the eMMC module.

2 Likes

waiting for the imagination gpu driver to get upstreamed got me like :skull:

There is something happening in the imagination/riscv space though, but different SoC, but I think that when that one is upstreamed it should not be a very big deal to get the one in the jh7110 upstream aswell.

But yeah this needs to get in first but it seems to have kind off died.

I’m open to doing a fresh install using an adapter as well. If it’s as simple as flashing it in Balena Etcher like I flashed the SD card and flipping the dip switches to boot from the eMMC, I’d certainly be willing to give that a try.

yeah should be that easy, the usb adapter I have just mounts it like a regular usb stick

The adapters I’m finding so far seem to be MicroSD to eMMC on the one hand, and then a USB 3.0 to eMMC/MicroSD on the other, but the connection on the latter doesn’t look like it would fit that Orange Pi module with its two little sockets. But the former has the right pair of sockets on it, so I guess that would be the one to try: Amazon.com: Lizusidtsy EMMC to USD Board EMMC to USB Adapter Board MicroSD EMMC Modules for Rock PI 4A/4B, 500333833 : Electronics

1 Like