server,gtk,tslib

一、首先先说下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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值