查看: 5132|回复: 6

2.ARM和Linux学习方法探讨

[复制链接]
发表于 2009-8-3 23:22:56 | 显示全部楼层 |阅读模式
 楼主| 发表于 2009-8-3 23:30:42 | 显示全部楼层
发一篇给电子设计信息网(www.eaw.com.cn)的“技术人生”杂志写的文章,希望大伙能有所体会。另外,如果要转载请注明是电子设计信息网的“技术人生”杂志,谢谢!

如何快速有效的掌握ARM和Linux
如何才能少走弯路,即“快速”又“有效”的掌握ARM Linux?这是大多数初学者都会有的疑问,阿南觉得这是一个非常好的问题,学习者就应当经常思考自己是否处在最有效的方式下学习。所以《ARM Linux入门与实践》一书也主要以阿南的ARM和Linux自学经历为线索、基础,试图希望自学朋友们能够从中体会出规律、方法和道理,再根据自身的实践情况总结出适合自己的一套快速、有效的掌握ARM Linux的学习步骤和方法。此次有幸在《技术人生》里和朋友们再次交流这个问题,阿南感到高兴!希望能够给更多的朋友以借鉴,也欢迎朋友们给阿南来信(ccn422@hotmail.com)进一步交流学习共同提高。
一.明确学习目标和目的
随着工作的深入,需要学习的知识、技术也越来越多,这让阿南不得不在学习时特别强调目标和目的性。比如在ARM的学习中,不需要学习太多的汇编知识,因为一般的ARM应用几乎不亲自用汇编去写程序,只需要能够理解启动代码和少量用汇编实现的底层库函数。在Linux的学习中,不需要去研究大量的内核源代码,只需学习常用的Linux命令、目录结构等,再以应用编程和Linux驱动编程为主。如果工作上需要GUI和网络编程,那么也可以有选择的学习相应的部分知识。总之要做到:与目标较远的“不学”,或暂时不学,因为即使学了也很快会忘记,但却浪费了原本就紧张的时间。阿南认为之所以有天才或智者,主要取决于它善于思考,寻找方法和捷径,善于判断重点和次要,善于花时间扎扎实实的做好必须要做的工作,学习必须要学习的知识,而不拘泥于次要或不相关的细节上。
二.硬件是基础,但它没有想象中难
通常可以将整个嵌入式系统分成硬件、底层驱动和应用程序三个部分,而学习者除了具有不同程度的单片机基础的电子类专业外,还有计算机软件专业的朋友。据阿南观察,无论是电子还是计算机专业都对底层驱动最感兴趣,都想将来从事基于Linux下的驱动开发。底层驱动位于硬件和应用程序之间,是桥梁,它不仅要求工程师能够理解硬件,也要求有一定的应用编程能力。其中硬件是基础,如果不想只从事纯应用(和硬件没有任何关系)编程,那必须要求掌握一定的ARM系统与接口等硬件技术,具有分析系统原理和调试解决问题的能力。而事实上,初学者往往忽略了硬件,忽略了整个系统的原理构成。电子类专业的学习者急于去学习软件,急于在开发板上运行程序,有些朋友甚至将开发板自带的所有程序编译、运行一次就认为已经学完、掌握ARM了。计算机专业的朋友更是害怕硬件,只学软件。阿南觉得这种学习方式是不好的,应该重视硬件,从硬件的原理开始掌握。其实硬件并没有初学者想像中难,ARM处理器原厂或第三方也都会提供完整的硬件参考设计,都是标准化电路及接口,学习者只要突破一种就可举一反三到多种ARM处理器,就可以帮助学习者在学习软件时消除硬件上的模糊。如果计算机专业的朋友确实没有一点的硬件基础,可以找本模拟、数字的基础书查阅,也可参考一些嵌入式硬件设计的书籍和直接查看芯片的数据手册。
三.在源码和实验中求答案,培养独立解决问题的思维能力
什么最能体现一个工程师的经验水平?什么样的能力最能体现一个工程师在团队中的价值?阿南认为是解决问题的能力,只有解决别人都不能解决的问题才能真正体现您在团队中的价值和不可或缺的重要性。如果说编程的速度,您可能会比一个人快,但你绝对不会比两个人甚至整个团队加起来还要快,但您完全可以解决其它人甚至一个团队都无法解决的问题。而解决问题的能力如何去培养呢?它需要在初学时就养成一种独立思考解决问题的习惯,需要在实践中不断的摸索、总结经验和思维方式,也是一个工程师内功的表现。而目前很多学习者在遇到问题时就不知所措,急于请教别人,甚至在BBS发出“跪求”,把“男儿膝下有黄金”忘的一干二净,这种习惯是不可取的,也培养不出解决问题的能力,更达不到有效掌握一种技术的真缔。在ARM应用中通常分硬件和软件问题,硬件通常由电源、处理器配置以及接口等问题,检查的顺序应该是电源、ARM内核再到外围接口,ARM硬件仿真器在硬件调试中将发挥重要的作用,有时也需要示波器等常用工具,甚至需要借用测试代码。软件的问题更多的是需要分析源代码,有时也必须通过仿真调试。
四.以单片机的思维,重点突出ARM的不同之处
大部分的ARM学习者都有一定程度的单片机基础,此时完全可以将ARM看作是超级单片机,以单片机的思维方式去理解,重点突出ARM系统的不同且关键之处,加以学习。在硬件上,ARM通常运行更高的主频,通过总线扩展大容易的Flash和SDRAM(甚至DDR),具有更多的管脚及采用高密度的BGA封装,以及超强的外设等,因此ARM系统往往需要更多层的PCB,且对器件的布局,信号走线等都有一定的要求。所以在ARM的硬件设计中要特别注意处理器的一些关键信号引脚的处理,一定要仔细阅读处理器用户手册上对各信号管脚的描述,有些引脚在不用时必须接固定的高或低电平,DDR的信号线需要等长处理等,否则系统将不能正常运行。由于目前单片机基本上是将Flash和RAM内置,所以朋友们可能都没有像最早的8031那样扩展过外部存储器(可以重新复习一下单片机的基础),此时应该重点理解ARM的总线扩展方式,理解它是如何外扩Flash、SDRAM(或DDR)及其它的总线设备等,它们的存储空间又是如何分配等,此时参考数据手册的内存映射图和一些SDRAM、Flash等的基本原理、寻址方式等都大有帮助。在软件,ARM如果不跑操作系统,那么它和单片机也是非常类似的,此时朋友们只需熟悉ARM的开发环境、工具的使用。然后将重点放在ARM处理器的启动过程和中断处理过程上,阿南认为如果没能理解这两个过程,那么就不算掌握ARM!!!由于官方或第三方都会提供测试程序,所以我们也不需要亲自去实现,但必须把它分析透彻,因为它太重要了,直接关系着整个系统能否正常运行。ARM处理器通常都会外扩大容量的NAND Flash,支持NAND Flash的直接引导启动,而这是单片机所没有的,因此朋友们也需要重点理解NAND Flash的应用。在使用单片机时,我们习惯从无到有开始写程序,而在使用ARM时我们要懂得利用资源,直接在官方提供的DEMO中提取代码。
五.PC机的Linux技术同样适用于ARM Linux
阿南发现很多朋友存在一个误区:学习嵌入式Linux必须在开发板上才能进行,而不能好好利用PC机的强大资源或者忽略了Linux的基础。其实PC机的Linux编程同样适用于ARM Linux,当您有了PC机的Linux基础后,只需重点学习ARM Linux的开发方式、工具使用,及嵌入式硬件资源的局限性所带来一些需要注意的地方。阿南觉得ARM Linux基本上就等于ARM的前后台应用和通用的Linux技术的结合。因此完整的ARM和Linux技术的学习顺序应该为ARM的硬件,ARM前后台应用,PC机Linux的命令操作,PC机Linux应用编程,PC机Linux的驱动技术,PC机的GUI和网络编程,再到基于ARM Linux特有的开发技术。当然朋友们也可以有选择的进行学习,比如不需要GUI或不需要网络编程,不想从事ARM硬件等。
六.不实践永远掌握不了ARM,工具决定效率
嵌入式是一门实践性很强的技术,如果只想看书,而不去实践,那么阿南建议请不要浪费时间。多看书也无用(现在书店的嵌入式书籍太多),要有选择性、针对性的看。看书的目的可以概括为理论基础、应用指导和给解决问题提供思路3种。理论基础需要系统的学习,建议选择一些国外的经典教材(如《UNIX环境高级编程》或《GNU/Linux编程指南》等),但对将来的应用不相关的也可以略去或泛读。基础的学习也离不开实践,需要实践操作来进一步的验证理解。应用指导一般都是在实践应用到时再去学习,边看边实践,如处理器的某个外设使用,需要查看处理器的用户指南或规格书的相关部分。如ARM Linux开发环境、工具的使用,可以参考具体的资料,也可以作一些笔记给以后应用时直接参考。当出现无法解决的难题而没有头绪时,此时可能需要上网收索相关的资料,或大量的查找相关的技术书籍,当有思路后就要通过实践测试、实验去验证解决问题。总之,理论是为实践服务的,脱离了实践,脱离了实际应用,看书就等于浪费时间!!!开发工具在实践中起着重要作用,不仅决定开发效率,也提高学习的效率。因此学习者需要一个开发学习板(或实践产品及目标板),朋友们如果资金允许,也请尽量配置一个硬件仿真器,它不仅给仿真调试带来了便利,而有些问题就必须要通过仿真器查看CPU内部寄存器等状态来查找解决。

阿南
2008-11-24
发表于 2009-8-4 00:24:00 | 显示全部楼层
随便一个够啃半几年的呵呵,我感觉吧,给学员一个大概框架~首先是一个整体的把握~
至于个人就看自己兴趣和爱好,就向那个方向发展~
发表于 2009-8-5 22:56:03 | 显示全部楼层
俺的个人经历是:要学好ARM (含普通的MCU)与LINUX,首先得购买开发学习板,其次就是要有两台电脑,一台用作主机编译调试开发板的环境,另一台用运行在linux下的mincom 串口输出与调试命令输入,调试时很方便。
发表于 2009-8-5 23:49:07 | 显示全部楼层
回复4楼宇宙飞船
这两台电脑的配置不需要很高吧?用旧的,比较慢的笔记本是否也可以?
发表于 2009-8-6 09:07:18 | 显示全部楼层
第一件事,就是学会pc版本的linux,linux的跨平台特性非常好。
 楼主| 发表于 2009-8-6 09:53:03 | 显示全部楼层
是的,在PC机上学习linux还是非常方便的
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关于我们  -  服务条款  -  使用指南  -  站点地图  -  友情链接  -  联系我们
电子工程网 © 版权所有   京ICP备16069177号 | 京公网安备11010502021702
快速回复 返回顶部 返回列表