第一篇:ARM与嵌入式Linux的入门建议.
ARM与嵌入式linux的入门建议
ARM与嵌入式linux的入门建议
类别:嵌入式系统
由于很多人总问这个问题,所以这里做一个总结文档供大家参考。这里必须先说明,以下的步骤都是针对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内部的储存单元并不是线性排放的,那么s3c2410怎么将nandflash的地址映射在内存空间上进行使用?或者简单地说应该怎么用nandflash?再有,使用ADS进对ARM9行编程时都需要使用到一个初始化的汇编文件,这个文件究竟有什么用?他里面的代码是什么意思?不要这个可以吗?诸如此类都是对硬件的理解,理解了这些东西就对硬件有很深的理解了,这对以后更深一步的学习将有很大的帮助,如果跳过这一步,我相信越往后学越会觉得迷茫,越觉得这写东西深不可测。因为,你的根基没打好。不过先声明一下,本人并没有使用ADS对ARM9进行编程,我是学完ARM7后直接就使用ARM9学linux系统的,因此涉及使用ADS对ARM9进行编程的问题我很难回答^_^,自己去研究研究吧。对于这部分不久将提供一份教程,这个教程中的例程并不是我为我们所代理的板子写的,是我在我们学院实验室拿的,英培特为他们自己 的实验箱写的,不过很有借鉴意义,可以作为一份有价值的参考。第二,使用linux系统进行一些基本的实验。在买一套板子的时候一般会提供一些linux的试验例程,好好做一段时间这个吧,这个过程也是很有意义的,也是为进一步的学习积累感性认识,你能想象一个从没有使用过linux系统的人能学好linux的编程吗?好好按照手册上的例程做一做里面的实验,虽然有点娃娃学走路,有点弱智,但是我想很多高手都会经历这个过程。在这方面我们深蓝科技目前没有计划提供相应的例程,主要是开发板的提供商会提供很丰富的例程,我们不做重复工作,只提供他们没有的、最有价值的东西给大家。第三,研究完整的linux系统的的运行过程。所谓完整的linux系统包括哪些部分呢?三部分:bootloader、linux kernel(linux内核)、rootfile(根文件系统)。那么这3部分是怎么相互协作来构成这个系统的呢?各自有什么用呢?三者有什么联系?怎么联系?系统的执行流程又是怎么样的呢?搞清楚这个问题你对整个系统的运行就很清楚了,对于下一步制作这个linux系统就打下了另一个重要的根基。介绍这方面的资料网上可以挖掘到几吨,自己好好研究吧。第四,开始做系统移植。上面说到完整的linux有3部分,而且你也知道了他们之间的关系和作用,那么现在你要做的便是自己动手学会制作这些东西。当然我不可能叫你编写这些代码,这不实现。事实上这个3者都能在网下载到相应的源代码,但是这个源代码不可能下载编译后就能在你的系统上运行,需要很多的修改,直到他能运行在你的板子上,这个修改的过程就叫移植。在进行移植的过程中你要学的东西很多,要懂的相关知识也很多,等你完成了这个过程你会发现你已经算是一个初出茅庐的高手了。在这个过程中如果你很有研究精神的话你必然会想到看源代码。很多书介绍你怎么阅读linux源代码,我不提倡无目的地去看linux源代码,用许三多的话说,这没有意义。等你在做移植的时候你觉得你必须去看源代码时再去找基本好书看看,这里我推荐一本好书倪继利的《linux内核的分析与编程》,这是一本针对linux-2.6.11内核的书,说得很深,建议先提高自己的C语言编程水平再去看。至于每个部分的移植网上也可以找到好多吨的资料,自己研究研究吧,不过要提醒的是,很多介绍自己经验的东西都或多或少有所保留,你按照他说的去做总有一些问题,但是他不会告诉你怎么解决,这时就要靠自己,如果自己都靠不住就找我一起研究研究吧,我也不能保证能解决你的问题,因为我未必遇到过你的问题,不过我相信能给你一点建议,也许有助你解决问题。这一步的最终目的是,从源代码的官方主页上(都是外国的,悲哀)下载标准的源代码包,然后进行修改,最终运行在板子上。盗用阿基米德的一句话:“给我一根网线,我能将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的过程中很少问人,客观原因是身边的老师、同学师兄都没有这方面的高手,主观原因是我不喜欢问人,喜欢自己研究解决问题。这样做有个好处,就是可以提高自己解决问题的能力,因为做这些东西总有很多问题你难以理解,别人也没有这方面的经验,也不是所有问题都有人给你答案,这时必须要自己解决问题,这样,个人的解决问题能力就显得非常关键了。因此我的建议就是一般的问题到网上搜索一下,确实找不到答案了就问问高手,还是不行了就自己去研究,不要一味去等别人帮你解决问题。记住,问题是学习的最好机会。
第二篇:ARM与嵌入式linux的入门建议(六步曲).
【转帖】 ARM与嵌入式linux的入门建议(六部曲)由于很多人总问这个问题,所以这里做一个总结供大家参考。这里必须先说明,以下的步骤都是针对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内部的储存单元并不是线性排放的,那么s3c2410怎么将nandflash的地址映 射在内存空间上进行使 用?或者简单地说应该怎么用nandflash?再有,使用ADS进对ARM9行编程时都需要使用到 一个初始化的汇编文件,这个文件究竟有什么用?他里面的代码是什么意思?不要这个可以吗?诸如此类都是对 硬件的理解,理解了这些东西就对硬件有很深的理解了,这对以后更深一步的学习将有很大的帮助,如果跳过这 一步,我相信越往后学越会觉得迷茫,越觉得这写东西深不可测。因为,你的根基
没打好。不过先声明一下,本 人并没有使用ADS对ARM9进行编程,我是学完ARM7后直接就使用ARM9学linux系统的,因此涉及使用ADS对ARM9进 行编程的问题我很难回答^_^,自己去研究研究吧。
对于这部分不久将提供一份教程,这个教程中的例程并不是我为我们所代理的板子写的,是我在我们学院实 验室拿的,英培特为他们自己的实验箱写的,不过很有借鉴意义,可以作为一份有价值的参考。
第二,使用linux系统进行一些基本的实验。
在买一套板子的时候一般会提供一些linux的试验例程,好好做一段时间这个吧,这个过程也是很有意义的,也是为进一步的学习积累感性认识,你能想象一个从没有使用过linux系统的人能学好linux的编程吗?好好按 照手册上的例程做一做里面的实验,虽然有点娃娃学走路,有点弱智,但是我想很多高手都会经历这个过程。
在这方面我们深蓝科技目前没有计划提供相应的例程,主要是开发板的提供商会提供很丰富的例程,我们 不做重复工作,只提供他们没有的、最有价值的东西给大家。
第三,研究完整的linux系统的的运行过程。
所谓完整的linux系统包括哪些部分呢?
三部分:bootloader、linux kernel(linux内核)、rootfile(根文件系统)。
那么这3部分是怎么相互协作来构成这个系统的呢?各自有什么用呢?三者有什么联系?怎么联系?系统的 执行流程又是怎么样的呢?搞清楚这个问题你对整个系统的运行就很清楚了,对于下一步制作这个linux系统就 打下了另一个重要的根基。介绍这方面的资料网上可以挖掘到几吨,自己好好研究吧。第四,开始做系统移植。
上面说到完整的linux有3部分,而且你也知道了他们之间的关系和作用,那么现在你要做的便是自己动手学 会制作这些东西。
当然我不可能叫你编写这些代码,这不实现。事实上这个3者都能在网下载到相应的源代码,但是这个源代 码不可能下载编译后就能在你的系统上运行,需要很多的修改,直到他能运行在你的板子上,这个修改的过程就 叫移植。在进行移植的过程中你要学的东西很多,要懂的
相关知识也很多,等你完成了这个过程你会发现你已经 算是一个初出茅庐的高手了。
在这个过程中如果你很有研究精神的话你必然会想到看源代码。很多书介绍你怎么阅读linux源代码,我不 提倡无目的地去看linux源代码,用许三多的话说,这没有意义。等你在做移植的时候你觉得你必须去看源代码 时再去找基本好书看看,这里我推荐一本好书倪继利的《linux内核的分析与编程》,这是一本针对linux-2.6.11内核的书,说得很深,建议先提高自己的C语言编程水平再去看。
至于每个部分的移植网上也可以找到好多吨的资料,自己研究研究吧,不过要提醒的是,很多介绍自己经验 的东西都或多或少有所保留,你按照他说的去做总有一些问题,但是他不会告诉你怎么解决,这时就要靠自己,如果自己都靠不住就找我一起研究研究吧,我也不能保证能解决你的问题,因为我未必遇到过你的问题,不过我 相信能给你一点建议,也许有助你解决问题。
这一步的最终目的是,从源代码的官方主页上(都是外国的,悲哀)下载标准的源代码
包,然后进行修改,最终运行在板子上。
盗用阿基米德的一句话:“给我一根网线,我能将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的过程中很少问人,客观原因是身边的老师、同 学师兄都没有这方面的高手,主观原因是我不喜欢问人,喜欢自己研究解决问题。这样做有个好处,就是可以提 高自己解决问题的能力,因为做这些东西总有很多问题你难以理解,别人也没有这方面的经验,也不是所有问题 都有人给你答案,这时必须要自己解决问题,这样,个人的解决问题能力就显得非常关键了。因此我的建议就是 一般的问题到网上搜索一下,确实找不到答案了就问问高手,还是不行了就自己去研究,不要一味去等别人帮你 解决问题。记住,问题是学习的最好机会。在网上看到了这篇好文章,跟大家分享一下,希望对大家的学习有所帮助!ARM与嵌入式linux的入门建议(六部曲)由于很多人总问这个问题,所以这里做一个总结供大家参考。这里必须先说明,以下的步骤都是针对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系统进行一些基本的实验。
第三,研究完整的linux系统的的运行过程。
第四,开始做系统移植。
第五,研究linux驱动程序的编写。
第六,研究应用程序的编写。
在网上看到了这篇好文章,跟大家分享一下,希望对大家的学习有所帮助!深圳信盈达嵌入式、单片机、ARM、MIPS、FPGA、Android培训!免费试听,满意后给您量身定制 课程(包学会),快速提高您的技能!教学特色:名师督学+工程师指导;项目案列解析+实际解决方案!技术顾问:曹老师:qq:2859780203 欢迎大家进入华南地区最大的单片机嵌入式学习群:247452389 共同交流、学习
第三篇:嵌入式linu学习心得
嵌入式Linux学习心得
1、Linux命令
ls:查看目录-l以列表方式查看;ls –l 与ll的功能一样 pwd: 查看当前的目录
cd:改变当前操作目录cd /直接跳到根目录 cd..回到上一级目录 cat: 打印显示当前文件的内容信息
mkdir:创建目录
fdisk: 查看硬盘分区信息,-l以列表方式查看
->代表是链接文件,类似window下的快捷方式。
cp: 复制命令,例子cp 文件名 /home/dir/
mv: 移动或改名,如mv sonf.confsonf.txt(改名)移动:mv sonf.conf / rm:删除命令,如rm –f test.c;如删除目录rm –fr d
man:查看某个命令的帮助,man 命令
2、各系统目录的功能
drw—r—w--:d代表是目录,drw代表当前用户的权限,r代表组用户的权限,w代表其它用户的权限。x代表有执行权限。
/boot/gruff.conf: 启动引导程序
/dev:brw—rw--:b代表是块设备。Linux设备有三种,块设备(b开头)、字符设备(c开头)、网络设备。had代表第一个硬盘,hdb代表第二个硬盘。Hdb2代表第二块硬盘的第二个分区。3,67代表主设备为3,从设备为67./etc:存放的是系统的配置文件。Inittab文件存放不同启动方式下必须启动的进程。Inittab文件中有6个启动level,wait中对应着6个level的目录,respawn代表当一个进程被意外终止了,但会自动启动的进程,如守护进程。rc.d目录中存放了一个rc.sysinit文件,里面存放系统初始化配置信息。/etc还有一个vsftpd里面存放tcp、ftp的配置。
/home : 用户目录,存放用户的文件,/lib:存放库文件,后缀为so的文件代表动态链接库。
/lost+found:系统意外终止,存放一些可以找回的文件。
/mnt:挂载外部设备,如挂载光驱:mount –t /dev/cdrom/mnt/cdrom,如
果在双系统中,要查看windows中D盘的文件,首先应该将D盘的文件映射过来,mount –t /dev/hda2/mnt/windows/d
/opt:用户安装的应用程序
/proc:是系统运行的映射,比较重要。里面的文件数字代表进程号。每个进程号目录下包含进程的基本信息。还有其他信息,如cpuinfo等,内核支持的文件系统filesystem等。系统支持的中断interrupts,iomen代表内存分配情况。ioport存放IO端口号。还有分区信息,modole信息,状态信息,版本信息
对于Linux的设备驱动程序,有两种加载模式,一种是直接加载进linux内核,一种是以模块的方式加载到内核。
/sbin: 系统管理的一些工具。如poweroff关机工具。
/usr: 安装系统时很多文件放在此目录下面,包含一些更新等,include包含的头文件,lib 是Linux的库文件,src包含Linux2.4的内核源码
/var:存放是临时变量
3、
第四篇:ARM与嵌入式实验报告
ARM与嵌入式技术
实验报告
专业班级:通信工程
姓名:**** 学号:******
实验日期:2012年6月7日 指导老师:*****
一、实验目的
1.学习使用Embest IDE开发环境及ARM 软件模拟器;
2.掌握简单ARM 汇编指令,进一步加强对嵌入式的熟悉和了解。
二、实验设备
硬件:PC 机
软件:Embest IDE 开发环境
三、实验内容
例3:实现64位加法运算,要求【R1:R0】+【R3:R2】,结果放回【R1:R0】中; 例2:编写程序将R2的高8位传送到R3的低8位(不考虑R3的其它位); 例7:编写一段程序计算10!;
例8:串拷贝(R1指向源数据串的首地址,R0指向目的数据串的首地址)。
四、实验步骤
1)新建工程:
运行Embest IDE 集成开发环境,选择菜单项File → New Workspace,如图一,系统弹出一个对话框,键入文件名“沈”,如图二,点击OK 按钮。将创建一个新工程,并同时创建一个与工程名相同的工作区。此时在工作区窗口将打开该工作区和工程.。
2)建立源文件:
点击菜单项File → New,如图三,系统弹出一个新的文本编辑窗,输入源文件代码。编辑完后,保存文件“沈.s”后缀,如图四。
3)添加源文件:
选择菜单项Project → Add To Project → Files,在工程目录下选择刚才建立的源文件.s后缀文件,如图五,图六。
4)基本配置:
选择菜单项Project → Settings,弹出工程设置对话框。在工程设置对话框中。① 选择Processor 设置对话框,按照图七所示,进行配置:
图七
② 选择Remote设置对话框,按照下图八所示,进行配置:
图八 ③ 选择最右边一个进行编译,显示如图九,则编译成功。
图九
④ 选择Project → Settings → Debug设置对话框,按照图十所示,进行配置:
图十 ⑤
选择
5)选择菜单项Debug →Remote Connect 进行连接软件仿真器,将存储器地址改为0x1000,如图十一,执行Debug →Download 命令下载程序,并打开寄存器窗口。打开memory 窗口,按F10进行单步跟踪,观察寄存器的数据变化并分析。最右边一个进行编译,显示如图九,则编译成功。
图十一
五、各实验的参考程序及运行结果
实验一:(例3)实现64位加法运算,要求【R1:R0】+【R3:R2】,结果放回【R1:R0】中; 1.程序代码如下:
.global _start
.text _start:
mov R0,#11
/*R0=11*/ mov R1,#22
/*R1=22*/ mov R2,#33
/*R2=33*/ mov R3,#44
/*R3=44*/ ADDS R0,R0,R2
/*R0等于低32位相加,并影响标志位*/
ADC R1,R1,R3
/*R1等于高32位相加,并加上低位进位*/ stop:
b stop.end
2.分析调试:
①download下载:
② 读入数据:
③ r0+r2→r0(低32位):
④ r1+r3→r1(带进位的加法):
实验二:(例2)编写程序将R2高8位传送到R3的低8位(不考虑R3的其它位);
1.程序代码如下:
.global _start _start: ldr r2,=0x23453401 ldr r3,=0xabcd1200 and r2,r2,#0xff000000 /*保留R2的高8位,屏蔽低24位*/ and r3,r3,#0xffffff00 /*保留R3的高24位,屏蔽低8位*/
orr r3,r3,r2,lsr #24
/*将R2的高8位传送到R3的低8位*/ stop:
b stop.end
2.分析调试:
①download下载:
②保留r2的高8位,屏蔽低24位:
③保留r3的高24位,屏蔽低8位:
④将R2的高8位传送到R3的低8位:
实验三:(例7)编写一段程序计算10!
1.程序代码如下:
.global _start.text.equ num,10 _start: mov r0,#num mov r1,r0 s1: subs r1,r1,#1
/*把r1-1放入r1*/ mul r0,r1,r0
/*r0*r1放入r0*/ cmp r1,#1
/*比较R1与1的大小*/ beq stop
bne s1 stop: b stop.end
2.分析调试:
① download下载:
② 第一次执行S1,r1=10-1=9,10*9=90,换成16进制是5a。
③ 第二次执行S1,r1=9-1=8,10*9*8=720,换成16进制是2d0。
④ 依次执行S1,到r1=1,停止,10*9*8„„*1=3628800,换成16进制是375f00。
实验四:(例8)串拷贝(R1指向源数据串首地址,R0指向目的数据串的首地址)。1.程序代码如下:.global _start.text.EQU NUM,8 _start:
LDR R0,=srcstr
/*指向源数据串R0*/
LDR R1,=dststr
/*指向目标数据串R1*/
mov R3,#NUM
/*R3=8*/
mov LR,PC
/*返回*/
B strcopy
/*调用串拷贝子程序*/ stop: b stop
strcopy:
LDRB R2,[R0],#1
/*装载字节同时更新地址*/
STRB R2,[R1],#1
/*存储字节同时更新地址*/
SUBS R3,R3,#1
CMP R3,#0
/*判断是否结束*/
BNE strcopy
/*不是,则继续*/
MOV PC,LR
/*返回*/.data
srcstr:.long 1,2,3,4,5,6,7,0
/*定义源数据串*/
dststr:.long 5,3,2,1,4,6,8,0
/*定义目的字符串*/
2.分析调试:
①单步跟踪后的结果及存储器的结果显示:
②寄存器的结果显示:
六、实验心得
今天在实验室里,学习使用Embest IDE开发环境及ARM 软件模拟器,掌握简单ARM 汇编指令,进一步加强了对嵌入式的熟悉和了解。郑老师在兢兢业业的向我们传授实践知识的同时也向我们提问相关理论问题,让我们在学习的过程加深对实践和理论两者之间的联系,知道每一个步骤的发生的原因及产生相应的结果,即对实验的来龙去脉有了更清楚的认识,为今后的学习打下了一定的基础。相信在接下来的实验中,我们会在郑老师的引导下,做起实验来更能得心应手,轻车熟驾!
第五篇:嵌入式系统ARM实验报告
南京邮电大学通信与信息工程学院
实验报告
实验名称:实验一基于ADS开发环境的设计
实验二嵌入式Linux交叉开发环境的建立 实验三嵌入式Linux环境下的程序设计
课程名称嵌入式系统B
班级学号B13010711 姓名马俊民
开课时间 2015/2016学年第1学期
实验一基于ADS开发环境的程序设计
一、实验目的
1、学习ADS开发环境的使用;
2、学习和掌握ADS环境下的汇编语言及C语言程序设计;
3、学习和掌握汇编语言及C语言的混合编程方法。
二、实验内容
1、编写和调试汇编语言程序;
2、编写和调试C语言程序;
3、编写和调试汇编语言及C语言的混合程序;
4、编写程序测试多寄存器传送指令的用法。
三、实验原理
ADS全称为ARM Developer Suite,是ARM公司推出的新一代ARM集成开发工具。现在常用的ADS版本是ADS1.2,它取代了早期的ADS1.1和ADS1.0。
ADS用于无操作系统的ARM系统开发,是对裸机(可理解成一个高级单片机)的开发。ADS具有极佳的测试环境和良好的侦错功能,它可使硬件开发工作者更深入地从底层去理解ARM处理器的工作原理和操作方法,为日后自行设计打基础,为BootLoader的编写和调试打基础。
1.ADS软件的组成
ADS由命令行开发工具、ARM运行时库、GUI开发环境(CodeWarrior和AXD)、实用程序、支持软件等组成。
2.GUI开发环境
ADS GUI开发环境包含CodeWarrior和AXD两种,其中Code Warrior是集成开发工具,而AXD是调试工具。
使用汇编语言进行编程简单、方便,适用于初始化硬件代码、启动代码等。汇编语言具有一些相同的基本特征:
1.一条指令一行。
2.使用标号(label)给内存单元提供名称,从第一列开始书写。3.指令必须从第二列或能区分标号的地方开始书写。4.注释必须跟在指定的注释字符后面,一直书写到行尾。
在ARM汇编程序中,每个段必须以AREA作为段的开始,以碰到下一个AREA作为该段的结束,段名必须唯一。程序的开始和结束需以ENTRY和END来标识。嵌入式C语言设计是利用基本的C语言知识,面向嵌入式工程实际应用进行程序设计。为了使单独编译的C语言程序和汇编程序之间能够相互调用,必须为子程序之间的调用规定一定的规则。ATPCS就是ARM程序和Thumb程序中子程序调用的基本规则。
四、实验过程与关键代码分析
1.创建项目工程
在File菜单中选择New命令,打开一个新建工程对话框。在Project选项卡下,选择ARM Executable Image, 然后在Project name文本框里输入项目名称,点击确定。弹出工程窗口。
选择File菜单中的New命令,选择File标签页,在File name文本框中输入要创建的文件名。汇编程序以.s结尾,c程序以.c结尾。在Location文本框中指定文件的存放位置,选中Add to Project,在Targets中选中DebugRel,单击确定关闭窗口。
2.用汇编语言设计程序实现10的阶乘
AREA EXAMPLE, CODE, READONLY ENTRY start MOV R0, #10 MOV R1, #1 LOOP MUL R0, R0, R1 SUB R0, R0, 1 CMP R0, #1 BHI LOOP END 在这个程序中,我们首先对R0和R1赋值,将R0作为一个变量,而R1作为一个存贮阶乘值的寄存器。在每进行一次乘法之后,将R0减1。同时在做完减法后进行判断,如果此时R0大于1,则返回继续乘法,否则结束程序,输出结果。
3.用调用子程序的方法实现1!+2!+3!+„+10!,代码如下: asmp.s
AREA JC, CODE, READONLY
EXPORT JCP
ENTRY JCP
ADD R3, R0, #1
MOV R2, #1
MOV R1, #1 LOOP MUL R0, R1, R2
MOV R1, R0
ADD R2, R2, #1
CMP R2, R3
BNE LOOP
NOP
NOP
MOV PC, LR
END
PROGC.c #include
int main(){ int res=0;int m=10;int i;for(i=1;i<=m;i++)
res=res+JCP(i);printf(“The result =%dn”,res);return 0;} 在这个程序中,主程序由c语言完成作求和,子程序由汇编语言写成作阶乘。
5.实现字符串的逆序复制TEXT1=“HELLO”=>TEXT2=“OLLEH”
AREA invstring, CODE, READONLY start
ADR R1,TEXT1
ADR R2,TEXT2
MOV R3, #0 LOOP
LDRB R0,[R1], #1
ADD R3,R3,#1
CMP R0,#0
BNE LOOP
SUB R1,R1,#2
LOOP1
LDRB R0,[R1], #-1
STRB R0,[R2], #1
SUB R3,R3, #1
CMP R3,#1
BNE LOOP1
MOV R5,#&55
TEXT1
TEXT2 NOP =“HELLO”,0 ALIGN =“OELLH” END
五、实验小结
在这次实验中,学会了如何使用汇编程序进行编程。对汇编程序编程一些基本的要求有了一定的了解,学习了C语言的语法和在其中调用汇编程序的方法。学会了利用CodeWarrior IDE开发C和ARM汇编代码。学会了在AXD中进行代码调试的方法和过程,对AXD的调试有初步的了解。,实验二嵌入式Linux交叉开发环境的建立
一、实验目的
1、掌握嵌入式Linux交叉开发环境的建立方法
2、学习和掌握Linux常用命令
3、学习和掌握vi编辑器的使用
二、实验内容
1、搭建嵌入式Linux交叉开发环境
2、熟悉Linux的常用命令
3、熟悉vi编辑器的常用命令
三、实验原理
Linux系统是UNIX系统的分支,是UNIX的微机版。Linux具有异常丰富的驱动程序资源,支持各种主流的硬件设备与技术。Linux包含了现代的UNIX操作系统的所有功能特性,这些功能包括多任务、虚拟内存、虚拟文件系统、进程间通信、对称所处理器、多用户支持等。
Vi编辑器是所有UNIX和Linux下的标准编辑器。它包含3种工作模式。嵌入式系统是专用的计算机系统,它对系统的功能、可靠性、成本、体积、功耗等有严格的要求。大部分嵌入式系统没有大容量存储设备,一般不能安装大型开发软件,系统的开发需要采用交叉开发模式。
四、实验过程与关键代码分析
实验用的是UP-NetARM2410-S试验箱,里面配有三星的芯片S3c2410X。打开电脑上VMWare软件,在Windows系统下启动虚拟机里的Linux系统。接着需要
1.宿主机的环境搭建
下载并运行VMWare,根据向导创建一台新虚拟机并选择Linux作为客户操作系统,再根据向导安装RedHat Linux 9.0。
2.虚拟机中启动Linux操作系统
使用root登陆,用户名为root,密码为123456。之后对共享文件设置进行调整:打开settings界面,打开shared folders功能,同时将路径设置到有课前下载的软件的目录下。
3.开发工具软件的安装(1)安装gcc 打开Linux后,打开终端窗口,在共享的目录下找到install.sh并运行,命令如下: ls./ install.sh 安装程序将自动建立/arm2410s目录,并将所有的开发软件包安装到/arm2410s 目录下,同时自动配置编译环境,建立合适的符号链接。安装完成后在目录/opt/host/armv4l/bin/下应该能看到主编译器。(2)配置PATH路径
vi.bash.profile 将里面PATH变量改为PATH=$PATH:$HOME/bin:/opt/host/armv41/bin/;存盘后执行
source.bash_profile 以后armv4l-unknown-linux-gcc将被自动搜索到
4.宿主机上的开发环境配置(1)配置IP地址
ifconfig eth0 192.168.0.121 命令配置了宿主机的IP地址。然后打开网络配置窗口,重新探测MAC地址。重新激活。(2)关闭防火墙
单击“Red”菜单→“系统设置”→“安全级别”→打开“安全级别配置”窗口,选择“无防火墙选项。”(3)配置NFS。
单击“Red”菜单→“系统设置”→“服务器设置”→“服务”,在“服务配置”窗口中勾选nfs,单击“开始”(4)NFS设置
单击“Red”菜单→“系统设置”→“服务器设置”→“NFS服务器”,打开“NFS服务器配置”窗口,设置NFS共享。
然后在NFS服务器中增加主机IP地址的链接许可和目录。完成配置。
5.目标机的信息输出
Windows系统下,“开始”→“所有程序”→“附件”→“通讯”→“超级终端”,新建一个通信终端。区号、电话号码随意输入。设置每秒位数为“115200”,数据位为“8”,无奇偶校验,停止位为“1”,无数据流控制。单击“确定”。
6.程序的运行
打开超级终端,启动Linux,屏幕显示:
[/mnt/yaffs] 在超级终端上执行挂载命令:
[/mnt] mount –t nfs 192.168.0.121:/arm2410s /mnt/nfs 挂载成功后可执行程序。
五、实验小结
在这次实验中,学会建立Linux交叉开发环境,学会了ls和vi,cd等常用的Linux命令,并掌握了Vi编辑器的使用方法。同时知道了如何在搭建失败时寻找错误进行排错。
实验三嵌入式Linux环境下的程序设计
一、实验目的
1、掌握嵌入式Linux环境下的程序设计方法
2、学会编写Makefile文件
二、实验内容
1、熟悉嵌入式教学实验箱的使用
2、编写C程序和Makefile文件
3、编译程序产生可执行程序
4、完成主机的挂载和程序的执行
三、实验原理
在嵌入式Linux环境下的程序设计方法有一下几个步骤:
1.编写源程序
2.编写Makefile文件 3.编译程序
4.运行和调试程序
5.将生产的可执行文件加入文件系统。
前三个步骤在宿主机上完成,后面的步骤在目标机上完成。
四、实验过程与关键代码分析
1.建立工作目录
mkdir hello cd hello
2.编写源程序
用vi编辑器编辑Hello.c文件
vi Hello.c 在Vi中输入源程序如下:
#include
printf(“hello world n”);}
3.编写Makefile文件
vi Makefile 在vi中编辑Makefile文件如下:
CC= armv4l-unknown-linux-gcc EXEC = hello OBJS = hello.o CFLAGS += LDFLAGS+=-static all: $(EXEC)$(EXEC):(OBJS)$(CC)$(LDFLAGS)–o $@ $(OBJS)clean:
-rm –f $(EXEC)*.elf *.gdb *.o
4.编译程序
在hello目录下运行“make”来编译程序。
make clean
make 编译成功后,生成可执行文件Hello.o。
5.下载调试
在宿主机上启动nfs服务,并将/arms2410s设置为共享目录。接下来启动超级终端,建立通讯,挂载。
[/mnt] mount –t nfs 192.168.0.121:/arm2410s /mnt/nfs 挂载成功后,进入/mnt/nfs,再进入/mnt/nfs/hello,直接运行刚刚编译生成的可执行文件Hello.o,查看运行结果
cd hello./hello 可以看见“Hello world”
只需要挂载一次便可,只要实验箱没有重启,就可以一直保持连接。反复修改、编译、调试,直至程序调试通过。
6.可执行文件加入文件系统
程序调试通过后,可以把可执行文件拖放到usr/bin目录下,然后使用mkcramfs制作工具生成新的文件系统。当系统启动后,就可以在相应目录下执行可执行程序hello.五、实验小结 在这次实验中,学会了在嵌入式Linux环境下设计程序。同时知道了如何对目标机进行挂载。以及如何在发现挂载不成功寻找错误进行修改。另外在编译文件时需要注意的也都有所了解。
实验四多线程程序设计
一、实验目的1、2、二、实验内容1、2、3、4、三、实验原理
四、实验过程与关键代码分析
五、实验小结
3+