From Fedora Project Wiki
Line 9: Line 9:


=== Linux: ===
=== Linux: ===
* s32ilp32 - Linux version 6.3.0-rc1 (124MB)
* s32ilp32 - Linux version 6.3.0-rc1 (124MB) rv32_defconfig:
<pre>
<pre>
           rv32_defconfig: $(Q)$(MAKE) -f $(srctree)/Makefile
           $(Q)$(MAKE) -f $(srctree)/Makefile defconfig 32-bit.config
          defconfig 32-bit.config
</pre>
</pre>


* s64lp64  - Linux version 6.3.0-rc1 (126MB)
* s64lp64  - Linux version 6.3.0-rc1 (126MB) defconfig:
<pre>
<pre>
           defconfig: $(Q)$(MAKE) -f $(srctree)/Makefile defconfig
           $(Q)$(MAKE) -f $(srctree)/Makefile defconfig
</pre>
</pre>


* s64ilp32 - Linux version 6.3.0-rc1 (126MB)
* s64ilp32 - Linux version 6.3.0-rc1 (126MB) rv64ilp32_defconfig:
<pre>
<pre>
          rv64ilp32_defconfig: $(Q)$(MAKE) -f $(srctree)/Makefile
          $(Q)$(MAKE) -f $(srctree)/Makefile defconfig 64ilp32.config
  defconfig 64ilp32.config
</pre>
</pre>
=== Opensbi: ===
=== Opensbi: ===



Revision as of 09:16, 21 August 2023

Why 32-bit Linux?

The motivation for using a 32-bit Linux kernel is to reduce memory footprint and meet the small capacity of DDR & cache requirement .(e.g., 64/128MB SIP SoC).

The size of ilp32's long & pointer is just half of lp64's (rv64 default abi - longs and pointers are all 64-bit). This significant difference in data type causes different memory & cache footprint costs. Here is the comparison measurement between s32ilp32, s64ilp32, and s64lp64 in the same 128MB qemu system environment:

Rootfs:

  • u32ilp32 - Using the same 32-bit userspace rootfs.ext2 (UXL=32) binary from buildroot 2023.02-rc3, qemu_riscv32_virt_defconfig

Linux:

  • s32ilp32 - Linux version 6.3.0-rc1 (124MB) rv32_defconfig:
           $(Q)$(MAKE) -f $(srctree)/Makefile defconfig 32-bit.config
  • s64lp64 - Linux version 6.3.0-rc1 (126MB) defconfig:
           $(Q)$(MAKE) -f $(srctree)/Makefile defconfig
  • s64ilp32 - Linux version 6.3.0-rc1 (126MB) rv64ilp32_defconfig:
          $(Q)$(MAKE) -f $(srctree)/Makefile defconfig 64ilp32.config

Opensbi:

  • m64lp64 - (2MB) OpenSBI v1.2-80-g4b28afc98bbe
  • m32ilp32 - (4MB) OpenSBI v1.2-80-g4b28afc98bbe


64ilp32.png