Contents
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.
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/Sid. The 'mips64el' port is a 64-bit little endian port using the N64 ABI, hardware floating point and the MIPS64R2 ISA.
General information about Linux/MIPS
Contact
#debian-mips IRC channel on OFTC
Installation
The MIPS ports can be installed via Debian Installer. Jessie images are available for the 'mips' and 'mipsel' ports, while daily images are available for 'mips', 'mipsel' and 'mips64el'.
Build daemons & porter boxes
Machine |
Architecture |
Memory |
Sub-architecture |
Purpose |
FPU? |
mips |
8GB |
Cavium Octeon II |
buildd |
No |
|
mips |
8GB |
Cavium Octeon II |
buildd |
No |
|
mips |
8GB |
Cavium Octeon II |
buildd |
No |
|
mips |
8GB |
Cavium Octeon II |
buildd |
No |
|
mips |
8GB |
Cavium Octeon III |
buildd |
Yes |
|
mips |
8GB |
Cavium Octeon III |
buildd |
Yes |
|
mips |
8GB |
Cavium Octeon II |
porter box |
No |
|
mipsel/mips64el |
4GB |
Loongson 3A |
buildd |
Yes |
|
mipsel/mips64el |
8GB |
Cavium Octeon III |
porterbox |
Yes |
|
mipsel/mips64el |
8GB |
Loongson 3A |
buildd |
Yes |
|
mipsel/mips64el |
8GB |
Loongson 3A |
buildd |
Yes |
|
mipsel/mips64el |
8GB |
Cavium Octeon III |
buildd |
Yes |
|
mipsel/mips64el |
8GB |
Loongson 3A |
buildd |
Yes |
|
mipsel/mips64el |
8GB |
Loongson 3A |
buildd |
Yes |
|
mipsel/mips64el |
8GB |
Cavium Octeon III |
buildd |
Yes |
|
mipsel/mips64el |
8GB |
Cavium Octeon III |
buildd |
Yes |
Most of the machines above were donated by Imagination Technologies.
Status
Known issues
Generic issues
- The 'mips' and 'mipsel' ports are 32-bit ports. The address space is therefore limited to 2GB per process. Unfortunately nowadays the toolchain (binutils, gcc) often need more than 2GB to build some complex code. This causes the build to abort with the "virtual memory exhausted: Cannot allocate memory" message. Adding more memory to the machine will not change anything.
Two packages ended-up with a corrupted data.tar.xz in the past few months: kdenlive_16.08.0-1/mipsel and gcl_2.6.12-45/mips64el. This should be investigated.
Since binutils 2.26 MIPS uses the DT_MIPS_RLD_MAP_REL entry to allows debugging of MIPS position independent executables and provides access to shared library information. As it is a relative entry, special care is needed when mangling the ELF headers with tools such like chrpath, cmake or meson, otherwise the resulting binaries might not work properly (mostly segmentation faults). This has been fixed in chrpath and cmake, but not yet in meson. There are still a few broken binaries in the archive. They have been identified and are currently being binNMUed.
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
libzypp_15.3.0-1 |
see above |
mipsel/sid
libqapt_3.0.2-1 |
FTBFS due to #852035 |
libzypp_15.3.0-1 |
FTBFS, #841769 |
openmeeg_2.3.0~20160502-2 |
FTBFS, #730904 |
mipsel/experimental: None
mipsel/stretch
libdigidoc_3.10.1.1208+ds1-2 |
fixed in sid, needs to migrate |
libqapt_3.0.2-1 |
see above |
libzypp_15.3.0-1 |
see above |
mips64el/sid
elektra_0.8.14-5.1 |
FTBFS due to #846200 |
libqapt_3.0.2-1 |
FTBFS due to #852035 |
libzypp_15.3.0-1 |
FTBFS, #841769 |
openmeeg_2.3.0~20160502-2 |
FTBFS, #730904 |
mips64el/experimental: None
mips64el/stretch
elektra_0.8.14-5.1 |
FTBFS, needs investigation |
libqapt_3.0.2-1 |
see above |
libzypp_15.3.0-1 |
see above |
Packages failing to build from source
Package |
Bug number |
Architecture |
Comments |
|
mips & mipsel |
Toolchain bug PR78012 |
|
|
mips64el |
|
|
mipsel |
Investigations started by the maintainer, but help from a porter would be welcome. |
||
mips* |
Patch available in the BTS, will not be upstreamed until JDK 10 |
||
|
mips* |
https://github.com/rust-lang/rust/issues/39013 https://github.com/rust-lang/rust/issues/39014 |
|
|
mips* |
Caused by the "lesser form" (ELF symbol versioning) of The Binutils Bug #844227 |
Toolchain issues
Package |
Bug number |
Comments |
binutils |
It seems we still have 23 tests failing in the ld testsuite. |
|
gcc |
libgccjit is broken on mips* (confirmed on gcc-6 and gcc-7). |
|
gcc |
symbol in wrong section .data.rel.local on mips64el |
|
gcc |
-mfpxx produces assembly code using odd FP registers on MIPS |
|
gcc |
ice: insn does not satisfy its constraints - bswapsi2 |
|
gcc |
miscompiles ldxc1 with large pointers on 32-bits. Workaround (-mno-lxc1-sxc1) applied to gcc-6 package. |
|
gcc/go |
It seems Matthias Klose has backported the libffi changes into gcc-6. To be tested. |
|
gcc/ada |
gnat bootstrap comparison failure on mips*. Fixed in gcc-7, backported to gcc-6 package, not backported to upstream gcc-6 yet. |
Important bugs
Package |
Bug number |
Description |
Comments |
bind9 |
bind9 server hangs on mips |
Patch available in the BTS |
|
installation-guide |
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. |
|
qemu |
"qemu-img create -f qcow2" segfaults if fpu emulator is in use |
Fixed in Linux 4.8 (FPU emulator no longer relies on an executable user-stack) |
|
qemu |
netlink is broken on mips big endian qemu user |
|
|
strace |
|
strace testsuite failures on mips64el |
Likely kernel bug - see upstream thread. |
systemd |
strange issues with systemd on mips |
Affects jessie only. Fix pending upload. |
|
valgrind |
valgrind: segfaults on MIPS Cavium Octeon boards |
|
Other bugs
Package |
Bug number |
Description |
Comments |
flint |
|
Toolchain bug PR78176 |
workaround still present in package. |
libimager-perl |
Toolchain bug PR78176 |
workaround still present in package. |
|
shark |
Toolchain bug PR78176 |
workaround still present in package. |
|
systemd |
Binutils bug PR21054 |
workaround still present in package. |
Wishlist / Possible improvements
- Add HWCAP support and/or STT_GNU_IFUNC to the GNU libc so that we can provide optimized libraries (for example MIPS32, loongson, etc...). Also add optimized versions of the string functions.
- Add new kernel flavours: generic kernel, CI20, Routerboard
- QEMU mips64el tcg
- More language support: mono (mips64el), fpc, golang, java hotspot implementation
- Valgrind / ASan
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:
https://buildd.debian.org/status/architecture.php?a=mips&suite=sid
https://buildd.debian.org/status/architecture.php?a=mipsel&suite=sid
https://buildd.debian.org/status/architecture.php?a=mips64el&suite=sid
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.