本文转引自 嵌入式 学习网 http://www.helloarm.com/
由于很多人总问这个问题,所以这里做一个总结文档供大家参考。这里必须先说明,以下的步骤都是
针对 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 行编程时都需要使用到一个初始化的汇编文件,这个文
件究竟有什么用?他里面的代码是什么意思?不要这个可以吗?
诸如此类都是对硬件的理解,理解了这些东西就对硬件有很深的理解了,这对以后更深一步的学习将有很
大的帮助,如果跳过这一步,我相信越往后学越会觉得迷茫,越觉得这写东西深不可测。因为,你的根基
评论0