去年元旦的时候,接手了 FreeBSD 网卡驱动问题。年尾的时候,基本结掉了 DOS 下的 BIOS 烧录程序。至此马马虎虎熟悉了所有现行主流的操作系统。
我是以 Linux 背景程序员被召入公司的,开始的时候倒也都是做 Linux 显卡驱动之类的测试。后来,作为技术支持部门,本着客户碰到什么系统,就研究什么系统的宗旨。开始在各个操作系统上游荡。
某几天,看过几天集群,后来发现客户报错了部门。
用 VB 写过 Windows 下的看门狗程序,貌似卖了点钱,反正没我份。
WinXP 下的嵌入式开发库及演示程序,这是我第一次写真正称得上复杂的程序,时间紧、任务重,全组人几乎都上来了。架构其实是我定的,基本和看门狗的差不多。从应用程序到 DLL 到底层的 sys. 原定的是不同的功能分为不同的 sys 实现,后来上头定调全部合成一个。说实话,架构很不好,因为所有板子的支持都在一起,所以到处是 switch 代码。对于追求完美的我来说,一直耿耿于怀。最后终于学到回调函数的好处,在后来的 LCD Tool 和 VFlash 程序中,几乎看不到 switch 了。这个项目在即将完工的时候被别的部门抢走,当时就想,这么一个破程序,还有人抢。而后话就是,若干个月之后,拿到了成品代码。这个时候,架构发生了改变,那个巨大而丑陋的 sys, 根据功能和板子被分为了不同的 sys …
后来做过许多 Linux 下的测试,显示驱动,视频加速之类的。总体来说,技术含量不高,虽然有时候也瞅瞅驱动的代码。但是那些代码的风格实在是不合我胃口,后来就不了了之。好在我是个热爱开源的好公民,只要是开源的东西,来者不拒,何况是拿工资的。
后来就是 FreeBSD 了。实际上开始的时候是研究 FreeNAS 的,就是所谓的专门负责 BT、电驴下载的下载机。那个时候还没有严厉打击 BT 下载,现在估计这种机器的销售一落千丈。简单的功能熟悉之后,深入了解了以下硬件加密驱动的使用。然后就是发现 FreeBSD 7.0 的千兆网卡问题。前前后后大概花了 2 个多月时间,最后是发现了出问题的寄存器,我还没有来得及联系维护者,他们的解法已经出来了。所以从公司的角度来说,我基本上是做了无用功。从我的角度来说,基本摸透了网络协议的整个代码堆栈,阅读了不少内核代码。同时,在不断跟随 Current 的过程中,发现 Port 的好处。于是删掉了家里的 Ubuntu ,改用 Gentoo 了。
再往后,Back Port 了 Linux ATA 驱动,没记错的话应该是把 2.6.27 的驱动改到 2.6.16 2.6.18 上面。Linux 内核里面有几块代码乱而复杂,TTY 、声音和 IDE/ATA。 TTY 是最久远而尘封的代码,依赖它的程序太多,以至于 Alan Cox 这种亮出名字震倒一片的超级大牛都没法全身而退。声音代码里面不同的架构层出不穷,最近升级过系统的,很多都会碰到声音没了的问题。 IDE 代码乱在同时存在两种不同的架构可以支持它们。而具体使用哪个部分,又发行版自行决定。而自行决定的结果,就是完全的混乱,相同的内核版本,在不同的发行版上被打上不同的补丁,有的用 IDE,有的用 ATA。而我的任务,就是把当前发布的 ATA 架构驱动改回老内核的 IDE 上面去。反正是唯一一次大规模修改内核代码。而这种 Back Port 的方式倒是很像智力题,在两块相似却不同的代码进行关联,并将需要的部分移动到另一块。
然后就是 LCD Tool,一个修改 LCD Timing 和 Clock 等属性的简单工具。我用 Python TK 写界面,Randy 用 C 写的底层库。骨子里还是很非常喜欢 Python 的,因为它的清晰和整洁。实际的界面就比较难看了,我是一个没有什么艺术细胞的人,追求实用而不是美观。总体还是不错的,由于吸取了以前的教训,架构上面好很多,增加板子的支持也就非常容易。但是实际还是缺一个东西,就是远程控制的支持。
再后来看了阵无线,实际只是学习了。稍微了解了一下 Linux Staging 树里面的 VT6656 和 VT6655 代码。本来想深入进去找机会该代码的,后来一直被别的事情给占掉。目前 Pending。
然后就是小卡走了,所以接手了 VFlash,DOS 环境。对许多人开说总得来说,DOS 是早该消亡的古董。但是如果 BIOS 烧坏了,即使有 Boot Block,大概也只能进 DOS,所以主板厂商还都会提供 DOS 下的烧录程序。对代码的演进还是比较得意的。可以说发挥了我全部的编程水平。台北找了个人接手,因为他们有我们这里没有的板子。
(完)
收藏于 2009-12-3