[systemd-devel] [PATCH] architecture: Add support for the RISC-V architecture.

Richard W.M. Jones rjones at redhat.com
Fri Sep 30 15:45:00 UTC 2016


[This is only compile-tested, as our kernel doesn't (yet) have
enough configured features to run systemd, but I'll report back
when I get it running.]

RISC-V is an open source ISA in development since 2010 at UCB.
For more information, see https://riscv.org/

I am adding RISC-V support to Fedora:
https://fedoraproject.org/wiki/Architectures/RISC-V

There are three major variants of the architecture (32-, 64- and
128-bit).  The 128-bit variant is a paper exercise, but the other two
really exist in silicon.  RISC-V is always little endian.

On Linux, the default kernel uname(2) can return "riscv" for all
variants.  However a patch was added recently which makes the kernel
return one of "riscv32" or "riscv64" (or in future "riscv128").  So
systemd should be prepared to handle any of "riscv", "riscv32",
"riscv64" or "riscv128".  If the kernel returns "riscv" then you
need to use the pointer size in order to know the real variant.

The Fedora/RISC-V kernel only ever returns "riscv64" since we're only
doing Fedora for 64 bit at the moment, and we've patched the kernel so
it doesn't return "riscv".

As well as the major bitsize variants, there are also architecture
extensions.  However I'm trying to ensure that uname(2) does *not*
return any other information about those in utsname.machine, so that
we don't end up with "riscv64abcde" nonsense.  Instead those
extensions will be exposed in /proc/cpuinfo similar to how flags work
in x86.

I should also note that __SIZEOF_POINTER__ is a GCC extension, but it
appears to be used already in systemd so I guess that's OK.

Rich.



More information about the systemd-devel mailing list