因为好多人总问这个问题,所以这儿做一个总结供你们参考。这儿必须先说明,以下的步骤都是针对Linux系统的,并不面向WinCE。其实你会注意到,如今做嵌入式的人中,做linux研究的人远比做WinCE的人多,好多产家提供的资料也是以linux为主。我仍然很难理解,或许WinCE的界面比linux的界面好看多了,使用上去也很便捷,更为重要的是嵌入式linux系统工程师标准培训教材2,WinCE的开发和Windows下的开发基本一样,学上去简单得多,而且学linux或则使用linux做嵌入式的人就是远比WinCE多。在和好多工作的人交流时我了解到,她们公司从没考虑使用WinCE,由于成本高,都是使用linux进行开发。我读研究生的实验室中也没有使用WinCE的,大都研究linux,也有少部份项目使用vxworklinux命令详解词典,并且就没有据说过使用WinCE的,缘由就是开源!其实现今WinCE6.0据说也开源,不过在成本和资源上linux早已有了无人能挡的优势。与此相对应的是,越来越多的电子厂商早已开始使用linux开发产品。举个反例,Google近日开发的智能手机操作系统Android似乎就是使用linux-2.6.23内核进行改进得到的。
第一.学习基本的裸机编程
对于学硬件的人而言linux定时器,必须先对硬件的基本使用方式有感性的认识,更必须深刻认识该硬件的控制方法,假如一开始就学linux系统、学移植这么只会马上就深陷一个很深的旋涡。我在刚才开始学ARM的时侯是选择ARM7(主意是当时ARM9还很贵),学ARM7的时侯还是保持着学51单片机的思维,使用ADS去编程,第一个实验就是控制led。学过一段时间ARM的人就会笑这样很笨,实际上也不是,我倒是认为有这个过程会好好多嵌入式linux系统工程师标准培训教材2,由于无论做空复杂的系统最终就会落实到那些最底层的硬件控制,因而对这种硬件的控制有了感性的认识就好好多了学习裸机的编程的同时要好好理解这个硬件的架构、控制原理,这种我称他为理解硬件。所谓的理解硬件就是说,理解这个硬件是如何组织那么多资源的,这种资源又是如何由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、linuxkernel(linux内核)、rootfile(根文件系统)。
这么这3部份是如何互相协作来构成这个系统的呢?各自有哪些用呢?两者有哪些联系?如何联系?系统的执行流程又是怎样样的呢?认清楚这个问题你对整个系统的运行就很清楚了,对于下一步制做这个linux系统就打下了另一个重要的根基。介绍这方面的资料网上可以挖掘到几吨,自己好好研究吧。