2007/10

见到了Herbert Xu!

前几天突然接到Bryan Wu发来的email,说Herbert Xu要到西安了,问能否安排见个面。当时看了感到很惊讶,虽然早就听说Herbert要来中国,可没想到他已经到了,更没想到他还会来西安!前一篇文章中已经提到久仰Herbert大名,能见到其人那真是再好不过了。真是一个巨大的惊喜!

Herbert上周周末就到西安了,和他在电话中约定好定于这周二来我们学校给我们做个讲座,Herbert很爽快地就答应了。如约今天请他到我们学校这边过来,下午提前去了实验室。没想到Herbert到了之后才给我打电话,还让他因此在学校门口等了好一会儿。因为在Kernel Summit 2007的合影上见过Herbert,所以能一眼认出他来。;) 见到Herbert的第一感觉就是,比照片上还要年轻!

把Herbert带到我们小组的实验室,和我们大家围坐在一起聊了起来。Herbert其实很健谈的,问他的问题他都能够详细解答,而且还能展开话题。一谈起TCP/IP来他就滔滔不绝,听他这么一说我就感觉自己的计算机网络就相当于没学过!-_-!谈话中,Herbert谈到了他丰富的工作经历,他说他在做kernel之前还做过卫星网络,写过IPSec……

不知不觉中,时间就过去了。快到4:30时就带Herbert去教室。到了那一看,整个教室坐满了人,其中还有一些大一的年轻人。我们稍作准备就开始了讲座。我简单介绍了Herbert之后,Herbert就正式开始讲了。这时我才注意到,Herbert特意把外套脱了,想给大家看一下他参加内核峰会时的T-shirt,以此激励更多同学参加Linux内核开发。这么冷的天,还能这么心细地照顾大家,真的很佩服他!

在下面一个多小时的时间里,Herbert向我们详细讲述了内核开发的历史,内核社区的运作,和他自己的一些经验。这虽然是Herbert第一次用中文做讲座(后来听他说的),但讲得确实非常精彩!讲座生动而且平易近人,一些专业术语解释得很清楚,其中还不乏一些有趣的比喻,老师和学生都很称赞!陈老师还夸他讲课水平不低于大学里的老师。

Herbert的讲座给我的最大收获有两个:一是,要多做一些发行版开发的工作,Herbert自己就是这么走过来的,这话分量自然不轻。好好记一笔。二是,做开发,不仅仅是内核开发,最关键的还是多读代码,读不同人的代码,读得多了自然就会对这种庞大的项目得心应手。调试程序也就不用依赖gdb这样的工具,只用printf就够了。他现在调试程序,包括内核,就靠backtrace信息和额外打印的一些变量值就足够了!如果你做不到这一点,那只能说明你对代码还是不熟悉,继续读代码吧!这是Herbert的亲身经验,一定要学习!

Herbert讲完后我还趁机提两个问题,一是问他如何处理这么多邮件,二是问他如何管理patch。原来他和我一样是用mutt。不过说到管理patch时,Herbert说他维护的crypt子系统patch比较少,基本上都人工解决可能的冲突,用git就足够了。这也说明了另一点,牛人们都追求简单,有些复杂问题是我们把它想得更复杂了!其实很简单的处理就足够了。

讲座完后我们还邀请Herbert一起吃饭。和他聊天时发现,Herbert不仅在内核开发方面经验丰富,而且对世界历史,中国历史,数学等知识也很有见解,谈到中国政治时他比我们这些土生土长的中国人知道得还多!崩溃……他知识太渊博了!佩服佩服!Orz

牛人之言不我欺!与牛人一席话,胜读十年书。;)

明天就能见到Herbert Xu了!

呵呵,传说中的牛人,以前都是在网上听说其大名的,记得第一次去Herbert Xu的主页还是在加入内核邮件列表之前,那时就已经很佩服他了。他对Debian作出了很大的贡献。进了内核邮件列表之后,对Herbert Xu的工作有了更多的了解。他是一个资深的内核开发者,是网络领域我所知道最厉害的华人了。他负责维护Linux内核的Crypto API部分,他维护的git tree是:

http://www.kernel.org/git/?p=linux/kernel/git/herbert/cryptodev-2.6.git;a=summary

Herbert Xu应该是Kernel Summit的常客,今年的亮相可以在这里看到:

http://lwn.net/Articles/248891/

更让我们佩服的是Herbert Xu还是一个很爱国人,当他听说Debian里要设定台湾为Taiwan,而不是原定的Taiwan, Province of China时,他就愤然离开了自己工作已久的Debian社区。下午在和我们系主任聊时,他也对此颇加赞扬!恩,牛人这一点也值得我们好好学习!

啥都不说,就得着明天一睹牛人风采了~!

虚拟机啊,虚拟机~!

前一段时间不怎么走运,配了两个虚拟机都没配好,相当郁闷。

这两天否极泰来。Qemu在Fengguang Wu的指点下终于又跑起来了,原因还是配置内核时一些选项没有设置成y,郁闷。相当不容易啊,这次说什么不能不备份了,也顺便上传到网站上一份,可以在<-这里->看到。顺便说一句,FC7自带的虚拟机管理器不错,不过调试内核还是不能用它。没事玩儿的时候用用不错。而且FC7把Xen也给集成了,很强悍,可惜我还不知道怎么用它……

另一个虚拟机是UML,可能有不少人还不知道它,它其实是在用户空间的运行的Linux,把Linux内核放到一个用户空间进程里来跑。这两天看它的源代码时发现,其实它的中断什么的全都是用用户空间的东西模拟出来的。UML其实不需要多麻烦的配置,关键是我正好赶上UML子系统出问题(我用的是非稳定版内核),去UML用户邮件列表上发了N个邮件问Jeff,然后加了三四个patch之后,UML才总算运行起来。使用当前Linu-tree的同学可以试一下Jeff和Al的补丁[1],以及Al的另一个补丁[2],加这三个patch之后UML就可以顺利运行了。

UML其实挺好用的,而且编译迅速,以后就准备用它来测试内核了。现在一个很关键的问题是,虚拟机和主机之间的通信问题。Qemu以前弄好过,可现在又不是怎么弄了。UML还没有思路。看来又得折腾一阵子了……

[1] http://marc.info/?l=linux-kernel&m=119332492222601&q=raw

[2] http://lkml.org/lkml/2007/10/27/253

也许(汪国真)

也许,永远没有那一天
前程如朝霞般绚烂
也许,永远没有那一天
成功如灯火般辉煌
也许,只能是这样
攀援却达不到峰顶
也许,只能是这样
奔流却掀不起波浪

也许,我们能给予你的
只有一颗
饱经沧桑的心
和满脸风霜

Plan For Next

The best way to predict the future is to invent it.

  • Alan Kay
    虽然最近已经被找工作已经弄得够烦了,可也要坚持继续学习,坚持“两手抓两手都要硬”的原则。^_^…

先给自己制定一个Todo-List,以免失去大的方向。

1. 接管hubackup,在它的基础上进一步完善,争取做成Gnome下最好的备份工具。

2. 修复UML中的几个bug,刚发现的,其中一个还不知道如何补。这完成后准备用UML搭建调试环境。

3. 做一个实际的内核项目——SwapoutClustering,足以当毕业设计了,paper还也可以乘机发一把。;-)

4. 继续目前参与的开源项目,并着手准备参与valgrind,haiku,pcc这三个我很看好的项目。

5. (远期计划)自己写一个可以跑的内核。(以前写过一个残废的)

6. (远期计划)自己写一个可以用的C编译器。

7. (更远期计划)自己设计一门编程语言,并写出其编译器。

最后三个近期可不做详细考虑。

Cheers!

深入理解Linux内核构建系统(一)

Linux内核编译命令

作者:西邮 王聪

{做人要厚道,转载请注明出处!}

make tags
生成tags文件,供浏览代码使用。
make cscope
生成cscope索引文件,也是为了方便浏览源代码。

make oldconfig
在旧的.config基础上生成新的.config,非常有用。
make silentoldconfig
同上,但比较安静。;)
make defconfig
生成包含全部默认选项的.config文件。
make allyesconfig
生成包含全部选项的.config文件。
make allnoconfig
拒绝全部选项。
make randconfig
随机选择一些选项,一般供开发者测试使用。
make {config|xconfig|gconfig|menuconfig}
手工选择选项,只是用户界面不同,比如xconfig和gconfig都是图形界面的。

make
默认编译。
make bzImage
编译生成压缩的内核二进制文件,一般你用到的是这个。
make vmlinux
编译生成纯二进制内核文件。
make modules
编译生成内核模块。
make modules_install
安装生成的内核模块。
make {bzdisk|fdimage|isoimage}
编译生成启动软盘镜像,或光盘镜像。
make install
安装编译生成的内核文件,包括设置你的Lilo或Grub。
make all
等价于vmlinux+modules+bzImage。
make rpm
构建内核rpm包。
make foo/bar/foobar.ko
编译单个内核源文件。
make headers_install
安装内核头文件,默认安装到usr目录。
make M=some/sub/dir
编译一个指定的目录。
make O=/path/to/some/dir
把编译过程中生成的文件都放到指定目录中去。
make C={1|2}
用sparse检查内核代码。
make V={0|1|2}
控制编译过程中输出信息的多少。

make help
列出所有的make目标及其相关描述。
make kernelversion
输出Makefile里读到的内核版本信息。
make kernelrelease
输出内核发行标识。

make {rpm-pkg|deb-pkg|tar-pkg|targz-pkg|tarbz2-pkg}
构建{rpm|deb|tar|tar.gz|tar.bz2}格式的内核包。

make {htmldocs|mandocs|pdfdocs|psdocs|xmldocs}
生成{html|man|pdf|ps|xml}格式的内核文档。

make clean
清理生成文件,但会保留.config和一些模块文件。
make mrproper
清理全部文件,包括.config和一些备份文件。
make distclean
在make mrproper的基础上还清理编辑器可能生成的备份文件,patch的rej文件等。

Linux磁盘使用分析

以前分析都是用df和du,突然间发现了一个巨好用的图形化工具——磁盘使用分析器,英文名叫Baobab。看看下面的截图就知道它有多么友好。

经过仔细分析,发现/tmp目录下的某些cscope文件居然占据了很多空间,马上rm -rf掉。结果根分区的使用率一下从74%下降到60%。妈呀,虚惊一场。

Been there, done that...

在crquan的帮助下,总算找到了自己所有汇入Linus内核树的补丁了。可以在这里看到:

http://git.kernel.org/?p=linux%2Fkernel%2Fgit%2Ftorvalds%2Flinux-2.6.git&a=search&h=HEAD&st=author&s=xiyou.wangcong%40gmail.com

数了数,才十一个。印象中应该比这多,貌似被Andrew拒了几个,-mm树里似乎没了。看来还得努力啊,以后尽量不做clean up这种工作了。得做点儿实际的东西了~~

加油~!我们还刚刚开始~!^_^

vimpress的几个不爽之处

自从老大上次推荐vimpress之后,就尝试用vimpress写了几次博客。可是用了之后发现,其实很不爽。原因如下:

1. 仅支持一个博客的撰写。因为我还要编辑xiyoulinux博客,也想用vimpress,无奈vimpress配置里只能记录一个blog的帐号。

2. 不支持草稿。虽说可以用vim保存到本地,但有时也想保存草稿到服务器,可惜vimpress不支持。

3. 编辑功能不完善(?)。好几次用的时候,BlogOpen之后再BlogSend,结果和没编辑一样~!费解中……

我个人心目中理想的功能应该是:

1. BlogList ALIAS

列出ALIAS指代的博客上的文章。ALIAS可以在配置文件中指定,对应帐号也应该在里面。

2. BlogEdit abc@ALIAS

编辑ALIAS博客上的ID为abc的文章。草稿或许应该有另外的表示方式。

3. BlogSave

把当前正在编辑的保存为草稿,如果是新建文章的话。否则就应该直接保存到原文。

4. BlogNew ALIAS

在ALIAS博客上撰写一篇新文章。

5. BlogPublish ALIAS

把当前的文章发布到ALIAS博客上去。

有兴趣的同学可以根据上面的建议给vimpress打补丁,然后提交给作者。

喝酒

最近真是闲得不行了,居然连着三天晚上都喝酒了。。。

前天,和新浪的唐僧舍得一起吃饭,陪大家一起喝。

昨天,和高中一个铁哥们出去玩,回来兴致不错,又喝了瓶酒。

今天,眼看就要是金经理的小金一下子跌了下来,又陪他喝了瓶闷酒。

不行,这样下去不行~!我要好好学习,天天向上~!

好,从明天起,积极参加各种招聘会,专挑考C语言的笔试面试去,考上给西邮的同学占个位,排挤一下交大的,打击一下面试官。至于名字嘛,要是有xxx市N日游就填自己的,否则就在手机上随机一个美女的名字填上好了。恩,我看行~!