实例介绍
一个嵌入式爱好者的自学体验,从零介绍ARM和LINUX的方方面面
博客稳阁丛书 程方 网名阿南 曰曰 强 个嵌入式爱好者的自学体验 南编著 与实践 京航空统无荟出版社 内容简介 本书是以作者自学、应用嵌入式 Linux时的笔记(包括实验、出现的问题、调试过程、经验总结等)为基础, 再增加应用到的硬件平台而成的。全书以亲自制作实验平台硬件,亲自设计实验软件为线索,指导读者从零 开始学习到最终掌握ARM和 Linux应用的方方面面。 全书可以分成ARM硬件、ARM前后台系统应用和基于Lnux系统的应用3个部分。ARM硬件部分包 括整个硬件的原理分析、原理图、PCB板的绘制、元件焊接、硬件的检测与调试。ARM前后台系统应用部分 包括启动代码、处理器内部外设、扩展外部设备及接口等的所有底层软件分析与实现,还有 Bootloader、文件 系统、GUI等的原理与实现。 Linux系统的应用部分包括基于PC机的操作、应用编程和驱动、嵌入式 Linux 的汗发环境创建、各种硬件的驱动实现、网络编程、图形用户界面设计等。 本书可作为有志于掌握ARM、 Linux等嵌入式技术的高校学生、工程师等的参考书。 图书在版编目(CIP)数据 ARM Linux人门与实践/程昌南,方强编著.一北京: 北京航空航天大学出版社,2008.10 ISBN978-7-81124-422-9 I.A…Ⅲ.①程…②方…Ⅲ.①微处理器,ARM系统 设计② Linux操作系统一系统设计Ⅳ.TP332TP316.89 肀国版本图书馆CIP数据核字(2008)第150813号 c2009,北京航空航天大学出版社,版权所有。 未经本书出版者书面许可,任何单位和个人不得以任何形式或手段复制本书及光盘内容。 侵权必究。 ARM Linux入门与实践 一个嵌入式爱好者的自学体验 程昌南[网名阿南] 编著 方强 责任编辑董立娟 北京航空航天大学出版社出版发行 北京市海淀区学院路37号(100191)发行部电话:010-82317024传真:010-82328026 http://www.buaapress,comcnE-mail:bhpress@263.net 涿州市新华印刷有限公司印装各地书店经销 开本:787mm×960mm1/16印张:31.5字数:706千字 2008年10月第1版2008年10月第1次印刷印数:;5000册 ISBN978-7-81124-422-9定价:49.50元(含光盘1张) 本书的使用及学习方法 ARM和 Linux学习方法的体会 如何才能学好或尽快上手ARM和 Linux?这是很多初学者想问的,也曾经在网上讨论 过。其实学习没有捷径,主要还是取决于学习态度和学习方法。ARM、 Linux也一样,在此阿 南根据自学过程中的体会和网上的讨论作一些总结。 ARM的学习。有了单片机或计算机结构的基本知识、C语言的基础,上手ARM是比较 容易的。学习ARM,首先应该了解一下ARM的体系结构,了解它有哪些版本、哪些模式、哪 些寄存器、异常等。这方面的内容可以参考《ARM体系结构与编程》一书,这本书介绍的内容 还是很全的,可以先快速地浏览特别是汇编指令不需要记住,以后应用时再查。其次选定一 种具体厂家型号的ARM处理器,学习该处理器相关的开发工具的使用,如开发环境、仿真器 及评估板等。然后可以分析该处理器的外围扩展方法,如 SDRAM、 NAND Flash等,一般官 方或第三方都会提供原理图,可以用来分析。接下来要理解该处理器的启动过程,亲自尝试从 块裸板逐步运行自己的应用程序,也可以参考官方的启动代码及例程。最后就可以调试、测 试该处理器的各种外围部件,例如定时器PWM串口、LCD等,特别是中断及执行过程。 Liux的学习。尽管我们最终应用的是嵌入式 Linux,但还是要先在PC机下学习,因为 无论基于PC机还是嵌入式处理器的 Linux开发、编程、调试等都是相近的,而PC机的性能、 资源等都更加丰富,嵌入式 Linux的开发环境通常也都建立在PC机 Linux环境下,另外 Linux大量的书籍也都是针对PC机写的。阿南觉得学习的顺序应该是先在PC机上安装 Linux系统,再参考相应的入门书籍,主要是熟悉 Linux环境,学习常用的命令和操作(不一定 多,基本、常用的就可以,以后在使用过程中慢慢积累),理解各 Linux下的目录结构与作用等。 其次,学习在Liπux环境下编程。可以参考《GNU/ Linux编程指南》或《UNX环境高级编 程》,它们介绍了文件描述符的概念,打开读写等操作的系列基础知识;没有这些基础而直接 看《 Linux设备驱动程序》会觉得困难。再次,了解一下 Linux内核源代码树的目录结构、编译 等。最后,学习《 Linux设备驱动程序》,理解驱动程序的结构框架等。根据实践需要也可学习 网络编程和图形用户界面GUI编程,可以参考学习《UNIX网络编程》和《C++ GUI Qt3编 程》。另外由于 Qt GUI是基于C++的,所以需要学习C++的知识,也可以选择其他如Mi crowindows、 MiniGUI等。有了PC机的 Linux基础及编程知识后,就可以直接应用于嵌入式 前言 了!此时需要一个硬件平台(如开发板或直接的产品等目标系统)和该平台的开发环境。一般 的处理器原厂或第三方都会提供开发环境,所以不需要我们移植,它包括建立在PC宿主机上 的编译等工具和嵌入式 Linux内核(包括硬件驱动等BSP)源码。此时只须学习开发环境的建 立和使用以及将PC机所学的知识应用于具体的嵌入式平台。如果涉及硬件及驱动那么应 三该有一定的硬件调试和解决问题的能力,此时单片机、ARM基础及外围设备接口的调试能力 将起到很重要的作用。很多朋友(包括非电子、自动化专业的朋友)都希望将来从事 Linux驱 入门与实践 入动方面的工作,认为学习了Limx驱动方面的知识就OK了而往往忽略硬件本身的调试解决 问题能力,阿南觉得这是不正确的。因为 Linux驱动与前后台控制硬件外设的区别只在于它 与应用程序的接口,它要遵循一定的结构和规则,这种规则涉及的也就是通常讲的 Linux驱动 知识和技术,它是固定的,是容易掌握的,只要遵循就不会出问题。而硬件及外设是千变万化 的,它所涉及的技术是多方面的,除处理器本身外,还有各种接口及协议、数字、模拟技术等。 这些在设计、调试时是很容易出现问题的,此时要求我们有一定的调试、测试手段和方法。所 以,阿南认为要想成为一名优秀的 ARM Linux驱动工程师,首先必须是一名优秀的、具有丰 富调试经验的单片机或ARM处理器应用工程师 本书的使用与相关知识的同步学习 曾经有一个朋友这样告诉阿南:“如果看您的笔记就能掌握 ARM Linux驱动,那就是最 好的目的了”。对不起,阿南做不到,写不出这种“葵花宝典”。这本书的前身是在21CBBS 上发表的《嵌入式 Linux人门笔记》,主要是阿南在自学 Linux和在项目中应用 Linux时记录 的笔记、出现的错误和心得等,是自己平时工作中非常重要的参考手册。发表后得到众网友的 喜爱、支持及北航出版社胡晓柏主任的鼓励,故花更多的时间、精力将笔记丰富出版。 嵌人式是一门实践性很强的技术,而《嵌入式 Linux入门笔记》主要记录的是 Linux等相 关的软件部分,没有包括硬件相关的部分,为了让读者能够亲自实践,故增加了ARM及硬件 部分。并且亲自设计了AN2410SSB(最小系统板)和AN2410MB(扩展底板),给出了所有原 理图,介绍了制作过程,记录了用裸板开始调试的步骤和过程,介绍了如何让ARM运行及启 动等各方面的内容,以及前后台(无操作系统下)的应用等。本书没有将所涉及的技术及理论 都包括进来,不仅篇幅有限,而且也没有必要,因为已有太多相当经典的资料。 本书第1章为概述。第2章分析了硬件的原理图,读者应该阅读S3C2410A的数据手册, 特别是信号引脚功能描述,内存控制部分。第3章主要介绍了关于 Protel原理图和PCB板的 绘制,如果读者没有 Prote的基础可以参考人民邮电出版社的《电路设计与制版— Protel99 入门与提高》或其他 Protel书。如果有 Protel基础,只是没有绘制过多层板,那么可以参考人 民邮电出版社的《 Protel99E多层电路板设计与制作》。第4章介绍了S3C2410A系统核心 部分的调试方法和工具的使用,以及利用工具进行测试的方法、手段。该部分是整个系统的基 础,也是非常重要的,读者需要多试验,出现问题时多参考S3C2410A的数据手册。第5章专 门分析了S3C2410A的启动代码,用于理解S3C2410A的启动过程,中断处理过程及存储器等 前言 相关部分,也是非常基础和重要的。因为启动代码由汇编组成,此时可参考清华大学出版社的 《ARM体系结构与编程》,学习理解ARM的汇编语言等相关知识。第67章为硬件平台上实 现ARM的外围实验和扩展实验读者仍然要参考S3C240A的数据手册,在仿真调试情况下 理解ARM内部的寄存器、存储器、状态寄存器等与ARM体系相关的知识。另外还要阅读如 WAv音频格式,SD卡规范及相关的数据手册等。CPLD部分读者可以参考电子工业出版社 的《基于 Quartus II的FPGA/CPLD设计》,学习基本的工程创建,图形设计输入,编译和编程 等。 Altera cpld更详细的资料可以去官网下载。第8章介绍了前后台系统还需要考虑的相 关知识: NAND Bootloader、文件系统和图形界面。图形界面部分,读者需要理解一些基本的 绘图原理和算法,可以参考机械工业出版社的《计算机图形学的算法基础》。第9章介绍了在 PC机下的 Linux各方面技术,这些都是嵌入式 Linux的基础,非常重要,涉及的知识内容也很 多。在该章中,阿南只是总结了一些实践操作的部分内容所以还需要读者自己去参考学习 Linux的这些书籍: Linux系统的基本操作参考清毕大学出版社的《 Red hat linuⅹ9系统管 入门与实践 理》(这本书应该被实践安装的桌面 Linux系统相应版本的书替代),应用编程参考清华大学出 版社的《GNU/Linuⅹ编程指南》或机械工业出版社的《Uniⅸx高级环境编程》,驱动编程参考中 国电力出版社的《 Linux设备驱动程序》。第10章主要介绍S3C2410A的嵌入式 Linux开发 环境的搭建及工具的使用。这里采用的是MIZI公司的 Linux for s3C2410平台,读者也可以 直接参考《 MIZI Linux sdk for s3C2410》文档。第11章介绍在S3C2410A下实现 Linux驱 动,很多原理性的知识依然要参考《 Linux设备驱动程序》一书,而且要多试验验证。读者在调 试实现过程中也可以直接参考 Linux for s3C2410的内核源码中和硬件、驱动相关的代码例子 (可以在 Windows系统下安装 Source insight软件,方便阅读 Linux内核源代码)。第12章介 绍嵌人式 Linux桌面系统,可读写文件系统 YAFFS的实现,嵌入式Web服务器BOA、NFS 及WIFI。这些都是实践性很强的应用操作,所以读者主要是应用它们,出现问题时上网查找 相关应用操作,寻找解决问题的思路,再测试验证。第13章是网络编程方面的知识,主要参考 清华大学出版社的《UNIX网络编程第1卷:套接口API》,目的是掌握TCP客服机/服务器 的实现及网络的调试方法。第14章介绍嵌人式GUI开发环境的创建和开发方法,桌面系统 的移植。学习前读者应该先学习基于Qt的应用编程,可以参考北航出版社的《C++GU1 Qt3编程》,如果没有C++的基础可以参考清华大学出版社的《C++程序设计教程》。 致谢 感谢我的导师(也是本书的另一位作者)—方强多年来的关心与指导,且对本书付出的 辛苦劳动。 感谢我的公司——广州市天誉创高科技有限公司及同事们,他们对本书提供了很大帮助。 段克为本书绘制了部分电路图,丁亚锋为本书编写并调试了部分程序。另外,还要感谢曾水 生、李玉琪、刘卫国、张端峰、龙靖、彭雄飞、王勇、黄焕立、王菊林、黄斌、何运辉、吴建、方斌、黄 伟、傅良英、胡孝发、黄志艳、张凯、欧孔德、梁家乐、宁雪玉、蔡青青及蓝萍等人的帮助。 前言 感谢深圳英蓓特公司提供 Realview mDK开发工具及相关资料和技术支持。感谢EDN 网为本书创立书友会(hp:// group. ednchina, com/999/)和开展本书的AN2410SSB学习板 助学等活动。 感谢北京航空航天大学出版社嵌入式系统事业部主任胡晓柏的信任与鼓励,感谢21C BBS上网友们的支持、建议和帮助。 感谢我的父母、老师、姐姐、姐夫及所有亲戚朋友们,你们的关心与爱都是阿南不断前进的 动力。 入门与实践 阿南的技术水平、经验都还很欠缺,书中的错误和不妥之处在所难免,恳请广大读者朋友 们批评指正;也欢迎登陆21CBBS的ARM论坛或《 ARM Linux人门与实践》书友会与阿南 交流,共同提高。 阿南 2008年9月 自序 嵌入式自学经历和体会 目的 回想从2000年自学单片机开始,到后来的ARM,再到 Linux,自己经历了很多,也体会了 很多,有经验也有教训,所以希望通过此次机会与读者相互交流,也让更多的爱好者在自学过 程中有所借鉴。如果能得到您的共鸣,可以发送电子邮件给阿南:c422@hotmail.com。 初识单片机和电子竟赛 大一的暑假没有回家,留在学校里希望能向师兄学点技术,后来他向我推荐了单片机和全 国大学生电子竞赛。和普通学生一样,阿南认为能参加电子竞赛是多么自豪呀!且对单片机 很是好奇,于是去图书管借了些基础书来阅读,很快就被它的强大功能吸引,也产生了迅速学 好、将来参加电子竞赛的念头 买仿真器,下定决心学好单片机 当时学校还没有开模拟、数字电子等专业基础课程,所以学习单片机还是很困难的,一般 阿南都拿两三本单片机基础书一起对照着看,旁边还放着模拟、数字等基础教程以便查阅。 暑假很快就过去了,期间虽然专心学习,但进展很慢,后得到师兄的指点:要想学好单片 机,必须要有个仿真器实践大概1500元。这么贵?(这对农村孩子来讲,实在太贵了!另外 买了之后,还不一定就能学会呢!)经过一个星期的思想斗争,终于下定决心要买。当时的想法 是这样:“从小家里就穷,家人为了阿南付出了很多心血,所以阿南必须学好技术,好将来回报 他们;要参加电子竞赛且取得好成绩,在技术上必须要超越同学、师兄及其他院校的同齡人,而 论聪明、基础不可能占优,唯有比他们更早开始,更加勤奋和善于思考;是的,很心疼父母的这 些辛苦钱,也正是这个原因更促使阿南尽最大努力,更加勤奋地学习”。 培养兴趣,它是最好的老师 买了仿真器后,阿南比以前任何时候都更加勤奋了:图书馆、书店找书学习,独自骑两小时 自行车买器件,万能板上焊接电路,学习自己编程,用仿真器仿真,万用表测量各种信号变化 等。对于单片机,阿南到了近乎疯狂的地步,调试遇到困难时的痛苦、解决问题后的畅快和兴 奋,都让阿南对它产生了很深的感情,也已不再是在当初的巨大压力和包袱下学习了,而是在 种很浓厚的兴趣下享受着它带来的喜怒哀乐。 自序 冲破难关,学会独立 时间过的真快,自学单片机已经一年了,在这期间阿南对51系列单片机的原理已经理解 得差不多了,也实验、测试了所有的片内外设,但只有并行通信测试还一直没有成功过,就是 ADCo809的A/D转换实验。这个实验已经断断续续调了近两个月,分析了书上所有的相关 内容,对原理也已经很清楚了,但仿真器就是采集不到正确的数据。当时遇到困难时没有像现 在这样方便的网络,也没有示波器,只能分析书本和凭自己的想象和试验,另外总是期盼着师 入门与实践 兄能帮助解决。后来静下心来想了各种解决测试的方法和线索,一个个排除,最终在仿真器 说明书中发现“POD52仿真头的P0、P2口只能用作IO用,POD51可以作为总线用”。由于 直使用POD52的仿真头,所以读/写等信号都没有出来,换成POD51果然就成功了。(当时 真的很兴奋!)之后,单片机学习就变得非常顺利,一般的系统都能独自完成,也终于可以自豪 地宣告:阿南的单片机人门啦。在这一过程中阿南体会到了独自思考、解决问题的重要性,也 明白了开发工具在实践过程中所起到的作用。(其实很多问题是要用示波器测试和请求工具 厂商技术支持的。) 上帝是公平的,机会留给有准备的人 人门单片机后,不仅自己做些小课题,也用它完成课程设计、参加校里组织的竞赛等。虽 然没有参加院里的工程师摇篮协会,但自己的勤奋、动手能力及对单片机的执着还是得到了老 师的肯定。初识贾老师(负责组织参加全国大学生电子竞赛相关事务的老师)时,他给了一道 1999年的竞赛题——工频真有效值表。该题有很多的运算,考虑到汇编语言实现的难度,所 以阿南学习用C语言为单片机编程。由于大一时开过C语言的基础课,再加上良好的汇编语 言基础能力,这个课题很顺利地完成了。之后,贾老师将阿南推荐给方老师,目的很明确:学好 单片机,备战2003年SONY杯全国大学生电子设计竞赛。 有了方老师的指导,再加上实验室的各种硬件,阿南开始了一个新的阶段:不仅学习单片 机和C语言编程,还要学习单片机以外的相关技术,如 Protel绘制原理图、PCB制板;学习各 种总线和协议,学习电动机控制等;还要学习PLC、MCGS组态软件以及VB。这2年半的时 间里,阿南早已不仅仅是为了竞赛更多的是在体会和享受着整个学习过程。 回想自己5年的大学学习生活,感觉真的很幸运,最初的王师兄,后来的贾老师和方老师、 女朋友及所有帮助过阿南的朋友,在此对他们表示衷心的感谢,感谢他们总是在适当的时候出 现指导和帮助阿南,让阿南为之感动,为之奋斗。同时,也深深体会一个道理:机会总是留给 足够真诚,足够勤奋、执着,有所准备的人;连自己都不能感动,何以感动别人?感动上帝? 坎坷的一年,技术上的追求而不断放弃工作 当同学们纷纷进入大中专院校,从事让多少人羡慕的稳定的教师职业时,阿南却选择了南 下打工,希望在技术上有更高的造诣。 当时ARM在国内已经流行,阿南和广大爱好者一样,和当年初识单片机一样,也被它深 深地吸引。辗转了几家公司后,终于可以从事单片机的应用开发。半年后,阿南作出了一个让 【实例截图】
【核心代码】
标签:
小贴士
感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。
- 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
- 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
- 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
- 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。
关于好例子网
本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明
网友评论
我要评论