首先,我得声明嵌入式Linux的内核很重要,非常非常重要!但是这个东西如果你没有一定的基础,还是暂时不碰为好。因为想知道它的工作机理,你必须具备N多知识才可以的。弄明白内核(包括驱动和协议栈,以及内核工作机制)你至少需要操作系统原理、体系结构、微机原理、ARM体系结构、网络原理、数据结构、C语言、数字电路技术方面的知识;当然这些还远远不够,你还需要了解很多细微之处;这里不打算多举例了,在这方面有兴趣的同学在学校开设课程不完备的条件下你很容易走上一条死路,一定要慎重!

  其次,我不建议新手以一个的超人方式来学习嵌入式(有人说嵌入式是程序界的特种兵,啥啥都会,上述观点我只是部分赞同),嵌入式不是计算机专业的专利,在很多年前,嵌入式根本不是计算机专业的人能玩的;因为它是一门跨专业学科的行业,以前一直电子和通信两家独有。随着硬件技术越来越成熟,慢慢地才把嵌入式开发的精力从硬件中解放出来,逐步转移至软件开发方面,尤其在智能系统的使用上,软件开发层面的任务也越来越多,逐渐向大规模软件方向发展。所以,软硬方向二者选一是非常合理的!

  再次,一旦你确立了软件开发作为自己的发展方向,那么你选择一个嵌入式系统是当务之急的问题了,我建议你选择Linux,因为它是完全开源的,很多东西错了你能直接查找到原因,不依赖他人而直接解决;否则只能向厂家报告BUG了。这个Linux还有一个非常明显的好处,是你一旦达到了某种高度,你在看其它系统如WINCE、Symbian等,你也不会对它感冒的,因为你已经知道他们的GUI等关键技术的大体原理了。

  后,选择了Linux之后,你必须熟练地使用C语言,熟悉你使用的Linux系统;切记开始从浅滩入水才能到深海的道理,否则直接入深海你必然会被淹死的。“先会用,后会做,后会创造”,这个过程一定要好好把握,切勿超之过急!

  学习嵌入式Linux设计需要的细节很多,不过这都不是问题,关键在于你的心态!一般而言需要了解、掌握、熟悉和精通的东西我都在《暑假项目》一文中提及了。那么我常说的,如果你能自己写个GUI系统的话,那你将会很通透的理解嵌入式Linux的构架,也会很深刻的明白嵌入式Linux软件开发的精髓。

  DIY的GUI系统需要的知识:

  1、系统提供写屏幕的/dev下的文件名是哪个?文件操作如何和类似二维数组的LCD一一对应?

  2、一个图形界面需要的是格式问题(8位、16位、24位、32位),这些格式如何写入数据?

  3、如何在LCD上画一个点,并且能很好的兼容各种格式?

  4、当有多个进程或线程向LCD写入信息时,如何避免写入冲突?

  5、触摸屏和鼠标操作相似吗?如何编写类似鼠标的操作呢?

  6、解决了画点的问题,那你能根据画点的方法,写出画线、画框、画圆和其他形状的方法吗?

  7、能根据你解决的触摸屏问题和画点、线、面等方法绘制一个类似Windows界面的GUI吗?

  8、多个GUI界面直接叠加如何解决?那事件响应呢?

  9、特殊GUI组件你怎么设计,如对话框、按钮、文本框。。。。。。他们表现方式可不一样啊

  10、当组件在某个窗口上出现时,一但被其他组件覆盖,你如何进行裁剪?

  11、你如何编写组件被触发时所需要执行的事件机制?

  12.、组件之间的消息机制是如何传递的,你是如何处理的?

  13、文字显示你怎么办?很多组件需要文字标签,你是怎么解决的?

  14、若一个项目需要多个程序分别运行才能完成,那么这两个程序一旦都是GUI的,他们之间的显示还能层叠和有效防止这两个程序写入LCD时不发生冲突吗?你设计之初的构架合理吗?

  当你把DIY的GUI系统做完,你突然发现原来原来原来一切一切一切是这样的道理啊,这时候再看WINDOWS你突然发现,你能解释以前你无法明白的现象了!这个时候,你已经得小道而成小仙啦!

  接着你可以尝试狂暴而有趣的移植技术,把你看到的,分析后能够移植的东东都移植过去,权当练习!此时你已经默默地把网络(Socket)、数据库(SQLIT3)、多媒体(....)都玩了一遍,可以了!可以考虑做像样的项目或去搞内核研究了。其他的系统,我估计你只需要多2个月,你知道如何使用和开发了。一切将变得VERY EASY!

  大道至简,小而蕴真!