| 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/posix libhwbase/.config |
| |
| or overwrite the config filename by specifying `cnf=<configfile>` on |
| the make command line. |
| |
| Let's install *libhwbase*. We'll need `configs/posix` to build regular |
| Linux executables: |
| |
| $ cd libhwbase |
| $ make cnf=configs/posix 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 cnf=configs/sandybridge gfx_test |
| |
| The resulting binary is `build/gfx_test`. |
| |
| |
| Testing libgfxinit on Linux |
| =========================== |
| |
| In its current state `gfx_test` doesn't know how to set up a frame- |
| buffer. It just assumes that enough memory is mapped. This is known |
| to work well, after running the VBIOS but before the Linux driver |
| *i915* took over (e.g. when booting with `nomodeset` in the kernel |
| command line or with *i915* blacklisted). After running *i915* it |
| only works by chance. |
| |
| When running `gfx_test` (as root), it will ask for a single argument: |
| The path to a sysfs PCI-device node, where it will find the graphics |
| hardware. Usually this is PCI device 00:02.0: |
| |
| $ sudo build/gfx_test /sys/devices/pci0000:00/0000:00:02.0/ |
| |
| If you chose the right config above, you should be presented with a |
| nice test image. However, `gfx_test` is one-way only: The graphics |
| hardware will stay in this state, until another driver takes over. |