
求ARM嵌入式系统的学习心得。
考试大题急需谢谢。
。
。
希望对你有帮助!嵌入式系统学习心得最近一直在看嵌入式系统方面的教程,包括arm和linux方面的知识,虽然看了不少,但除了linux外别的方面都还没有实践过,不过大体上流程还是能下来的,最近看书看的有点烦了,于是就把最近学习的笔记和心得写出来,下一步就是买一块arm9开发板进行学习。
我认为嵌入式系统的定义应当是以应用为中心、以计算机技术为基础、软件硬件可裁剪、适应应用系统对功能、可靠性、成本、体积、功耗严格要求的专用计算机系统。
比如现在ATM取款机就是一个典型RTOS,embeddedos主要包括两部分,一部分是处理器,比如ARM,POWERPC,MIPC,一部分是OS,比如linux,wince,vxworks,us\\\/os,etc.我现在主要学习的路线是arm+linux,选择arm主要是因为arm技术已经比较成熟,选择linux是因为linux是开源的,免费的,另外如果学好了linux就算将来不搞嵌入式系统开发这块,也可以专供linux服务器这一方面。
学习嵌入式linux,主要做的就是四点,一点就是写bootloader,并移植到到nandflash上,第二点,编译kernel,并通过bootloader下载到nandflash上,第三点,在基于nandflash上建立文件系统,第四点,把写好的应用程序下载到target上。
基本流程就是这么下来的,具体到开发板上时可能就有所差别了,下边就以深圳优龙公司的fs2410为目标板具体的上述一下开发的流程,以及在开发中应注意的问题。
第一步:交叉编译环境的建立A:基于linux操作系统的应用开发环境一般是由目标系统硬件(开发板)和宿主pc机所构成。
目标硬件开发板用于运行操作系统和系统应用软件。
而目标板所用到的操作系统的内核编译、应用程序的开发和调试则需要通过宿主pc机来完成(所以称为交叉编译)。
双方之间一般通过串口,并口或以太网接口建立连接关系。
安装linuxos,比如redhaolinux9.0,可以采用默认安装(但要包含ftp服务),将该linux服务器接入局域网,其他的pc机可以用windows,需要的软件工具包括(1)ftp客户端程序(2)telnet工具(3)移植到某一特定arm平台的linux操作系统内核源码(4)gnu编译工具,可由相关网站下载在某工作站pc上安装ftp客户端程序和telnet工具,linuxoskernel的编译一般有一个比较固定的步骤,会根据Makefiel文件的不同而略有差异,可参考相关文档,按固定的步骤编译内核完成以后,会在相应目录生成可执行的二进制文件,通过ftp传到pc机上,热后通过串口或网络下载到开发板上。
B:(1)创建编译环境,在这个过程中,将设置一些环境变量,创建安装目录,安装内核源代码和头文件等。
(2)创建binutils.在这个过程结束后,会创建类似arm-linux-ld等工具。
(3)创建一个交叉编译版本的gcc,注意:在这个过程中,只能编译c程序,而不能编译c++程序。
(4)创建一个交叉编译版本的glibc,这里最容易出问题。
(5)创建一个交叉编译版本的gdb。
这个过程结束后,会创建arm-linux_gdb(6)重新创建gcc。
前面创建gcc的过程没有编译c++编译器,现在glibc已经准备好了,所以这个步骤将完善gcc的交叉编译。
(7)重新创建glibc.如果在交叉编译过程中出现错误,那么请检查:版本选择是否正确,以及是否安装了相应的补丁;库文件路径设置是否正确;系统环境变量是否设置正确。
第二步:编写bootloader并移植到开发板上A:bootloader(引导加载程序)是系统加电后运行的第一段代码。
嵌入式系统中的bootloader相当于pc机中的bios。
大多数bootloader都包含两种不同的操作模式,一种是启动加载(bootloading)模式,在这种模式下,bootloader从目标机上的某个固态存储器设备上将操作系统加载到RAM中运行,整个过程并没有用户的介入。
这种模式是bootloader的正常工作模式,另一种是下载(downloading)模式。
在这种模式下,目标机上的bootloader将通过串口或网络等通信手段从开发主机(host)上下载内核映像和根文件系统映像等到RAM中。
然后可以再被bootloader写到目标机上的固态存储介质上。
B:bootloader启动大多数都分为两个阶段(1):基本的硬件初始化(屏蔽所有的中断,关闭处理器内部指令\\\/数据cache等)。
为第二阶段准备RAM空间如果是从某个固态存储媒质中,则复制bootlodaer的第二阶段代码到RAM。
设置堆栈。
跳转到第二阶段的C程序入口点。
(2):初始化本阶段要使用的硬件设备。
检查系统内存映射。
将内核映像和根文件系统映像从flash读到RAM。
为内核设置启动参数调用内核。
关于arm linux学习
我的基础:C语言、单片机、STM32、LabVIEW、FPGA等都有所了解,基本都能达到工作水平,本科得过两次电子大赛一等奖。
以后打算搞ARMlinux驱动方向或应用程序方向,上个星期在虚拟机上装完了ubuntu,简单的linux命令也熟悉了一下,有一块友善之臂的2440开发板,2440用ADS开发裸跑基本上没有问题了。
现在的问题是:一提到往linux系统方向靠拢,就无从下手,打开虚拟机,都不知道该干些什么。
我感觉要是想学驱动方向编程,首先要动应用方向的编程。
所以打算先从linux的应用方面下手,可不知道第一步应该干什么,用什么编译环境,第一个小实验应该是什么。
哪位大虾指点一下,列一下往应用方向发展的话,各个里程碑似的试验是什么。
(比如学单片机的话:第一步流水灯,第二部按键流水灯,第三部 中断流水灯之类的)。
最好以试验例子为总线,有很多人说的什么先学什么 再学什么 说的太泛泛。
感觉以实验为主线学东西比较快。
总结:学习linux(arm)的应用程序开发,从基础开始,各个阶段的标志性实验是什么。
越详细越好,最好列出每个阶段对应的开发环境。
谢谢,分数好说,我还有不少呢 楼主的基础还是比较好的,所以继续发展完全没有问题。
不过从你的介绍里看出,先前你做的都比较偏硬件,不知道算法和操作系统的底子怎么样。
如果没有操作系统基础的话,可以先看看操作系统的入门书籍,具体哪一本我就不说了,找一本入门的即可。
有了这些基础以后,就是做你说的linux应用程序开发了,有本书是必看的,就是鼎鼎有名的APUE,中文名叫做unix环境高级编程。
你希望在实验中学习,嗯,的确,软件开发必须重视实践,那么你应该把书中的程序试着自己写一下。
如果apue的程序你都能自己完成,那么应用开发你已经入门了。
既然你的方向是驱动开发,那么,就不向你推荐unp(unix网络编程)了。
后面就应该直接看内核与驱动方面的书了,ldd3,深入理解linux内核这些书可以看看了。
宋宝华的linux驱动程序开发也可以。
感觉自学驱动的话环境不是很好搭,而且水比较深,不可速成。
所以,如果可以的话,可以先找一份应用开发的工作,在工作中往底层发展。
至于你说的开发环境,最常用的就是vim和gcc和makefile了,搞linux的都不喜欢图形界面和ide这些花里胡哨的东西。
至少,我不喜欢。
《linux就该这么学》免费提供最新Linux技术教程书籍,为开源技术爱好者努力做得更多更好
想学习ARM技术,但是对这门技术一无所知,请高手指导一下如何入门?
一门技术不是提个问题就能学到手的,这需要在现实中多阅读,实践.所谓高手,即是实践多了并且有一定心得的人。
现在学习ARM,最好是从软件入手比较适合市场需求。
嵌入式程序员也是目前比较火热的工作之一。
开始学习,最好是自己买一块开发板,加以研究。
站在别人的肩上,相信你会看得更远。
目前国内比较大众的ARM芯片有三星的、飞利浦的、ATMEL的,ST的。
祝你好运。
怎样学习嵌入式 arm
单片机的应用主要就是控制思想,这个也不好归类,因为单片机用的的场合太多,情况也不一样。
总结一句,感觉还是控制思想是其核心。
PLC熟悉梯形图编程,最好有PLC可以实际操作,西门子的PLC市场占有率挺高,资料也全,就是比较贵。
可以买国产的,像科创思的PLC,完全和西门子的兼容。
ARM的话就是买开发板,搭建软件平台,交叉编译环境,嵌入式操作系统学习。
多实践,殊途同归。
学ARM难吗
为什么嵌入式要学ARM
学ARM要学什么
学ARM难吗
如何学ARM
(一) 为什么要学ARM
技术要以市场为导向。
规划个人职业生涯,学习主流技术和先进技术。
32位嵌入式系统在嵌入式系统的份额中,ARM的份额很大, 而且ARM发展前景较好。
提升公司平台和核心竞争力。
(二) 学ARM要学什么
学ARM要学核心的东西,而不是花哨的外设。
结合自己的专长进行发挥。
学习ARM9或以上的体系架构,学习ARM和操作系统的联系 (三) 学ARM难吗
学ARM不难,只要有电子基础、有一定的C\\\/汇编 语言能力即可,能懂或者了解某一个体系的CPU架构则更好。
电子、自动化、机电一体化、仪器仪表、计算机、机械甚至物理等 基础学科的学生都可以学习。
(四) 如何学ARM
良好的学习态度 + 合适的开发套件 + 正确的学习方法 前提条件: 选择一款合适的芯片和开发套件。
嵌入式开发是一个实战性很强的行业。
选 一个最简单的芯片、最简单的开发板,可以加快入门的速度。
简单的芯片和开发板可以降低门槛,减少障碍。
选择开发套件的标准: (1)配套资料是否齐全
原理图、源程序、文档等。
(2)是否提供技术支持
强大、完善的技术支持能够加快学习进度。
(3)能否提供开发平台
现代嵌入式系统的开发要以平台为基础。
平台是公司和个人迅速发展的保证。
(1)动手实践 不要将光盘配套程序直接运行,而要逐行输入代码,并理解代码,写文档。
(2)使用网络查找问题的解决方法和学习他人心得。
(3)学会投资 舍得为学知识投资,如买书、资料和工具等
学生总结200字左右
角度:一是方面的变化。
能到按时上学,不迟到、不早退;上课认讲,积答老师提出的问题,课下独立自主、认真的完成问题。
无论从学习态度、学习方法等方面都有了一定程度的提高,希望在下周能够再接再厉,争取周周更上一层楼,让自己的学习慢慢的提高。
二是生活方面。
能够做到自力更生的解决自己生活中的问题,尽量不依靠父母来帮助,让自己慢慢的成长。
三是同学关系方面,能够和同学和睦相处,出现问题有一个比较好的处理方式。
四是师生关系方面。
作为一个嵌入式向往着,应该怎样切入会比较好呢
可以的话详细点,例如学arm7 还是 arm9
学linux 还是uco
建议先学习下计算机体系结构。
因为嵌入式和通用计算机虽然不同,但其体系上也是计算机的体系,只是组成会少一些。
搞明白计算机到底是怎么运行的,再结合单片机、ARM的资料进行对比式学习,会比较快的入门。
搞嵌入式,最好能弄个开发板自己动手操作
uCOS、Linux等嵌入式操作系统,需要在你已经对ARM嵌入式入门之后接触。
操作系统方面还是比较难弄的
建议ARM9的开发板,ARM7的在之后的Linux移植上不方便。
嵌入式技术需要学习什么
嵌入式Linux操作系统学习规划ARM+LINUX路线,主攻嵌入式Linux操作系统及其上应用软件开发目标: (1) 掌握主流嵌入式微处理器的结构与原理(初步定为arm9) (2) 必须掌握一个嵌入式操作系统 (初步定为uclinux或linux,版本待定) (3) 必须熟悉嵌入式软件开发流程并至少做一个嵌入式软件项目。
从事嵌入式软件开发的好处是: (1)目前国内外这方面的人都很稀缺。
这一领域入门门槛较高,所以非专业IT人员很难切入这一领域;另一方面,是因为这一领域较新,目前发展太快,大多数人无条件接触。
(2)与企业计算等应用软件不同,嵌入式领域人才的工作强度通常低一些(但收入不低)。
(3)哪天若想创业,搞自已的产品,嵌入式不像应用软件那样容易被盗版。
硬件设计一般都是请其它公司给订做(这叫“贴牌”:OEM),都是通用的硬件,我们只管设计软件就变成自己的产品了。
(4)兴趣所在,这是最主要的。
从事嵌入式软件开发的缺点是: (1)入门起点较高,所用到的技术往往都有一定难度,若软硬件基础不好,特别是操作系统级软件功底不深,则可能不适于此行。
(2)这方面的企业数量要远少于企业计算类企业。
(3)有少数公司经常要硕士以上的人搞嵌入式,主要是基于嵌入式的难度。
但大多数公司也并无此要求,只要有经验即可。
(4)平台依托强,换平台比较辛苦。
兴趣的由来: 1、成功观念不同,不虚度此生,就是我的成功。
2、喜欢思考,挑战逻辑思维。
3、喜欢C C是一种能发挥思维极限的语言。
关于C的精神的一些方面可以被概述成短句如下: 相信程序员。
不要阻止程序员做那些需要去做的。
保持语言短小精干。
一种方法做一个操作。
使得它运行的够快,尽管它并不能保证将是可移植的。
4、喜欢底层开发,讨厌vb类开发工具(并不是说vb不好)。
5、发展前景好,适合创业,不想自己要死了的时候还是一个工程师。
方法步骤: 1、基础知识: 目的:能看懂硬件工作原理,但重点在嵌入式软件,特别是操作系统级软件,那将是我的优势。
科目:数字电路、计算机组成原理、嵌入式微处理器结构。
汇编语言、C\\\/C++、编理、离散数学。
数据结构和算法、操作系统、软件工程、网络、数据库。
方法:虽科目众多,但都是较简单的基础,且大部分已掌握。
不一定全学,可根据需要选修。
主攻书籍:the c++ programming language(一直没时间读)、数据结构-C2。
2、学习linux: 目的:深入掌握linux系统。
方法:使用linux—〉linxu系统编程开发—〉驱动开发和分析linux内核。
先看深,那主讲原理。
看几遍后,看情景分析,对照深看,两本交叉,深是纲,情是目。
剖析则是0.11版,适合学习。
最后深入代码。
主攻书籍:linux内核完全剖析、unix环境高级编程、深入理解linux内核、情景分析和源代。
3、学习嵌入式linux: 目的:掌握嵌入式处理器其及系统。
方法:(1)嵌入式微处理器结构与应用:直接arm原理及汇编即可,不要重复x86。
(2)嵌入式操作系统类:ucOS\\\/II简单,开源,可供入门。
而后深入研究uClinux。
(3)必须有块开发板(arm9以上),有条件可参加培训(进步快,能认识些朋友)。
主攻书籍:毛德操的《嵌入式系统》及其他arm9手册与arm汇编指令等。
4、深入学习: A、数字图像压缩技术:主要是应掌握MPEG、mp3等编解码算法和技术。
B、通信协议及编程技术:TCP\\\/IP协议、802.11,Bluetooth,GPRS、GSM、CDMA等。
2010-8-21 16:46 回复 122.90.173.* 2楼 C、网络与信息安全技术:如加密技术,数字证书CA等。
D、DSP技术:Digital Signal Process,DSP处理器通过硬件实现数字信号处理算法。
说明:太多细节未说明,可根据实际情况调整。
重点在于1、3,不必完全按照顺序作。
对于学习c++,理由是c++不只是一种语言,一种工具,她还是一种艺术,一种文化,一种哲学理念、但不是拿来炫耀得东西。
对于linux内核,学习编程,读一些优秀代码也是有必要的。
注意: 要学会举一反多,有强大的基础,很多东西简单看看就能会。
想成为合格的程序员,前提是必须熟练至少一种编程语言,并具有良好的逻辑思维。
一定要理论结合实践。
不要一味钻研技术,虽然挤出时间是很难做到的,但还是要留点余地去完善其他的爱好,比如宇宙,素描、机械、管理,心理学、游戏、科幻电影。
还有一些不愿意做但必须要做的
技术是通过编程编程在编程编出来的。
永远不要梦想一步登天,不要做浮躁的人,不要觉得路途漫上。
而是要编程编程在编程,完了在编程,在编程
等机会来了在创业(不要相信有奇迹发生,盲目创业很难成功,即便成功了发展空间也不一定很大)。
嵌入式书籍推荐 Linux基础 1、《Linux与Unix Shell 编程指南》 C语言基础 1、《C Primer Plus,5th Edition》【美】Stephen Prata着 2、《The C Programming Language, 2nd Edition》【美】Brian W. Kernighan David M. Rithie(K & R)着 3、《Advanced Programming in the UNIX Environment,2nd Edition》(APUE) 4、《嵌入式Linux应用程序开发详解》 Linux内核 1、《深入理解Linux内核》(第三版) 2、《Linux内核源代码情景分析》毛德操 胡希明著 研发方向 1、《UNIX Network Programming》(UNP) 2、《TCP\\\/IP详解》 3、《Linux内核编程》 4、《Linux设备驱动开发》(LDD) 5、《Linux高级程序设计》 杨宗德著 硬件基础 1、《ARM体系结构与编程》杜春雷着 2、S3C2410 Datasheet 英语基础 1、《计算机与通信专业英语》 系统教程 1、《嵌入式系统――体系结构、编程与设计》 2、《嵌入式系统――采用公开源代码和StrongARM\\\/Xscale处理器》毛德操 胡希明着 3、《Building Embedded Linux Systems》 4、《嵌入式ARM系统原理与实例开发》 杨宗德著 理论基础 1、《算法导论》 2、《数据结构(C语言版)》 3、《计算机组织与体系结构?性能分析》 4、《深入理解计算机系统》【美】Randal E. Bryant David O''Hallaron着 5、《操作系统:精髓与设计原理》 6、《编译原理》 7、《数据通信与计算机网络》 8、《数据压缩原理与应用》 C语言书籍推荐 1. The C programming language 《C程序设计语言》 2. Pointers on C 《C和指针》 3. C traps and pitfalls 《C陷阱与缺陷》 4. Expert C Lanuage 《专家C编程》 5. Writing Clean Code -----Microsoft Techiniques for Developing Bug-free C Programs 《编程精粹--Microsoft 编写优质无错C程序秘诀》 6. Programming Embedded Systems in C and C++ 《嵌入式系统编程》 7.《C语言嵌入式系统编程修炼》 8.《高质量C++\\\/C编程指南》林锐 尽可能多的编码,要学好C,不能只注重C本身。
算法,架构方式等都很重要。
这里很多书其实是推荐而已,不必太在意,关键还是基础,才是重中之重



