I want to be a complete engineer - technical genius and sensitive humanist all in one!

Wednesday, December 24, 2008

一个优秀的C语言学习站点

http://learn.akae.cn/media/index.html
认真看完,可以好好总结复习下有关知识,并审查作者的文档的纰漏,的确有益啊!

Tuesday, December 23, 2008

Linux文件系统层次结构标准

Linux和UNIX的文件系统是一个以“/ “为根的阶层式的树状文件结构,/ 因此被称为根目录。所有的文件和目录都置于根目录/ 之下。根目录/下面有/bin,/home,/usr等子目录。在早期的UNIX系统中,各个厂家各自定义了自己的UNIX系统的文件系统构成,比较混 乱。
 为了避免在Linux也产生同样的问题,在Linux面世不久,就开始了对Linux文件系统进行标准化的活动,于1994年推出了名为 FSSTND(Filesystem Standard)的Linux文件系统层次结构标准。之后,FSSTND标准吸引了UNIX社团的开发人员,他们把FSSTND扩大到UNIX系 统,FSSTND就变为FHS (Filesystem Hierarchy Standard)。2001年3月,FHS 2.2版本发布,2004年1月29日发行了最新版本2.3。

 FHS标准使得众多的Linux发布包有了可以遵循的标准,使得软件和用户可以预测已经安装了的文件和目录的位置。它定义了如下的内容。
 定义了文件系统中每个区域的用途
 定义了所需要的最小构成的文件和目录
 给出了例外处理和矛盾的特殊例子

目录内容和用途
/根目录
/bin一般用户使用的命令
/boot放置内核及LILO、GRUB等导引程序(bootloader)的文件,用于启动。
/dev硬盘,分区,键盘,鼠标,USB,tty等所有的设备文件都放在这个目录。
/etc系统的所有配置文件都存放在此目录中。
/home用户空间,所有的用户都是用此空间。
/lib共享连接库,如C库和C编译器等等。
/media挂接CD-ROM等设备的目录
/mnt移动设备文件系统的挂点
/opt存放后来追加的用户应用程序
/root管理员之家
/sbin存放系统管理所需要的命令
/tmp临时文件目录,重新启动时被清除
/usr存放只能读的命令和其他文件。
/usr/X11R6 X Window系统
/usr/bin 用户和管理员的标准命令
/usr/include c/c++等各种开发语言环境的标准include文件
/usr/lib 应用程序及程序包的连接库
/usr/local/ 系统管理员安装的应用程序目录
/usr/local/share 系统管理员安装的共享文件
/usr/sbin 用户和管理员的标准命令
/usr/share 存放使用手册等共享文件的目录
/usr/share/dict 存放词表的目录(选项)
/usr/share/man 系统使用手册
/usr/share/misc 一般数据
/usr/share/sgml SGML数据(选项)
/usr/share/xml XML数据(选项)
/var存放应用程序数据和日志记录的目录,例如,Apache Web服务器的文档一般就放在/var/www/html下。
/var/cache 应用程序缓存目录
/var/account 处理账号日志(选项)
/var/crash 系统错误信息(选项)
/var/games 游戏数据
/var/lib  各种状态数据
/var/lock 文件锁定纪录
/var/log 日志记录
/var/mail 电子邮件
/var/opt /opt目录的变量数据
/var/run 进程的标示数据
/var/spool 存放电子邮件,打印任务等的队列目录。
/var/spool/rwho 
/var/tmp 临时文件目录
/var/yp NIS等黄页数据(选项)


参考资料
FHS 2.3
http://www.pathname.com/fhs/

Monday, December 22, 2008

给技术创业兄弟的几个忠告

我曾经也在一个设计嵌入式CPU的半导体公司工作过,也模模糊糊的知道了设计IC是怎么一回事,下面这篇文章写的比较到位,阐述的观点也比较有启发意义,我特意转过来,或许对别人,对自己有一点启示:
很长一段时间,我对国内IC设计产业的困境感到迷惑不解。
在这个产业里,聚集了中国最聪明的头脑(其中绝大多数是海归精英)。政府很舍得花钱支持,VC也很重视,有硅谷的成熟商业模式,又背靠全球最大的移动通信和消费电子市场。
但事实很悲哀,远在整个经济的冬天到来之前,这个产业就处在集体委靡之中。不断有公司倒闭的消息,仅有的三家海外上市公司,有两家——中星微(Nasdaq:VIMC)和展讯(Nasdaq:SPRD)都处于亏损之中,市值甚至远远不到1亿美元。
上个月,我的同事和我一起,专门拜访了中星微的创始人邓中翰,北极光创投的合伙人陈大同,他曾是展迅通信的创始人之一兼CTO,以及一些业内人士。
有意思的是,每个人都会提到一个台湾公司的名字:联发科(MediaTek Inc., TW:2454),它很像旧社会的“三座大山”,把整个大陆IC设计产业压得无法喘气。
过 去,我的媒体同行常常把联发科称为“黑手机之父”,它比中星微仅仅早出生四年,但如今已经是市值超过80亿美金,年营收约30亿美金,全球第三大手机和第 二大数字电视IC设计公司(国内前十大IC设计公司加起来的营收总和也不到它的一半)。更让人郁闷的是,它的成长,它的利润主要都来自于大陆。
我跟邓中翰博士很认真地探讨了一下这个问题。他觉得联发科虽然厉害,但其技术大都是“偷学”而来的,产品只满足低端市场,而且其客户大都是些中小品牌甚至 “山寨机”企业。至于中星微则是通过“自主创新”,正大光明地赢得了今天的价值,赢得了三星、飞利浦、微软等国际大厂对其品牌的认可,这是一条索尼、松下 们曾经走过的正道。
我不能说他的观点不对,但我总觉得这个说法很像《神雕侠侣》里面名门正派的青年才俊永远瞧不上杨过这种到处偷学的流浪儿。
于是,我上卓越亚马逊买了一本联发科董事长蔡明介写的书《竞争力的探求》。在这本书里,老蔡总结自己30年的江湖经验,和盘托出了一套后发国家的技术公司如何成功的实战策略。
看完以后,我承认自己有点被雷到了。因为联发科的这套策略一点都不神秘。
完 全客户导向,选择规模庞大的应用市场而非细分的利基领域,在市场刚刚进入成熟期时迅速杀入,通过对国外技术的消化吸收进行逆向创新,提供真正低成本(但绝 对不是低技术)的解决方案,依靠工程师团队而非个别天才作战,用速度、效率和贴身服务来弥补质量上的差距,通过打破行业的现有规则来确立新标准,与自己的 上下游结成统一战线……
事实上,华为、比亚迪、腾讯、无锡尚德、金风科技这些中国最厉害的高科技公司,和联发科使用的是几乎同一套战法。
对于一个公司而言,尤其是非国有的上市公司而言,为股东赚钱就是它的本分。赚钱的公司不一定是好公司,但不赚钱的公司肯定不是个好公司。
以此标准来衡量联发科与中星微,则高下立判。
所以,中星微是不是国内IC设计公司,以及一大批海归创业的高科技公司值得效仿的对象?我表示怀疑。
如果把联发科作为参照系,那么中星微所选择的另一条道路,看起来很光彩,却很可能越走越窄。
这 或许也能解释另外一个事实,在中国,绝大多数成功的技术型公司都不是由海归派创立的。也许有看官会反驳我说,还有百度、搜狐、无锡尚德和曾经的UT斯达康 呀!但请注意,它们都是在“更懂中文”之后,才取得成功的(凡参加过百度的营销大会,就知道是百度的技术强大,还是Sales强大)。
马上要过新年了,2009年很可能是中国市场化经济有史以来最寒冷的一年(有谁还记得1989年吗?)。我很担心各位海归的、创业的、还是搞技术的兄弟们,如果一条路走到黑的话,很可能会冻死,很可能会熬不到下一个春天。
于是,我试着总结了九个朴素的忠告(抱歉,没有“十全大补丸”),其实都是听前辈过来人讲的血泪教训。不一定都对,但应该不会全错。

第一,别作“28个半布尔什维克”
中共历史上有个著名的“28个半布尔什维克”,以王明为首的留洋派。马列理论很“正宗”,苏联老大哥很喜欢,也给津贴补助,高调做事,觉得在中国干革命,就得发动城市工人阶级,尽管后者可能比现在的白领还少。
很像现在的一些海归创业公司,拿着美国VC的银子,言必称硅谷、GOOGLE、商业模式,不赚钱不要紧,先请最贵的人搞研发,再花钱砸市场。只是学得再像,也不过一个好学生而已。一旦老大哥接济不上,一旦离开租界,就麻烦大了。
而井岗山上的“朱毛”很饥饿,生存问题压倒理论焦虑,不打土豪劣绅就得挨饿,不发动千万农民就没地盘没人手,打一仗总结一次经验,无人关心自己宽心,吃甘蔗先啃最难吃的。谁笑到了最后?
从硅谷回来的海归们,大多忘记了一个基本事实:就是欧美的市场已经是高度成熟和分工细化。而在国内,很多产业还处在跑马圈地粗放经营的阶段。

第二,别在北京、上海创业
北京、上海是中国两个最大,也最容易让创业者产生幻觉的城市。似乎离硅谷很近,资讯很发达,打个“飞的”就来去。天天看着CBD陆家嘴,就以为中国不是发展中国家了。
母校里还有专门的孵化器,软硬件俱全,挺像斯坦福车库。但是,两地最成熟的清华创业园、复旦创业园,10年了也没孵出一个上市的技术公司。更别说其它的。
政府鼓励多衙门也多,优惠政策首先倾斜国企和外企,公文审批累死你。大公司大客户是很多,不过都是“关系型客户”。人才也多,要价很高,而且一有风吹草动就回安稳窝了。
媒体热闹,营销大师公关顾问多,忽悠你的也多。夸你几句你就当真,你当真你就傻子。
我的建议:技术创业首选深圳。完全移民城市,山寨精神,开放文化。毗邻香港,技术资讯不落后,融资也不难。背靠珠三角,制造业发达,有技术不怕没地方变 现。没人注意你,正好可以多磨练自个本事。地方政府相当务实,营商环境好,没事不缠你。有钱的天使多,忽悠的人少。如果精力富余,还可以多去华为、腾讯、 比亚迪学习一下。
当然,杭州、无锡、大连也值得推荐。

3,别让技术最牛的那个家伙当CEO
这话是谁说的?是展讯的前CTO陈大同说的,他在硅谷还参与创办过一个公司。陈的亲身体验是,在硅谷那边,工程师都不愿意去做管理。因为硅谷已经把技术看成是生存之本,渗透入血液。在一个公司里面,都有几个宝贝似的技术大拿,其影响力真是可以跟CEO平起平坐的。
而在中国,过去一直是制造业文化,没有搞技术研发的氛围。在企业里,做技术的地位根本没法跟做管理的比。所以,技术大拿的重要性非得通过管理岗位才能体现出来。
但很遗憾,真正适合做管理的工程师可能不到20%。技术出身的人常常只相信自己,不信任别人。给人职责,不给人权力。技术出身的人当管理者非常容易把技术看得太高。最后是公司少了一个顶尖的技术大拿,多了一个二流的领导人。百分之一的技术难题只有百分之一的技术高手能解决。同样,百分之一的市场机会也只有百分之一的市场高手能发现。凡是大家嚷嚷的机会都不靠谱。
称职的技术公司CEO必须是一个市场高手,一定得是公司里最懂市场的人。但不一定是学市场出身的。他要懂技术,但不能痴迷于技术。他必须判断这百分之一的机会是不是真正适合你的机会。陈很骄傲地说,他在离开展讯之前,已经是公司里最懂市场的人之一。
“邓中翰是从来不见客户的。” 原中星微的一位员工也说。在邓自述的工作日程表中,最重头的是技术开发,然后是投资者关系、政府关系和日常管理等。
这在联发科董事长蔡明介看来,绝对是不可想象的。他去深圳的次数远比去北京和上海的多。联发科专门设立了深圳子公司,还派驻技术服务人员和天宇朗通、联想、TCL这些大厂深入合作,提供技术支持。天宇朗通的CEO荣秀丽甚至公开称联发科为“老师”。

4,别跟政策要市场
本世纪初,硅谷有4家大陆留学生创办的搞3G芯片的公司,最后只剩下展讯一家活着。因为谁也没想到,只到今天,中国的3G还没有大规模商用。
展讯能侥幸活下来,是因为它把80%的精力放在搞2G/2.5G上,只把20%放在3G上。
2003年,展讯内部讨论未来集中开发哪种技术标准的时候,在WCDMA和TD-SCDMA之间摇摆,管理层争论非常大。后来决定做TD,因为做TD好歹也是先行者,又是国家标准,花了很大血本。
结果,今天TD-SCDMA这个“阿斗”算是硬扶上马了,可能不能成为产业,迄今还是疑问。而展讯今年3季度巨亏3000多万美金,很大程度上也是因为TD手机销售远不如预期造成的。
咱们国家的国情是,搞拆迁修马路盖房子是挺快的,要推进一个技术标准是很慢的。TD、MP4、数字电视、EVD、WAPI标准,不知拖死了多少小技术公司,现在又出了一个CMMB手机电视标准。
政 策的市场常常是未来的市场。没人知道苹果何时落地,但肯定比你想象得要晚很多。 联发科的董事长蔡明介特别强调S曲线的概念(代表了一个产品从发展初始到最后消亡的曲线),即在市场将要走到接近要大幅成长的中间阶段才切入,因为他认为 谁在竞争中最先达到经济规模才是最重要的。所以,联发科从来没有第一个进入市场,都是作为后来者的角色进入,用的是成熟技术,但进入后就能引发价格雪崩, 将先发者挤出市场。
如果按照中央政府的规划,当年的小灵通根本就不在标准考虑之列。可只要有几千万人用了,政府也不能说灭就灭了。今天,政府能取缔“山寨机”吗?不可能的。因为老百姓需要它。

5,创业公司不要做产业报国梦
据说一拿了美国绿卡,才会有真正的爱国热情。不知道是不是一种潜意识的负疚感,特别想为祖国做点什么。
不过,真有大理想也埋在心里,也别急着说出来。一说出来,你就把自己给架着了。企业不是运动员,老想着怎么为国争光,就忘记提升自己赚钱的能力了。当然,运气好的话,这些真真假假的理想能把政府领导给感动。但“汉芯”、“龙芯”、“中国芯”……,这么多“芯”里面有一个真正成大器的吗?没有。
更让人哭笑不得的是,一些企业拿这个来做整体营销,包装过度别人是被忽悠了,你自己也就只能一直包装下去。
当 年中星微做宣传,声称携手微软、富士通,“世界首个智能机器人富士通Maron-1的视觉芯片采用中星微的星光三号”,真实的情况是富士通的机器人采用微 软的WinCE操作系统,微软推荐其影像采集芯片采用中星微芯片,其实就是在“星光一号”基础上进行了方案修改,为借助此事造势就命名为“星光三号”,为 了把戏做足,公司还派人在每个国市场上买来一个玩具机器人,摆放在公司的荣誉展厅,对外宣传这就是“富士通智能机器人Maron-1”,当然,新闻报道传 说中的各种功能,它一个也不具备。
创业公司一谈产业报国,上帝估计也笑了。

6,忘掉硅谷式的“技术洁癖”
在中星微,从CEO、COO、CTO到每个事业部的总经理都是清一色的美国海归,而且绝大多数是技术出身。据说中星微招人也喜欢要高高大大的,因为这里最提倡的集体运动是美式篮球,老总们都好这个。或许正是这种“硅谷血统”,让中星微变成了一家有“技术洁癖”的公司。
理想主义;精英文化;要做就做最先进的技术;建立一套标准,然后通吃整个产业;模仿偷学是丢人的……如果放在硅谷,邓中翰的这些想法实在再正常不过。
无论是从企业定位、技术研发、战略制定和人才培养,中星微都是按照硅谷模式和美国的趋势来制定的。但恰恰是这些先进的东西让这个拥有多达1400多项专利和众多知名企业客户的中星微电子陷入难以做大做强的尴尬境地。
硅谷是所有技术梦想家的天堂。我建议,真正想搞最先进技术的人还是应该留在硅谷。硅谷有成熟的技术市场,有真正识货的客户和VC,有足够的技术应用空间。你就是完全不知道怎么卖产品,也可以把技术卖给思科、微软、ORACLE这样的大公司。
如果你是一个技术海归,想回国创业。恐怕你得想清楚,这里需要的不是最先进的技术,而是最价廉物美的技术。
在中国,低成本创新才是真正的王道。当年比亚迪做锂电池,想向日本人买设备,开价就是500万美金。最后一发狠自己做“手工+模具”,只有100万人民币。从此,手机电池的定价权就掌握在比亚迪的手上。
事实上,在中国做低成本创新有得天独厚的优势,中国工人不便宜了,但工程师还便宜。华为有3万工程师,比亚迪有多少工程师,欧美公司请不起的。
“联发科不是大公司,没有太多资源去做早期阶段的研发,尤其是在早期定产品规格的阶段,我们不能好高骛远。即使是在S曲线的中段才切入,只要掌握好技术、弹性和效率,不见得扳不到巨人。”蔡明介在《竞争力的探求》一书中这样强调。
更重要的是,通过低成本创新赚来的钱,提升了公司以战养战的能力和自信,下一次就可以更往S曲线的前端切入。今天只能打游击,明天就可以围歼,后天就可以攻城。

7,别忘了自己的主要客户是谁
中国真正的市场在哪里,不是北京上海的几百万白领,是10亿金字塔基的消费者。北京上海的白领们都在用MSN,可二三四五六线城镇的年轻人都在用QQ,结果最没钱的人造就了中国市值最大的互联网公司。
当经济萧条出现的时候,不仅仅是女士的裙子越来越长的时候。也是越来越多的中间阶层往“下流社会”走的时候。“价廉物美”成为整个社会的需求。
诺基亚和多普达用的TI OMAP芯片组动辄好几百块人民币,外加软件研发成本,手机价格能下来才怪了。而联发科提供的单芯片解决方案,让国产手机客户装个外壳就可以卖。在深圳的 华强北市场,差不多16元就能买一个,而且什么功能都有。联发科借此迅速掌握了整个国产手机产业链的控制权,议价能力很强,尽管不断降价,但它依然能够保 持50%以上的毛利润率。它把最难的事情都替客户做了,所以客户都跟吸毒一样爱上它。
“我们做的多媒体芯片各方面的功能和性能都比它(指联发 科的单芯片)要强,多媒体要做好是很难的,所以它能够进入山寨机,进入不了诺基亚、三星,因为他们对照相的功能和视频功能要求很高。山寨机是说我有这个视 频功能、照相功能就可以了,至于你效果如何,速度是不是够快,能否打印,都不在乎,”邓中翰反复跟我们讲。
在这种“眼睛向外,市场在外”的主导思路下,主打中高端市场的中星微来自内地的收入比例不足5%。相比之下,联发科手机芯片去年出货量已经达到了1.5亿颗,其中九成是内地客户
但问题在于,“别看中星微的国际客户这么多,而且都是知名企业,但它根本不是主流供货商。说句不好听的,大公司采购很多东西,中星微提供的属于螺帽钉子之类的零配件。”曾经的中星微电子职员直言。
在硅谷创办技术公司,卖出32亿美金高价的朱敏,回国以后大谈“中国服务”而不是“中国创造”。因为他知道,中国还不具备这样的环境。他对技术公司的建议就是:你先把本土市场拿下来,第二步是把第三世界拿下,第三步你再把创造加进去,最后你再渗透到第一世界去。
想一想,这不就是华为的战略嘛。

8,80分主义,不要100分主义
展讯向联发科学到的最重要一课就是千万不能技术导向,而要市场导向。
2004年,MP3音乐手机是国内的首创。展讯和联发科几乎同时在研发一款不用附加其它芯片的单基带芯片。
展讯这边想的是芯片质量一定要做到最好。必须要有100K的传输速度,双声道。可第一代产品只做到了64K.于是,继续改进。而联发科的技术其实落后于展讯。它的芯片只有32K的速率,还是单声道。
但联发科迅速把产品推向市场,结果等展讯的产品进入市场时,时机已经落后了半年多。市场主流客户已经接受了联发科。
“我们太想做到100分,把功能做到最好,结果耽误了市场时机。而联发科可能只做到80分就推出产品,但已经足够了。因为客户原本只期望60分”。陈大同由此知道,只要比客户能接受的稍微好点就行。不用追求技术完美。
产品从80分做到100分,也许花的精力要比从60分做到80分多几倍,客户体验只是好一点点。但技术公司永远人手不够,关键是你的资源是不是合理分配了。

9,别做卖萝卜卖得最好的
做技术不像做别的,不能老想着蓝海。是的,你是在蓝海里面,可你这个蓝海只有游戏池那么大,而人家的红海有太平洋那么大。
进入最难的市场往往也是空间最大的市场。
中 星微是精心选择了一块空白的利基市场,数字多媒体芯片当时并不被主流的英特尔、AMD、高通、德州仪器等厂商所重视。而其主要应用的领域是在高端PC和笔 记本的摄像头上,可这块市场规模太小,每年不过2-3亿美金。按照一位前中星微管理人员的描述,“就好像一个菜市场里,别人都在卖鱼卖肉,我们不过是在卖 蔬菜里面,卖萝卜卖得最好的”。
换句话说,如果一台主流电脑的出厂价是400美金的话,中星微的一个解决方案只能卖到4-5美金,仅仅占到了总成本的1%左右。“PC的利润大部分给了英特尔和微软,没办法,这个东西是人家多年来建立起来的优势,我们能进入它们的采购名单已经不错了。”邓中翰也承认。
可问题是,满足于做一个第一流的阑尾又有什么价值呢?

有意思的社会问答

1:国际原油最高的价格到过接近150美元一桶,但是现在已经50美元了,按道理说应该要跌到三块多钱一升,为什么国内的油价还不降?

回答:估计是150的时候囤太多油了,结果没涨到250。

但是,我们可以理解为我们都在献爱心,这样会舒服很多,油价只要坚挺一天,政府就能多赚几十亿,油价坚挺几个月,汶川就建设好了。所以,没有捐款的朋友也不用内疚,你以为你能不捐款麽,在不知不觉中,你早就捐了。所以,大家就全当自己升华了吧。

2:为什么中石油和中石化都说他们旗下的很多炼油厂亏损了?

回答:这就好比房地产商卖楼每年赚十亿,但是提供给小区里的免费班车每年要亏损十万,我们指责房地产商暴利,房地产商解释说,我们哪里暴利了,你看,连我们楼盘的班车每年都是亏损的。

3:没有车是不是就和燃油税没有关系?

回答:不是,自己想。

4:为什么政府老是拿中产阶级开刀?

回答:因为政府不能拿穷人开刀,穷人一穷二白,穷凶极恶,没有油水而且危险,政府也不能拿有钱有势的开刀,因为他们一想,咦,这不就是我们自己麽,所以只剩下工薪阶层和中产阶级了,他们钱不多,但基数大,而且有拥有一定的物质,害怕失去,所以操作起来很安全。

5:据说要费改税,以前的养路费什么的都变成燃油税,你觉得我们是合算还是不合算。

回答:从长远来看,越重的苛捐杂税,越沉重的人民负担,越不合理的政策,越荒谬的管理,对于这回 答:我们的政府虽然对外比较颓势,但在对老百姓做生意方面很有能力的,所以你要看看,你的身份是什么,如果你是个平民,那你基本上是不可能合算的。这个的 改革并不能称之为费改税,只能称为费加税。你的养路费只能少交1200元,其他的都是不减免的,包括小小的车船税或者高速过路费甚至国道费等,虽然有关部 门宣称,将取消公路养路费、航道养护费、公路运输管理费、公路客货运附加费、水路运输管理费、水运客货运附加费等六项收费,但说实话,我开了十年车,基本 上后面五项没有见到过,如果你不经常在水里开车的话,我想后两项你应该也没见到过,所以,你肯定会亏的。

比如上海,我们通常理解每个月交250,一年3000是养路费,但其实不是这样的,每个月只有100是养路费,还有150元是公路建设贷款费,所以,你以后还要交1800,如果你一天开几公里,一年只开两三千公里车,我相信你会赚到政府大概一位数到两位数左右的便宜的。

6: 有民意调查说有74%的人支持燃油税改革。

回答:这就是现在的政府和以前的政府不同的地方,以前政府做事,从来不问民意,现在政府做事,自己制造民意。

7:燃油税到底是好事还是坏事?

回答:从长远来看,越重的苛捐杂税,越沉重的人民负担,越不合理的政策,越荒谬的管理,对于这个国家来说,其实都是好事。

欧美法系和大陆法系

http://zh.wikipedia.org/wiki/%E6%AC%A7%E9%99%86%E6%B3%95%E7%B3%BB

http://zh.wikipedia.org/wiki/%E8%8B%B1%E7%BE%8E%E6%B3%95%E7%B3%BB

Monday, December 15, 2008

霸占农民土地是中华民族的劣根性

霸占农民土地的,最后总要霸占农民的女儿!

土地兼并和土地战争循环往复,周而复始,延绵中国历史四千年。

在土地兼并过程中应该有一个阈值,我们还没有运用统计学把这个阈值确定下来。达到这个点,战争爆发了,新皇权建立起来了,把土地分给农民,发给农民地契文书,并且总是承诺五十年不变或者七十年不变,但是因为大土地私有制是皇权的基础之一,兼并土地的过程很快就开始了,于是跟皇权的另外一个基础自耕农模式发生了矛盾,加上根深蒂固的“天下为公”的意识形态,每一次土地兼并都有冠冕堂皇的理由而大行其道。失去土地的农民最后揭竿而起,战争总是不可避免。

清华大学法学院教授许章润《有成熟地权,才有成熟国家》:“考察英帝国的发迹,不难发现,与罪恶的种族主义和赤裸裸的丛林规则同行的,布莱克斯通所谓的“帝国臣民与生俱来的”普通法,厥功甚伟。而作为普通法体系基石的不是《大宪章》,也不是为人附会有加的司法制度,却是构成人间秩序基本格局、堪称一切权利之源的土地产权制度和婚姻制度。在两三百年的扩张历程中,不论拓殖北美、澳洲,还是侵占中国的香港,南取印度次大陆,举凡米字旗所到之处,所颁行的第一部法律必定是土地法,联袂而来的则多半为婚姻法。英人在上海和威海强设租界,首先颁行的也是这两部法”。

这无疑是一个重要的科学发现,至少对我来说是这样的,让我感到震惊!与我的见解完全相同,当然希望看到许教授提供更多的证据,英联邦号称日不落帝国有遍布世界各地的殖民地和属地,应该有无数的历史事实可考;同理可以知道不能保护地权的民族是绝不会强盛的。长期以来,我一直在思考这个问题,以法国人拿破仑的雄才大略,以法国大革命的伟大号召力和推广文明的渗透力,铁蹄所到之处拿破仑的军队带着医生和像拉格朗日、拉普拉斯这样的伟大数学家;以德意志民族的至高无上的心智能力和北欧海盗的骁勇善战为什么都没有让全世界使用他们的语言,而独有英国人有能力让全世界人使用他们的语言;英国人缔造了北美殖民地和香港,其它新老殖民国家没有像英帝国一样成功的。

教授给我这个长期萦绕在心头的问题一个让我满意的答案。

霸占农民土地的民族必是怯懦的民族。

http://www.blogchina.com/20081023619056.html

Wednesday, December 10, 2008

Debugging linux kernel on DaVinci DM6446 using kgdb

monta vista 已经在davinci运行的kernel里面打上了他们修改过的kgdb补丁,按照如下步骤可以使用这个补丁对内核进行调试:

Rebuilding Kernel with kgdb support

Launch kernel configuration menu using the following command

#make ARCH=arm CROSS_COMPILE=arm_v5t_le- gconfig

Enable the following options in kernel configuration menu

a) CONFIG_NETCONSOLE (Networking support -> Network console logging support)

b) CONFIG_DEBUG_KERNEL (Kernel hacking -> Kernel Debugging)

c) CONFIG_KGDB (Kernel hacking -> KGDB)

d) CONFIG_KGDB_ETH (Kernel hacking -> KGDB -> Method of KGDB communication -> Ethernet)

After enabling the options in gconfig rebuild the kernel.

Target configuration

Target is configured by additional Linux kernel arguments passed e.g. via U-Boot. Add kgdboe option in bootargs environment variable on U-Boot prompt.

#kgdboe=[target-port]@/[dev][target-macaddr],[host-port]@/[dev]
  • target-port (optional): GDB port (default 6443)
  • target-ip: target ip address (i.e DVEVM ip address)
  • dev (optional): network interface (default eth0)
  • host-port (optional): Host port use to send/recieve UDP packets (default 6442)
  • host-ip: Host IP address

Example for U-Boot configuration:

DVEVM# setenv bootargs ... kgdboe=@192.168.1.4/,@192.168.1.3/

Note that in this example host IP address is 192.168.1.3 and DVEVM IP address is 192.168.1.4 (same as you normally set in U-Boot parameters serverip and ipaddr).

Host configuration

Go to Linux kernel main directory (where you executed make uImage and where the main Linux kernel executable vmlinux is located) and there create a file .gdbinit:

#touch .gdbinit

Edit this with your preferred editor and add

#target remote udp:192.168.2.4:6443

(with IP address of the target the host should connect to, same as used above in target configuration).

Connecting from Host

1. Boot DVEVM with the kgdb kernel. In boot messages you should get anything like

...
TI DaVinci EMAC: MAC address is deadbeaf
TI DaVinci EMAC Linux version updated 4.0
TI DaVinci EMAC: Installed 1 instances.
netconsole: not configured, aborting
kgdboe: local port 6443
kgdboe: local IP 192.168.1.4
kgdboe: interface eth0
kgdboe: remote port 6442
kgdboe: remote IP 192.168.1.3
kgdboe: remote ethernet address ff:ff:ff:ff:ff:ff
kgdboe: device eth0 not up yet, forcing it
kgdboe: debugging over ethernet enabled
...

2. Start cross debugging on Host machine

  $ arm_v5t_le-gdb vmlinux
GNU gdb 6.3 (MontaVista 6.3-20.0.22.0501131 2005-07-23)
Copyright 2004 Free Software Foundation, Inc.
GDB is free software, covered by the GNU General Public License, and you are
welcome to change it and/or distribute copies of it under certain conditions.
Type "show copying" to see the conditions.
There is absolutely no warranty for GDB. Type "show warranty" for details.
This GDB was configured as "--host=i686-pc-linux-gnu --target=armv5tl-montavista-linuxeabi".
warning: The remote protocol may be unreliable over UDP
warning: some events may be lost, rendering further debugging impossible
0xc00533dc in breakpoint () at kernel/kgdb.c:1620
1620 atomic_set(&kgdb_setting_breakpoint,1);
(gdb)

Further reading

Included in the kgdb kernel patch is documentation. To get this, in Linux main directory on host (where you executed make uImage) e.g. call

#make htmldocs

After some time, redirect your web browser to file index.html in Linux kernel documentation subdirectory

Documentation/DocBook/index.html

There you should find now an entry kgdb with further infos.

Sunday, December 7, 2008

MontaVista linux 4.0.1 for TMS320DM6446 EVM 驱动一览

数字 --- 索引, D代表设备,S代表drivers source code
以下代码位置均以lsp1.3为准,lsp1.2的大同小异。
1、VPFE linux driver --- V4L2
D /dev/video0
S /drivers/media/video/davinci/davinci_vpfe.c

2、VPBE linux driver --- FBDev
D /dev/fb/x (x = 0 to 3)
S /drivers/video/davincifb.c
S /drivers/video/davinci/davincifb.c

3、MMC/SD card controller
D /dev/mmcblk0
S /drivers/mmc

4、ATA/CF controller
D ......
S /drivers/ide

5、Async EMIF linux driver
D /dev/mtdblock x(0 or 1)
S /drivers/mtd/nand/nand_davinci.c

6、EMAC linux driver
D /dev/eth0
S /drivers/net/davinci_emac.c
S /davinci/net/davinci_emac_phy.c

7、USB
D /dev/usb0
S /drivers/usb

8、ASP --- ALC33 Audio codec
D /dev/dsp
S /sound/oss/dm644x/davinci-*.c
S /arch/arm/mach-davinci/mcbsp.c

9、I2C master mode
D /dev/i2c/0
S /drivers/i2c/busses/i2c_davinci.c

10、 UART0
D /dev/ttyS0
S /drivers/serial/.......

11、Timer
D .......
S /arch/arm/mach-davinci/timer.c

Friday, December 5, 2008

ubuntu 8.04/8.10搭建lxr源代码检索系统

SourceInsight固然在windows下面分析源代码很但方便,但是我的工作平台是linux,linux下面也需要经常对代码进行分析和检索,我试用过多种分析工具,最后还是确定使用lxr,通过参考两位朋友t@c以及LXRng on Ubuntu 7.10的文章得以在我的工作计算机ubuntu 8.04和家用计算机ubuntu 8.10上搭建成功,谨在此向这位仁兄致敬。现在我把原文修改后转述如下:

01) LXRng依赖许多package,因此需要安装相关软件,使用如下命令:
$ sudo aptitude install git-core postgresql-8.3 postgresql-client-8.3 libxapian15 libsearch-xapian-perl apache2 libapache2-mod-perl2 libcgi-simple-perl libcgi-ajax-perl libhtml-parser-perl libtemplate-perl libterm-progressbar-perl libdevel-size-perl libdbd-pg-perl ctags

2) 数据库增加有用最大权限的使用者帐号,指令为:
$ sudo -i
$ su - postgres
$ createuser user # Answer "yes" when asked about superprivileged access
$ exit
$ exit

3) 建立数据库,并将http服务器使用者设定为数据库的一般使用者,因此在建立www-data帐号遇到的问题全部回答"N",指令为:
$ createdb lxrng
$ createuser www-data

4) 由LXR的repository取得LXRng,指令为:
$ cd ~
$ git-clone git://lxr.linux.no/git/lxrng.git

5) 启动LXRng设定,指令为:
$ cd ~/lxrng
$ cp lxrng.conf-dist lxrng.conf
$ vim lxrng.conf

6) 将以下字符串注释掉
use LXRng::Repo::Git;
my $gitrepo = LXRng::Repo::Git
->new('/var/lib/lxrng/repos/linux-2.6/.git',
release_re => qr/^v[^-]*$/,
author_timestamp => 0);
my $search = LXRng::Search::Xapian->new('/var/lib/lxrng/text-db/linux-2.6');

7) 新增加以下新的字符串,指令为:
use LXRng::Repo::Plain;
my $plainrepo = LXRng::Repo::Plain->new('/home/user/src/linux-source');
my $search = LXRng::Search::Xapian->new('/home/user/src/linux-source-2.6.26-textdb');

8) 修改下列字符串:postgresq
'repository' => $gitrepo, --改为--> 'repository' => $plainrepo,
'base_url' => 'http://lxr-test.linpro.no/lxr', --改为--> 'base_url' => 'http://localhost/lxr', [13]
'cache' => '/var/lib/lxrng/cache', --改为--> 'cache' => '/home/user/lxrng/cache',
'ver_list' => [$gitrepo->allversions], --改为--> 'ver_list' => ['v2.6.26'],
'ver_default' => 'v2.6.20.3', --改为--> 'ver_default' => 'v2.6.26',

9) save&quite(emacs or vim in this example)

10) 下载Linux kernel source code并将目录设置为7)8)中设定好的目录相符合
$ mkdir ~/src
$ cp linux-2.6.26.tar.gz ~/src
$ cd ~/src
$ tar -xzvf linux-2.6.26.tar.gz
$ mkdir linux-source
$ mkdir linux-source/v2.6.26
$ mv linux-source-2.6.26/* linux-source/v2.6.26
$ mkdir linux-source-2.6.26-textdb
$ mkdir ~/lxrng/cache
$ chmod 777 ~/lxrng/cache -R
$ chmod 777 ~/lxrng/webroot -R
$ make -C ~/lxrng/webroot/.static/gfx

11) 生成Linux-2.6.26的XR,指令为:
$ cd ~/lxrng
$ ./lxr-db-admin linux --init
$ ./lxr-genxref linux

12) 设置Apache2
$ cp apache2-site.conf-dist-mod_perl apache2-site.conf
$ sudo ln -s ~/lxrng/apache2-site.conf /etc/apache2/sites-enabled/010-lxrng
$ vim apache2-site.conf
将所有"@@LXRROOT@@"替换成"/home/user/lxrng"
将"@@LXRURL@@"替换成"lxr"

13) 重新启动Apache2
$ sudo /etc/init.d/apache2 reload

14) 使用浏览器打开http://localhost/lxr即可进行代码检索。

如果要更换domain name,可将现有的"localhost"改为"somewhere.com",只需要将"lxrng.conf"中的"base_url"替换之后再执行./lxr-genxref linux即可,这次的执行时间十分短,因为XR都已经存在,现在即可使用浏览器打开新的网址"http://somewhere.com/lxr"检索代码。至此,配置完毕,希望对大家有用。

Thursday, December 4, 2008

compiler error:KBUILD_NOPEDANTIC & Fix it to use EXTRA_CFLAGS

For the "Linux device driver III", the example of all

Delete the //include/config.h
Add the //include/sched.h

Ok, now change into its derectory and complile it like this:

root@microtiger-tiger:/home/microtiger/test/examples/scull# make
make -C /lib/modules/2.6.24-22-generic/build M=/home/microtiger/test/examples/scull LDDINC=/home/microtiger/test/examples/scull/../include modules
make[1]: Entering directory `/usr/src/linux-headers-2.6.24-22-generic'
scripts/Makefile.build:46: *** CFLAGS was changed in "/home/microtiger/test/examples/scull/Makefile". Fix it to use EXTRA_CFLAGS. Stop.
make[1]: *** [_module_/home/microtiger/test/examples/scull] Error 2
make[1]: Leaving directory `/usr/src/linux-headers-2.6.24-22-generic'
make: *** [modules] Error 2

There are two kind of method to solve this problem:

(1)Rplace all CFLAGS with EXTRA_CFLAGS in the Makefile.

(2)Using the KBUILD_NOPEDANTIC arg.

root@microtiger-tiger:/home/microtiger/test/examples/scull# make KBUILD_NOPEDANTIC=1
make -C /lib/modules/2.6.24-22-generic/build M=/home/microtiger/test/examples/scull LDDINC=/home/microtiger/test/examples/scull/../include modules
make[1]: Entering directory `/usr/src/linux-headers-2.6.24-22-generic'
CC [M] /home/microtiger/test/examples/scull/access.o
LD [M] /home/microtiger/test/examples/scull/scull.o
Building modules, stage 2.
MODPOST 1 modules
CC /home/microtiger/test/examples/scull/scull.mod.o
LD [M] /home/microtiger/test/examples/scull/scull.ko
make[1]: Leaving directory `/usr/src/linux-headers-2.6.24-22-generic'

Tuesday, December 2, 2008

戒烟

昨天我终于开始戒烟了,一天没有抽烟了,身体感觉怪怪的,嘴巴发苦,涩涩的感觉。
抽烟屈指算来将近有六七年的时间了,从高中开始抽烟,抽到大学毕业,再到参加工作,一路抽下来了,倒是老爸多次警告要我戒烟,都当耳旁风了,我哪听的进去,不过,这次是真的打算戒烟。
戒烟真不是容易的事,尤其是这年头,哎,引起抽烟的事情太多,避都没法避开,我把引起抽烟的情况按严重度顺序排名如下:

1、喝酒,这几乎是我以及大部分抽烟的人最无法抗拒的环境了,兄弟朋友们喝的畅快,烟酒不分家,吞云吐雾,天南地北瞎侃一通,那个叫爽啊;酒吧里,醉眼朦胧,手里点根烟,你看姑娘们,姑娘们也看你,瓦咔咔,咋能抗的过去呀!不抽烟就觉得手都没地方放!喝酒,绝对排名第一!

2、有特别不顺心的事情,比如工作,生活上等,总觉得需要抽一根烟来排解一下烦躁的情绪,这个随着年龄的增加,好像烦心事越来越多,想抽烟的情况屡屡发生,一个人的时候尤其如此,一个不留神,抽一口吧,心烦找排解,列为第二;

3、同学,同事,好朋友等等发烟盛情难却,有时候自己并不想抽,但一句“来来来,兄弟,点一根吧!”,“戒啥烟啊,就抽这一根”,“咋啦,不给兄弟面子啊”.......完蛋了!自己抽烟,于是物以类聚,这些年身边TMD都是抽烟喝酒的弟兄,号称研究生(烟酒生)们,敬烟难拒,排名第三不为过啊!

4、老子今儿高兴,生意做成,股票大涨,打游戏,看片儿,聊Q,写程序.....我靠!不抽烟就感觉实在对不起这样的美好时光啊!不用多说,心情高兴,排名第四!

5、大家有没有特别无聊的时候啊,我有啊,节假日单位值班,等人,一个走路,一个人出差,一个人住宾馆,一个人.......无聊之中,只有烟兄弟形影不离,说实话,那时觉得烟真是这世界上最贴心的朋友啊!排名第五!

由此,戒烟真不容易啊!

Makefile & Kconfig in kernel 2.6.xx

kernel源码树的目录下都有两个文件:Kconfig和Makefile。分布到各目录的Kconfig构成了一个分布式的内核配置数据库,每个Kconfig分别描述了所属目录源文档相关的内核配置菜单。在内核配置make gconfig(或xconfig等)时,从Kconfig中读出菜单,用户选择后保到.config的内核配置文档中。 在编译内核时,主Makefile调用这个.config文件就确定用户的选择。

以上说明Kconfig即对应内核的配置菜单。假如要添加新的驱动代码到内核的源码,修改Kconfig,这样就能够选择这个驱动;要使这个驱动被编译,就要修改Makefile。

因此添加新的驱动代码时必须要修改的文档有两种Kconfig和Makefile。
要想知道怎么修改这两种文档,就要知道两种文档的语法结构。

Kconfig 语法

linux2.6.x/Documentation/kbuild/kconfig-language.txt
每个菜单都有一个关键字标识,最常见的就是config。

语法:
config
symbol是个新的标记的菜单项,options是在这个新的菜单项下的属性和选项
其中options部分有:

1、类型定义:
每个config菜单项都要有类型定义,bool布尔类型、 tristate三态:内建、模块、移除 string字符串、 hex十六进制、 integer整型
例如config HELLO_MODULE
bool "hello test module"
bool类型的只能选中或不选中,tristate类型的菜单项多了编译成内核模块的选项,假如选择编译成内核模块,则会在.config中生成一个 CONFIG_HELLO_MODULE=m的配置,假如选择内建,就是直接编译成内核影响,就会在.config中生成一个 CONFIG_HELLO_MODULE=y的配置.

2、依赖型定义depends on或requires
指此菜单的出现和否依赖于另一个定义
config HELLO_MODULE
bool "hello test module"
depends on ARCH_PXA
这个例子表明HELLO_MODULE这个菜单项只对XScale处理器有效。

3、帮助性定义
只是增加帮助用关键字help或---help---

内核Makefile

在linux2.6.x/Documentation/kbuild/makefiles.txt目录下有周详的介绍有关kernel makefile的知识。内核的Makefile分为5个组成部分:
Makefile 顶层的Makefile
.config 内核的当前配置文档,编译时成为顶层Makefile的一部分
arch/$(ARCH)/Makefile 和体系结构相关的Makefile
s/ Makefile.* 一些Makefile的通用规则
kbuild Makefile 各级目录下的大概约500个文档,编译时根据上层Makefile传下来的宏定义和其他编译规则,将源代码编译成模块或编入内核。
顶层的Makefile文档读取 .config文档的内容,并总体上负责build内核和模块。Arch Makefile则提供补充体系结构相关的信息。 s目录下的Makefile文档包含了任何用来根据kbuild Makefile 构建内核所需的定义和规则。(其中.config的内容是在make gconfig的时候,通过Kconfig文档配置的结果)。

举个例子:
假设想把自己写的一个flash的驱动程式加载到工程中,而且能够通过menuconfig配置内核时选择该驱动该怎么办呢?能够分三步:
第一:将您写的flashtest.c 文档添加到/driver/mtd/maps/ 目录下。
第二:修改/driver/mtd/maps目录下的kconfig文档:
config MTD_flashtest
tristate “ap71 flash"
这样当make menuconfig时 ,将会出现 ap71 flash选项。
第三:修改该目录下makefile文档。
添加如下内容:obj-$(CONFIG_MTD_flashtest) += flashtest.o
这样,当您运行make menucofnig时,您将发现ap71 flash选项,假如您选择了此项。该选择就会保存在.config文档中。当您编译内核时,将会读取.config文档,当发现ap71 flash 选项为yes 时,系统在调用/driver/mtd/maps/下的makefile 时,将会把 flashtest.o 加入到内核中。

Monday, December 1, 2008

原始kernel对TI davinci平台的支持

kernel.org上的原始内核自linux-2.6.22开始支持TI davinci平台,改变的文件有如下:
27 files changed:

arch/arm/Kconfig diff | blob | history
arch/arm/Makefile diff | blob | history
arch/arm/mach-davinci/Kconfig [new file with mode: 0644] blob |
arch/arm/mach-davinci/Makefile [new file with mode: 0644] blob |
arch/arm/mach-davinci/Makefile.boot [new file with mode: 0644] blob |
arch/arm/mach-davinci/board-evm.c [new file with mode: 0644] blob |
arch/arm/mach-davinci/id.c [new file with mode: 0644] blob |
arch/arm/mach-davinci/io.c [new file with mode: 0644] blob |
arch/arm/mach-davinci/irq.c [new file with mode: 0644] blob |
arch/arm/mach-davinci/psc.c [new file with mode: 0644] blob |
arch/arm/mach-davinci/serial.c [new file with mode: 0644] blob |
arch/arm/mach-davinci/time.c [new file with mode: 0644] blob |
arch/arm/mm/Kconfig diff | blob | history
include/asm-arm/arch-davinci/common.h [new file with mode: 0644] blob |
include/asm-arm/arch-davinci/debug-macro.S [new file with mode: 0644] blob |
include/asm-arm/arch-davinci/dma.h [new file with mode: 0644] blob |
include/asm-arm/arch-davinci/entry-macro.S [new file with mode: 0644] blob |
include/asm-arm/arch-davinci/hardware.h [new file with mode: 0644] blob |
include/asm-arm/arch-davinci/io.h [new file with mode: 0644] blob |
include/asm-arm/arch-davinci/irqs.h [new file with mode: 0644] blob |
include/asm-arm/arch-davinci/memory.h [new file with mode: 0644] blob |
include/asm-arm/arch-davinci/psc.h [new file with mode: 0644] blob |
include/asm-arm/arch-davinci/serial.h [new file with mode: 0644] blob |
include/asm-arm/arch-davinci/system.h [new file with mode: 0644] blob |
include/asm-arm/arch-davinci/timex.h [new file with mode: 0644] blob |
include/asm-arm/arch-davinci/uncompress.h [new file with mode: 0644] blob |
include/asm-arm/arch-davinci/vmalloc.h [new file with mode: 0644] blob |

在随后发布的2.6.23内核代码,增加了对davinci: GPIO support (commit), clock control support (commit), pin mux support (commit)的支持, 代码分别位于:

GPIO support
[ARM] 4457/2: davinci: GPIO support
Support GPIO driver for TI DaVinci SoC

arch/arm/Kconfig diff | blob | history
arch/arm/mach-davinci/Makefile diff | blob | history
arch/arm/mach-davinci/gpio.c [new file with mode: 0644] blob |
include/asm-arm/arch-davinci/gpio.h [new file with mode: 0644] blob |
include/asm-arm/arch-davinci/hardware.h diff | blob | history
-------------------------------------------------------------------------------------------
clock control support
[ARM] 4430/1: davinci: clock control support
Support clock control driver for TI DaVinci SoC

arch/arm/mach-davinci/Makefile diff | blob | history
arch/arm/mach-davinci/board-evm.c diff | blob | history
arch/arm/mach-davinci/clock.c [new file with mode: 0644] blob |
arch/arm/mach-davinci/clock.h [new file with mode: 0644] blob |
arch/arm/mach-davinci/io.c diff | blob | history
include/asm-arm/arch-davinci/clock.h [new file with mode: 0644] blob |
-------------------------------------------------------------------------------------------
pin mux support
[ARM] 4432/5: davinci: pin mux support
Support pin multiplexing configurations driver for TI DaVinci SoC

arch/arm/mach-davinci/Makefile diff | blob | history
arch/arm/mach-davinci/mux.c [new file with mode: 0644] blob |
arch/arm/mach-davinci/psc.c diff | blob | history
include/asm-arm/arch-davinci/mux.h [new file with mode: 0644] blob |

针对这些文件进行分析,可以理清原始内核逐步对TI Davinci 平台支持的框架,对编写驱动有一定的帮助。

与kernel同步,了解内核的变化

從事 Embedded Linux(GNU/Linux systems on devices)工作的朋友,除了日常的讀書功課外,另外一個重要的工作就是「隨時注意 Linux kernel 的發展狀況」。要能與 Linux kernel 的發展同步,嚴格來說,已經是一件吃重的工作了,不過還是可以列出幾個基本的工作原則如下:

1. 每天閱讀 linux-kernel 郵遞論壇(mailing-list)的「標題」。

2. 隨時上 kernel.org 看看最新釋出的 kernel 版本(或留意 linux-kernel-announce mailing-list)。

3. 閱讀釋出版本的 Changelog。

4. 不要與 git 系統的距離太遠,定時看看 git 系統,保持一定的「短距離」。

Mailing List

linux-kernel 上的 posts 每天的量大約在 200~350 篇左右,數量並不算少,要把每一篇都看過是不太可能的,因此以我自己的閱讀心態來說,我會建議以下的閱讀方式:

1. 看標題,如果是自己有興趣或正在留意的更新,我就會標記下來持續追蹤。

2. 如果有 Bugfix 的 patch 出現,我會看看這項修正的起因與原理,但為了不讓自己花費太多時間,如果我對這項 patch 的修正「原理」不甚熟悉,我便會跳過此 post。

以下是閱讀 linux-kernel list 必須知道的幾件事:

1. 如果有新的修正,第一時間都會發佈在此 list 上,並且標題的起頭一定是 "[PATCH n/m] subject" 這樣的格式。PATCH 表示這是一個 patch 的發佈,由於一個 patch 會以多篇 post 發佈,因此就用「n/m」來表示「這是第幾篇 patch,總共有幾篇。」,例如:

[PATCH 0/7] KVM: Kernel-based Virtual Machine
[PATCH 1/7] KVM: userspace interface
[PATCH 2/7] KVM: Intel virtual mode extensions definitions
[PATCH 3/7] KVM: kvm data structures
[PATCH 5/7] KVM: mmu virtualization
[PATCH 6/7] KVM: x86 emulator
[PATCH 7/7] KVM: plumbing

2. 不能在這裡詢問與 kernel 發展無關的問題,例如:工具的使用、系統設定、詢問是否有XXX驅動程式、請求協助測試等等,這些都是不能張貼的文章。另外,原本就該留意的非成文禮節一定要注意,像是 FAQ 能找到的東西,就不要去麻煩人家。

3. list 裡大部份都是 device driver 的討論,並且很多都是架構面或觀念面的討論與修正建議,所以當您參與討論時,千萬不要用「個人的主觀看法,或是沒有事實與理論根據」的角度發表意見;由於「觀念」的修正是 kernel 2.6 驅動程式的大討論方向,所以必須先把主題相關的東西先看懂看熟後再參與討論。

我要怎麼知道 kernel 更新了什麼東西?

這是一個時常被問到的問題,由於 kernel 的變動快速,因此 Jollen 在日前便寫了一篇「讓 kernel 常在我心:探討如何與 kernel 的發展同步」的日記,內容是大略介紹如何與 kernel 的發展同步(day-by-day)。

但是,如果並不是很需要每天去注意 kernel 的動態的話,只要在每個 kernel 穩定版(stable)釋出後去看 Changlog 就好了。特別是 kernel 2.6.1x 的更新項目(update)、臭蟲修正(big fix)、新的驅動程式與 filesystem 更是以可怕的「量」在 patch,特別是最近半年的 3 個 kernel 版本(2.6.17~19),變化量真是到了油門全開的狀態,所以每天看 kernel 會是沈重的負擔。

話說回來,改變是好事。期待的是,看著這麼多的改變與越來越多的新驅動程式加入,以及企業級(enterprise-class)功能的成熟,我們已經可以拿到越來越棒的「成熟」kernel 了。誠如 Linus 在 2.6.19 stable 釋出時的玩笑話「It's one of those rare 'perfect' kernels」。

言歸正傳,如果要 keep 新 kernel 做了什麼改變,或是了解「什麼功能在幾版的 kernel 才開始有」、「某些 bug 在幾版做修正」、「這個版本是否對理器架構面做修正」等,建議可以直接由 kernelnewbies.org 做查詢,例如,我想知道 kernel 2.6.17 改了什麼東西,就可以輸入以下的 URL:

http://kernelnewbies.org/Linux_2_6_17

同理,我想知道幾天前才丟出來的 kernel 2.6.19 加了什麼、改了什麼,就輸入以下的 URL:

http://kernelnewbies.org/Linux_2_6_19

就如前面提到的,kernel 2.6.1x 的修改變化相當大,特別是在 kernel 2.6.16(大約)後,每每都有重大更新,修正範圍也「波及」到「Kernel Core」。如果工作場合與 kernel 有關係,確實有必要仔細閱讀每一個版本的 Changelog。
files come from Jollen's Blog at http://www.jollen.org/blog/2006/11/reading_kernel_kernel_patch.html

Labels

Followers