Chinaunix首页 | 论坛 | 博客
  • 博客访问: 13561
  • 博文数量: 8
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 85
  • 用 户 组: 普通用户
  • 注册时间: 2013-08-12 15:52
个人简介

http://baijiale95.010008.com

文章分类
文章存档

2014年(4)

2013年(4)

我的朋友

分类: LINUX

2013-08-15 11:58:03

《完全用GNU/Linux工作》的作者王垠最近从清华退学,放弃在清华攻读博士学位,并在博客发表文章。

  个人简介:王垠,四川大学97级本科毕业,保送到清华大学计算机系直博。期间曾在清华大学计算机系软件所就读,主要进行集成电路布线算法的研究。在此期间,他因《完全用GNU/Linux工作》一文和对TeX的推广等“非研究成果的业余东西”而出名。 在只剩一年就要博士毕业的时候,他申请退学,并将1万7千余字的“退学申请书”(题为清华梦的粉碎)公布在网上,引起舆论界一时对教育体制、理想主义等的热议。

  王垠的博客全文:

  经过深思熟虑之后,我决定再次“抛弃”我的博士学位。这是我第三次决定离开博士学位,也应该是最后一次了。这应该不是什么惊人的消息,因为我虽然读博士10年了,可是我的目标从来就不是博士学位。我在寻找更重要的东西,而且那个东西已经被我找到了。所以我的“博士生涯”其实完成了它的使命,基本上可以圆满结束了。

  如果你从我之前的博文判定我现在生活在我所向往的环境中,那么你就误会了。我学到了我想要的东西,但是却发现学术界不再是我向往的地方。相反,它阻碍了我的前进。很显然,博士学位这个东西其实已经被学校和学术界作为利用廉价劳动力的“无形锁链”。你想要“博士”的头衔,那么就廉价给我们干活吧,能出论文的就出论文,能写代码的就写代码。我根本不需要“博士”这个头衔来显示自己的价值,所以我抛弃学位,离开学校,离开学术界,是一点都不心痛的。

  思想的监狱

  如果你以为学术界意味着思想的解放,对真知的无私分享,那么你就错了。涉猎不深的人往往有一种美好的幻觉,以为老师都是在无私的传授知识,而同学们都在无拘无束的讨论。可是等你深入到一定程度,就会发现其实很少有人对于知识是无私的,连世界顶尖的科学家们也不例外。他们“分享”给你的东西,往往是一堆琢磨不透的符号和公式,他们提出一堆可怕的术语。他们告诉你的只是思维的“结果”,而不是思维的“方法”(也就是所谓“直觉”)。等你通过自己的独立思考得到同样的东西,却发现这些大师们其实一直把直觉隐藏在很深的地方,故意的让你知其然而不知其所以然。他们甚至会诋毁直觉本身的价值,试图让你相信他们没有通过使用直觉就想出了那些公式,试图让你相信只有那些吓人的公式,定理和证明才是可靠的,而直觉是不可靠的。可是真正的直觉却是非常强大的,只要得到了它,你就可以完全的理解那些公式,而且会知道它们是怎么来的,甚至发现里面存在的问题,进而想出新的公式。

  然后你就会恍然的发现,你曾经认为的“思想的天堂”,其实是“思想的监狱”。你会发现你心目中的很多大师们其实不是真正的科学家,而是政治高手。你会发现身边有很多人其实是故意在你面前提起一些术语,以此来显示自己的“高深”。当你直言不讳的道出这些东西背后的秘密,他们就不说话了,然后就对你怀恨在心,希望你早点消失。当你给那些提出这些术语的大牛们发email,试图核实这些术语背后的直觉,他们会很快的停止回复你的邮件。当你试图从教授们口中得到这种直觉,他们会不耐烦的对你说:“你问这种问题有什么意义吗?这东西就是这样的!” 这说明了什么呢?这说明他们害怕了。他们害怕自己的地位受到威胁,他们害怕这种直觉一旦被大多数人掌握,他们就不再是高高在上的“学术权威”了。人们就会说:“那个东西其实不过是……”

  这就是我这些年来所亲身经历的。我的同事们其实都不知道,他们所景仰的大师们提出的看似高深的理论,好些已经在我心目中被默默的“杀死”了。对我来说,它们不过是用一堆吓人的数学公式,翻来覆去的表达一些用几句话就可以说清楚的东西,而且它们好多其实已经被更加简单的东西所超越。所以大师们常做的一件事就是招收“门徒”,只要有人愿意做他们的接班人,把自己的工作“基于”他们的理论,他们提出的复杂而空洞的概念就可以一直存活下去,而他们就可以保持自己的地位。所以你就发现一些可笑的现象,本来一个新概念跟某个老概念没有关系,却被生拉硬拽在一起。本来一个概念可以被独立的理解,却被牵扯到一堆别的概念中,被搞得纷繁复杂。

  这就是为什么我曾经提到,我经常用两个星期的时间就“灭掉”了某些领域长达20年的研究。这并不说明我是天才,这只是说明很多人在玩弄学术的把戏,而我看透了他们的把戏。看透了这些把戏并不能带来实际的效益,却可以让我自己节省下时间来解决真正重要的问题。但是我看不到学术界在这方面有任何改进的希望。所以,为了思想的自由,我不能生活在学术界。

  论文的游戏

  我曾经以为我的专业(程序语言)是计算机科学里面论文水分最少的地方,但是其实并不是这样的,天下乌鸦一般黑。程序语言专业的论文与其它专业唯一的区别是,这个领域的人玩的把戏更加巧妙。这些论文动不动就触及 Church,图灵这样的人物提出的概念,所以就算里面没有任何新的内容,你早就被吓倒了,就别提看出里面的把戏。可是由于我看穿了一些核心概念的本质,所以经常浏览一些论文都发现其实没有任何新东西。这些论文有些甚至来自某些本领域众所皆知的“巨星”。由于他们地位显赫,这里我就不点名冒犯了。

  由于很多人总问这个问题,所以这里做一个总结供大家参考。这里必须先说明,以下的步骤都是针对Linux系统的,并不面向WinCE。也许你会注意到,现在做嵌入式的人中,做linux研究的人远比做WinCE的人多,很多产家提供的资料也是以linux为主。我一直很难理解,其实WinCE的界面比linux的界面好看多了,使用起来也很方便,更为重要的是,WinCE的开发和Windows下的开发基本一样,学起来简单得多,但是学linux或者使用linux做嵌入式的人就是远比WinCE多。在和很多工作的人交流时我了解到,他们公司从没考虑使用WinCE,因为成本高,都是使用linux进行开发。我读研究生的实验室中也没有使用WinCE的,大都研究linux,也有少部分项目使用vxwork,但是就没有听说过使用WinCE的,原因就是开源!当然现在WinCE6.0听说也开源,不过在成本和资源上linux已经有了无人能挡的优势。与此相对应的是,越来越多的电子厂商已经开始使用linux开发产品。举个例子,Google近期开发的智能手机操作系统Android其实就是使用linux-2.6.23内核进行改进得到的。

  第一 学习基本的裸机编程

  对于学硬件的人而言,必须先对硬件的基本使用方法有感性的认识,更必须深刻认识该硬件的控制方式,如果一开始就学linux系统、学移植那么只会马上就陷入一个很深的漩涡。我在刚刚开始学ARM的时候是选择ARM7(主意是当时ARM9还很贵),学ARM7的时候还是保持着学51单片机的思维,使用ADS去编程,第一个实验就是控制led。学过一段时间ARM的人都会笑这样很笨,实际上也不是,我倒是觉得有这个过程会好很多,因为无论做多复杂的系统最终都会落实到这些最底层的硬件控制,因此对这些硬件的控制有了感性的认识就好很多了学习裸机的编程的同时要好好理解这个硬件的构架、控制原理,这些我称他为理解硬件。所谓的理解硬件就是说,理解这个硬件是怎么组织这么多资源的,这些资源又是怎么由cpu、由编程进行控制的。比如说,s3c2410中有AD转换器,有GPIO(通用IO口),还有nandflash控制器,这些东西都有一些寄存器来控制,这些寄存器都有一个地址,那么这些地址是什么意思?又怎么通过寄存器来控制这些外围设备的运转?还有,norflash内部的每一个单元在这个芯片的内存中都有一个相应的地址单元,那么这些地址与刚刚说的寄存器地址又有什么关系?他们是一样的吗?而与norflash相对应的nandflash内部的储存单元并不是线性排放的,那么s3c2410怎么将nandflash的地址映射在内存空间上进行使用?或者简单地说应该怎么用nandflash?再有,使用ADS进对ARM9行编程时都需要使用到一个初始化的汇编文件,这个文件究竟有什么用?他里面的代码是什么意思?不要这个可以吗?诸如此类都是对硬件的理解,理解了这些东西就对硬件有很深的理解了,这对以后更深一步的学习将有很大的帮助,如果跳过这一步,我相信越往后学越会觉得迷茫,越觉得这写东西深不可测。因为,你的根基没打好。不过先声明一下,本人并没有使用ADS对ARM9进行编程,我是学完ARM7后直接就使用ARM9学linux系统的,因此涉及使用ADS对ARM9进行编程的问题我很难回答^_^,自己去研究研究吧。

  对于这部分不久将提供一份教程,这个教程中的例程并不是我为我们所代理的板子写的,是我在我们学院实验室拿的,英培特为他们自己的实验箱写的,不过很有借鉴意义,可以作为一份有价值的参考。

  第二 使用linux系统进行一些基本的实验

  在买一套板子的时候一般会提供一些linux的试验例程,好好做一段时间这个吧,这个过程也是很有意义的,也是为进一步的学习积累感性认识,你能想象一个从没有使用过linux系统的人能学好linux的编程吗?好好按照手册上的例程做一做里面的实验,虽然有点娃娃学走路,有点弱智,但是我想很多高手都会经历这个过程。

  在这方面我们深蓝科技目前没有计划提供相应的例程,主要是开发板的提供商会提供很丰富的例程,我们不做重复工作,只提供他们没有的、最有价值的东西给大家。

  第三 研究完整的linux系统的的运行过程

  所谓完整的linux系统包括哪些部分呢?

  三部分:bootloader、linux kernel(linux内核)、rootfile(根文件系统)。

  那么这3部分是怎么相互协作来构成这个系统的呢?各自有什么用呢?三者有什么联系?怎么联系?系统的执行流程又是怎么样的呢?搞清楚这个问题你对整个系统的运行就很清楚了,对于下一步制作这个linux系统就打下了另一个重要的根基。介绍这方面的资料网上可以挖掘到几吨,自己好好研究吧。

  第四 开始做系统移植

  上面说到完整的linux有3部分,而且你也知道了他们之间的关系和作用,那么现在你要做的便是自己动手学会制作这些东西。

  当然我不可能叫你编写这些代码,这不实现。事实上这个3者都能在网下载到相应的源代码,但是这个源代码不可能下载编译后就能在你的系统上运行,需要很多的修改,直到他能运行在你的板子上,这个修改的过程就叫移植。在进行移植的过程中你要学的东西很多,要懂的相关知识也很多,等你完成了这个过程你会发现你已经算是一个初出茅庐的高手了。

  在这个过程中如果你很有研究精神的话你必然会想到看源代码。很多书介绍你怎么阅读linux源代码,我不提倡无目的地去看linux源代码,用许三多的话说,这没有意义。等你在做移植的时候你觉得你必须去看源代码时再去找基本好书看看,这里我推荐一本好书倪继利的《linux内核的分析与编程》,这是一本针对linux-2.6.11内核的书,说得很深,建议先提高自己的C语言编程水平再去看。

  至于每个部分的移植网上也可以找到好多吨的资料,自己研究研究吧,不过要提醒的是,很多介绍自己经验的东西都或多或少有所保留,你按照他说的去做总有一些问题,但是他不会告诉你怎么解决,这时就要靠自己,如果自己都靠不住就找我一起研究研究吧,我也不能保证能解决你的问题,因为我未必遇到过你的问题,不过我相信能给你一点建议,也许有助你解决问题。

  这一步的最终目的是,从源代码的官方主页上(都是外国的,悲哀)下载标准的源代码包,然后进行修改,最终运行在板子上。

  盗用阿基米德的一句话:“给我一根网线,我能将linux搞定”。

  给我一根网线 我就能把linux搞定

  第五 研究linux驱动程序的编写

  移植系统并不是最终的目的,最终的目的是开发产品,做项目,这些都要进行驱动程序的开发。

  Linux的驱动程序可以说是五花八门,linux2.4和linux2.6的编写有相当大的区别,就是同为linux2.6但是不同版本间的驱动程序也有区别,因此编写linux的驱动程序变都不是那么容易的事情,对于最新版本的驱动程序的编写甚至还没有足够的参考资料。那么我的建议就是使用、移植一个不算很新的版本内核,这样到时学驱动的编程就有足够的资料了。

  第六 研究应用程序的编写

  做作品做项目除了编写驱动程序,最后还要编写应用程序。现在的趋势是图形应用程序的开发,而图形应用程序中用得最多的还是qt/e函数库。我一直就使用这个函数库来开发自己的应用程序,不过我希望你能使用国产的MiniGUI函数库。盗用周杰伦的广告词就是“支持国产,支持MiniGUI”。MiniGUI的编程比较相似Windows下的VC编程,比较容易上手,效果应该说是相当不错的,我曾使用过来开发ARM7的程序。不过MiniGUI最大的不好就是没有像qtopia这样的图形操作平台,这大大限制了他的推广,我曾经幻想过与北京飞漫公司(就是MiniGUI的版权拥有者)合作使用MiniGUI函数库开发像qtopia这样的图形操作平台,不过由于水平有限这只能是幻想了,呵呵。完成这一步你基本就学完了嵌入式linux的全部内容了。

  还有一个小小的经验想和大家分享。我在学习嵌入式linux的过程中很少问人,客观原因是身边的老师、同学师兄都没有这方面的高手,主观原因是我不喜欢问人,喜欢自己研究解决问题。这样做有个好处,就是可以提高自己解决问题的能力,因为做这些东西总有很多问题你难以理解,别人也没有这方面的经验,也不是所有问题都有人给你答案,这时必须要自己解决问题,这样,个人的解决问题能力就显得非常关键了。因此我的建议就是一般的问题到网上搜索一下,确实找不到答案了就问问高手,还是不行了就自己去研究,不要一味去等别人帮你解决问题。记住,问题是学习的最好机会。

阅读(173) | 评论(0) | 转发(0) |
0

上一篇:没有了

下一篇:Linux多任务编程(exec函数族及其基础实验)

给主人留下些什么吧!~~