Difference between revisions of "Framebuffer"

From ArmadeusWiki
Jump to: navigation, search
m (intro)
(Login/Console)
 
(26 intermediate revisions by 4 users not shown)
Line 3: Line 3:
 
==Introduction==
 
==Introduction==
 
Linux Framebuffer is the lowest level (standardized) API for userspace programs to access video capabilities of the system you're running on. It allows you to directly "draw" your graphics in the video memory.
 
Linux Framebuffer is the lowest level (standardized) API for userspace programs to access video capabilities of the system you're running on. It allows you to directly "draw" your graphics in the video memory.
Some higher level librairies can be put on top of the Framebuffer for more portability: SDL, Qt, GTK, etc...
+
Some higher level librairies can be put on top of the Framebuffer for more portability: [[SDL]], [[Qt/Embedded]], GTK, DirectFB, etc...
  
 
==Kernel configuration==
 
==Kernel configuration==
'''Framebuffer is already configured (for [[LQ043_Adapt|Sharp LQ043 LCD]]) in standard/default Armadeus kernel image.'''<br>
+
{{Note | Framebuffer is already configured (for [[LQ043_Adapt|Sharp LQ043 LCD]] on [[APF9328]] and for Chimei LW700 on [[APF27]]/[[APF51]]) in standard/default Armadeus kernel image. [[APF28]] has a boot option to [[APF28Dev#Selecting_LCD|choose the LCD]].}}
Following instructions are only given as references or if you want to change the default LCD:
+
 
* launch Linux kernel configuration:
+
Instructions to configure Linux kernel were moved to [[Talk:FrameBuffer]] and are only given as references or if you want to change the default LCD.
<pre>
+
[armadeus]$ make linux26-menuconfig
+
</pre>
+
* activates:
+
Device Drivers  ---> Character devices  ---> [*] Virtual terminal
+
Device Drivers  ---> Character devices  ---> [*]  Support for console on virtual terminal
+
* activates:
+
Device Drivers  ---> Graphics support  ---> <*> Support for frame buffer devices  ---> <*>  Motorola i.MX LCD support
+
* and choose your LCD in:
+
LCD Panel (xxxx)  --->
+
* activates:
+
Device Drivers  ---> Graphics support  ---> Console display driver support  ---> <*> Framebuffer Console support
+
* deactivates VGA stuff & add some fonts, then choose Armadeus boot logo
+
Device Drivers  ---> Graphics support  ---> [*] Bootup logo  ---> [*]  224-color Armadeus Linux logo
+
* recompiles the kernel:
+
[armadeus]$ make linux26
+
* now to have console on serial port, you will have to add "console=ttySMX0,115200n8" to your boot parameters
+
* reflash kernel image on your board and enjoy ! (you should see Linux logo on screen at startup)
+
  
 
==Userland==
 
==Userland==
Framebuffer device can be accessed with /dev/fb0.
+
* Framebuffer device can be accessed with ''/dev/fb0''.
  
You can activate some tools from the Buildroot's menuconfig:  
+
* You can activate some tools from the Buildroot's menuconfig:  
<pre>
+
<pre class="host">
 
  $ make menuconfig
 
  $ make menuconfig
  Package Selection for the target  ---> Graphic libraries and applications (graphic/text)  ---> fbset/fbv/fbgrab
+
</pre>
 +
<pre class="config">
 +
  Package Selection for the target
 +
    ...
 +
    Graphic libraries and applications (graphic/text) --->
 +
    ...
 +
        [*] fbgrab
 +
        [*] fbtest
 +
        [*] fbv
 +
    ...
 +
        ---> Graphic libraries and applications (graphic/text)   
 +
            ---> fbset/fbv/fbgrab
 
</pre>
 
</pre>
  
You have several test tools on yahoo groups to play a little with the framebuffer.
+
{{Note | As explain on [[LinuxInstall]] page, to compile '''fbtest''', ''libnetpbm10-dev'' must be installed in your host system}}
 +
 
 +
* For example to grab a snapshot of the framebuffer:
 +
<pre class="apf">
 +
# fbgrab /tmp/snapshot.png
 +
</pre>
 +
 
 +
* For example to display an image using standard image file formats PNG, GIF...:
 +
<pre class="apf">
 +
# fbv myimage.png
 +
</pre>
  
 
==Tips==
 
==Tips==
 +
 +
===Login/Console===
 
* To stop blinking cursor:
 
* To stop blinking cursor:
 +
<pre class="apf">
 
  # echo 0 > /sys/class/graphics/fbcon/cursor_blink
 
  # echo 0 > /sys/class/graphics/fbcon/cursor_blink
 +
</pre>
 +
also possible at boot time (with 3.x recent kernels):
 +
<pre class="apf">
 +
BIOS> setenv extrabootargs vt.global_cursor_default=0
 +
</pre>
 
* To make it blinking again:
 
* To make it blinking again:
 +
<pre class="apf">
 
  # echo 1 > /sys/class/graphics/fbcon/cursor_blink
 
  # echo 1 > /sys/class/graphics/fbcon/cursor_blink
 +
</pre>
 +
* To have a login on LCD, add these line in /etc/inittab of your rootfs:
 +
<pre class="apf">
 +
# Set up a getty on LCD
 +
tty1::respawn:/sbin/getty 38400 tty1
 +
</pre>
 +
 +
===Screenshot===
 
* To grab a screenshot of a running Framebuffer application, use [[FBGrab]]
 
* To grab a screenshot of a running Framebuffer application, use [[FBGrab]]
* To enter in Framebuffer low power mode:
+
 
 +
===Sleep===
 +
* To enter in Framebuffer sleep mode:
 +
<pre class="apf">
 
  # echo 1 > /sys/class/graphics/fb0/blank
 
  # echo 1 > /sys/class/graphics/fb0/blank
* To leave Framebuffer low power mode:
+
</pre>
 +
* To leave Framebuffer sleep power mode:
 +
<pre class="apf">
 
  # echo 0 > /sys/class/graphics/fb0/blank
 
  # echo 0 > /sys/class/graphics/fb0/blank
* To set low power mode entering time (where X is a time in minute; 0 = never):
+
</pre>
 +
* To set "sleep mode"/screensaver entering time (where X is a time in minute; 0 = never):
 +
<pre class="apf">
 
  # echo -e '\033[9;X]' > /dev/tty1    (from serial console)
 
  # echo -e '\033[9;X]' > /dev/tty1    (from serial console)
 +
</pre>
 
or
 
or
 +
<pre class="apf">
 
  # echo -e '\033[9;X]'    (from framebuffer console)
 
  # echo -e '\033[9;X]'    (from framebuffer console)
 +
</pre>
 
or to set it at each boot, use ''/etc/inittab'':
 
or to set it at each boot, use ''/etc/inittab'':
 +
<pre class="apf">
 
  tty1::sysinit:echo -e '\033[9;X]'
 
  tty1::sysinit:echo -e '\033[9;X]'
 +
</pre>
  
 
==Other usefull ESC sequences==
 
==Other usefull ESC sequences==
 
* To (definitly) hide cursor:
 
* To (definitly) hide cursor:
 +
<pre class="apf">
 
  # echo -e '\033[?17;0;0c' > /dev/tty1    (from serial console)
 
  # echo -e '\033[?17;0;0c' > /dev/tty1    (from serial console)
 +
</pre>
 
or
 
or
 +
<pre class="apf">
 
  # echo -e '\033[?17;0;0c'    (from framebuffer console)
 
  # echo -e '\033[?17;0;0c'    (from framebuffer console)
 +
</pre>
 
* inverse screen on:
 
* inverse screen on:
 +
<pre class="apf">
 
  # echo -e '\033[?5h' > /dev/tty1
 
  # echo -e '\033[?5h' > /dev/tty1
 +
</pre>
 
* inverse screen off:
 
* inverse screen off:
 +
<pre class="apf">
 
  # echo -e '\033[?5l' > /dev/tty1
 
  # echo -e '\033[?5l' > /dev/tty1
 +
</pre>
 +
* To erase the screen
 +
<pre class="apf">
 +
echo -e '\033[2J' > /dev/tty1 (from serial console)
 +
</pre>
  
 
=Links=
 
=Links=
 +
* [[Linux_Boot_Logo|How to change the Linux boot logo]]
 +
* [[i.MX6 Framebuffer Overlay|How to play with Framebuffer overlay on APF6]]
 
* [http://lxr.linux.no/linux/Documentation/VGA-softcursor.txt How to configure soft cursor]
 
* [http://lxr.linux.no/linux/Documentation/VGA-softcursor.txt How to configure soft cursor]
 
* http://linux-fbdev.sourceforge.net/
 
* http://linux-fbdev.sourceforge.net/
 +
* [http://www-curri.u-strasbg.fr/documentation/calcul/doc/ProPack/3SP1/docs/man_html/man4/console_codes.4.html Linux console ESC sequences]
 
* http://directfb.org/
 
* http://directfb.org/
* http://docs.blackfin.uclinux.org/doku.php?id=the_framebuffer_console
+
* [http://docs.blackfin.uclinux.org/doku.php?id=linux-kernel:drivers:fbcon  Blackfin wiki page on the subject]
  
 
[[Category:Graphical User Interface]]
 
[[Category:Graphical User Interface]]
 
[[Category:Framebuffer]]
 
[[Category:Framebuffer]]

Latest revision as of 12:16, 18 January 2023

On this page you will find usefull informations to have a working Linux Framebuffer on your board.

Introduction

Linux Framebuffer is the lowest level (standardized) API for userspace programs to access video capabilities of the system you're running on. It allows you to directly "draw" your graphics in the video memory. Some higher level librairies can be put on top of the Framebuffer for more portability: SDL, Qt/Embedded, GTK, DirectFB, etc...

Kernel configuration

Note Note: Framebuffer is already configured (for Sharp LQ043 LCD on APF9328 and for Chimei LW700 on APF27/APF51) in standard/default Armadeus kernel image. APF28 has a boot option to choose the LCD.


Instructions to configure Linux kernel were moved to Talk:FrameBuffer and are only given as references or if you want to change the default LCD.

Userland

  • Framebuffer device can be accessed with /dev/fb0.
  • You can activate some tools from the Buildroot's menuconfig:
 $ make menuconfig
 Package Selection for the target
     ...
     Graphic libraries and applications (graphic/text)  ---> 
     ...
         [*] fbgrab
         [*] fbtest
         [*] fbv
     ...
        ---> Graphic libraries and applications (graphic/text)  
            ---> fbset/fbv/fbgrab
Note Note: As explain on LinuxInstall page, to compile fbtest, libnetpbm10-dev must be installed in your host system


  • For example to grab a snapshot of the framebuffer:
# fbgrab /tmp/snapshot.png
  • For example to display an image using standard image file formats PNG, GIF...:
# fbv myimage.png

Tips

Login/Console

  • To stop blinking cursor:
 # echo 0 > /sys/class/graphics/fbcon/cursor_blink

also possible at boot time (with 3.x recent kernels):

BIOS> setenv extrabootargs vt.global_cursor_default=0
  • To make it blinking again:
 # echo 1 > /sys/class/graphics/fbcon/cursor_blink
  • To have a login on LCD, add these line in /etc/inittab of your rootfs:
# Set up a getty on LCD
tty1::respawn:/sbin/getty 38400 tty1

Screenshot

  • To grab a screenshot of a running Framebuffer application, use FBGrab

Sleep

  • To enter in Framebuffer sleep mode:
 # echo 1 > /sys/class/graphics/fb0/blank
  • To leave Framebuffer sleep power mode:
 # echo 0 > /sys/class/graphics/fb0/blank
  • To set "sleep mode"/screensaver entering time (where X is a time in minute; 0 = never):
 # echo -e '\033[9;X]' > /dev/tty1    (from serial console)

or

 # echo -e '\033[9;X]'    (from framebuffer console)

or to set it at each boot, use /etc/inittab:

 tty1::sysinit:echo -e '\033[9;X]'

Other usefull ESC sequences

  • To (definitly) hide cursor:
 # echo -e '\033[?17;0;0c' > /dev/tty1    (from serial console)

or

 # echo -e '\033[?17;0;0c'    (from framebuffer console)
  • inverse screen on:
 # echo -e '\033[?5h' > /dev/tty1
  • inverse screen off:
 # echo -e '\033[?5l' > /dev/tty1
  • To erase the screen
echo -e '\033[2J' > /dev/tty1 (from serial console)

Links