ÉèΪÊ×Ò³ ¼ÓÈëÊÕ²Ø

TOP

LinuxÖÐLCDÉ豸Çý¶¯(Ò»)
2014-11-24 12:49:14 À´Ô´: ×÷Õß: ¡¾´ó ÖРС¡¿ ä¯ÀÀ:4´Î
Tags£ºLinux LCD É豸Çý¶¯

1¡¢framebuffer Ö¡»º³å


Ö¡»º³å£¨framebuffer£©ÊÇLinux ϵͳΪÏÔʾÉ豸ÌṩµÄÒ»¸ö½Ó¿Ú£¬Ëü½«ÏÔʾ»º³åÇø³éÏ󣬯Á±ÎͼÏñÓ²¼þµÄµ×²ã²îÒ죬ÔÊÐíÉϲãÓ¦ÓóÌÐòÔÚͼÐÎģʽÏÂÖ±½Ó¶ÔÏÔʾ»º³åÇø½øÐжÁд²Ù×÷¡£Óû§²»±Ø¹ØÐÄÎïÀíÏÔʾ»º³åÇøµÄ¾ßÌåλÖü°´æ·Å·½Ê½£¬ÕâЩ¶¼ÓÉÖ¡»º³åÉ豸Çý¶¯±¾ÉíÀ´Íê³É¡£


framebuffer»úÖÆÄ£·ÂÏÔ¿¨µÄ¹¦ÄÜ£¬½«ÏÔ¿¨Ó²¼þ½á¹¹³éÏóΪһϵÁеÄÊý¾Ý½á¹¹£¬¿ÉÒÔͨ¹ýframebufferµÄ¶Áдֱ½Ó¶ÔÏÔ´æ½øÐвÙ×÷¡£Óû§¿ÉÒÔ½«framebuffer¿´³ÉÊÇÏÔ´æµÄÒ»¸öÓ³Ïñ£¬½«ÆäÓ³Éäµ½½ø³Ì¿Õ¼äºó£¬¾Í¿ÉÒÔÖ±½Ó½øÐжÁд²Ù×÷£¬Ð´²Ù×÷»áÖ±½Ó·´Ó³ÔÚÆÁÄ»ÉÏ¡£


framebufferÊǸö×Ö·ûÉ豸£¬Ö÷É豸ºÅΪ29£¬¶ÔÓ¦ÓÚ/dev/fb%d É豸Îļþ¡£


ͨ³££¬Ê¹ÓÃÈçÏ·½Ê½£¨Ç°ÃæµÄÊý×Ö±íʾ´ÎÉ豸ºÅ£©
0 = /dev/fb0 µÚ
Ò»¸öfb É豸
1 = /dev/fb1 µÚ¶þ¸öfb É豸


fb Ò²ÊÇÒ»ÖÖÆÕͨµÄÄÚ´æÉ豸£¬¿ÉÒÔ¶ÁдÆäÄÚÈÝ¡£ÀýÈ磬ÆÁÄ»×¥ÆÁ£ºcp /dev/fb0 myfilefb ËäÈ»¿ÉÒÔÏñÄÚ´æÉ豸£¨/dev/mem£©Ò»Ñù£¬¶ÔÆäread,write,seek ÒÔ¼°mmap¡£µ«Çø±ðÔÚÓÚfb ʹÓõIJ»ÊÇÕû¸öÄÚ´æÇø£¬¶øÊÇÏԴ沿·Ö¡£


2¡¢fbÓëÓ¦ÓóÌÐòµÄ½»»¥


¶ÔÓÚÓû§³ÌÐò¶øÑÔ£¬ËüºÍÆäËûµÄÉ豸²¢Ã»ÓÐÊ²Ã´Çø±ð£¬Óû§¿ÉÒÔ°Ñfb¿´³ÉÊÇÒ»¿éÄڴ棬¼È¿ÉÒÔÏòÄÚ´æÖÐдÊý¾Ý£¬Ò²¿ÉÒÔ¶ÁÊý¾Ý¡£fbµÄÏÔʾ»º³åÇøÎ»ÓÚÄں˿ռ䣬ӦÓóÌÐò¿ÉÒ԰Ѵ˿ռäÓ³Éäµ½×Ô¼ºµÄÓû§¿Õ¼ä£¬ÔÚ½øÐвÙ×÷¡£


ÔÚÓ¦ÓóÌÐòÖУ¬²Ù×÷/dev/fbnµÄÒ»°ã²½ÖèÈçÏ£º
£¨1£©´ò¿ª/dev/fbnÉ豸Îļþ¡£
£¨2£©ÓÃioctl()²Ù×÷È¡µÃµ±Ç°ÏÔʾÆÁÄ»µÄ²ÎÊý£¬ÈçÆÁÄ»·Ö±æÂÊ¡¢Ã¿
¸öÏñËØµãµÄ±ÈÌØÊý¡£¸ù¾ÝÆÁÄ»²ÎÊý¿É¼ÆËãÆÁÄ»»º³åÇøµÄ´óС¡£
£¨3£©ÓÃmmap()º¯Êý£¬½«ÆÁÄ»»º³åÇøÓ³Éäµ½Óû§¿Õ¼ä¡£
£¨4£©Ó³Éäºó¾Í¿ÉÒÔÖ±½Ó¶Á/дÆÁÄ»»º³åÇø£¬½øÐлæÍ¼ºÍͼƬÏÔʾÁË¡£


3¡¢fbµÄ½á¹¹¼°ÆäÏà¹Ø½á¹¹Ìå


ÔÚlinuxÖУ¬fbÉ豸Çý¶¯µÄÔ´ÂëÖ÷ÒªÔÚFb.h (linux2.6.28\include\linux)ºÍFbmem.c (linux2.6.28\drivers\video)Á½¸öÎļþÖУ¬ËüÃÇÊÇfbÉ豸Çý¶¯µÄÖмä²ã£¬ÎªÉϲãÌṩϵͳµ÷Óã¬Îªµ×²ãÇý¶¯Ìṩ½Ó¿Ú¡£






ÔÚfb.hÎļþÖÐÓÐfbÇý¶¯ÐèҪʹÓõĺܶà½á¹¹£¬ÎÒÃÇÏȶÔÕâЩ½á¹¹Ìå½øÐÐ˵Ã÷£º


£¨1£©¡¢


Ò»¸öÖ¡»º³åÇø¶ÔÓ¦Ò»¸östruct fb_info½á¹¹£¬Ëü°üÀ¨ÁËÖ¡»º³åÉ豸µÄÊôÐԺͲÙ×÷µÄÍêÕû¼¯ºÏ£¬Ã¿¸öÖ¡É豸¶¼ÓÐÒ»¸öfb_info½á¹¹Ìå¡£Ô´ÂëÈçÏ£º


struct fb_info {
int node;
int flags;
struct mutex lock;/* Lock for open/release/ioctl funcs */»¥³âËø
struct fb_var_screeninfo var;/* Current var */µ±Ç°»º³åÇøµÄ¿É±ä²ÎÊý
struct fb_fix_screeninfo fix;/* Current fix */¹Ì¶¨²ÎÊý
struct fb_monspecs monspecs;/* Current Monitor specs */µ±Ç°ÏÔʾÆ÷±êÖ¾
struct work_struct queue;/* Framebuffer event queue */Ö¡»º³åʼþ¶ÓÁÐ
struct fb_pixmap pixmap;/* Image hardware mapper */ͼÏñÓ²¼þmapper
struct fb_pixmap sprite;/* Cursor hardware mapper */¹â±êÓ²¼þmapper
struct fb_cmap cmap;/* Current cmap */µ±Ç°µÄµ÷É«°å
struct list_head modelist; /* mode list */
struct fb_videomode *mode;/* current mode */µ±Ç°µÄÊÓÆµÄ£Ê½


#ifdef CONFIG_FB_BACKLIGHTÈç¹ûÅäÖÃÁËLCDÖ§³Ö±³¹âµÆ
/* assigned backlight device */
/* set before framebuffer registration,
remove after unregister */±³¹âµ÷Õû
struct backlight_device *bl_dev;


/* Backlight level curve */
struct mutex bl_curve_mutex;
u8 bl_curve[FB_BACKLIGHT_LEVELS];
#endif
#ifdef CONFIG_FB_DEFERRED_IO
struct delayed_work deferred_work;
struct fb_deferred_io *fbdefio;
#endif


struct fb_ops *fbops;Ö¡»º³å²Ù×÷º¯Êý¼¯
struct device *device;/* This is the parent */¸¸É豸
struct device *dev;/* This is this fb device */fbÉ豸
int class_flag; /* private sysfs flags */˽ÓеÄsysfs±êÖ¾
#ifdef CONFIG_FB_TILEBLITTING
struct fb_tile_ops *tileops; /* Tile Blitting */ͼ¿éblitting
#endif
char __iomem *screen_base;/* Virtual address */ÐéÄâ»ùµØÖ·
unsigned long screen_size;/* Amount of ioremapped VRAM or 0 */ ioremapµÄÐéÄâÄÚ´æ´óС
void *pseudo_palette;/* Fake palette of 16 colors */ α16λµ÷É«°å
#define FBINFO_STATE_RUNNING 0
#define FBINFO_STATE_SUSPENDED 1
u32 state; /* Hardware state i.e suspend */Ó²¼þµÄ״̬
void *fbcon_par; /* fbcon use-only private area */
/* From here on everything is device dependent */
void *par;
};


£¨2£©¡¢


/*
* Frame buffer operations
*
* LOCKING NOTE: those functions must _ALL_ be called with the console
* semaphore held, this is the only suitable locking mechanism we have
* in 2.6. Some may be called at interrupt time at this point though.
*/
fb_ops½á¹¹ÌåÓÃÀ´ÊµÏÖ¶ÔÖ¡»º³åÉ豸µÄ²Ù×÷£¬ÕâЩº¯ÊýÐèÒªÇý¶¯¿ª·¢ÈËÔ±±àд£¬

struct fb_ops {
/* open/release and usage marking */
struct module *owner;


´ò¿ªºÍÊÍ·Å
int (*fb_open)(struct fb_info *info, int user);


int (*fb_release)(struct fb_info *info, int user);

ÕâÁ½¸öº¯Êý¶ÔÓÚ·ÇÏßÐÔ²¼¾ÖµÄ/³£¹æÄÚ´æÓ³ÉäÎÞ·¨¹¤×÷µÄÖ¡»º³åÉ豸ÐèÒª
/* For framebuffers with strange non linear la

Ê×Ò³ ÉÏÒ»Ò³ 1 2 3 ÏÂÒ»Ò³ βҳ 1/3/3
¡¾´ó ÖРС¡¿¡¾´òÓ¡¡¿ ¡¾·±Ìå¡¿¡¾Í¶¸å¡¿¡¾Êղء¿ ¡¾ÍƼö¡¿¡¾¾Ù±¨¡¿¡¾ÆÀÂÛ¡¿ ¡¾¹Ø±Õ¡¿ ¡¾·µ»Ø¶¥²¿¡¿
·ÖÏíµ½: 
ÉÏһƪ£ºAndroid½Ì³Ì£º¿ª·ÅrootȨÏÞ ÏÂһƪ£ºAndroidÖÐcursorµÄʹÓÃ

ÆÀÂÛ

ÕÊ¡¡¡¡ºÅ: ÃÜÂë: (ÐÂÓû§×¢²á)
Ñé Ö¤ Âë:
±í¡¡¡¡Çé:
ÄÚ¡¡¡¡ÈÝ:

¡¤Linuxϵͳ¼ò½é (2025-12-25 21:55:25)
¡¤Linux°²×°MySQL¹ý³Ì (2025-12-25 21:55:22)
¡¤Linuxϵͳ°²×°½Ì³Ì£¨ (2025-12-25 21:55:20)
¡¤HTTP Åc HTTPS µÄ²î„ (2025-12-25 21:19:45)
¡¤ÍøÕ¾°²È«±ØÐ޿ΣºÍ¼ (2025-12-25 21:19:42)