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.
|