XDirectFB编译笔记

XDirectFB是使用DirectFB库作为output driver的XServer实现。由于使用的人较少,所以编译是个问题。尤其是Fusion kernel module,DirectFB库,XDirectFB patch及代码,XServer之间版本匹配关系。

编译步骤可参考链接1的说明。版本匹配关系如下:

  • Fusion内核模块使用8.1.1版本;(下载链接
  • DirectFB使用1.2.8版本;(下载链接
  • XServer使用1.1.1版本;(下载链接
  • XDirectFB使用git开发树并回退至

commit 25a6eb36979779d240db9a679a6152c925d82c56

Refs: <origin/origin>, DIRECTFB_0_9_18-83-g25a6eb3
Author: Ville Syrjala <[email protected]>
Date:   Wed Feb 7 22:12:10 2007 +0000

Replace __u32 with u32 etc.

commit 25a6eb36979779d240db9a679a6152c925d82c56
Refs: <origin/origin>, DIRECTFB_0_9_18-83-g25a6eb3
Author: Ville Syrjala <[email protected]>
Date:   Wed Feb 7 22:12:10 2007 +0000
Replace __u32 with u32 etc.

git clone git://git.directfb.org/git/directfb/programs/XDirectFB.git
git checkout 25a6eb36979779d240db9a679a6152c925d82c56

已在Ubuntu 8.04上编译运行通过。(运行时XDirectFB缺少的字体可以从/usr/share/fonts/X11下拷贝)

参考链接

  1. http://www.directfb.org/wiki/index.php?title=XDirectFB:About
  2. http://www.directfb.org/index.php?path=Main/Downloads&page=0

Cloud Computing Notes

关于云计算的一些笔记。

云计算,从理想到实作之间,牵涉了太多的概念与炒作。这篇文档摘录了相关公司/产品的链接,供参考用。

http://docs.google.com/Presentation?id=dgnw3rmt_255htp7fsf4

Mercurial Tips

关于Mercurial(hg)的一个简单笔记:

Mercurial和git一样,是一个开源的分布式版本管理工具。这篇文档主要用来记录hg使用时的一些小技巧。

http://docs.google.com/Presentation?id=dgnw3rmt_253cxjdvpgv

Android Quick Introduction

关于Android的一个简单笔记。WordPress不支持iframe,没办法直接嵌入Google Presentation。把链接贴在下面了。

http://docs.google.com/Presentation?id=dgnw3rmt_242gk67n9fk

Linux 2.6.28版本内核的几个改动

Changes in Linux Kernel 2.6.28

The GEM Memory Manager for GPU memory
长期以来显存管理代码分散在Kernel, Xorg和专有驱动里,相对比较混乱。社区一直在讨论是否要加入Tungsten Graphics的TTM内存管理器。
现在加入的GEM内存管理器是由Intel的Keith Packard提出的。相对于TTM,GEM简化了设计,更加轻量级。目前只支持Intel i915驱动。

Memory management for graphics processors
http://lwn.net/Articles/257417/
GEM v. TTM
http://lwn.net/Articles/283793/
GEM – the Graphics Execution Manager
http://lwn.net/Articles/283798/

Memory management Scalability improvements
主要的改动是加入了virtual memory scalability improvement patch和VM scalability patch。主要针对大容量内存的机器(如128G)在页面换出时在LRU list搜索时间过长的问题。
前一个patch把file-backed page和anonymous page分别存放在两个LRU list上,优先对前者做换出。
VM scalability patch,只在inactive list上维护一定百分比的anonymous page。当对anonymous page回收时,只检查inactive list上匿名页的引用情况,而避免对所有的匿名页做操作。

Memory management Scalability improvements
http://lwn.net/Articles/286472/

Disk Shock Protection
ATA/ATAPI-7规范定义了IDLE IMMEDIATE命令可以切换驱动器至idle模式并复位磁头。2.6.28为每个ATA设备添加了/sys/block/*/device/unload_heads接口,
向这个接口中写一个整数值n可以复位磁头并延时所有IO操作n毫秒。当这个时间结束,再恢复IO操作。最大允许的延时值为30000毫秒。
磁盘振动保护功能需要结合accelerometers驱动和应用软件才能发挥作用。2.6.28的这个feature只是提供了操作接口。

Boot tracer
主要来自Arjan van de Ven和Frédéric Weisbecker在Linux快速启动方面的工作。去年Arjan在Linux Plumbers Conference上展示了5秒启动上网本的demo。
然而fast boot patch暂时未被Linus接纳进mainline代码树。这次2.6.28加入的Boot tracer用于性能分析,可以更方便地让开发者跟踪kernel在各部分启动所耗费的时间,以便调优。

参考

http://kernelnewbies.org/LinuxChanges

Who’s who in Graphics / Linux / Xorg area

Alan Akin

  • DRI, Redhat

Adam Jackson (ajax)

  • Redhat

Alan Coopersmith

Andy Ritger

Behdad Esfahbod

Bertram Felgenhauer

  • pixman, cairo

Brian Paul

Dave Airlie (airelied)

David Dawes

David Reveman

Eric Anholt’s (anholt)

Gareth Hughes

  • DRI, Nvidia

James Jones

  • Nvidia

Jens Owen

Keith Packard (keithp)

Kevin E. Martin

Kristian Høgsberg (krh)

Mirco Müller, (macslow)

Rik, Faith

last updated: 2008-02-04 by unicell

总结C++中的所有强制转换函数(const_cast,reinterpret_cast,static_cast,dynamic_cast)

http://www.libing.net.cn/read.php?520

1)static_cast<T*>(a)

将地址a转换成类型T,T和a必须是指针、引用、算术类型或枚举类型。

表达式static_cast<T*>(a), a的值转换为模板中指定的类型T。在运行时转换过程中,不进行类型检查来确保转换的安全性。

2)dynamic_cast<T*>(a)

完成类层次结构中的提升。T必须是一个指针、引用或无类型的指针。a必须是决定一个指针或引用的表达式。

表达式dynamic_cast<T*>(a) 将a值转换为类型为T的对象指针。如果类型T不是a的某个基类型,该操作将返回一个空指针。

3)const_cast<T*>(a)

去掉类型中的常量,除了const或不稳定的变址数,T和a必须是相同的类型。

表达式const_cast<T*>(a)被用于从一个类中去除以下这些属性:const, volatile, 和 __unaligned。

4)reinterpret_cast<T*>(a)

任何指针都可以转换成其它类型的指针,T必须是一个指针、引用、算术类型、指向函数的指针或指向一个类成员的指针。

表达式reinterpret_cast<T*>(a)能够用于诸如char* 到 int*,或者One_class* 到 Unrelated_class*等类似这样的转换,因此可能是不安全的。

something about XGL

Emanuele Tamponi’s post

My site about Xorg, Aiglx and Xgl
http://lists.freedesktop.org/archives/xorg/2006-March/014236.html

OpenGL & X

http://madman2k.net/article/36
covered 2 topics:

  • Compositing Manager
  • Accelerated X-Server

Article Explains How XGL/Compiz/Mesa/Device Drivers All Relate

http://www.breakitdownblog.com/tag/xgl/

Xgl的启动
(zhcn.blogspot.com/2007_05_20_archive.html )

刚才搜索xgl相关的知识,发现Emanuele Tamponi写的《How Xgl works》的综述比较明白,特别是关于Xgl如何启动的这部分:
第一步:Xgl和Xorg启动

  • (记住我们讨论的是Xglx)
  • Xgl启动。
  • “Xgl初始化过程”启动Xorg。
  • Xorg加载NVIDIA的X驱动
  • Xorg加载NVIDIA的libglx作为其X Server的GLX扩展(作者称之为“隐含的GLX扩展”)
  • Xorg可以给OpenGL客户程序提供直接OpenGL上下文。

第二步:请求上下文

  • Xgl被链接到NVIDIA的libGL并用它来进行渲染。
  • 目前,Xgl是一个OpenGL客户程序,故需要一个OpenGL上下文。
  • NVIDIA的libGL使用自身的GLX函数开启一个同隐含的GLX扩展进行的会话。
  • NVIDIA的libGL得到了一个给Xgl的OpenGL上下文。

第三步:Xgl开启并运行,提供了一个心的Xserver。

  • Xgl现在可以用OpenGL函数绘制窗口和root。
  • Xgl加载自己的libglx作为其X Server 的GLX扩展(作者称之为“Xgl GLX扩展”)。
  • Xgl只能向OpenGL客户程序提供间接OpenGL上下文,原因在于Xgl GLX扩展会把OpenGL命令传递给Xgl。

第四步:一个OpenGL客户程序被启动

  • Xgl内部,一个OpenGL客户程序被启动。
  • 这一OpenGL客户程序被链接到NVIDIA的libGL上。
  • 现在,它需要一个OpenGL上下文。
  • NVIDIA的libGL使用自身的GLX函数开启一个同Xgl GLX扩展进行的会话。
  • NVIDIA的libGL为它的客户程序获得一个间接OpenGL上下文。
  • OpenGL客户程序可以用OpenGL函数绘制其内容,并被Xgl通过GLX协议接收。
  • Xgl收到OpenGL函数调用并使用NVIDIA的libGL绘制内容。

SuSE – KDE

How To Configure the KDE 3.3 Menu manually (without KMenuEdit)

Main file (.menu file) detailing system-wide default menu structure is /etc/xdg/menus/applications.menu
Menu directories (.directory files) are stored in /usr/share/desktop-directories/
System-wide Menu entries (.desktop files) are stored in many places.
Gnome applications: /opt/gnome/share/applications
KDE applications: /opt/kde3/share/applications/kde
or /usr/share/applications/kde
Other Applications: /usr/share/applications

K Menu Icon Size for openSUSE desktop

  • Open your favorite text editor. Edit the file located at ~/.kde/share/config/kickerrc
  • Go to the [menus] section of this file.
  • Edit (or add, if it isn’t there) the “MenuEntryHeight=” variable to be the height, in pixels, that you wish the K Menu icons to appear.
  • Save and quit.
  • Restart the KDE Panels with this command: dcop kicker Panel restart
  • SUSE Style/KickOff Menu
    http://lists.opensuse.org/opensuse/2007-04/msg01161.html

    Driver porting: the workqueue interface.

    http://lwn.net/Articles/23634/