The Frame Buffer Device — Linux-Kernel Documentation (2023)

Last revised: May 10, 2001

0. Introduction

The frame storage device provides an abstraction for the graphics hardware. It represents the frame buffer of some video hardware and allows application software to access the graphics hardware through a well-defined interface, so the software doesn't need to know about the low-level stuff (hardware registers).

The device is accessed through special device nodes, usually located in the /dev directory, ie /dev/fb*.

1. User view of /dev/fb*

From the user's perspective, the framebuffer device looks like any other device in /dev. It is a drawing device that uses Major 29; the smallest specifies the frame buffer number.

By convention, the following device nodes are used (numbers indicate subdevice numbers):

0 = /dev/fb0 Primeiro frame buffer 1 = /dev/fb1 Segundo frame buffer ...31 = /dev/fb31 32º frame buffer

For backward compatibility, you can create the following symbolic links:

/dev/fb0current -> fb0/dev/fb1current -> fb1


Just like frame buffer devicesnormalStorage media, which means you can read and write its contents. For example, you can take a screenshot of the screen:

cp /dev/fb0 meinedatei

There can also be more than one frame buffer at a time, e.g. if you have a graphics card in addition to the onboard hardware. The corresponding framebuffer devices (/dev/fb0 and /dev/fb1 etc.) work independently.

Application software that uses the framebuffer device (such as the X server) uses /dev/fb0 by default (older software uses /dev/fb0current). You can specify an alternate framebuffer device by setting the $FRAMEBUFFER environment variable to the pathname of a framebuffer device, for example (for sh/basusher):

export FRAMEBUFFER=/dev/fb1

or (for csh users):

setenv FRAMEBUFFER /dev/fb1
(Video) OS development using the Linux kernel - Frame Buffer (Part 8)

After that, the X server uses the second framebuffer.

2. Scheduler view of /dev/fb*

As you already know, a framebuffer device is a storage device like /dev/mem and has the same properties. You can read it, write it, look for a local init and mmap() (the main usage). The only difference is that the memory that appears in the special file is not all memory, it is the frame buffer of some video hardware.

/dev/fb* also allows several ioctls in it, with which a lot of hardware information can be queried and set. Colormap manipulation also works via ioctls. See <linux/fb.h> for more information on what ioctls exist and what data structures they work on. Here is just a brief overview:

  • You can ask for immutable information about hardware such as name, screen memory organization (layers, compressed pixels,...) and screen memory address and length.

  • You can request and change variable information about the hardware, such as visible and virtual geometry, depth, colormap format, time, etc. If you attempt to change this information, the driver may round some values ​​to match hardware capabilities (or return EINVAL if this is not possible).

  • You can get and set parts of the colormap. Communication is 16 bits per colored part (red, green, blue, transparency) to support all existing hardware. The driver does all the necessary calculations to apply it to the hardware (round down to fewer bits, maybe throw out the transparency).

All this hardware abstraction makes implementing application programs easier and more portable. For example, the X server runs entirely on /dev/fb* and therefore does not need to know how hardware specific color registers are organized. XF68_FBDev is a general purpose X server for bitmap, non-hardware accelerated video. The only thing that should be incorporated into application programs is screen organization (bitplanes or chunky pixels, etc.) because it acts directly on the framebuffer image data.

Future plans include implementing framebuffer drivers for graphics cards and the like as kernel modules that are loaded at runtime. Such a driver just need to callregister_framebuffer()and provide some functions. Writing and distributing such drivers independently of the kernel will avoid many problems...

3. Maintenance of frame buffer resolution

Frame buffer resolutions are preserved using the utilityfbset. It can change the video mode properties of an image storage device. Its main use is to change the current video mode, e.g. while booting into one of your/etc/rc.*or/etc/init.d/*files.

Fbset uses a database of video modes stored in a configuration file so you can easily add your own modes and reference them with a simple identifier.

4. The X server

The X server (XF68_FBDev) is the most notable application program for the framebuffer device. As of XFree86 Release 3.2, the X server is part of XFree86 and has 2 modes:

  • Se oAnnouncementsubsection for thefbdevDrivers in /etc/XF86Configfile contains:

    Default mode"

    In the 1st line, the X server uses the scheme described above, that is, it starts at the resolution determined by /dev/fb0 (or $FRAMEBUFFER, if defined). However, you still need to specify the color depth (using the Depth keyword) and the virtual resolution (using the Virtual keyword). This is the default for the configuration file provided with XFree86. This is the simplest setup, but it has some limitations.

  • Therefore, it is also possible to specify resolutions in the /etc/XF86Config file. This allows for quick resolution switching while maintaining the size of the virtual desktop. The framebuffer device used is still /dev/fb0current (or $FRAMEBUFFER), but the available resolutions are now defined by /etc/XF86Config. The downside is that you have to provide the times in a different format (butfbset -xcan help).

To set a video mode you can use fbset or xvidtune. Note that xvidtune does not work 100% with XF68_FBDev: the reported clock values ​​are always wrong.

5. Videomodus schedules

A monitor draws an image on the screen using an electron beam (3 electron beams for color models, 1 electron beam for monochrome displays). The front of the screen is covered with a pattern of colored phosphors (pixels). When a phosphor is hit by an electron, it emits a photon and becomes visible.

The electron beam draws horizontal lines (scan lines) from left to right and top to bottom on the screen. By modifying the intensity of the electron beam, pixels of different colors and intensities can be displayed.

After each scan line, the electron beam must move back to the left side of the screen and onto the next line: this is called a horizontal retrace. After the entire canvas (frame) has been painted, the ray moves back to the upper left corner: this is called a vertical flyback. During horizontal and vertical rewind, the electron beam is turned off (unlit).

The speed at which the electron beam paints the pixels is determined by the time clock on the graphics card. For example, for a clock speed of 28.37516 MHz (millions of cycles per second), each pixel is 35242 ps (picoseconds) long:

(Video) Getting pixels on screen on Linux: introduction to Kernel Mode Setting - Simon Ser

1/(28,37516E6 Hz) = 35,242E-9 s

If screen resolution is 640x480 it takes:

640*35.242E-9 s = 22.555E-6 s

to paint the 640 (xres) pixels in a sweep line. But horizontal retrace also takes time (e.g. 272pixel), so a full scan line takes:

(640+272)*35.242E-9 s = 32.141E-6 s

We say the horizontal sampling rate is around 31 kHz:

1/(32,141E-6 s) = 31,113E3Hz

A frame counts 480 (years) lines, but we also have to consider the vertical retrace (e.g. 49lines). So a full screen takes:

(480+49)*32.141E-6 s = 17.002E-3 s

The vertical sampling rate is around 59 Hz:

1/(17.002E-3 s) = 58.815 Hz

This means that screen data is updated about 59 times per second. To have a stable image with no visible flicker, VESA recommends a vertical scan rate of at least 72 Hz. But the perceived oscillation depends a lot on the human being: some people can use 50 Hz without problems, while I perceive it when it is smaller than 80 Hz.

Since the monitor does not know when a new scan line begins, the graphics card provides a synchronization pulse (horizontal sync or hsync) for each scan line. It also provides a synchronization pulse (Vertical Sync or VSync) for each new frame. The position of the image on the screen is affected by the timing of the sync pulses.

The following image summarizes all times. The horizontal retrace time is the sum of the left margin, the right margin and the hsync length, while the vertical retrace time is the sum of the top margin, the bottom margin and the vsync length:

+-----------------------+------------------------ - ------------- -------+----------+-------+| | ↑ | | || | |top_edge | | || | ↓ | | |+----------######################################## #### ##########----------+-------+| # ↑ # | || # | # | || # | # | || # | # | || left # | # right | hsync || edge # | xres # edge | len ||<-------->#<---+----------------- -------->#<-- - ----->|<----->|| # | # | || # | # | || # | # | || # |years # | || # | # | || # | # | || # | # | || # | # | || # | # | || # | # | || # | # | || # | # | || # ↓ # | |+----------######################################## #### ##########----------+-------+| | ↑ | | || | |bottom_margin | | || | ↓ | | |+----------------------+------------------------ - ------------------------- - -------+----------+---- - --+| | ↑ | | || | |vsync_len | | || | ↓ | | |+----------------------+------------------------ - ------------------------- - -------+----------+---- - --+

The frame buffer device expects all horizontal timings in number of dot clocks (in picoseconds, 1E-12 s) and vertical timings in number of scan lines.

(Video) Der Linux-Kernel - und wie man einen selber baut | #linux #kernel

6. Converting XFree86 Timing Values ​​to Frame Buffer Device Timings

A line in XFree86 mode consists of the following fields:

"800x600" 50 800 856 976 1040 600 637 643 666 < Nome > DCF HR SH1 SH2 HFL VR SV1 SV2 VFL

The image storage device uses the following fields:

  • pixclock: pixel clock in ps (picoseconds)

  • left_margin: Time from sync to image

  • right_margin: Image time to sync

  • upper_margin: time from sync to image

  • lower_margin: Image time to sync

  • hsync_len: horizontal sync length

  • vsync_len: vertical sync length

  1. Pixel clock:

    xfrei: em MHz

    fb:em picoseconds (ps)

    pixclock = 1000000 / DCF

  2. Horizontal times:

    left_margin = HFL - SH2

    right_margin = SH1 - HR

    hsync_len = SH2 - SH1

  3. Vertical times:

    top edge = VFL - SV2

    Lower_margin = SV1 - VR

    (Video) How Do Linux Kernel Drivers Work? - Learning Resource

    vsync_len = SV2 - SV1

Good examples of VESA timings can be found in the XFree86 source tree at "xc/programs/Xserver/hw/xfree86/doc/modeDB.txt".

7. References

More detailed information about the framebuffer device and its uses can be found on the Linux fbdev website:

and the following documentation:

  • The man pages for fbset: fbset(8), fb.modes(5)

  • The XFree86 man pages: XF68_FBDev(1), XF86Config(4/5)

  • The powerful kernel sources:

    • Linux/Drivers/Video/

    • linux/include/linux/fb.h

    • linux/include/video/

8. Discussion list

There is a mailing list for framebuffer devices at

Configure your web browser signing information and file browsing.

9. Download

All necessary files can be found at

and in your mirrors.

For the latest version of fbset, see

(Video) An Overview of the Linux and Userspace Graphics Stack , Paul Kocialkowski

10. Credits

This readme was written by Geert Uytterhoeven, based in part on the originalX-framebuffer.READMEby Roman Hodek and Martin Schaller. Section 6 was provided by Frank Neumann.

The framebuffer abstraction was designed by Martin Schaller.


How do I enable frame buffer in Linux? ›


The framebuffer console can be enabled by using your favorite kernel configuration tool. It is under Device Drivers->Graphics Support-> Console display driver support->Framebuffer Console Support. Select 'y' to compile support statically or 'm' for module support.

How does framebuffer work in Linux? ›

The frame buffer device provides an abstraction for the graphics hardware. It represents the frame buffer of some video hardware and allows application software to access the graphics hardware through a well-defined interface, so the software doesn't need to know anything about the low-level (hardware register) stuff.

What does a framebuffer do? ›

A framebuffer (frame buffer, or sometimes framestore) is a portion of random-access memory (RAM) containing a bitmap that drives a video display. It is a memory buffer containing data representing all the pixels in a complete video frame.

What is the storage space required for frame buffer in a high quality system? ›

The equivalent of 256 KB is 262,144 bytes.

How do I enable frame buffer in kernel? ›

The framebuffer console can be enabled by using your favorite kernel configuration tool. It is under Device Drivers->Graphics Support-> Console display driver support->Framebuffer Console Support. Select 'y' to compile support statically or 'm' for module support. The module will be fbcon.

How to disable framebuffer console in Linux kernel? ›

To get rid of console messages and any system output, the framebuffer console support can be removed from the kernel entirely by removing the kernel configuration "CONFIG_FRAMEBUFFER_CONSOLE".

What is kernel buffer in Linux? ›

The kernel maintains a buffer cache registry. That is, the kernel maintains a mapping between disk block numbers and pages that contain those disk blocks. Applications control the content of this cache by allocat ing physical pages, reading and writing data into these pages, and registering them in the cache.

What is the use of buffer in Linux? ›

Buffer memory is a temporary storage area in the main memory (RAM) that stores data transferring between two or more devices or between an application and a device. Buffering compensates for the difference in transfer speeds between the sender and receiver of the data.

How do buffers work programming? ›

Buffer is a region of memory used to temporarily hold data while it is being moved from one place to another. A buffer is used when moving data between processes within a computer. Majority of buffers are implemented in software.

What is a frame buffer Why is it needed? ›

The term "frame buffer" traditionally refers to the region of memory that holds the color data for the image displayed on a computer screen. In WebGL, a framebuffer is a data structure that organizes the memory resources that are needed to render an image.

What are the different types of frame buffer? ›

OpenGL has two kinds of framebuffers: the Default Framebuffer, which is provided by the OpenGL Context; and user-created framebuffers called Framebuffer Objects (FBOs). The buffers for default framebuffers are part of the context and usually represent a window or display device.

What is stored in frame buffer? ›

Most modern graphic systems are raster-based: screen display is array (raster) of pixels (picture elements). Each pixel corresponds to a location on the screen. Pixels are stored in part of memory called the frame buffer.

How do I determine frame buffer size? ›

Assuming that your video lasts 1 second, has 30 fps, and is 640 x 480 pixels with 24 bits of color depth, the file size will be 0.03 GB or 30 MB. To calculate it: Find the frames size as 640 pixels × 480 pixels × 24 bits of color depth = 0.92 MB. Multiply 0.92 MB × 30 fps × 1 second = 0.03 GB (or 30 MB).

How do I adjust frame buffer size? ›

In the BIOS, locate the UMA Frame Buffer Size setting usually found in the Advanced menu section. Use the mouse or assigned keys to increase/decrease the size in predefined increments. Once the desired UMA frame buffer size value has been set, save the change before exiting the BIOS.

What size of frame buffer is needed? ›

Each element of a frame buffer corresponds to a single pixel on the screen. The intensity of that pixel is decided by its voltage. For example, consider a 1024×768 24-bit image, the most widely used screen resolution for PCs. This is the minimum size of frame buffer required to support such a display.

How do I enable kernel configuration? ›

To configure the kernel, change to /usr/src/linux and enter the command make config. Choose the features you want supported by the kernel. Usually, There are two or three options: y, n, or m. m means that this device will not be compiled directly into the kernel, but loaded as a module.

How do I switch to kernel mode? ›

To switch from user-mode debugging to kernel-mode debugging, use the . breakin (Break to the Kernel Debugger) command.

How do I load a kernel module automatically at boot time? ›

Linux config file to load a kernel module

You need to edit the file named /etc/modules or put a new config file in /etc/modules-load. d/ directory. Use any one of the methods for loading kernel modules. The configuration file consists of a set of lines.

How do I turn off frame buffer? ›

Go into the systems BIOS to look for the line referring to the frame buffer, and disable it.
How to disable Framebuffer
  1. Open the Grub menu file (IE. /boot/grub/menu. ...
  2. One of the following options should disable frame buffering: ...
  3. You would specify one (or more) of the above on the 'kernel' line of the Grub menu file.
Jun 28, 2013

How do I remove a Linux kernel driver? ›

How to Remove the Driver From a Linux Platform
  1. Use the modprobe -r command to unload the hxge driver at any time, without actually uninstalling the driver. host #> lsmod | grep hxge hxge 168784 0 host #> modprobe -r hxge #> lsmod | grep hxge #> ...
  2. Uninstall the hxge driver.

How do I remove a running kernel? ›

The procedure to delete all unused old kernels on Ubuntu Linux version 18.04 and 20.04 LTS is as follows:
  1. First, boot into a new kernel.
  2. List all other older kernel using the dpkg command.
  3. Note down system disk space usage by running the df -H command.
  4. Delete all unused old kernels, run: sudo apt --purge autoremove.
Sep 16, 2022

How to check kernel buffer in Linux? ›

On Linux operating systems, the dmesg command examines or controls the kernel ring buffer.

How to check kernel buffer? ›

The dmesg command displays the content of the kernel's message buffer since the system's most recent boot. It displays a lot of details on how the system is working and problems it might be running into that you won't normally see. That can be a lot of data, but there are several tricks for paring it down.

Where can we find kernel buffer messages in Linux? ›

Read dmesg Log File

Each time the system boots up, the messages from the kernel ring buffer are stored in the /var/log/dmesg file. The dmesg command shows the log file contents. If you have issues using the dmesg command, open the log file in a text editor to view the contents.

What is kernel buffering? ›

The kernel buffers. As the instrumented kernel intercepts events, it stores them in a ring of buffers. As each buffer fills, the instrumented kernel raises an _NTO_HOOK_TRACE synthetic interrupt to notify the data-capturing program that the buffer is ready to be read.

How to check buffer memory in Linux? ›

Entering cat /proc/meminfo in your terminal opens the /proc/meminfo file. This is a virtual file that reports the amount of available and used memory. It contains real-time information about the system's memory usage as well as the buffers and shared memory used by the kernel.

What is difference between cache and buffer in Linux? ›

Buffer is an area of memory used to temporarily store data while it's being moved from one place to another. Cache is a temporary storage area used to store frequently accessed data for rapid access.

How do buffers work simple explanation? ›

A buffer is a solution that can resist pH change upon the addition of an acidic or basic components. It is able to neutralize small amounts of added acid or base, thus maintaining the pH of the solution relatively stable.

How do buffers work for dummies? ›

How Do Buffers Work? Buffers work by neutralising any added acid (H+ ions) or base (OH- ions) to maintain the moderate pH, making them a weaker acid or base. Let's take an example of a buffer made up of the weak base ammonia, NH3 and its conjugate acid, NH4+.

What controls the buffer system? ›

The buffer systems functioning in blood plasma include plasma proteins, phosphate, and bicarbonate and carbonic acid buffers. The kidneys help control acid-base balance by excreting hydrogen ions and generating bicarbonate that helps maintain blood plasma pH within a normal range.

What are frame buffer devices? ›

The frame buffer device provides an abstraction for the graphics hardware. It represents the frame buffer of some video hardware and allows application software to access the graphics hardware through a well-defined interface, so the software doesn't need to know anything about the low-level (hardware register) stuff.

Why should I use buffer? ›

Buffer allows for a high volume of accounts as well as bulk posting across them, but your mileage may vary.

Where is the framebuffer located? ›

A framebuffer is a continuous memory area, typically located within the address space of the CPU. In case of complex graphics systems (e.g. using OpenGL ES 2.0) a framebuffer is located within a separated video memory.

What are the 3 types of framing systems? ›

Modern wood framing essentially includes three types: balloon, platform and semi-balloon framing. With long lumber lengths, vertical load-bearing framing studs run continuously from foundation to roof.

What are the four types of buffer? ›

Types of buffer solutions
  • (a) Acidic Buffer: It is formed by the mixture of weak acid and its salt with a strong base. ...
  • (b) Basic Buffer: It is formed by the mixture of a weak base and its salt with strong acid. ...
  • (c) Simple Buffer: ...
  • (a) Acidic Buffer: ...
  • (b) Basic Buffer:

Where does a buffer store data? ›

Buffers can be implemented in a fixed memory location in hardware—or by using a virtual data buffer in software, pointing at a location in the physical memory. In all cases, the data stored in a data buffer are stored on a physical storage medium.

Where are buffers stored in memory? ›

The buffer memory is mainly located in Random Access Memory (RAM) of a computer. In this area CPU can store its data temporarily, like the data to be forwarded to other slow speed output devices or other secondary storage devices, to enable the computer to execute other processes.

What is the difference between refresh buffer and frame buffer? ›

Picture definition is saved in a memory area known as the refresh buffer or frame buffer. This memory area keeps the set of intensity values for all the screen points. The frame buffer is where the image generation data is stored in the method of Video Display Monitors like CRT, Raster Scan, Random Scan, LCD, LED, etc.

What should I set my buffer size to? ›

Ideally, 128 is a good buffer size, but 256 should be sufficient for tasks like this. If you can afford a lower buffer size, this is always best. However, this may cause any effects on tracks such as reverb or pitch correction to struggle to run in real-time.

What is my buffer size? ›

Buffer Size is the amount of time allowed for your computer to process the audio of your sound card or audio interface. This applies when experiencing latency, which is a delay in processing audio in real time.

What should my buffer size limit be? ›

A good buffer size for recording is 128 samples, but you can also get away with raising the buffer size up to 256 samples without being able to detect much latency in the signal. You can also decrease the buffer size below 128, but then some plugins and effects may not run in real time.

Should buffer size be high or low? ›

A good rule to remember when it comes to buffer size is low for tracking, high for mixing. You want a lower buffer size when tracking to ensure minimal delay. But when you're mixing, you want to raise the buffer size so the computer can process a wider scope of tasks (such as processing a lot of plug-ins).

Can you increase buffer size? ›

If the number of database connections is increased, the solution multiplies the buffer size by the number of connections. You can set a buffer size from 64K to 1024K and increase the value by 32K increments. The default buffer size is 512K.

Should the buffer size be big or small? ›

Set the buffer size to a lower amount to reduce the amount of latency for more accurate monitoring. The downside to lowering the buffer size is that it puts more pressure on your computer's processors and forces them to work harder.

What is the minimum memory required for frame buffer? ›

Answer - A , Explanation - Minimum memory required for frame buffer when 512 KB resolution is 800X600 and bit/pixel is 8 .

How do I put Linux in performance mode? ›

Setting the CPU Mode to Performance
  1. Run the following command to check the current CPU mode: cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor. ...
  2. Run the following command to install the tool: ...
  3. Sets the CPU mode to performance. ...
  4. Perform step 1 again to check whether the change is successful.

How do I get physical CPU in Linux? ›

You can use one of the following command to find the number of physical CPU cores including all cores on Linux:
  1. lscpu command.
  2. cat /proc/cpuinfo.
  3. top or htop command.
  4. nproc command.
  5. dmidecode -t processor command.
  6. getconf _NPROCESSORS_ONLN command.
Sep 21, 2022

Where frame buffer is located in a computer? ›

An area of memory (RAM) used to hold the frame of data that is continuously being sent to the screen. The frame buffer is the size of the maximum image that can be displayed, and it may be a separate memory bank on the graphics card (display adapter), GPU or a reserved part of regular memory.

How do I enable CPU performance mode? ›

To enable Processor HPC mode, ensure the following BIOS settings:
  1. Processor HPC mode set to Enabled. ...
  2. Power Management set to Custom.
  3. CPU Power and Performance Management set to OS DBPM.
  4. Fan Power and Performance Management to Maximum Performance.
Sep 5, 2022

How do I put my CPU in performance mode? ›

Configure Power Management options for high performance
  1. Press the Windows + R keys to open the Run dialog box.
  2. Type in the following text, and then press Enter. powercfg.cpl.
  3. In the Power Options window, under Select a power plan, choose High Performance. ...
  4. Click Save changes or click OK.
Mar 3, 2022

How do I manually increase CPU usage in Linux? ›

3. Creating CPU Spikes
  1. 3.1. Using the dd Command. The dd utility is available on most Unix-like systems. ...
  2. 3.2. Using the stress Tool. ...
  3. 3.3. Using the yes Command. ...
  4. 3.4. Using the sha1sum Utility. ...
  5. 3.5. Using the while Loop. ...
  6. 3.6. Launching a Fork Bomb Attack. ...
  7. 3.7. Reading from /dev/urandom.
Mar 11, 2022

What is the default framebuffer? ›

The Default Framebuffer is the Framebuffer that OpenGL is created with. It is created along with the OpenGL Context. Like Framebuffer Objects, the default framebuffer is a series of images. Unlike FBOs, one of these images usually represents what you actually see on some part of your screen.


1. (Unit 0) Intro 4: Frame Buffer
(UofM Introduction to Computer Graphics - COMP 3490)
2. OS development using the Linux kernel - DRM/KMS Drawing (Part 10)
(Low Level Devel)
3. Write and Submit your first Linux kernel Patch
4. Kernel Recipes 2017 - An introduction to the Linux DRM subsystem - Maxime Ripard
5. Yocto Linux #4 - Kernel Module read, write, ioctl
6. Steven Rostedt - Learning the Linux Kernel with tracing
(Openfest Bulgaria)
Top Articles
Latest Posts
Article information

Author: Chrissy Homenick

Last Updated: 04/02/2023

Views: 6428

Rating: 4.3 / 5 (54 voted)

Reviews: 93% of readers found this page helpful

Author information

Name: Chrissy Homenick

Birthday: 2001-10-22

Address: 611 Kuhn Oval, Feltonbury, NY 02783-3818

Phone: +96619177651654

Job: Mining Representative

Hobby: amateur radio, Sculling, Knife making, Gardening, Watching movies, Gunsmithing, Video gaming

Introduction: My name is Chrissy Homenick, I am a tender, funny, determined, tender, glorious, fancy, enthusiastic person who loves writing and wants to share my knowledge and understanding with you.