恩,很久不来了,比较忙。
针对xserver开发的问题,主要是大家问到如何做xserver的开发。
我自己是这么过来的
1:基础知识要广泛扎实。
做xserver之前并没有什么太多的基础。
主要还是熟悉linux,这个差不多7,8年的基础吧
用的多有很多基础的东西就知道的比较清楚了,有些问题看到现象大概也会知道在什么地方出问题了,至少图形基础还是有有的,科班出身的一般都懂点,不用太深入的。一边做开发就一边学
了。
主要还是要有linux的思维方式,对linux系统很了解,之前做过系统优化,
系统方面的一些问题,所以也需要对linux系统比较了解。
这个做嵌入式的一般都比较了解,但是有些比较简单点,就是一个二进制程序。
从简单到复杂,系统裁剪等等都还是要很了解吧,哪里有问题能比较容易看出来。
哪个依赖哪个。如何定制修改,其实最早的时候也做过定制系统光盘的,没什么太深的
东西,但是有些东西做过之后自己收获还是和别人不一样的,总体说来还是自己多动手。
自己多经历一些项目,多做一些事情吧。技术还是要靠积累,就算别人愿意讲给你听。
但是实际上,从差那么一层,很少有人只靠听就能比老师懂的更多。有很多东西是讲不出来
的,只有做过才能体会。
2:文档资料哪里来。
恩,这个国内以前确实没有什么资料,做的也比较浅,不过现在也多了。主要还是google的。
3:从事了些什么工作才能比较快速的成长。
恩,这个,主要还是在项目中开发,以我个人来说,主要是图形加速,包括2d,3d这边
开发的时候就不得不去网上找很多资料来看,英文资料是少不了了。主要是做kaa加速。
exa的加速,xaa也就顺带的看了一下,顺便看看这些加速框架为什么这么演进,后来
还跟进了一些gallium的东西。3d加速的框架后来还是需要搞的很清楚的,因为嵌入式
里面对性能要求很高。嵌入式架构重构也简单一些,所以新架构很多都是从嵌入式来的。
中途也做过clutter,包括intel atom ,moorestown,ti 的omap, arm的mali,freescale的芯片
高通的snapdragon等等,项目倒是做了不少。中间做了一些performance相关的东西。还有就是自动测试框架等
一些东西,也需要对xserver的一些扩展很了解,开发过程中一般写的测试程序要比自己
开发的代码还要多,所以测试程序也写了很多。多媒体播放这边接触的比较多一点。
主要是因为嵌入式编码解码,多媒体输出性能很有问题。所以对色彩空间,自己操作的很多
还有就是各种测试程序。使用的xlib的比较多,自己在架构上也尝试改了很多东西,
包括修改xv的架构等等。输出输出系统也做的比较多,主要还是项目驱动的,包括各种键盘
蓝牙键盘,鼠标,蓝牙鼠标,触摸屏(各种奇奇怪怪的属性的触摸屏)snaptics等等。
这些都需要对xkb,x的事件队列等非常了解。因为xserver架构本来问题就多,bug也很多
出现疑难杂症的时候你不得不去调试他,发现它很多架构的问题。还有就是很多第三方
的驱动写的有问题,或者我们要做第三方驱动的wrapper(不要问为什么,商业就是很奇怪的东西),像触摸屏,触摸板这些驱动需要很多微调,才能改善用户体验。
做过moblin的前身,做过上网本,做过mid。大体上都是这些相关的。
之前用三天把一个linux系统porting到omap的机器上面(都是从source编译出来的)(包括各种硬件加速),当然主要还是omap的开源做的很好。相对来说好像没有比omap做的更好了。
xserver这边最早是从kdrive做过来,后来又迁移到xorg,两边都做了不少东西。
开源的东西基本上只要你做的久就比较了解这个东西的演进了,知道它有什么缺陷
演进的趋势是什么。
对架构的了解越深入,解决问题的方案就更多,虽然是同一个问题,但是解决的办法
和层次就有不同,可以在用户空间解决,也可以在驱动里面解决,也可以在框架里面解决
比如当时多媒体加速的问题,当时一闪而过的是三套解决方案,然后花了一周的时间把这几个原型写出来,然后比较,看看到底那种解决方案更好。当然最后只能选择一种。最终
的选择还是和标准化,可扩展化,可维护性,可移植性等各个方面来考虑。
3:kernel的基础也要好。
无论是哪个方面的,还是要做的多吧。图形架构这边主要还是framebuffer。drm的架构
kernel里面的各种机制需要了解,输出输出子系统用的也最多。尤其是evdev的调试。
还有像多点触摸等(之前在gtk2上面做过多点触摸)这个也需要对gtk的架构很了解。
最早做gtk的修改是因为gtk里面有bug,或者我们要扩展一些功能。还有就是很多gtk的
疑难杂症的bug。一般都是事件处理,或者loop有问题。clutter也是,clutter有很多bug
之前还有同事给社区提过patch。console相关的东西等等,
基本的调试能力,还有就是profile相关的东西还是要比较熟悉的,就不可避免的接触cairo
pixman等等东西。
kernel里面要了解的东西还是很多的,因为是做嵌入式,所以基本上也经常在手上过。
4:交叉编译相关的东西
主要还是要对编译器,链接器这些东西很了解,反汇编的东西要了解。
因为一般是要交叉编译整个系统。所以经常会碰到交叉编译的错误。xserver在porting
新版本的时候是有很多包都需要porting的,经常会有各种错误。要对xorg的这些依赖关系
搞的很清楚。比如经常更新的macro-utils, 各种proto,那些是能够匹配的,哪些是匹配不了的,总之有很多非常细节的东西在里面,只有犯过错误才会知道有那些问题。
后来在android图形上面也修改过一些架构性的东西,基本上还比较顺手,主要原因
还是要有积累。另外就是图形架构在各个平台的设计都差不多,问题是千差万别。
但是总体上来说,都分那么几个模块,2d,3d,多媒体,事件分发处理等等。
应该说,主要细节的东西都是自己在做测试程序的时候发现的,项目本身自己倒问题不多
因为要反复测试这个东西是否好用,必须做很多测试工具出来。但是开发测试工具的时候
遇到的困难比开发扩展或者开发xserver本身的驱动要工作量多。
在做相关的问题的时候一般也会查相关的实现,比如xserver这个因为当时发现有问题
基本上其他的框架也都看了一些,directfb, xynth, y-window, fltk,clutter,wayland ,android,mesa,包括后来的gallium等等,这些代码都是看全了的,。后来也对比了一下,其实好的图形架构还没有诞生.
其他?
一时半会想不出来,基本上就是通读代码,调试,首先知道大逻辑,然后就是遇到无数的
bug,解决他们。然后就是实现功能,添加扩展,修改扩展,实现新功能,写大量的测试程序
恩,写了半个小时,打字好慢,还要一边调试程序。
先写这样把。
现在还是在做android,换了很多个角色,不过总体上现在还是在做android。目前是bsp
相关的一些东西了,上层动的少了,也是各种千奇百怪的问题。系统大了难免出各种各样的问题。一直也是从framework做下来,哪里需要就去做哪里。有时候是一些前瞻性的东西,
google没有实现的功能,有时候是平台相关的一些东西。解决各种bug,解决各种适应性
兼容性,用户体验方面的问题。标准化方面的问题等等吧。
阅读(4702) | 评论(0) | 转发(0) |