- SABRE Platform for Smart Devices Reference Design Based on the i.MX 6
- Embedded Linux for i.MX Applications Processors
- FSL Community BSP
- i.MX_6_Graphics_Users_Guide.pdf
- Freescale_Yocto_Project_Users_Guide.pdf
- i.MX 6Dual/6Quad Linux Reference Manual, Rev. L3.0.35_4.1.0 (Pg. 81)
- i.MX_6_Linux_Reference_Manual.pdf (specifically, (Chapter 18 X Windows Acceleration)
- i.MX GPU SDK - NXP/Freescale site, under Snippets, Boot Code, Headers, Monitors, etc. (can't seem to login from Firefox, Iceweasel or Chromium in Linux ... direct link to tarball off-site).
Setup root filesystem
This is for system boot from SD card - with the card already prepped i.e. partitioned, bootloader intsalled, ext4 fs, and mounted e.g. /dev/sda. A suitable debootstrap command to install base Debian root filesystem onto SD card might be:
sudo debootstrap jessie /media/sda1
On the SabreSD board, I have upgraded to kernel imx_3.14.38_6qp_ga (link to source snapshot tarballs) ... this kernel provides Galcore version 5.0.11. To configure the kernel, I start with 'make imx_v7_defconfig', then make the following additions to .config:
CONFIG_DRM=m
CONFIG_DRM_VIVANTE=m
CONFIG_FHANDLE=y
CONFIG_EXPORTFS=y
CONFIG_DEBUG_LL=y
CONFIG_DEBUG_IMX6Q_UART=y
CONFIG_EARLY_PRINTK=y
CONFIG_USB_SERIAL_PL2303=m # a Prolific USB serial port I'm using
Finish kernel installation to rfs:
cp arch/arm/boot/zImage arch/arm/boot/dts/imx6q-sabresd.dtb /boot/
echo vivante >> /mnt/sda/etc/modules
cp 10.imx-rules /etc/udev/rules.d
dmesg | grep Galcore
[ 2.421028] Galcore version 5.0.11.33433
ls -l /dev/galcore
crw-rw---- 1 root video 199, 0 May 12 21:48 /dev/galcore
I built patched .deb packages for libdrm, mesa, xorg-server to incorporate a critical patch from Freescale for the i.MX6. The idea is that only the packages affected by xfor86drm.h are locally built, and the rest installed from Debian distribution as normal. (Run grep across sources of libdrm, mesa, and xorg-server to see affected files). I'm sure there are more elegant strategies to finesse the local built packages onto the system, but here is a series of commands below demonstrate one attempt to install distribution packages along with local built .debs in the right order to meet package dependencies. Note -provide simple compile link test for DRM_CAS defined for arm in running system as well as build environments). Also note latest versions, at this time running X.org X Server 1.16.4 - which seems to work perfectly well without any noticeable incompatibilies (refer to comments regarding Vivante EXA driver below and ignore any instructions on my old blogs to pin the distribution to any previous iteration of snapshot.debian.org).
Create entries in /etc/apt/preferences.d to make apt respect locally built/installed packages e.g. essentially enumerating all the local debuilded .deb packages:
sabrehd@sabresd:~$ find /etc/apt/preferences.d/
/etc/apt/preferences.d/
/etc/apt/preferences.d/libdrm
/etc/apt/preferences.d/xorg-server
/etc/apt/preferences.d/mesa
dpkg -i ./libdrm-freedreno1_2.4.58-2_armhf.deb libdrm-nouveau2_2.4.58-2_armhf.deb libdrm-radeon1_2.4.58-2_armhf.deb libdrm2_2.4.58-2_armhf.deb
At the end there should be a nice xfce4 desktop (a little script might be nice here):
apt-get install libllvm3.5 libexpat1 libelf1
dpkg -i mesa/libgl1-mesa-dri_10.3.2-1+deb8u1_armhf.deb
apt-get install x11-common libxaw7 libxkbfile1 libxt6 libepoxy0 libpciaccess0 libpixman-1-0 libxfont1 libxshmfence1 xkb-data x11-xkb-utils
dpkg -i xorg-server/xserver-common_1.16.4-1_all.deb
apt-get install keyboard-configuration libx11-xcb1 libxcb-dri2-0 libxcb-dri3-0 libxcb-glx0 libxcb-present0 libxcb-sync1 libxdamage1 libxfixes3 libxxf86vm1 libxcb-render0 libxcb-shape0 libxcb-xfixes0 libwayland-client0 libwayland-server0
dpkg -i mesa/libglapi-mesa_10.3.2-1+deb8u1_armhf.deb
dpkg -i mesa/libgbm1_10.3.2-1+deb8u1_armhf.deb
dpkg -i mesa/libgl1-mesa-glx_10.3.2-1+deb8u1_armhf.deb
dpkg -i mesa/libegl1-mesa_10.3.2-1+deb8u1_armhf.deb
dpkg -i ./xorg-server/xserver-xorg-core_1.16.4-1_armhf.deb
apt-get install xserver-xorg-video-fbdev xserver-xorg xinit
apt-get install xfce4
It should be possible to startx at this point. However there are more dev packages to be installed as the EXA driver for Vivante GPU is also going to be native-built on this system farther below - it's not necessary to native build it (I just don't bother setting up cross-tools), but it must be built I think against the version of X.org release intending to run on the rfs.
apt-get install libpixman-1-dev x11proto-core-dev x11proto-input-dev x11proto-xext-dev x11proto-video-dev x11proto-randr-dev x11proto-render-dev x11proto-dri2-dev x11proto-gl-dev
apt-get install x11proto-fonts-dev x11proto-xinerama-dev x11proto-kb-dev x11proto-xf86dri-dev x11proto-resource-dev x11proto-scrnsaver-dev x11proto-xf86bigfont-dev x11proto-dri3-dev x11proto-present-dev
apt-get install libxkbfile-dev libpciaccess-dev
dpkg -i ./mesa/mesa-common-dev_10.3.2-1+deb8u1_armhf.deb
dpkg -i xorg-server/xserver-xorg-dev_1.16.4-1_armhf.deb
Here is the origin of most of the complexity of this system! Note the locations of packages to installed from the FSL Community BSP which can also slightly more conveniently be download directly from yocto project:
http://downloads.yoctoproject.org/mirror/sources/
http://downloads.yoctoproject.org/mirror/sources/xserver-xorg-video-imx-viv-5.0.11.p7.1.tar.gz
http://downloads.yoctoproject.org/mirror/sources/imx-gpu-viv-5.0.11.p7.1-hfp.bin
xserver-xorg-video-imx-viv is source code of Vivante EXA driver (build steps to follow in sections below). imx-gpu-viv is Freescale's implementation of GL/GLES associated runtime libraries and development headers and more or less takes the place of any existing libdrm and mesa implementations on the system - therefore it is likely that installed versions of some of these libs and header files are already on the system. Note that Debian the package management system already installs libGL* and friends to /usr/lib/arm-linux-gnueabihf/, while imx-gpu-viv will wind up in base of /usr/lib which as higher search precedence with ldconfig (the distro versions are not removed).
I used tar to create an archive of imx-gpu-viv-5.0.11.p7.1-hfp/gpu-core/usr/ and to extract the contents over the /usr/ filesystem e.g. resulting in /usr/lib/libGL.so etc. The updated header files are found in /usr/include/GL (should not have any mesa dev packages installed from the distro).
Explanation for the sym-linking scheme, which is done as a way to switch between X11, Wayland or framebuffer versions of the libraries, seems to have been dropped from recent versions of the documentation (i.MX 6Dual/6Quad Linux Reference Manual, Rev. L3.0.35_4.1.0 page 81) but most people in i.MX6 land seem to already be aware of it by now.
On X11 systems, the symbolic links to these libraries need to be redirected. This can be
done using the following sequence of commands:
> cd
> sudo ln -s libGAL-x11.so libGAL.so
> sudo ln -s libEGL-x11.so libEGL.so
> sudo ln -s libEGL-x11.so libEGL.so.1
> sudo ln -s libVIVANTE-x11.so libVIVANTE.so
On directFB backend, the symbolic links to these libraries need to be redirected. This can
be done using the following sequence of commands:
> cd
> sudo ln -s libGAL-dfb.so libGAL.so
> sudo ln -s libEGL-dfb.so libEGL.so
> sudo ln -s libEGL-dfb.so libEGL.so.1
> sudo ln -s libVIVANTE-dfb.so libVIVANTE.so
Note dpkg apt and company have an annoying habit of completing package installs with an invocation of ldconfig which clobbers the links ("sbin/ldconfig.real: /usr/lib/libOpenVG.so is not a symbolic link").
By changing the sim links it should be possible to run some demos on the framebuffer display (imx-gpu-viv-5.0.11.p7.1-hfp/gpu-demos/opt/viv_samples/vdk/) . It is in fact possible to run these in a chroot environment - be sure to use mount -o bind to setup /dev /proc etc. and also, permission 660 on /dev/galcore as mentioned previously allows non-root access to device for owning group (video).
xserver-xorg-video-imx-viv provides the Vivante EXA driver as source code - it must be built against the version of X.org release intending to run on the rfs, and in addition depends on Freescsale's version of libraries and system headers from imx-gpu-viv-5.0.11.p7.1-hfp.bin. The following compile line should work and some additional notes may be useful for troubleshooting problems:
./fastbuild.sh XSERVER_GREATER_THAN_13=1 BUILD_HARD_VFP=1 BUSID_HAS_NUMBER=1
So what could go wrong?
No such file or directory #include "xorg-server.h" ... this is fixed by installing xserver-xorg-dev (installed from local built .deb) ... note this and other references may need to be modified to #include "xorg/xorg-server.h".
One compile problem that may be encountered in xserver-xorg-video-imx-viv-5.0.11.p7.1.tar.gz is path to drm.h ... easily corrected in EXA/src/makefile.linux i.e. /usr/include/libdrm/drm.h
Previous versions of xserver-xorg-video-imx tended to have many more compile problems when built against newer versions of X.org, e.g. as shown in the notes below in case the information is useful to anybody. In fact any failures building DRI_1.10.4 can probably be ignored, as this is probably by now already provided by X.org server and is no longer distributed with 5.0.11 series (fastbuild may still try to build it and errors out).
gcc -mfpu=vfp -mfloat-abi=hard -fvisibility=hidden -fPIC -DPIC -I. -I.. -I//usr/include -I//usr/include/xorg -I//usr/include/pixman-1 -I../../EXA/src/vivante_gal -march=armv7-a -marm -o dri.o -c dri.c
dri.c:42:18: fatal error: xf86.h: No such file or directory
#include "xf86.h"
(Also may need to be changed to "xorg/xf86.h")
makefile.linux:71: recipe for target 'dri.o' failed
DRI_1.10.4/src/drm.h
from dri.c:52:
./drm.h:620:26: fatal error: drm/drm_mode.h: No such file or directory
If you got through all that then finally, install the driver, configure X.org server:
cp src/xserver-xorg-video-imx-viv-3.10.31-1.1.0-beta/EXA/src/vivante_drv.so /usr/lib/xorg/modules/drivers/
cp Download/sys/xorg.conf /usr/share/X11/xorg.conf.d/
... and then hopefully enjoy a successful startx moment:
$ grep VIVANTE: /var/log/Xorg.0.log
[ 188.626] (II) VIVANTE: driver for vivante fb: VivanteGC500, VivanteGC2100,
sabrehd@sabresd:~/Downloads$
sudo dpkg -i mesa/libgles2-mesa_10.3.2-1+deb8u1_armhf.deb
sudo dpkg -i mesa-utils/mesa-utils-extra_8.2.0-1_armhf.deb
Enjoy!
No comments:
Post a Comment