Mali binary driver
The sun4i and sun5i use a Mali400MP1 and sun7i uses Mali400MP2 (dual-core GPU). We have support available for several versions of the mali binary driver stack, even though our kernel tends to come with the R3P0 version. We support framebuffer and X11 as windowing systems.
Mali and UMP kernel drivers
First get a working display driver.
The default config for the kernel should have the Mali kernel drivers as modules. You should be able to load it by simply running
A cleaner solution is to have the module autoloaded at boot, by adding the following to /etc/modules:
If you use a properly set up Xserver, then the necessary modules will be automatically loaded when X starts.
The default permissions of /dev/ump and /dev/mali make these unusable for normal users. Add a file to /etc/udev/rules.d/, perhaps called 50-mali.rules, with the following content:
KERNEL=="mali", MODE="0660", GROUP="video" KERNEL=="ump", MODE="0660", GROUP="video"
This should give a user belonging to the group video the right permissions to use the mali successfully.
Installing the UMP (Unified Memory Provider) userspace library
From a package
There are some packages available which fully install libUMP for you.
libUMP only depends on libc and the ump kernel module.
apt-get install git build-essential autoconf libtool
Clone the repo
git clone https://github.com/linux-sunxi/libump.git cd libump
If you are on debian or ubuntu, you should build the package.
apt-get install debhelper dh-autoreconf pkg-config
Then build the packages, after descending into the git tree:
When that finishes, install the main package:
dpkg -i ../libump_*.deb
autoreconf -i ./configure make make install
Installing the Mali userspace driver
You will need to have at least the basics installed:
apt-get install git build-essential autoconf automake
If you wish to install the X11 version of the mali binaries, then you also need to install this:
apt-get install xutils-dev
Also, make sure that you have loaded the mali module, so that the kernel driver version can be autodetected.
Clone the repo
git clone https://github.com/linux-sunxi/sunxi-mali.git cd sunxi-mali git submodule init git submodule update
Now you can descend into sunxi-mali, and you can let it detect your environment:
It will state the detected environment, like so:
rm -f config.mk make config.mk make: Entering directory `/home/libv/sunxi/sunxi-mali' make -f Makefile.config ABI="armhf" (Detected) VERSION="r3p0" (Detected) EGL_TYPE="x11" (Detected) make: Entering directory `/home/libv/sunxi/sunxi-mali' echo "MALI_VERSION ?= r3p0" > config.mk echo "MALI_LIBS_ABI ?= armhf" >> config.mk echo "MALI_EGL_TYPE ?= x11" >> config.mk make: Leaving directory `/home/libv/sunxi/sunxi-mali' make: Leaving directory `/home/libv/sunxi/sunxi-mali'
The sunxi-mali build system checks whether the selected library has all of its dependencies resolved. You might need to resolve these dependencies through your package manager.
libdri2 (r3p0 X11 only)
Some distributions have libdri2 compiled into the X11 binary, instead of having it as a separate library and package. If that is the case, you need to compile libdri2 manually. You will need to have libdrm-dev installed for this though.
git clone https://github.com/robclark/libdri2 cd libdri2 ./autogen.sh ./configure make make install ldconfig
By following will install the GLES/EGL binaries into /usr/lib/, and EGL/GLES headers to /usr/include/:
Setting up the windowing system
If you are using the framebuffer version of the binaries, then your setup work is done.
You might want to change the fbdev device used by setting the FRAMEBUFFER environment variable.
If you want a GLES capable Xserver, then you will need to install the fbturbo driver according to our Xorg page.
Verifying the EGL/GLES driver stack
From the mali-sunxi repository, you can run:
make test test/test
And you should be able to see a smoothed triangle, either written out to the top left corner of the framebuffer, or in an X window. The console will tell you which renderer is being used:
... GL Vendor: "ARM" GL Renderer: "Mali-400 MP" GL Version: "OpenGL ES 2.0" ...
Mesa libraries are still in the way
If your are seeing this:
libEGL warning: failed to create a pipe screen for Mali DRI2 libEGL warning: DRI2: failed to open Mali DRI2 (search paths /usr/lib/arm-linux-gnueabihf/dri)
Then the current best advice is to move the mesa-egl aside:
mv /usr/lib/arm-linux-gnueabihf/mesa-egl/ /usr/lib/arm-linux-gnueabihf/.mesa-egl/
Awkward, but at least gets you something workable.