Debian MIPS Port

MIPS is one of the first RISC CPU architectures invented around 1985. It was a radical design which removed many features deemed unnecessary, since the goal was to get the best possible performance from a limited transistor count. Back then, MIPS were powerful general purpose CPUs, and very successful in that role, until they lost ground to systems based on cheap mass-produced Intel-compatible CPUs. Later on, the simple and elegant design allowed to create a wide range of low power CPUs targeted for embedded applications.

Today, MIPS is a popular architecture for embedded systems, with a strong presence in various networked devices.

Support

Through the Debian 10 ("buster") release, Debian currently provides 3 ports, 'mips', 'mipsel', and 'mips64el'. The 'mips' and 'mipsel' ports are respectively big and little endian variants, using the O32 ABI with hardware floating point. They use the MIPS II ISA in Jessie and the MIPS32R2 ISA in Stretch and later. The 'mips64el' port is a 64-bit little endian port using the N64 ABI, hardware floating point and the MIPS64R2 ISA.

The 'mips' (32-bit big-endian MIPS CPUs) Debian port was discontinued post Debian 10 ("buster"). Please prepare to migrate your MIPS hardware to mipsel or mips64el, much recent MIPS hardware (such as Octeon CPUs) supports endian switching at runtime and can therefore be supported by the other MIPS ports.

The 'mipsel' (32-bit little-endian MIPS CPUs) Debian port won't be supported by Trixie. CIP United is maintaining an Y2038-fixed, FP64, ?NaN2008 port of mipsel. It is *NOT* binary compatiable with the current official mipsel port. https://repo.oss.cipunited.com/debian/README.nan2008.txt

CIP United is maintaining a port for MIPS64R6: https://wiki.debian.org/MipsRev6

Contact

Installation

The MIPS ports can be installed via Debian Installer. Both Stable images and daily images are available for 'mips', 'mipsel' and 'mips64el'.

Build daemons & porter boxes

Machine

Architecture

Memory

Sub-architecture

 Purpose

FPU?

mips-aql-01.debian.org

mips

8GB

Cavium Octeon II

buildd

No

mips-aql-02.debian.org

mips

8GB

Cavium Octeon II

buildd

No

mips-aql-04.debian.org

mips

8GB

Cavium Octeon II

buildd

No

mips-aql-05.debian.org

mips

8GB

Cavium Octeon II

buildd

No

mips-aql-06.debian.org

mips

8GB

Cavium Octeon III

buildd

Yes

mips-sil-01.debian.org

mips

8GB

Cavium Octeon III

buildd

Yes

minkus.debian.org

mips

8GB

Cavium Octeon II

porter box

No

eberlin.debian.org

mipsel/mips64el

4GB

Loongson 3A

buildd

Yes

eller.debian.org

mipsel/mips64el

8GB

Cavium Octeon III

porterbox

Yes

mipsel-aql-01.debian.org

mipsel/mips64el

8GB

Loongson 3A

buildd

Yes

mipsel-aql-02.debian.org

mipsel/mips64el

8GB

Loongson 3A

buildd

Yes

mipsel-aql-03.debian.org

mipsel/mips64el

8GB

Cavium Octeon III

buildd

Yes

mipsel-manda-01.debian.org

mipsel/mips64el

8GB

Loongson 3A

buildd

Yes

mipsel-manda-02.debian.org

mipsel/mips64el

8GB

Loongson 3A

buildd

Yes

mipsel-manda-03.debian.org

mipsel/mips64el

8GB

Cavium Octeon III

buildd

Yes

mipsel-sil-01.debian.org

mipsel/mips64el

8GB

Cavium Octeon III

buildd

Yes

Most of the machines above were donated by MIPS.

Status

Known issues

Generic issues

List of packages with wrong DT_MIPS_RLD_MAP_REL entries. For tracking purposes (not really important to work on it now).

mips/sid

gammaray_2.4.0-1

FTBFS, investigation needed

libzypp_15.3.0-1

FTBFS, #841769

openmeeg_2.3.0~20160502-2

FTBFS, #730904

mips/experimental: None

mips/stretch: None

mipsel/sid

libzypp_15.3.0-1

FTBFS, #841769

openmeeg_2.3.0~20160502-2

FTBFS, #730904

mipsel/experimental: None

mipsel/stretch: None

mips64el/sid

elektra_0.8.14-5.1

FTBFS due to #846200

libzypp_15.3.0-1

FTBFS, #841769

openmeeg_2.3.0~20160502-2

FTBFS, #730904

mips64el/experimental: None

mips64el/stretch: None

Packages failing to build from source

Package

Bug number

Architecture

Comments

ergo

mips & mipsel

Toolchain bug PR78012

gcc-7

mips64el

Toolchain bug PR78660

mono

#840494

mipsel

Investigations started by the maintainer, but help from a porter would be welcome.

openjdk-9

#841173/JDK-8170639

mips*

Patch available in the BTS, will not be upstreamed until JDK 10

pandas

mips*

Bug in NumPy (https://github.com/numpy/numpy/pull/8713). Will be fixed in 1.13, and possibly 1.12.1

rustc

mips*

https://github.com/rust-lang/rust/issues/39013 https://github.com/rust-lang/rust/issues/39014

xfractint

mips & mipsel

Probably tool chain bug PR78012

Toolchain issues

Package

Bug number

Comments

binutils 

#765710

It seems we still have 23 tests failing in the ld testsuite.

binutils

Binutils21900

linking shared library with -z defs --warn-unresolved-symbols emits null relocation - affects gnome-settings-daemon

binutils

Binutils21762

.stabs directives might cause functions to be marked as MIPS16 - affects FPC

gcc

#798710/PR79560

libgccjit is broken on mips* (confirmed on gcc-6 and gcc-7). 

gcc

PR71155

symbol in wrong section .data.rel.local on mips64el

gcc

PR78176

miscompiles ldxc1 with large pointers on 32-bits. Workaround (-mno-lxc1-sxc1) applied to gcc-6 package.

gcc

PR81358

GCC should link in libatomic automatically if needed to fix atomic undefined references

gcc

PR81803

miscompilation when "small" variables spilt to stack on mips64el

gcc/go

#839132

It seems Matthias Klose has backported the libffi changes into gcc-6. To be tested.

gcc/go

#876639

gccgo and golang disagree on the names of the mips architectures. This prevents bootstrapping golang using gccgo.

gcc/go

#867358

waitid: bad address, seems kernel bug.

llvm

LLVM #32020

unoptimized __atomic_compare_exchange hangs on Octeon (affects at least libc++ and rust).

Important bugs

Package

Bug number

Description

Comments

installation-guide

#855134

review sections 2.1 and 5.1 on all 3 arches for stretch

Mention that KASLR currently ignores the initrd and may overwrite it (either use "nokaslr" or place the initrd beyond around 32MB in RAM, this is mostly for QEMU images). Some patches submitted, but still needs some work.

strace

strace testsuite failures on mips64el

Likely kernel bug - see upstream thread.

valgrind

#854194

valgrind: segfaults on MIPS Cavium Octeon boards

Fixed in upstream SVN.

Other bugs

Package

Bug number

Description

Comments

flint

Toolchain bug PR78176

workaround still present in package.

libimager-perl

#847397

Toolchain bug PR78176

workaround still present in package.

shark

#836599

Toolchain bug PR78176

workaround still present in package.

systemd

#851412

Binutils bug PR21054

workaround still present in package.

Wishlist / Possible improvements

How to contribute

1. Make yourself visible/integrate yourself and learn more about the project in general

Join the projects mailing list and say hello. Feel free to ask questions.

An easy way to start contributing is to fix packages that cannot be built. The following points are related to this matter. Do not hesitate to ask the mailing list for more options if you feel like it.

2. Get a mips device or set up QEMU on your PC

Qemu is an architecture emulator and will replace your need for a mips device if you or whoever may be mentoring you cannot provide you with one.

However there is currently an issue with doing all the work with a QEMU emulated device: some functionalities may not trivially work and it may be impossible to access repositories and therefore to run any package on this virtual device. The networking part will be fleshed out as much as possible here. Future updates of this guide will hopefully be enough for newcomers to start up. If you have any insights on this matter, do not hesitate to add information or email the relevant information at this email address: jnthjackson@gmail.com

3 Download QEMU, images, kernels and set up networking

You will need images and kernels to run a version of mips Debian. You will find these at this link. Read the README for more information on how to get going with the images.

4 Learn more about package maintaining and the buildd network

How does the buildd network works:

5 Chose a package and study the failed-build log to find/fix the bug

Links to build status of packages:

Be sure to check for existing bug reports before starting to work on a package so you dont do work people have already done. You will find a "bugs" link at the top of the package web page. This is where the reports will be if any.

6 Report your progress or found bugs

If you feel like contributing in any other way, please do so and if you want to know more ways to do so, feel free to write to the mailing list.