精华内容
下载资源
问答
  • 2015-01-23 09:14:47

    DirectFB, OpenGL, OpenGL ES, EGL, EGLFS, GLX; OpenVG, XCB




    【OpenGL ES】初始化EGL:   http://blog.sina.com.cn/s/blog_4119bd830100rq21.html

    OpenGl EGL  :  http://xiaxveliang.blog.163.com/blog/static/2970803420134674814647/

     Android 的OpenGL ES与EGL:  http://blog.csdn.net/mirkerson/article/details/8301639





    XCB:    (X protocol C-language Binding) is a C language binding for the X Window System. It is implemented as free software and aims to replace Xlib

           Tutorial :   http://xcb.freedesktop.org/tutorial/

            XCB OpenGL:  http://xcb.freedesktop.org/opengl/

    更多相关内容
  • DirectFB学习之使用devmem驱动

    千次阅读 2017-08-26 14:47:02
    DirectFB学习之使用devmem驱动 为什么要使用devmem驱动 相比使用fb驱动来说使用devmem驱动要显的更麻烦,但是它给我们带来更大的灵活性,更适用于嵌入式系统。 使用devmem驱动可以方便向dfb注册多个层,在一...

    DirectFB学习之使用devmem驱动

    为什么要使用devmem驱动

    相比使用fb驱动来说使用devmem驱动要显的更麻烦,但是它给我们带来更大的灵活性,更适用于嵌入式系统。

    使用devmem驱动可以方便向dfb注册多个层,在一个系统中除了framebuff看作一个层外,如果系统还可以有多个OSD,那每个OSD则被视为一个层,即可以很方便的把系统中的OSD等层利用起来。

    这在某些系统中是非常有用的,比如在TV系统中有视频、菜单、字幕以及码流中的html应用等当它们在一块屏幕显示时它们其实是会分属于不同的层上,这些层可以通过dfb轻松的对应到硬件上的层,让它们的混合完全由硬件来完成,极大的充分利用硬件。

    如何使用devmem驱动

    要使用devmem驱动时我们要完善如下几个配置项并把他们写到directfbrc文件中被dfb读取到

    • system=devmem
    • video-phys=<hexaddress>
    • video-length=<bytes>
    • mmio-phys=<hexaddress>
    • mmio-length=<bytes>
    • accelerator=<id>

    video-phys 这里是要我们告诉dfb我们显存的位置,是一个物理地址,对于没有固定显存的嵌入式系统来说,我们可以让linux系统启动的时候为我们预留一块内存区域来作为我们的显存,比如通过内核启动参数mem来指定比实际物理内存少一点的内存。

    mmio-phys 这里是要我们告诉我们的显示控制器或者说是显卡的物理起始地址,这个其实是给我们自己在gfx驱动中用的,因为dfb并不知道要往里面写啥起作用。

    accelerator 这个即是用来匹配gfx驱动的ID,我们可以随意填写但要和gfx驱动匹配上。

    如下是我在新塘的n32926上的一个配置示例,

    system=devmem
    video-phys=0x03800000
    video-length=8388608
    mmio-phys=0xb1002000
    mmio-length=4095
    accelerator=998
    

    我通过内核启动参数mem告诉内核我只有56M内存从而预留出了高8M内存区域来作为我的显存区域,查看数据手册可知n32926的显示控制器(VPOST)的起始地址为0xb1002000这个即是我们想要的,后面我们会在gfx驱动中得到它然后直接对寄存器进行读写来控制它。

    完善我们的gfx驱动

    在上一篇文章《Directfb学习之添加gfx驱动》中我们使用的system还是fb驱动,所以有两个原本需要我们在gfx驱动的driver_init_driver中要做的事情交给了fb驱动,即注册screen和注册layers。

    这里我们主要参考dfb里面的sh772x的gfx驱动参考着来写就好了,它是dfb里面第一个支持的gfx器件,几乎所有gfx想关的示例都能在里面得到参考,下面简单做个简单说明。

    注册screen

    要注册一个screen我们至少需要完善如下两个函数:

    • InitScreen()
    • GetScreenSize()

    意如其名,他们的实现还可参考dfb的fb驱动里面关于screen的注册部分来写,相对较简单。

    注册layers

    要注册一个layers我们至少需要完善如下函数:

    • LayerDataSize()
    • RegionDataSize()
    • InitLayer()
    • TestRegion()
    • SetRegion()
    • RemoveRegion()
    • FlipRegion()

    以上函数的实现均可从sh772x的gfx驱动来参考着写,根据我们当前系统的实际情况进行写就行。

    在InitLayer()中我们主要要告知dfb我们当前layer支持的特性,把支持的特性填在DFBDisplayLayerDescription中返回。

    TestRegion()/SetRegion()的作用和gfx中的CheckState()/SetState()调用流程类似,它会根据我们在InitLayer中设置的特性在SetRegion中完成相应的操作。

    其中会有关于layer显存地址的更新,这个即是我们要重点关注的,此时我们要把传入的地址写到显示控制器的寄存器中画面才会显示出来。

    FlipRegion()里面也会给到一个显存buffer地址给我们需要我们填到正确的寄存器中让画面显示出来。

    其余函数这边不再做详细介绍了,按照gfx接口的惯例,相应的头文件里面均会有相应的说明。

    小结

    有了devmem驱动后,我们可以不用去实现fb驱动即可完全在dfb下把画面显示出来,这在嵌入式系统中非常的有用,特别是需要用到多层显示的应用,而且硬件刚好支持这一特性。

    写在最后

    DirectFB学习的系列文章到这里就要告一段落了,陆陆续续大半年过去了,还想起起初对dfb感兴趣的时候还是我刚开始做TV软件的时候,发现系统里面居然没有fb驱动的实现,这和我之前认知的系统有些差别,后面才知道原来是dfb在支持整个系统的显示处理。

    但这部分和硬件联系紧密,方案商把它们多做成了库,对里面也是一无所知。

    后来有幸拿到两块新塘的硬件平台nuc972和n32926,看到他们多有2D硬件部分还有OSD功能,然后就开始在上面移植dfb并且去适配硬件,马马虎虎算是搞懂了些吧,但在n32926上出来的效果不是特别好,他们所有的实现我后续会更新到我的github上,地址在上一篇文章中有,上面已经有nuc972平台的gfx驱动实现了。

    但对dfb关注的和使用的人较少,关于它的文章和资料也不像linux一样多,写出来的东西也没几个人看(哈哈,自娱自乐的感觉),但想了解的东西基本也都能在官网找到,只是它的官网会时不时的打不开(http://www.directfb.net/)。

    如下这份来自官方的文档是我最后两篇文章的主要参考来源,可以说是对它的再阐述吧,想了解更多的话,建议看下

    http://pan.baidu.com/s/1c23vh4G

    展开全文
  • DirectFB-1.7.7

    2017-04-18 16:29:56
    DirectFB-1.7.7源码,官网源码下载,无任何修改。可惜现在Directfb官网已关闭,故给大家分享关闭前下载的最新源码,谢谢。
  • Tina平台使用DirectFB

    2021-09-23 16:57:33
    Tina SDK支持DirectFB通过FrameBuffer进行图显示,这篇文章介绍一下使用过程 1.开启Tina DirectFB支持: make menuconfig 打开DirectFB支持,如下图所示: 2. 编译,烧录: 可以看到关于显示的两个节点,/dev/...

    Tina SDK支持DirectFB通过FrameBuffer进行图显示,这篇文章介绍一下使用过程

    1.开启Tina DirectFB支持:

    make menuconfig 打开DirectFB支持,如下图所示:

    2. 编译,烧录:

    可以看到关于显示的两个节点,/dev/fb0即是传统意义上的framebuffer,而/dev/disp则是AW为了兼容自己的显示框架和显示方案,开放的display engine设备节点,用户层可以通过/dev/disp节点直接控制视频或者图像的显示。DirectFB不依赖这个节点。

    3.FrameBuffer 与Display模块的关系

    以Sunxi V831平台为例,Display的原理如下,DE可以支持3个channel,每个channel支持4个可以做overlay叠加的图层, 其中channel 0,1是视频channel,支持YUV格式的数据输入并且可以做scaler.而channel 2 是RGB channel,支持RGB格式数据,不支持scaler,我们的framebuffer本质上就是将/dev/fb0 和 DE的某个UI 图层关联起来,确切的说是将/dev/fb0和channel 2 ,layer 0的UI图层关联起来。

     4.测试DirectFB用例:

    前面我们配置编译单的时候,选中了directFB本体和directfb的测试用例,则烧录后,文件系统中已经包括了测试用例的可执行程序。

    我们随便执行一个df_andi

    另一个用例:

     测试效果:

    经测试,其它可运行的用例包括df_flip, df_neo, df_knuckles.

    strace调试:

    strace调试与系统之间的交互行为,可以看到,显示的时候,调用热点是FBIO_WAITFORVSYNC和FBIOPAN_DISPLAY两个调用。

    root@(none):/# strace -e trace=ioctl df_andi
    (*) Direct/Thread: Started 'SigHandler' (920) [CRITICAL - OTHER/0] <85292>...
    
       ~~~~~~~~~~~~~~~~~~~~~~~~~| DirectFB 1.7.7 |~~~~~~~~~~~~~~~~~~~~~~~~~~
            (c) 2012-2015  DirectFB integrated media GmbH
            (c) 2001-2015  The world wide DirectFB Open Source Community
            (c) 2000-2004  Convergence (integrated media) GmbH
          ----------------------------------------------------------------
    
    (*) DirectFB/Core: Single Application Core. (2021-09-22 03:09)
    (*) Direct/Memcpy: Using libc memcpy()
    (*) Direct/Thread: Started 'Fusion Dispatch' (921) [MESSAGING - OTHER/0] <85292>...
    ioctl(5, VT_GETSTATE, 0xbed31a20)       = 0
    ioctl(5, VT_OPENQRY, 0x125ad8)          = 0
    ioctl(4, FBIOGET_CON2FBMAP, 0xbed31a10) = 0
    ioctl(4, FBIOPUT_CON2FBMAP, 0xbed31998) = 0
    ioctl(5, VT_ACTIVATE, 0x2)              = 0
    ioctl(5, VT_WAITACTIVE, 0x2)            = 0
    ioctl(6, TIOCSCTTY, 0)                  = 0
    ioctl(6, KDSKBMODE, 0x2)                = 0
    ioctl(6, TCGETS, {B38400 opost isig icanon echo ...}) = 0
    ioctl(6, SNDCTL_TMR_CONTINUE or TCSETSF, {B38400 opost -isig -icanon -echo ...}) = 0
    ioctl(6, KDSETMODE, 0x1)                = 0
    ioctl(6, VT_SETMODE, 0xbed31900)        = 0
    (*) Direct/Thread: Started 'VT Switcher' (922) [CRITICAL - OTHER/0] <85292>...
    (*) Direct/Thread: Started 'VT Flusher' (923) [DEFAULT - OTHER/0] <85292>...
    ioctl(4, FBIOGET_FSCREENINFO, 0x1257f0) = 0
    (*) DirectFB/FBDev: Found '' (ID 0) with frame buffer at 0x00000000, 2400k (MMIO 0x00000000, 0k)
    ioctl(4, FBIOGET_VSCREENINFO, 0x125928) = 0
    ioctl(4, FBIOPUT_VSCREENINFO, 0x125888) = 0
    ioctl(4, FBIOGETCMAP, 0x1259d4)         = 0
    ioctl(7, EVIOCGNAME(31), "axp2101-pek\0") = 12
    ioctl(7, EVIOCGBIT(0, 4), [EV_SYN, EV_KEY, EV_REP]) = 4
    ioctl(7, EVIOCGBIT(EV_KEY, 96), [KEY_POWER]) = 96
    ioctl(7, EVIOCGID, {ID_BUS=0, ID_VENDOR=0, ID_PRODUCT=0, ID_VERSION=0}) = 0
    ioctl(7, EVIOCGNAME(31), "sunxi-gpadc0\0") = 13
    ioctl(7, EVIOCGBIT(0, 4), [EV_SYN, EV_KEY, EV_REP]) = 4
    ioctl(7, EVIOCGBIT(EV_KEY, 96), [KEY_ENTER, KEY_HOME, KEY_VOLUMEDOWN, KEY_VOLUMEUP, ...]) = 96
    ioctl(7, EVIOCGID, {ID_BUS=25, ID_VENDOR=1, ID_PRODUCT=1, ID_VERSION=256}) = 0
    ioctl(7, EVIOCGNAME(31), "sunxi-gpadc0\0") = 13
    ioctl(7, EVIOCGBIT(0, 4), [EV_SYN, EV_KEY, EV_REP]) = 4
    ioctl(7, EVIOCGBIT(EV_KEY, 96), [KEY_ENTER, KEY_HOME, KEY_VOLUMEDOWN, KEY_VOLUMEUP, ...]) = 96
    ioctl(7, EVIOCGID, {ID_BUS=25, ID_VENDOR=1, ID_PRODUCT=1, ID_VERSION=256}) = 0
    ioctl(7, EVIOCGBIT(EV_LED, 4), [ 0 ])   = 4
    (*) Direct/Thread: Started 'Linux Input' (924) [INPUT - OTHER/0] <85292>...
    (*) DirectFB/Input: sunxi-gpadc0 0.1 (directfb.org)
    ioctl(7, EVIOCGBIT(EV_ABS, 8), [ 0 ])   = 8
    (*) Direct/Thread: Started 'Hotplug with Linux Input' (925) [INPUT - OTHER/0] <85292>...
    (*) DirectFB/Input: Hot-plug detection enabled with Linux Input Driver
    (*) DirectFB/Graphics: Generic Software Rasterizer 0.7 (directfb.org)
    ioctl(4, FBIOPUT_VSCREENINFO, 0xbed31850) = 0
    (*) DirectFB/Core/WM: Default 0.3 (directfb.org)
    (*) Direct/Thread: Started 'Genefx' (926) [DEFAULT - OTHER/0] <85292>...
    ioctl(4, FBIOPUT_VSCREENINFO, 0xbed318c8) = 0
    ioctl(4, FBIOPUT_VSCREENINFO, 0xbed318b8) = 0
    ioctl(4, FBIOPUT_VSCREENINFO, 0xbed31828) = 0
    (*) FBDev/Mode: Setting 640x480 RGB32
    ioctl(4, FBIOPUT_VSCREENINFO, 0xbed31680) = 0
    ioctl(4, FBIOGET_VSCREENINFO, 0xbed31720) = 0
    ioctl(4, FBIOGET_FSCREENINFO, 0x1257f0) = 0
    (*) FBDev/Mode: Switched to 640x480 (virtual 640x480) at 32 bit (RGB32), pitch 2560
    ioctl(4, FBIOPUTCMAP, 0x1259ec)         = 0
    ioctl(4, FBIOPUT_VSCREENINFO, 0xbed31928) = 0
    ioctl(4, FBIOPUT_VSCREENINFO, 0xbed31918) = 0
    ioctl(4, FBIOPUT_VSCREENINFO, 0xbed31888) = 0
    ioctl(4, FBIOPUT_VSCREENINFO, 0xbed31878) = 0
    (*) FBDev/Mode: Setting 640x480 RGB32
    ioctl(4, FBIOPUT_VSCREENINFO, 0xbed31668) = 0
    ioctl(4, FBIOGET_VSCREENINFO, 0xbed31708) = 0
    ioctl(4, FBIOGET_FSCREENINFO, 0x1257f0) = 0
    (*) FBDev/Mode: Switched to 640x480 (virtual 640x480) at 32 bit (RGB32), pitch 2560
    ioctl(4, FBIOPUTCMAP, 0x1259ec)         = 0
    ioctl(4, FBIOPUT_VSCREENINFO, 0xbed31928) = 0
    ioctl(4, FBIOPUT_VSCREENINFO, 0xbed31908) = 0
    ioctl(4, FBIOPUT_VSCREENINFO, 0xbed318f8) = 0
    ioctl(4, FBIOPUT_VSCREENINFO, 0xbed31868) = 0
    (*) Direct/Interface: Loaded 'FT2' implementation of 'IDirectFBFont'.
    (*) Direct/Interface: Loaded 'PNG' implementation of 'IDirectFBImageProvider'.
    (*) Direct/Interface: Using 'JPEG' implementation of 'IDirectFBImageProvider'.
    (*) FBDev/Mode: Setting 640x480 RGB32
    ioctl(4, FBIOPUT_VSCREENINFO, 0xbed31840) = 0
    ioctl(4, FBIOGET_VSCREENINFO, 0xbed318e0) = 0
    ioctl(4, FBIOGET_FSCREENINFO, 0x1257f0) = 0
    (*) FBDev/Mode: Switched to 640x480 (virtual 640x960) at 32 bit (RGB32), pitch 2560
    ioctl(4, FBIOPUTCMAP, 0x1259ec)         = 0
    ioctl(4, FBIO_WAITFORVSYNC, 0xb6c03b6c) = 0
    ioctl(4, FBIOPAN_DISPLAY, 0x125888)     = 0
    ioctl(4, FBIO_WAITFORVSYNC, 0xb6c03b6c) = 0
    ioctl(4, FBIOPAN_DISPLAY, 0x125888)     = 0
    ioctl(4, FBIO_WAITFORVSYNC, 0xb6c03b6c) = 0
    ioctl(4, FBIOPAN_DISPLAY, 0x125888)     = 0
    ioctl(4, FBIO_WAITFORVSYNC, 0xb6c03b6c) = 0
    ioctl(4, FBIOPAN_DISPLAY, 0x125888)     = 0
    ioctl(4, FBIO_WAITFORVSYNC, 0xb6c03b6c) = 0
    ioctl(4, FBIOPAN_DISPLAY, 0x125888)     = 0
    ioctl(4, FBIO_WAITFORVSYNC, 0xb6c03b6c) = 0
    ioctl(4, FBIOPAN_DISPLAY, 0x125888)     = 0
    ioctl(4, FBIO_WAITFORVSYNC, 0xb6c03b6c) = 0
    ioctl(4, FBIOPAN_DISPLAY, 0x125888)     = 0
    ioctl(4, FBIO_WAITFORVSYNC, 0xb6c03b6c) = 0
    ioctl(4, FBIOPAN_DISPLAY, 0x125888)     = 0
    ioctl(4, FBIO_WAITFORVSYNC, 0xb6c03b6c) = 0
    ioctl(4, FBIOPAN_DISPLAY, 0x125888)     = 0
    ioctl(4, FBIO_WAITFORVSYNC, 0xb6c03b6c) = 0
    ioctl(4, FBIOPAN_DISPLAY, 0x125888)     = 0
    ioctl(4, FBIO_WAITFORVSYNC, 0xb6c03b6c) = 0
    ioctl(4, FBIOPAN_DISPLAY, 0x125888)     = 0
    ioctl(4, FBIO_WAITFORVSYNC, 0xb6c03b6c) = 0
    ioctl(4, FBIOPAN_DISPLAY, 0x125888)     = 0
    ioctl(4, FBIO_WAITFORVSYNC, 0xb6c03b6c) = 0
    ioctl(4, FBIOPAN_DISPLAY, 0x125888)     = 0
    ioctl(4, FBIO_WAITFORVSYNC, 0xb6c03b6c) = 0
    ioctl(4, FBIOPAN_DISPLAY, 0x125888)     = 0
    ioctl(4, FBIO_WAITFORVSYNC, 0xb6c03b6c) = 0
    ioctl(4, FBIOPAN_DISPLAY, 0x125888)     = 0
    ioctl(4, FBIO_WAITFORVSYNC, 0xb6c03b6c) = 0
    ioctl(4, FBIOPAN_DISPLAY, 0x125888)     = 0
    ioctl(4, FBIO_WAITFORVSYNC, 0xb6c03b6c) = 0
    ioctl(4, FBIOPAN_DISPLAY, 0x125888)     = 0
    ioctl(4, FBIO_WAITFORVSYNC, 0xb6c03b6c) = 0
    ioctl(4, FBIOPAN_DISPLAY, 0x125888)     = 0
    ioctl(4, FBIO_WAITFORVSYNC, 0xb6c03b6c) = 0
    ioctl(4, FBIOPAN_DISPLAY, 0x125888)     = 0
    ioctl(4, FBIO_WAITFORVSYNC, 0xb6c03b6c) = 0
    ioctl(4, FBIOPAN_DISPLAY, 0x125888)     = 0
    ioctl(4, FBIO_WAITFORVSYNC, 0xb6c03b6c) = 0
    ioctl(4, FBIOPAN_DISPLAY, 0x125888)     = 0
    ioctl(4, FBIO_WAITFORVSYNC, 0xb6c03b6c) = 0
    ioctl(4, FBIOPAN_DISPLAY, 0x125888)     = 0
    ioctl(4, FBIO_WAITFORVSYNC, 0xb6c03b6c) = 0
    ioctl(4, FBIOPAN_DISPLAY, 0x125888)     = 0
    ioctl(4, FBIO_WAITFORVSYNC, 0xb6c03b6c) = 0
    ioctl(4, FBIOPAN_DISPLAY, 0x125888)     = 0
    ioctl(4, FBIO_WAITFORVSYNC, 0xb6c03b6c) = 0
    ioctl(4, FBIOPAN_DISPLAY, 0x125888)     = 0
    ioctl(4, FBIO_WAITFORVSYNC, 0xb6c03b6c) = 0
    ioctl(4, FBIOPAN_DISPLAY, 0x125888)     = 0
    

    在directfb画面上添加文字:

    执行cout进入编译目录,删除掉旧的编译环境:

     然后进入dl目录,解压

    修改df_andi的的实现,增加一条字符串打印,并调整之前打印的坐标,使之能在屏幕上显示出来,之后,重新编译整个Tina工程。

    可以看到"Zilong lover"字符串已经清晰的显示在画面底部

    究竟写英文需要不需要字库呢? pidof df_andi得到进程PID,进入到proc PID目录下看每个线程的文件打开情况,发现没有打开字库文件的线程存在.

    root@(none):/proc/909/task# ls -l */fd
    909/fd:
    lrwx------    1 root     root            64 Jan  2 10:33 0 -> /dev/console
    lrwx------    1 root     root            64 Jan  2 10:33 1 -> /dev/console
    lr-x------    1 root     root            64 Jan  2 10:33 10 -> pipe:[1552]
    l-wx------    1 root     root            64 Jan  2 10:33 11 -> pipe:[1552]
    lrwx------    1 root     root            64 Jan  2 10:33 14 -> socket:[1553]
    lrwx------    1 root     root            64 Jan  2 10:33 2 -> /dev/console
    lrwx------    1 root     root            64 Jan  2 10:33 3 -> /dev/console
    lrwx------    1 root     root            64 Jan  2 10:33 4 -> /dev/fb0
    lr-x------    1 root     root            64 Jan  2 10:33 5 -> /dev/tty0
    lrwx------    1 root     root            64 Jan  2 10:33 6 -> /dev/tty2
    lrwx------    1 root     root            64 Jan  2 10:33 7 -> /dev/input/event1
    lr-x------    1 root     root            64 Jan  2 10:33 8 -> pipe:[1551]
    l-wx------    1 root     root            64 Jan  2 10:33 9 -> pipe:[1551]
    
    910/fd:
    lrwx------    1 root     root            64 Jan  2 10:32 0 -> /dev/console
    lrwx------    1 root     root            64 Jan  2 10:32 1 -> /dev/console
    lr-x------    1 root     root            64 Jan  2 10:32 10 -> pipe:[1552]
    l-wx------    1 root     root            64 Jan  2 10:32 11 -> pipe:[1552]
    lrwx------    1 root     root            64 Jan  2 10:32 14 -> socket:[1553]
    lrwx------    1 root     root            64 Jan  2 10:32 2 -> /dev/console
    lrwx------    1 root     root            64 Jan  2 10:32 3 -> /dev/console
    lrwx------    1 root     root            64 Jan  2 10:32 4 -> /dev/fb0
    lr-x------    1 root     root            64 Jan  2 10:32 5 -> /dev/tty0
    lrwx------    1 root     root            64 Jan  2 10:32 6 -> /dev/tty2
    lrwx------    1 root     root            64 Jan  2 10:32 7 -> /dev/input/event1
    lr-x------    1 root     root            64 Jan  2 10:32 8 -> pipe:[1551]
    l-wx------    1 root     root            64 Jan  2 10:32 9 -> pipe:[1551]
    
    911/fd:
    lrwx------    1 root     root            64 Jan  2 10:33 0 -> /dev/console
    lrwx------    1 root     root            64 Jan  2 10:33 1 -> /dev/console
    lr-x------    1 root     root            64 Jan  2 10:33 10 -> pipe:[1552]
    l-wx------    1 root     root            64 Jan  2 10:33 11 -> pipe:[1552]
    lrwx------    1 root     root            64 Jan  2 10:33 14 -> socket:[1553]
    lrwx------    1 root     root            64 Jan  2 10:33 2 -> /dev/console
    lrwx------    1 root     root            64 Jan  2 10:33 3 -> /dev/console
    lrwx------    1 root     root            64 Jan  2 10:33 4 -> /dev/fb0
    lr-x------    1 root     root            64 Jan  2 10:33 5 -> /dev/tty0
    lrwx------    1 root     root            64 Jan  2 10:33 6 -> /dev/tty2
    lrwx------    1 root     root            64 Jan  2 10:33 7 -> /dev/input/event1
    lr-x------    1 root     root            64 Jan  2 10:33 8 -> pipe:[1551]
    l-wx------    1 root     root            64 Jan  2 10:33 9 -> pipe:[1551]
    
    912/fd:
    lrwx------    1 root     root            64 Jan  2 10:33 0 -> /dev/console
    lrwx------    1 root     root            64 Jan  2 10:33 1 -> /dev/console
    lr-x------    1 root     root            64 Jan  2 10:33 10 -> pipe:[1552]
    l-wx------    1 root     root            64 Jan  2 10:33 11 -> pipe:[1552]
    lrwx------    1 root     root            64 Jan  2 10:33 14 -> socket:[1553]
    lrwx------    1 root     root            64 Jan  2 10:33 2 -> /dev/console
    lrwx------    1 root     root            64 Jan  2 10:33 3 -> /dev/console
    lrwx------    1 root     root            64 Jan  2 10:33 4 -> /dev/fb0
    lr-x------    1 root     root            64 Jan  2 10:33 5 -> /dev/tty0
    lrwx------    1 root     root            64 Jan  2 10:33 6 -> /dev/tty2
    lrwx------    1 root     root            64 Jan  2 10:33 7 -> /dev/input/event1
    lr-x------    1 root     root            64 Jan  2 10:33 8 -> pipe:[1551]
    l-wx------    1 root     root            64 Jan  2 10:33 9 -> pipe:[1551]
    
    913/fd:
    lrwx------    1 root     root            64 Jan  2 10:33 0 -> /dev/console
    lrwx------    1 root     root            64 Jan  2 10:33 1 -> /dev/console
    lr-x------    1 root     root            64 Jan  2 10:33 10 -> pipe:[1552]
    l-wx------    1 root     root            64 Jan  2 10:33 11 -> pipe:[1552]
    lrwx------    1 root     root            64 Jan  2 10:33 14 -> socket:[1553]
    lrwx------    1 root     root            64 Jan  2 10:33 2 -> /dev/console
    lrwx------    1 root     root            64 Jan  2 10:33 3 -> /dev/console
    lrwx------    1 root     root            64 Jan  2 10:33 4 -> /dev/fb0
    lr-x------    1 root     root            64 Jan  2 10:33 5 -> /dev/tty0
    lrwx------    1 root     root            64 Jan  2 10:33 6 -> /dev/tty2
    lrwx------    1 root     root            64 Jan  2 10:33 7 -> /dev/input/event1
    lr-x------    1 root     root            64 Jan  2 10:33 8 -> pipe:[1551]
    l-wx------    1 root     root            64 Jan  2 10:33 9 -> pipe:[1551]
    
    914/fd:
    lrwx------    1 root     root            64 Jan  2 10:33 0 -> /dev/console
    lrwx------    1 root     root            64 Jan  2 10:33 1 -> /dev/console
    lr-x------    1 root     root            64 Jan  2 10:33 10 -> pipe:[1552]
    l-wx------    1 root     root            64 Jan  2 10:33 11 -> pipe:[1552]
    lrwx------    1 root     root            64 Jan  2 10:33 14 -> socket:[1553]
    lrwx------    1 root     root            64 Jan  2 10:33 2 -> /dev/console
    lrwx------    1 root     root            64 Jan  2 10:33 3 -> /dev/console
    lrwx------    1 root     root            64 Jan  2 10:33 4 -> /dev/fb0
    lr-x------    1 root     root            64 Jan  2 10:33 5 -> /dev/tty0
    lrwx------    1 root     root            64 Jan  2 10:33 6 -> /dev/tty2
    lrwx------    1 root     root            64 Jan  2 10:33 7 -> /dev/input/event1
    lr-x------    1 root     root            64 Jan  2 10:33 8 -> pipe:[1551]
    l-wx------    1 root     root            64 Jan  2 10:33 9 -> pipe:[1551]
    
    915/fd:
    lrwx------    1 root     root            64 Jan  2 10:33 0 -> /dev/console
    lrwx------    1 root     root            64 Jan  2 10:33 1 -> /dev/console
    lr-x------    1 root     root            64 Jan  2 10:33 10 -> pipe:[1552]
    l-wx------    1 root     root            64 Jan  2 10:33 11 -> pipe:[1552]
    lrwx------    1 root     root            64 Jan  2 10:33 14 -> socket:[1553]
    lrwx------    1 root     root            64 Jan  2 10:33 2 -> /dev/console
    lrwx------    1 root     root            64 Jan  2 10:33 3 -> /dev/console
    lrwx------    1 root     root            64 Jan  2 10:33 4 -> /dev/fb0
    lr-x------    1 root     root            64 Jan  2 10:33 5 -> /dev/tty0
    lrwx------    1 root     root            64 Jan  2 10:33 6 -> /dev/tty2
    lrwx------    1 root     root            64 Jan  2 10:33 7 -> /dev/input/event1
    lr-x------    1 root     root            64 Jan  2 10:33 8 -> pipe:[1551]
    l-wx------    1 root     root            64 Jan  2 10:33 9 -> pipe:[1551]
    
    916/fd:
    lrwx------    1 root     root            64 Jan  2 10:33 0 -> /dev/console
    lrwx------    1 root     root            64 Jan  2 10:33 1 -> /dev/console
    lr-x------    1 root     root            64 Jan  2 10:33 10 -> pipe:[1552]
    l-wx------    1 root     root            64 Jan  2 10:33 11 -> pipe:[1552]
    lrwx------    1 root     root            64 Jan  2 10:33 14 -> socket:[1553]
    lrwx------    1 root     root            64 Jan  2 10:33 2 -> /dev/console
    lrwx------    1 root     root            64 Jan  2 10:33 3 -> /dev/console
    lrwx------    1 root     root            64 Jan  2 10:33 4 -> /dev/fb0
    lr-x------    1 root     root            64 Jan  2 10:33 5 -> /dev/tty0
    lrwx------    1 root     root            64 Jan  2 10:33 6 -> /dev/tty2
    lrwx------    1 root     root            64 Jan  2 10:33 7 -> /dev/input/event1
    lr-x------    1 root     root            64 Jan  2 10:33 8 -> pipe:[1551]
    l-wx------    1 root     root            64 Jan  2 10:33 9 -> pipe:[1551]
    root@(none):/proc/909/task#

    关于字库的判断有个错误,df_andi代码中是有初始化字库文件的,如下的FONT宏定义

    它的定义如下:

    strace跟踪任务打开的文件

    可以看到确实有打开,只是后来又把对应的fd关闭了,所以才无法通过proc文件系统追踪的到。 

    而且我们有个意外的收获,就是cpu_idle的来源也找到了,就是/proc/stat节点.

    常见问题:

    执行用例df_andi后,终端输出failure后退出。

     根据提示信息,directfb貌似依赖/dev/tty0或者/dev/vc/*设备节点,根据提示,打开/dev/vt/*使能配置

     CONFIG_VT选项将会打开内核对Virtual Terminal的支持,CONFIG_VT 打开后,内核才会支持带显示和键盘的终端设备,由于这类终端设备上通常可以打开多个virtual termial,类似于gnome console,所以叫做virtual terminal,配置上讲:

    for example one virtual terminal can collect system messages and warnings, another one can be used for a text-mode user session, and a third could run an X session, all in parallel. Switching between virtual terminals is done with certain key combinations, usually Alt-<function key>.

     x-server即是运行于virtual console之上的,所以支持图形界面地化一定要支持VT,或许linux上chvt命令和它有关吧。

    打开后,重新编译内核,接口正确执行df_andi命令。

    结束 

    展开全文
  • DirectFrameBuffer技术介绍官方版本。包括DirectFrameBuffer技术架构,接口API,sample,描述等等
  • 引言  在“软件变服务”的背景下,通过网络提供服务,即...具体方案是通过Directvnc 的移植来实现的,由于Directvnc 与其它Unix 系统不同的是它通过轻量级图形库DirectFB 使用Linux 帧缓冲设备。DirectFB 在FrameBu
  • directfb

    2018-09-06 11:11:54
    directfb库,官方网站已经关闭(剩下一下羞羞的文字),这是最新版本。MD5:f5bdacde77fc653279819796ae11341e
  • 引 言  DirectFB是一个提供硬件图形加速、输入... 使用DirectFB可以绕开X Window系统,让应用程序直接操作Frame. Buffer,从而加速和简化图形操作。这对于嵌入式系统是很重要的,因为在资源有限的嵌入式系统中通常没
  • 本文就如何实现DirectFB的图形加速功能做了详细的介绍,并将实现之后在性能上得到的改进与实现之前做比较,说明DirectFB在优化嵌入式系统GUI上的作用。
  • 本文首先对DirectFB进行了详细的介绍,接着提出了一种宽松的、可分解的嵌入式播放器设计方案。该方案资源消耗少、可移植性强、系统各个模块间依赖度小,使得用户能够根据自己的系统需求快速设计满足自己要求的播放器...
  • 与早期计算机使用的命令行界面相比,图形界面对于用户来说在视觉上更易于接受。GUI 即人机交互图形化用户界面设计。纵观国际相关产业在图形化用户界面设计方面的发展现状,许多国际知名公司早已意识到 GUI 在产品...
  • Ubuntu 上配置DirectFB环境(亲测可用)Ubuntu 上配置DirectFB环境(亲测可用)
  • DirectFB-1.6.1.tar.gz

    2016-10-26 17:14:40
    directfb1.6.1
  • 嵌入式环境下需要使用directfb做后端,自己一步一步的摸索。这里记录下踩坑过程 准备工作 我选择现在虚拟机里面来个直观感受,故而在ubuntu1604下进行编译测试,首先是编译directfb的开源库了,此处选择的是1.4版本...

    嵌入式环境下需要使用directfb做后端,自己一步一步的摸索。这里记录下踩坑过程

    准备工作

    我选择现在虚拟机里面来个直观感受,故而在ubuntu1604下进行编译测试,首先是编译directfb的开源库了,此处选择的是1.4版本了,编译安装脚本如下:

    ./autogen.sh
    ./configure --prefix=/home/skyhigh/WORK/install --enable-static --disable-x11 --enable-fbdev --with-gfxdrivers=vmware
    make
    make install
    

    Qt使用directfb做后端的配置脚本

    使用的脚本如下:

    ./configure \
    -prefix /opt/qt5.5.1_dfb \
    -v \
    -opensource \
    -confirm-license \
    -nomake examples \
    -nomake tests \
    -no-xcb-xlib \
    -no-xcb \
    -no-xkbcommon-evdev \
    -no-xinput2 \
    -qpa directfb \
    -directfb \
    -L/opt/directfb_1_4/lib \
    -I/opt/directfb_1_4/include
    
    

    配置过程中directfb作为qpa后端始终显示如下:
    QPA backends:
    DirectFB … no # 没有成功
    EGLFS … yes
    EGLFS i.MX6… . no
    EGLFS KMS … no
    EGLFS Mali … no
    EGLFS Raspberry Pi . no
    EGLFS X11 … yes
    LinuxFB … yes
    XCB … no

    反复查看配置,均没有问题,故而查看,最后只能看configure的源码,一路追踪,最后找到出问题的地方:

    if [ "$CFG_DIRECTFB" != "no" ]; then
        if [ -n "$PKG_CONFIG" ] && $PKG_CONFIG --exists directfb 2>/dev/null; then
            QMAKE_CFLAGS_DIRECTFB=`$PKG_CONFIG --cflags directfb 2>/dev/null`
            QMAKE_LIBS_DIRECTFB=`$PKG_CONFIG --libs directfb 2>/dev/null`
            if compileTest qpa/directfb "DirectFB" $QMAKE_CFLAGS_DIRECTFB $QMAKE_LIBS_DIRECTFB; then
                CFG_DIRECTFB=yes
            elif [ "$CFG_DIRECTFB" = "yes" ] && [ "$CFG_CONFIGURE_EXIT_ON_ERROR" = "yes" ]; then
                echo " DirectFB support cannot be enabled due to functionality tests!"
                [ -z "$PKG_CONFIG" ] && echo " Use of pkg-config is not enabled, maybe you want to pass -force-pkg-config?"
                echo " Turn on verbose messaging (-v) to $0 to see the final report."
                echo " If you believe this message is in error you may use the continue"
                echo " switch (-continue) to $0 to continue."
                exit 101
            else
                CFG_DIRECTFB=no
            fi
        else
            CFG_DIRECTFB=no
        fi
    fi
    

    pkg-config 会搜索是否存在对应的*.pc配置文件,找不到就会设置CFG_DIRECTFB = no, 知道原因就好办了,我的安装路径是directfb安装路径:/opt/directfb_1_4

    根据pkg-config的2种查找路径:

    • 第一种:取系统的/usr/lib下的所有*.pc文件。
    • 第二种:PKG_CONFIG_PATH环境变量所指向的路径下的所有*.pc文件。

    执行以下脚本:

    PKG_CONFIG_PATH=/opt/directfb_1_4/lib:${PKG_CONFIG_PATH}
    

    重新运行qt的配置脚本即可。

    此处参考:https://www.cnblogs.com/rainsoul/p/10567390.html

    解决Qt的demo运行问题

    在编译一个qt最基本的2Ddemo后,运行中会报如下错误:

    Directfb/core/vt: unable to disallocate vt
    -->Device or resource busy
    

    dmesg查看系统log 有如下显示:

    [  812.141294] [drm:vmw_fb_setcolreg [vmwgfx]] *ERROR* Bad regno 16.
    

    解决办法:暂未找到,还需继续

    以下不靠谱

    Try to disable vt switching by adding this to your directfbrc:
    no-vt-switch
    
    展开全文
  • DirectFB-1_7_4 代码

    2018-03-01 13:12:10
    DirectFB是一个轻量级的提供硬件图形加速,输入设备处理特性和抽象的图形库
  • DirectFB-examples-1.5.2.tar.gz
  • DirectFB-1.4.0.tar.gz

    2020-08-28 17:54:52
    适合深挖directfb界面的人士使用,里面源码内容齐全,还有各种例子实现,有助于了解源码结构实现,增强对接口的使用
  • 本文首先对DirectFB进行了介绍,接着提出了一种新的基于DirectFB的嵌入式播放器设计方案。该方案相比于其他嵌入式GUI开发的播放器能够有效地降低资源的消耗,适用于各种中低端的场合,同时具备良好的可移植性。  1...
  • dump Directfb数据工具

    2016-05-28 17:04:29
    程序运行时执行,此工具可以把Directfb数据从画布dump到本地,并保存成PPM格式图片,很好很强大
  • Directfb 帮助手册

    2014-07-28 16:50:31
    帮助开发directfb 程序,提供完善接口函数,方便!
  • directfb相关源码

    2018-06-14 12:58:13
    资源清单 1.directfb1.7.7 2.directfb-example 3.fusion 4.flux
  • directfb中文API

    2014-11-29 19:45:44
    directfb中文API 版本不高 DirectFB中文社区的
  • directfb documents

    2011-09-09 18:58:40
    directfb documents directfb documents
  • DirectFB代码导读 .pdf

    2021-08-10 15:49:38
    DirectFB代码导读 .pdf
  • 威盛CLE266 / UniChrome图形控制器的DirectFB图形驱动程序。 开发已移至www.directfb.org
  • 本文首先对DirectFB进行了介绍,接着提出了一种新的基于DirectFB的嵌入式播放器设计方案。该方案相比于其他嵌入式GUI开发的播放器能够有效地降低资源的消耗,适用于各种中低端的场合,同时具备良好的可移植性。  1...
  • 本文首先对DirectFB进行了详细的介绍,接着提出了一种宽松的、可分解的嵌入式播放器设计方案。该方案资源消耗少、可移植性强、系统各个模块间依赖度小,使得用户能够根据自己的系统需求快速设计满足自己要求的播放器...
  • Android-DirectFB-开源

    2021-05-27 05:41:06
    移植DirectFB 2D图形库以在Android系统上支持某些2D SOC芯片。
  • DirectFB_EGL_United

    2015-09-01 14:49:42
    The ppt describe the OpenGL and EGL graphic stacks.

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,467
精华内容 986
关键字:

directfb使用