96 lines
3.1 KiB
Markdown
96 lines
3.1 KiB
Markdown
|
libgfxinit
|
||
|
==========
|
||
|
|
||
|
*libgfxinit* is a graphics initialization (aka modesetting) library
|
||
|
for embedded environments. It currently supports only Intel hardware,
|
||
|
more specifically the Intel Core processor line.
|
||
|
|
||
|
It can query and set up most kinds of displays based on their EDID
|
||
|
information. You can, however, also specify particular mode lines.
|
||
|
|
||
|
*libgfxinit* is written in SPARK, an Ada subset with formal verifica-
|
||
|
tion aspects. Absence of runtime errors can be proved automatically
|
||
|
with SPARK GPL 2016.
|
||
|
|
||
|
|
||
|
Building on Linux
|
||
|
=================
|
||
|
|
||
|
Prerequisites
|
||
|
-------------
|
||
|
|
||
|
For compilation, the GNAT Ada compiler is required. Usual package
|
||
|
names in Linux distributions are `gcc-ada` and `gnat`.
|
||
|
|
||
|
Grab the Sources
|
||
|
----------------
|
||
|
|
||
|
You'll need *libhwbase* and *libgfxinit*. Best is to clone the reposi-
|
||
|
tories into a common parent directory (this way *libgfxinit* will know
|
||
|
where to find *libhwbase*).
|
||
|
|
||
|
$ mkdir gfxfun && cd gfxfun
|
||
|
$ git clone https://review.coreboot.org/p/libhwbase.git
|
||
|
$ git clone https://review.coreboot.org/p/libgfxinit.git
|
||
|
|
||
|
Configure and Install libhwbase
|
||
|
-------------------------------
|
||
|
|
||
|
Both libraries are currently configured by hand-written config files.
|
||
|
You can either write your own `.config`, link one of the shipped files
|
||
|
in `configs/`, e.g.:
|
||
|
|
||
|
$ ln -s configs/linux libhwbase/.config
|
||
|
|
||
|
or overwrite the config filename by specifying `cnf=<configfile>` on
|
||
|
the make command line.
|
||
|
|
||
|
By default most debug messages won't be compiled into the binary. To
|
||
|
include them into the build, set `DEBUG=1` on the command line or in
|
||
|
your `.config`.
|
||
|
|
||
|
Let's install *libhwbase*. We'll need `configs/linux` to build regular
|
||
|
Linux executables:
|
||
|
|
||
|
$ cd libhwbase
|
||
|
$ make DEBUG=1 cnf=configs/linux install
|
||
|
|
||
|
By default this installs into a new subdirectory `dest`. You can however
|
||
|
overwrite this decision by specifying `DESTDIR=`.
|
||
|
|
||
|
Build libgfxinit/`gfx_test`
|
||
|
---------------------------
|
||
|
|
||
|
*libgfxinit* is configured and installed in the same manner as de-
|
||
|
scribed above. You will have to select a configuration matching your
|
||
|
hardware.
|
||
|
|
||
|
The makefile knows an additional target `gfx_test` to build a small
|
||
|
Linux test application:
|
||
|
|
||
|
$ cd ../libgfxinit
|
||
|
$ make DEBUG=1 cnf=configs/sandybridge gfx_test
|
||
|
|
||
|
The resulting binary is `build/gfx_test`.
|
||
|
|
||
|
|
||
|
Testing libgfxinit on Linux
|
||
|
===========================
|
||
|
|
||
|
`gfx_test` sets up its own framebuffer in the *stolen memory*. It
|
||
|
backs any current framebuffer mapping and contents up first and re-
|
||
|
stores it before exiting. This works somehow even while the *i915*
|
||
|
driver is running. A wrapper script `gfxtest/gfx_test.sh` is pro-
|
||
|
vided to help with the setup. It switches to a text console first
|
||
|
and tries to unload the *i915* driver. But ignores failures to do
|
||
|
so (it won't work if you still have any application running that
|
||
|
uses the gfx driver, e.g. an X server).
|
||
|
|
||
|
# gfxtest/gfx_test.sh
|
||
|
|
||
|
If you chose the right config above, you should be presented with a
|
||
|
nice test image. But please be prepared that your console might be
|
||
|
stuck in that state afterwards. You can try to run it with *i915*
|
||
|
deactivated then (e.g. when booting with `nomodeset` in the kernel
|
||
|
command line or with *i915* blacklisted) and loading it afterwards.
|