ARM和Linux学习方法指导
??? ARM的学习。有了单片机或计算机结构的基本知识、c语言的基础,上手ARM是比较容易的。学习ARM,首先应当
了解一下ARM的体系结构,了解它有哪些版本、哪些模式、哪些寄存器、异常等。这方面的内容可以参考《ARM体系结构与编程》一书,这本书介绍的内容比较全,可以先快速浏览,特别是一些汇编指令不需要记住,以后开发时可以参考相关的手册。其次选定一种具体厂家型号的ARM处理器,学习该处理器相关的开发工具的使用,如开发环境、仿真器及评估板等。然后可以分析该处理器的外围扩展方法,如SDRAM、NAND Flash等,一般官方或第三方都会提供原理图,可以用来分析。接下来要理解该处理器的启动过程,亲自尝试从一块裸板逐步运行自己的应用程序,也可以参考官方的启动代码及例程。最后,可以调试、测试该处理器的各种外围部件,例如定时器PWM、串口、LCD等,特别是中断及执行过程。
??? Linux的学习。尽管我们最终应用的是嵌入式Linux,但还是要先在PC机上学习,因为无论基于PC机还是嵌入式处理器的Linux开发、编程、调试等都是近似的,而PC机的性能、资源等都更加丰富,嵌入式Linux的开发环境通常也都建立在PC机Linux环境下,另外Linux大量的书籍也都是针对PC机写的。学习的顺序应该是:(1)在PC机上安装Linux操作系统,再参考相应的入门书籍,主要是熟悉Linux环境,学习常用的命令和操作,理解各linux下的目录结构与作用等。(2)学习在Linux环境下编程。可以参考《GNU/Linux编程指南》或《UNIX环境高级编程》,它们介绍了文件描述符的概念,打开、读、写等操作的系列基础知识;没有这些基础而直接看《Linux设备驱动程序》会觉得很困难。(3)了解一下Linux内核源代码树的目录结构、编译等。(4)学习《Linux设备驱动程序》,理解驱动程序的结构框架等。(5)根据实践需要也可以网络编程和图形用户界面编程,可以参考《UNIX网络编程》和《C++ GUI Qt3 编程》。有了PC机的Linux基础及在Linux环境下的编程基础之后,就可以直接应用于嵌入式的开发工作了。
???? 有了上面的两中能力之后。此时只须学习开发环境的建立和使用,以及将PC机所学知识应用于具体的嵌入式平台。如果涉及硬件及驱动,那么应该有一定的硬件调试和解决问题的能力,此时单片机、ARM基础及外围设备接口的调试能力将起到很重要的作用。很多人认为学习了Linux驱动方面的知识就OK了,而往往忽略硬件本身的调试解决问题的能力,这样将没有开发的后劲。因为Linux驱动与前台控制硬件外设的区别只在于它与应用程序的接口,它要遵循一定的结构和规则,这种规则涉及的也就是通常讲的Linux驱动知识和技术,它是固定的,是容易掌握的,只要遵循就不会出问题。而硬件是千变万化的,它所涉及的技术是多方面的,除了处理器本身之外,还有各种接口及协议、数字、模拟技术等。这些在设计、调试时是很容易出问题的,此时要求我们有一定的调试、测试手段和方法。