许多新手在接触ARM和嵌入式linux都面临着一个尴尬的境地,那就是不知从哪个部分开始学习。查找资料和整理资料的过程复杂且耗时,很多新手并没有耐心进行所以就放弃了。针对这种情况,小编特意为大家整理了有关ARM与嵌入式linux的入门中有关裸机编程的建议,大家快来看一看吧。
文中提出的经验是针对Linux系统的,并不面向WinCE。现在做嵌入式的开发者中,做linux研究的人远比做WinCE的人多,很多厂家提供的资料也是以linux为主。WinCE的开发和Windows下的开发基本一样,学起来简单得多,但是学linux或者使用linux做嵌入式的人就是远比WinCE多。
其实通过和一些设计者进行了解,可以发现很多公司从没考虑使用WinCE,因为成本高,所以使用linux进行开发。linux已经有了无人能挡的优势。与此相对应的是,越来越多的电子厂商已经开始使用linux开发产品。
学习基本的裸机编程
对于学硬件的人而言,必须先对硬件的基本使用方法有感性的认识,更必须深刻认识该硬件的控制方式,一开始就学linux系统、学移植那么只会马上就陷入一个很深的漩涡。比如在刚刚开始学ARM的时候是选择ARM7,学ARM7的时候还是保持着学51单片机的思维,使用ADS去编程,第一个实验就是控制led。学过一段时间ARM的人都会笑这样很笨,但实际上有这个过程会好很多,因为无论做多复杂的系统最终都会落实到这些最底层的硬件控制。因此对这些硬件的控制有了感性的认识就好很多。
学习裸机的编程的同时要好好理解这个硬件的构架、控制原理,这些为理解硬件。所谓的理解硬件就是理解硬件是怎么组织这么多资源的,这些资源又是怎么由cpu、由编程进行控制的。比如说,s3c2410中有AD转换器,有GPIO(通用IO口),还有nandflash控制器,这些东西都有一些寄存器来控制,这些寄存器都有一个地址,那么这些地址是什么意思?又怎么通过寄存器来控制这些外围设备的运转?还有,norflash内部的每一个单元在这个芯片的内存中都有一个相应的地址单元,那么这些地址与刚刚说的寄存器地址又有什么关系?他们是一样的吗?
而与norflash相对应的nandflash内部的储存单元并不是线性排放的,那么s3c2410怎么将nandflash的地址映射在内存空间上进行使用?或者简单地说应该怎么用nandflash?再有,使用ADS进对ARM9行编程时都需要使用到一个初始化的汇编文件,这个文件究竟有什么用?里面的代码是什么意思?不要这个可以吗?诸如此类都是对硬件的理解。理解了这些东西就对硬件有很深的理解了,这对以后更深一步的学习将有很大的帮助,如果跳过这一步,越往后学越会觉得迷茫,越觉得这写东西深不可测。因为根基没打好。
通过以上的介绍可以看到,想要顺利的进行ARM或者嵌入式linux的入门,就需要实打实的一步一步积累相应的经验。千万不要觉得麻烦或者繁琐,因为这是学习后续知识的关键基础,如果这部分的知识基础没有打好,那么在后面的学习就会变得非常困难。