server,gtk,tslib

2023-05-16

一、首先先说下framebuffer、xserver、tslib、gtk和桌面这五者之间的联系, 
1、framebuffer 即linux系统的一块内存区域,往这块区域写东西屏幕就会有所显示。对应的设备文件是dev/fb0 。

2、xserver 一般所在目录叫X11,对应的可执行程序叫Xorg,是作为服务器,图形界面相当于客户端,上层图形程序运行时会先告诉 
xserver,xserver再告诉framebuffer。frambuffer才是最终的画图的。其中gtk界面既可以依赖xserver也可以不依赖(直接基于directfb),(buildroot默认是依赖配置)QT不依赖xserver,但是桌面程序必须要用xserver。

3、tslib 通常作为触摸屏驱动的适配层,为上层的应用提供了一个统一的接口。,介于xserver和屏幕驱动之间,有了这个库xserver才能和内核驱动交互。

4、gtk 是一种图形用户界面(GUI)工具包。也就是说,它是一个库(或者,实际上是若干个密切相关的库的集合)

5、桌面系统 
kde与gnome项目拥有相同的目标,就是为Linux开发一套高价值的图形操作环境,不同之处在于kde基于双重授权的Qt,而GNOME采用遵循 GPL的gtk库开发—后者拥有更广泛的支持。KDE包含大量的应用软件、项目规模庞大,因为没有太多的第三方开发者为 KDE开发重量级软件;由于自带软件众多,KDE比GNOME丰富多彩。但KDE的毛病在于运行速度 相对较慢,且部分程序容易崩溃(当然整个KDE崩溃的情况极少出现)。GNOME项目专注于桌面环境本身,由于软件较少、运行速度快,且稳定性相当出色,GNOME已经成为Novell、RedHat企业发行版的默认桌面,更偏向于商 务领域;而丰富多彩的KDE有朝向家用和娱乐方向发展的趋势,它比GNOME显然更有趣味性一些。

综合所述:从底层到上层各个调用关系为 
cpu——>(GPU2d/3d加速(几个库))——>framebuffer ——>tslib ——>xserver ——>gtk /qt——>gnome/kde

二、xserver移植流程 
在buildroot中执行make xconfig 
按Ctrl + F 搜索并选上以下10项 
1、X.org X Window System 
2、xorg-server 
3、Modular X.org 
4、Xvfb server 
5、xterm 
6、xvkbd 
7、xinit 
8、xhost 
9、xset 
10、libXcomposite 
保存并退出,开始编译。 
启动xserver进程的命令是在文件系统usr/bin/下的Xorg, 
在终端终端上执行Xorg &(后台运行) 即可。

三、tslib移植 
tslib 分为QT的tslib和directfb的tslib以及xf86-input-tslib。 
其中xf86-input-tslib既是xserver要用的库,我们选上它就行。 
编译,文件系统起来后还是执行Xorg & 命令,执行这个命令的过程中会去加载tslib这个模块。 
在/var/log/Xorg.0.log 中会看到具体的打印信息,

LoadModule: "tslib"
Loading /usr/lib/xorg/modules/input/tslib_drv.so
Module tslib: vendor="X.Org Foundation"
compiled for 1.10.0, module version = 0.0.1
Module class: X.Org XInput Driver
ABI class: X.Org XInput driver, version 12.2

如果失败是打印如下信息

(II)UnloadModule: "tslib"
(II) Unloading tslib
(EE) Failed to load module "tslib" (module does not exist, 0)
(EE) No input driver matching `tslib'

(EE) module ABI major version (12) doesn't match the server's version (20)

由于我用的buildroot里的自带的库,发现xserver的库的版本是 
xorg-server-1.15.1.tar.bz2 而tslib是xf86-input-tslib-0.0.6.tar.bz2 经过百度tslib的库2009年就不再更新,0.06已经是最新的版本,而xserver却一直更新,并且在以后的更新中把有关tslib的一些接口函数在xserver中去掉了 
(这点可以在xserver_xorg-server-1.15.1/ChangeLog 中可以找到记录改动的信息),导致我一直报Unloading tslib。百度补丁移植没找到,干脆就把xserver的版本降低,百度下降到1.10版本即可。下载网址为 
http://lists.freedesktop.org/archives/xorg-announce/2011-February/001612.html 
这样和tslib的接口就对应上了,把下下来的压缩包放在/dl下并改名为xorg-server-1.15.1.tar.bz2,(buildroot配置是编译1.15版的包,由于不会改配置就将就把1.10的包名改为1.15)在编译过程中会报错

 sdksyms.c:1037:15: error: 'screenSaverSuspended' undeclared here (not in a function)
  sdksyms.c:1056:15: error: 'noGlxExtension' undeclared here (not in a function)
  sdksyms.c:1057:15: error: 'noScreenSaverExtension' undeclared here (not in a function)
  sdksyms.c:1063:15: error: 'noXFree86DRIExtension' undeclared here (not in a function)
 sdksyms.c:1068:15: error: 'noDRI2Extension' undeclared here (not in a function)

解决办法在output/build/xserver_xorg-server-1.15.1/ 下 
find -name sdksyms.c 把函数都注释掉即可。 
接着编译报错:

  make: *** [/home/snmu/buildroot/buildroot/output/build/xserver_xorg-server-1.15.1/.stamp_built] Error 2
 make: *** [/home/snmu/buildroot/buildroot/output/build/xserver_xorg-server-1.15.1/.stamp_staging_installed] Error 2
 make: *** [/home/snmu/buildroot/buildroot/output/build/xserver_xorg-server-1.15.1/.stamp_target_installed] Error 2 

缺少一些隐藏文件,怎么办呢?从原来buildroot编好的xserver_xorg-server-1.15.1/ 中拷贝过来即可(注意把之前默认的配置编译出的build目录改名保存好)。之后再报类似,缺什么拷贝什么就行。至于为什么这些文件出错,可能还是跟buildroot的一些默认配置有关。 
编译成功后,把buildroot/output/images/rootfs.ext2 烧录到板子上。接着执行Xorg & 命令,会报fbdev的错误

(II)UnloadModule: "fbdev"
 module ABI major version (12) doesn't match the server's version (20)

原因是fbdev的库接口与xserver对不上,也就是说fbdev也得降低版本,原来是xdriver_xf86-video-fbdev-0.4.4,去网上下载 
xf86-video-fbdev-0.3.0.tar.bz2,接下来改名编译。因为我只用到触屏,而执行Xorg 只默认是加载mouse(鼠标)和kbd(键盘),慢慢淡化了触屏功能, 
所以需要在output/target/etc/X11/下 添加一个自己自定义的xorg.conf 配置文件,至于怎么写需要根据自己的硬件环境,下面给出参考链接

http://wenku.baidu.com/link?url=3wWq6B6-rawMIM4kpUc_tpPFLRlzFLNAkkBIl324Du-ZbKJXT5anmMsvjGqpj1sKI6-pn-RNwD8M5OPZDz742Q0571DdscPIOEgpNBk6UpC

我自己的xorg.conf,仅供参考


<code class="hljs rib has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;">  <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">1</span> Section <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"Device"</span>                                                                                                                         
  <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">2</span>  Identifier <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"Framebuffer"</span>
  <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">3</span>  Driver  <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"fbdev"</span>
  <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">4</span>  <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">Option</span>  <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"fbdev"</span>  <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"/dev/fb0"</span>
  <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">5</span> EndSection
  <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">6</span> 
  <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">7</span> Section <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"Monitor"</span>
  <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">8</span>  Identifier <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"Generic Monitor"</span>
  <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">9</span>  ModelName    <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"Monitor Model"</span>
 <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">10</span> DisplaySize <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">480</span> <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">800</span>
 <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">11</span> EndSection
 <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">12</span> 
 <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">13</span> Section <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"Screen"</span>
 <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">14</span>  Identifier <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"Default Screen"</span>
 <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">15</span>  Device  <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"Framebuffer"</span>
 <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">16</span>  Monitor  <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"Generic Monitor"</span>
 <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">17</span> EndSection
 <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">18</span> 
 <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">19</span> Section <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"InputDevice"</span>
 <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">20</span>        Identifier  <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"Touchpad0"</span>
 <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">21</span>        Driver      <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"tslib"</span>
 <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">22</span>        <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">Option</span> <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"CorePointer"</span>
 <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">23</span>        <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">Option</span> <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"Protocol"</span> <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"Auto"</span>
 <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">24</span>        <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">Option</span> <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"Device"</span> <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"/dev/input/event0"</span>
 <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">25</span> EndSection
 <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">26</span> 
 <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">27</span> Section <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"ServerLayout"</span>
 <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">28</span>  Identifier <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"Default Layout"</span>
 <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">29</span>  Screen  <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"Default Screen"</span>
 <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">30</span>  InputDevice  <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"Touchpad0"</span>  
 <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">31</span> EndSection
 <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">32</span> 
 <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">33</span> Section <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"Module"</span> 
 <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">34</span> Load    <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"tslib"</span>
 <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">35</span> EndSection </code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li><li style="box-sizing: border-box; padding: 0px 5px;">7</li><li style="box-sizing: border-box; padding: 0px 5px;">8</li><li style="box-sizing: border-box; padding: 0px 5px;">9</li><li style="box-sizing: border-box; padding: 0px 5px;">10</li><li style="box-sizing: border-box; padding: 0px 5px;">11</li><li style="box-sizing: border-box; padding: 0px 5px;">12</li><li style="box-sizing: border-box; padding: 0px 5px;">13</li><li style="box-sizing: border-box; padding: 0px 5px;">14</li><li style="box-sizing: border-box; padding: 0px 5px;">15</li><li style="box-sizing: border-box; padding: 0px 5px;">16</li><li style="box-sizing: border-box; padding: 0px 5px;">17</li><li style="box-sizing: border-box; padding: 0px 5px;">18</li><li style="box-sizing: border-box; padding: 0px 5px;">19</li><li style="box-sizing: border-box; padding: 0px 5px;">20</li><li style="box-sizing: border-box; padding: 0px 5px;">21</li><li style="box-sizing: border-box; padding: 0px 5px;">22</li><li style="box-sizing: border-box; padding: 0px 5px;">23</li><li style="box-sizing: border-box; padding: 0px 5px;">24</li><li style="box-sizing: border-box; padding: 0px 5px;">25</li><li style="box-sizing: border-box; padding: 0px 5px;">26</li><li style="box-sizing: border-box; padding: 0px 5px;">27</li><li style="box-sizing: border-box; padding: 0px 5px;">28</li><li style="box-sizing: border-box; padding: 0px 5px;">29</li><li style="box-sizing: border-box; padding: 0px 5px;">30</li><li style="box-sizing: border-box; padding: 0px 5px;">31</li><li style="box-sizing: border-box; padding: 0px 5px;">32</li><li style="box-sizing: border-box; padding: 0px 5px;">33</li><li style="box-sizing: border-box; padding: 0px 5px;">34</li><li style="box-sizing: border-box; padding: 0px 5px;">35</li></ul>  

下面还有一个错误信息,具体原因没查出来。

 (EE) FBDEV(0): FBIOPUT_VSCREENINFO succeeded but modified mode
 (EE) FBDEV(0): mode initialization failed                                                                                                
 Fatal server error:AddScreen/ScreenInit failed for driver 0

在buildroot/output/build/xserver_xorg-server-1.15.1/ 
执行

 grep "FBIOPUT_VSCREENINFO succeeded" -rn .

会找到信息出处 
./hw/xfree86/fbdevhw/fbdevhw.c:486 
把下面的return false 注释掉即可。 
如果报这样的错误信息:

tslib: Selected device is not a touchscreen (must support ABS and KEY event types)

原因是kernel 的配置问题

四、gtk 移植 
buildroot需要选的有 
(1)gtk engines 
(2)hicolor 
(3)libgtk2 
(4)Install libgtk2 demo program 
选上编译即可,这步需要声明环境变量 export DISPLAY=:0 
否则会报 错误 Gtk-WARNING **: cannot open display: 
(报这个错误一般是两种情况,一是环境变量,二是xserver进程没起来) 
运行gtk-demo 可以测试gtk环境是否搭建好。这时gtk例子界面不太正常,字体是框框,界面只显示一半,下面给出解决方法。

五、桌面 
在buildroot中选上 
(1)MatchBox Window Manager 
(2)Matchbox session common files 
(3)PDA style desktop folders 
(4)Matchbox Desktop 
(5)Matchbox Panel 
编译烧录,执行matchbox-window-manager & 命令, 
有了这个程序,gtk界面就可以正常显示了,执行matchbox-desktop 可以显示buildroot提供的桌面例子。 
在/buildroot/system/ingenic/dorado/etc/init.d/rcS 中添加以下两行命令,在system/ingenic/dorado/etc/profile 中添加 
export DISPLAY=:0 即可。这两个文件最终会被编译到target中。

/usr/bin/gdk-pixbuf-query-loaders > /usr/lib/gdk-pixbuf-2.0/2.10.0/loaders.cache
/usr/bin/pango-querymodules > /etc/pango/pango.modules

开机启动后先执行 ts_calibrate命令,进行屏幕五点校准。否则触屏会不准,校准完后重新启动系统,再执行Xorg & ,matchbox-window-manager &,gtk-demo

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

server,gtk,tslib 的相关文章

随机推荐

  • Centos7搭建KVM虚拟化环境

    如果觉得写得不错 xff0c 烦请微信搜索公众号 34 郑州行疆户外 34 了解程序员的户外业余喜好 1 查看系统版本 root 64 openstack cat etc centos release CentOS Linux releas
  • Linux字符驱动之主设备号与次设备号

    drv demo c include lt linux version h gt include lt linux init h gt include lt linux module h gt include lt linux pci h
  • linux 更新内核,安装内核树

    https www cnblogs com williamjie p 10723919 html
  • x86计算CPU频率示例

    include lt stdio h gt include lt stdlib h gt include lt assert h gt include lt stdint h gt include lt string h gt includ
  • SM2 签名预处理操作

    如果觉得写得不错 xff0c 烦请微信搜索公众号 34 郑州行疆户外 34 了解程序员的户外业余喜好 转载 xff1a https www xuebuyuan com 1473900 html 一般情况下 xff0c 计算数字签名时应执行以
  • dataset中shuffle()、repeat()、batch()用法

    import numpy as np import tensorflow as tf np random seed 0 x 61 np random sample 11 2 make a dataset from a numpy array
  • Linux内核模块编程,多源码Makefile编写

    https mp csdn net console editor html 107838044 在学习内核模块编程的时候遇到了一些由于Makefile书写不正确导致的问题 一个 c源文件的Makefile按照网上的大部分资料介绍那样是没有问
  • 分组加密, 算法模式(ECB CBC CFB OFB)

    如果觉得写得不错 xff0c 烦请微信搜索公众号 34 郑州行疆户外 34 了解程序员的户外业余喜好 块加密 块加密 xff0c 英文Block Cyper xff0c 又称分组加密 xff0c 是一种常见的对称加密 xff0c 具有代表性
  • Linux UIO机制--用户空间I / O操作方法

    目录 前言 关于UIO UIO 的工作原理 前言 于许多类型的设备 xff0c 创建Linux内核驱动程序是过分的 真正需要的只是某种方式来处理中断并提供对设备存储空间的访问 控制设备的逻辑不必一定要在内核之内 xff0c 因为设备不需要利
  • Linux UIO驱动实例介绍

    接上一篇介绍UIO机制 https blog csdn net hpu11 article details 109395820 uio驱动详解 为了用最简单的例子说明问题 xff0c 我们在我们uio驱动的内核部分只映射了一块1024字节的
  • Mosquitto服务安装与使用---入门操作介绍

    关于Mosquitto配置的资料网上还是有几篇的 xff0c 但是看来看去 xff0c 基本上都是基于Linux 基于Window的凤毛麟角 xff0c 看上去貌似配置的东西相差不大 xff0c 实操过程中真的烦透了 xff0c 配置就是不
  • Windows 11 系统下载,正式版尚未发布

    下载链接方式 xff1a 关注 郑州行疆户外 程序员自己的订阅号 xff0c 回复 win11 xff0c 获取win11系统下载链接 一 发布 今年5月的Build大会 xff0c 微软便正式明确新一代操作系统为Windows 11 xf
  • Windows 11 系统下载安装 教程

    关 注 郑州行疆户外 订阅号 xff0c 回复 win11 xff0c 获取win11系统下载链接 xff0c 安装教程 说明 Windows11系统安装教程 xff0c 这里使用VM虚拟机演示具体安装教程 xff0c 如果是新手 xff0
  • Windows 11 TPM2.0问题及解决方法

    关注 郑州行疆户外 订阅号 回复 win11 xff0c 下载 windows11系统 回复 问题 xff0c 查看 windows11安装过程中遇到的问题及其解决方法 随着2021年6月24日 xff0c 微软正式发布会上确定windon
  • linux的dma驱动

    硬件平台 xff1a TI的3530 内核 xff1a linux 2 6 36 功能 xff1a 将fpga的数据从内存的一个地方复制到内存另一个地方 初学dma感到很是吃力 xff0c 编写的内核驱动代码仔细看了一个星期 xff0c 才
  • linux内核的并发与竞态

    并发与竞态是指多个任务单元同时访问同一个资源 xff0c 就会出现并发 xff0c 竞态的现象 其中多个任务单元包括中断 xff0c 进程 线程 xff0c 甚至多个多处理器 xff1b 同一资源既包含硬件资源 xff0c 也包括软件数据
  • UDP通信

    头文件 xff1a 1 pragma once 2 3 include lt stdio h gt 4 include lt unistd h gt 5 include lt string h gt 6 include lt stdlib
  • 交叉编译找不到stdio.h头文件,make menuconfig问题解决办法

    今天测试交叉编译器总出现问题 xff0c fatal error stdio h No such file or directory 后来根据指导使用编译命令 xff1a arm linux gcc src c I 头文件路径 能编译通过
  • 原子上下文,进程上下文,中断上下文的详细解析

    内核空间和用户空间是现代操作系统的两种工作模式 xff0c 内核模块运行在内核空间 xff0c 而用户态应用程序运行在用户空间 它们代表不同的级别 xff0c 而对系统资源具有不同的访问权限 内核模块运行在最高级别 xff08 内核态 xf
  • server,gtk,tslib

    一 首先先说下framebuffer xserver tslib gtk和桌面这五者之间的联系 xff0c 1 framebuffer 即linux系统的一块内存区域 xff0c 往这块区域写东西屏幕就会有所显示 对应的设备文件是dev f