【VC++开源代码栏目提醒】:文章导读:在新的一年中,各位网友都进入紧张的学习或是工作阶段。
网学会员整理了VC++开源代码-ARM与Linux入门学习建议 - 培训资料的相关内容供大家参考,祝大家在新的一年里工作和学习顺利!
本文由wuwenfeng09贡献 doc
文档可能在WAP端浏览体验不佳。
建议您优先选择TXT或下载源文件到本机查看。
由于很多人总问这个问题所以这里做一个总结
文档供大家参考。
这里必须先说明以下的步骤 都是针对 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 内部的储存单使用到一个初始化的汇编文件这个文件究竟有什么用他里面的
代码是什么意思不要这个可以 吗 诸如此类都是对硬件的理解理解了这些东西就对硬件有很深的理解了这对以后更深一步的学习将 有很大的帮助如果跳过这一步我相信越往后学越会觉得迷茫越觉得这写东西深不可测。
因为 你的根基没打好。
不过先声明一下本人并没有使用 ADS 对 ARM9 进行编程我是学完 ARM7 后直接就使用 ARM9 学 linux 系统的因此涉及使用 ADS 对 ARM9 进行编程的问题我很难回答_自己去研究研究吧。
对于这部分不久将提供一份教程这个教程中的例程并不是我为我们所代理的板子写的是我在我们 学院实验室拿的英培特为他们自己 的实验箱写的不过很有借鉴意义可以作为一份有价值的参 考。
第二使用 linux 系统进行一些基本的实验。
在买一套板子的时一般会提供一些 linux 的试验例程好好做一段时间这个吧这个过程也是 很有意义的也是为进一步的学习积累感性认识你能想象一个从没有使用过 linux 系统的人能学好 linux 的编程吗好好按照手册上的例程做一做里面的实验虽然有点娃娃学走路有点弱智但是 我想很多高手都会经历这个过程。
在这方面我们深蓝科技目前没有计划提供相应的例程 主要是开发板的提供商会提供很丰富的例 程我们不做重复工作只提供他们没有的、最有价值的东西给大家。
第三研究完整的 linux 系统的的运行过程。
所谓完整的
linux 系统包括哪些部分呢 三部分bootloader、linux kernellinux 内核、rootfile根文件系统。
那么这 3 部分是怎么相互协作来构成这个系统的呢各自有什么用呢三者有什么联系怎么联 系系统的执行流程又是怎么样的呢搞清楚这个问题你对整个系统的运行就很清楚了 对于下一步 制作这个 linux 系统就打下了另一个重要的根基。
介绍这方面的资料网上可以挖掘到几吨自己好好 研究吧。
第四开始做系统移植。
上面说到完整的 linux 有 3 部分而且你也知道了他们之间的关系和作用那么现在你要做的便是自 己动手学会制作这些东西。
当然我不可能叫你编写这些
代码这不实现。
事实上这个 3 者都能在网下载到相应的源
代码但是这 个源
代码不可能下载编译后就能在你的系统上运行需要很多的修改直到他能运行在你的板子上 个修改的过程就叫移植。
在进行移植果自己都靠不住就找我一起研究研究吧我也不能保证能解决你的问题因为我 未必遇到过你的问题不过我相信能给你一点建议也许有助你解决问题。
这一步的最终目的是从源
代码的官方主页上都是外国的悲哀下载标准的源
代码包然后进行 修改最终运行在板子上。
盗用阿基米德的一句话“给我一根网线我能将 linux 搞定”。
第五研究 linux 驱动程序的编写。
移植系统并不是最终的目的最终的目的是开发产品做项目这些都要进行驱动程序的开发。
Linux 的驱动程序可以说是五花八门 linux2.4 和 linux2.6 的编写有相当大的区别 就是同为 linux2.6 但是不同版本间的驱动程序也有区别因此编写 linux 的驱动程序变都不是那么容易的事情对于最 新版本的驱动程序的编写甚至还没有足够的参考资料。
那么我的建议就是使用、移植一个不算很新的 版本内核这样到时学驱动的编程就有足够的资料了。
这部分的推荐书籍可以参考另一篇文章《推荐几本学习嵌入式 linux 的书籍》。
第六研究应用程序的编写。
做作品做项目除了编写驱动程序最后还要编写应用程序。
现在的趋势是图形应用程序的开发而图 形应用
程序中用得最多的还是 qt/e 函数库。
我一直就使用这个函数库来开发自己的应用程序不过 我希望你能使用国产的 MiniGUI 函数库。
盗用周杰伦的广告词就是“支持国产支持 MiniGUI”。
MiniGUI 的编程比较相似 Windows 下的
VC 编程比较容易上手效果应该说是相当不错的我曾 使用过来开发 ARM7 的程序。
不过 MiniGUI 最大的不好就是没有像 qtopia 这样的图形操作平台这 大大限制了他的推广我曾经幻想过与北京飞漫公司就是 MiniGUI 的
版权拥有者合作使用 MiniGUI 函数库开发像 qtopia 作平台不过由于水平有限这只能是幻想了呵呵。
完成这一步你基本就学完了嵌入式 linux 的全部内容了。
还有一个小小的经验想和大家分享。
我在学习嵌入式 linux 的过程中很少问人客观原因是身边的老 师、同学师兄都没有这方面的高手主观原因是我不喜欢问人喜欢自己研究解决问题。
这样做有个 好处就是可以提高自己解决问题的能力因为做这些东西总有很多问题你难以理解别人也没有这 方面的经验也不是所有问题都有人给你答案这时必须要自己解决问题这样个人的解决
问题能 力就显得非常关键了。
因此我的建议就是一般的问题到网上搜索一下 确实找不到答案了就问问高手 还是不行了就自己去研究不要一味去等别人帮你解决问题。
记住问题是学习的最好机会。
就嵌入式系统的而言基本上需要四种不同的工作系统设计工作硬件设计工作驱动 程式和操作系统移植
工作和应用程式设计研发工作。
系统设计工作 在系统的设计阶段系统分析师将根据需求确定系统的硬件的基本构成根据系统的需求选择使用那 种处理器使用哪种操作系统使用那些软件研发工具。
系统分析师往往是较为完整的参和过嵌入式 系统设计的全过程对于系统应用的行业较为了解对于嵌入式系统本身的研发流程十分清晰的人。
硬件设计工作 系统硬件设计人员需要根据系统分析师的设计结果进行硬件原理图的设计。
通常需要硬件设计人员 熟悉嵌入式系统的硬件构成。
硬件设计人员需要了解常用的嵌入式系统处理器存储器FlashS DRAM以太网 MAC 芯片音频/ 视频编解码芯片电源管理芯片总线接口电路 USB PCI 液晶显示模块可编程逻辑器件FPGA/CPLD无线网络通信模块Bluetooth WLANGPRS等 硬件电路构成元素的基本工作原理连接使用方法使用注意事项基本调试方法等内容。
在网络上 能找到非常多公司的评估板的原理图对于这些原理图要仔细研究摸清处理器同存储器网卡液 晶模块等器件的连接方法和原因。
通过对这些电路的研究能够较快地了解整个嵌入式系统的构成 这些电路同实际产品中的电路虽有一定差别的特别是对于手持设备但这些差别不影响初学者学习 嵌入式系统的硬件设计基本构成。
以上这些知识往往需要较长时间的学习和积累需要亲自参和实践的机会。
对于刚刚接触嵌入式系 统硬件研发的学生来讲一般不可能全部了解这些知识但也不会是通通一无所知。
笔者结合自己研 发和教学的经验认为首先应该选定一款主流且较单的嵌入式系统处理器比如基于 ARM7TD MI 内核的 AT91M40800S3C44B0 等嵌入式系统处理器学习 32 位 RISC 处理器的编程模型 指令集。
高校教学中单片计算机
课程一般以 8051 系列单片为核心讲解由于现代 32 位处理器的 结构和研发方式同 8 位单片机有着较大的差别学习者还是需要花一点力气来研究以下 32 位处理 器的。
以 ARM 处理器为例学习者就需要理解处理器的多种工作模式备份寄存器RISC 指令集 的特点MMU 和虚拟地址中断处理过程等内容。
在学习指令集的过程中最佳能够每
学习几条指 令就使用这几条指令在模拟器上实验以下观察处理器执行的结果。
这个过程一方面是学习者对于 指令本身的学习能够取得一个比较好的效果另外也是对研发工具本身的一种学习。
接着就能开始 学习片上资源的使用和设置方法。
这时就需要一个方便使用的研板学习者能够通过 JTAG 仿真 器将研发板同调试 PC 机相连进行程式的下载调试。
特别是要仔细研究系统的初始化过程和中断 处理的过程。
在研发过程中如果遇见问题应自己分析问题产生的原因通过分析缩小问题可能产生 的范围最终找到问题的所在。
最重要的就是要保持一种解决问题的信心面对困难怎么处理往往 能够决定最终系统是否能够调试成功。
然后学习者能开始仔细学习处理器同存储器的连接存储空 间的设置各种外扩器件如网卡AC97 声卡的工作原理和使用方法。
嵌入式系统硬件
设计中往往需要使用可编程器件 学习者还需要一定的时间来学习使用常用的可编程 器件C P L D / F P G A 常用的有 Xilinx 和 Altera 公司的产品。
进行系统硬件原理图设计 就需要使用原理图设计的 E D A 工具
常用的 E D A 原理图设计工具主要包括 Cadence 公司的 CaptureProtel 公司的 Protel99 SE 等。
接下来就能参照评估板的电路图根据系统的设计需求 开始进行原理图的绘制了。
在原理图绘制过程中一定要搞清评估板电路连接的原因对于一时没有 搞清晰的问题切不可蒙混过关。
例如有些处理器的地址线是以字节位单位的而另一些处理器的地 址线则是以两个字节为单位的当连接 16 位的存储器的时候切不可想当然的把处理器的 A 0 直 接连接到存储器的 A 0 上面。
常用嵌入式系统处理器和操作系统 处理器 常用嵌入式系统处理器主要包括 ARM 处理器Power PC 处理器基于 MIPS 内核的嵌入式处理 器软核处理器如 Alter 的 Nios 和 Xilinx 的 MicroBlaze 等和 D S P数字信号处理器等。
A R M 处理器的主要特点是具有较高的性能功耗比。
A R M 处理器被广能和数据吞吐 能力在网络和数据
通信领域基于 PPC 的嵌入式系统处理器有着广泛的应用。
其中 Motorola 公司 生产的 MPC860/MPC8260 被大量地应用在嵌入式
网络产品中。
MIPS 处理器的特点表目前十分强大的处理能力上。
作为高性能处理器MIPS 处理器适用于网络、 企业及高级消费类电子应用特别是在机顶盒
系统中MIPS 处理器具有较高的市场占有率。
随着可 编程器件的规模不断扩大使得人们能够根据需要制定处理器并方便的将针对某种特别应用制定的 处理器方便的在可编程器件内部实现。
除了处理器外计算机系统还需要许多其他构成部分比如在 多通道媒体数据处理系统中经常需要使用可编程器件来实现高速的数据处理功能使用软核 DSP 来实现复杂的数字信号处理算法同时还需要处理器进行事务处理软核处理器将可编程器件D S P 同处理器结合在一为系统级设计提供了极大的灵活性。
DSP数字信号处理器有别于通用处理器集中表目前其强大的数字信号处理能力上。
在 DSP 内 部提供了硬件乘累加器处理器在设计上对于特别的寻址方式做了优化一些 DSP 还支持零耗循环 Zero OverheadLoop。
为了方便嵌入式系统设计主流 DSP 一般也都提供了丰富的外设。
特 别值得一提的是 A D I 公司的 Blackfin 系列 DSP 和 TI 公司的 DM64X 系列 DSP两种处理器 都提供了丰富的片上外设非常适用嵌入式系统应用。
嵌入式系统研发过程中的常见问题和解决方法 Bootloader 怎么写入 Flash 初学者一般都会遇见怎么将程式写入处理器的问题。
对于不同的处理器能采用不同的方法。
例如 I ntel 的 Xscale 处理器能使用 Intel 公司提供的 JFlash 工具烧写。
对于具有 JTAG joint test ac tion group 联合测试行动小组调试工具软件的处理器能使用如下思路编写一段程式这段程 式能将位于 SDRAM/S.RAM 固定地址中的数据写入 Flash 中。
烧写时首先将这段软件下载到 SDRAM 中然后通过调试软件将要写入 Flash 的数据下载到 S D R A M / S R A M 的某个固 定地址开始的缓冲区然后通过调试器开始执行程式将数据写入 Flash。
除此以外网络上还提供 了非常多专用的写 Flash 的工具研发者能根据自己的需要选用。
目前明白了我在学的那个 BF533 为什么先下个 flashProgramer.dxearm -elf-gcc 是个交叉 C 语言编译器。
我们在 PC 平台下编译程式编译器运行的处理器同生成的
代码将要运行的处理器相同。
不过在 PC 机上编译 ARM 程式时编译器运行的处理器同生成的代 码运行的处理器不同这种编译器叫做交叉编译器。
其中的 elf 是指编译器生成的目标文件格式。
其 实我们平时用的单片机编译器如 GCCAVR 等已是交叉编译器了我到目前才弄清晰什么是交叉编 译器 走了哪条编译路径 系统程式和驱动程式往往包含非常多的编译选项非常多选项都是在编译时通过命令行定义的如果 想知道编译的是那一段程式能使用如下的方法 ifdef PLAT_AAA error Code for Platform AAA else error Code NOT for Platform AAA endif 这样在编译的时候就知道 编译的是哪一条路经了。
对于支持pragma message “I am here” 的编译器也可使用pragma message 预编译指令。
我怎么知道段
代码在那个文件中 系统编程中经常需要使用在多个文件中搜索字符串在 windows 平台下能使用平台提供的多文件字 符串搜索工具。
在 linux 平台下能使用 grep 来
搜索字符串。
Grep 的搜索功能十分强大支持正 则表达式搜索熟练使用 grep 对于阅读系统和驱动程式
代码是非常有帮助的。
系统是从那个文件开始运行的 对于 W i n d o w s C E 系统一般从 W I N C E 4 2 0 PLATFORMYourPlatformK ERNELHAL 目录的某个汇编文件中。
对于 Linux 系统版本不同会存在一定差异以 arm 处理器 为例一般会在 linux2.4.xarcharmkernel 的 head-armv.S 中。
程式执行到了那里 能在程式中插入如下
代码来实现 printf “I am here s dn”__FILE__ __LINE__
代码将打出 printf 语句所在的文件名和行号。
推荐书目 Jean J.Labrosse MicroC/OS-II The Real-Time KernelSecond Edition 这本书是笔者接触嵌入式实时系统的入门书在国内能够买到中文版。
这本书较为清晰地讲述了实时 系统的概念各个组成部分的工作原理特别是公开了实时系统内核的原始码仔细研究定会受益匪 浅。
有个小的提示对于初学者这本书能先不看第一章直接从第二章看起。
Abraham Silberschatz Peter Baer GalvinGreg Gagne Operating System Concepts 笔者在教学过程中发现 无论是计算机还是电子工程专业都有非常多学生对于操作系统的基本概念都 没有搞清非常少有学生有完整的系统编程经验。
Operating SystemConcepts 这本书对操作系统 的感念讲述只能用经典来形容。
对于嵌入式系统有兴趣深入研究的同学首先要把基础打好这本书 就成了必读之物了。
Andrew S. Tanenbaum Computer Networks 提起 Andrew S. Tanenbaum 学习计算机 Karim Yaghmour Building Embedded Linux Systems 本书详尽的介绍了嵌入式 linux 系统的组成基本概念和怎么去建立各个部分。
全书篇幅较小可谓 短小精悍。
即能作为嵌入式 linux 系统的入门读物又是研发过程各个部分的指南。
学习嵌入式系统不了解当前应用最广泛的嵌入式处理器怎么行 ARM7 TDMI 的 data sheet 是 学习 ARM 编程模型指令集的好东西。
在嵌入式系统中M M U 内存管理单元是非常重要的 部分又是较难理解和掌控的部分。
ARM920T Technical Reference Manual 正好能帮你讲解这 方面的内容。
Perter Van Der LinDen Expert C Programming 嵌入式系统级编程最常用的语言还是 C 。
非常多同学都自认为自己的 C 语言学的非常好那好就 看看这本书吧找找自己和 Experts 差距。
这篇文章非常清晰的讲述了嵌入式研发的方方面面对嵌入式开发学习人员起到的指导作用嵌入式 研发和桌面研发既有不同又有非常大的联系而且十分注重实际操作能力。
搞桌面研发的人在一开 始接触嵌入式的时候通常转换不过来这主要体目前定位上。
如文中所说你是谁你要做什么 我对硬件的了解仅限于编程领域PCB 设计一窍不通但并不能说你不懂硬件就不能从事嵌入式研 发。
一个系统的研发设计方方面面在自己感兴趣和熟悉的领域做出自己的贡献才是最主要的。
硬件设计: 需要有硬件设计的经验对各种嵌入式器件有非常好的了解 系统移植需要汇编经验操作系统原理及底层驱动的了解 应用程式需要桌面编程经验 什么是嵌入式编程 什么是嵌入式编程什么是 ARM 如何学习 嵌入式系统是以应用为中心以
计算机技术为基础并且软硬件可裁剪 嵌入式系统是以应用为中心以计算机技术为基础并且软硬件可裁剪适用于应用系统 对功能、可靠性、成本、体积、功耗有严格要求的专用计算机系统。
它一般由嵌入式微处 对功能、可靠性、成本、体积、功耗有严格要求的专用计算机系统。
它一般由嵌入式微处 理器、外围硬件设备、嵌入式操作系统以及用户的应用程序等四个部分组成 程序等四个部分组成 理器、外围硬件设备、嵌入式操作系统以及用户的应用程序等四个部分组成用于实现对 其他设备的控制、监视或管理等功能。
其他设备的控制、监视或管理等功能。
系统 它包括硬件和软件硬件和软件两部分。
硬件包括处理器微处理器、 端口、图形控制器等。
软件部分包括操作系统软件OS 要求 存储器及外设器件和 IO 端口、图形控制器等。
软件部分包括操作系统软件OS 要求 实时和多任务操作和应用程序编程。
有时设计人员把这两种软件组合在一起。
实时和多任务操作和应用程序编程。
有时设计人员把这两种软件组合在一起。
应用程序 控制着系统的运作和行为而操作系统控制着应用程序编程与硬件的交互作用。
控制着系统的运作和行为而操作系统控制着应用程序编程与硬件的交互作用。
现在所说的嵌入式开发通常都是指有嵌入式操作系统的那种产品功能复杂了 现在所说的嵌入式开发通常都是指有嵌入式操作系统的那种产品功能复杂了单 片机开发无法实现需要用到嵌入式操作系统也能体现出嵌入式操系统的优势。
片机开发无法实现需要用到嵌入式操作系统也能体现出嵌入式操作系统的优势。
嵌入 式产品在航空、医疗、家电、消费电子、汽车电子、移动等众多领域都可以看到 式产品在航空、医疗、家电、消费电子、汽车电子、移动等众多领域都可以.