当前位置:文档之家› 基于ARM的程序移植

基于ARM的程序移植

基于ARM的程序移植
基于ARM的程序移植

兰州工业高等专科学校

毕业设计(论文)题目:基于ARM的程序移植

目录

1.1选题的背景及意义 (1)

1.2嵌入式数据库的移植应用 (1)

1.3多媒体播放器的移植 (2)

1.3.1引言 (2)

2.1简介 (3)

2.2现状和发展趋势 (3)

2.2.1发展现状 (3)

2.2.2发展趋势 (5)

第三章嵌入式开发环境 (7)

3.1硬件开发平台的介绍 (7)

3.1.1 核心板 (7)

3.1.2 外设板 (8)

3.1.3 设计所用硬件介绍 (8)

3.2硬件平台的设计方案 (8)

3.2.1 核心板设计 (9)

3.2.2 外设电路设计 (14)

3.3嵌入式软件开发环境 (15)

3.3.1 引导装载程序 (16)

3.3.2 宿主机开发环境配置 (17)

3.3.3 交叉开发环境的建立 (18)

3.3.4 内核的编译 (19)

3.3.5 烧制内核映像和文件系统 (21)

3.4嵌入式图形用户界面的实现 (21)

3.4.1 图形用户界面minigui的简介 (21)

3.4.2 MiniGUI在S3C2410开发板上的移植过程 (22)

第四章数据库移植的设计与实现 (25)

4.1嵌入式数据库 (25)

4.1.1 嵌入式数据库的设计 (25)

4.1.2. 嵌入式数据库SQLite (26)

4.2SQL ITE 内部结构及开发技术 (26)

4.2. 1 SQLite 内部结构 (26)

4.2. 2 SQLite 开发技术 (27)

4.3SQL ITE 在ARM-L INUX 平台上的实现 (28)

4.4SQL ITE 在ARM-L INUX 系统中应用实例 (29)

总结 (31)

第五章多媒体播放器的设计与实现3.1 MPLAYER的简介 (32)

5.1嵌入式播放器M PLAYER的设计 (32)

5.1.1 播放器的工作流程 (32)

5.1.2 播放器的逻辑结构 (33)

5.1.3 Mplayer播放器的目录文件组织结构 (34)

5.1.4 播放器对解码器和输出设备的管理方式 (36)

5.2M PLAYER的移植 (37)

5.2.1 安装交叉编译工具及解压源代码 (37)

5.2.2 编译Mplayer (38)

5.2.3 调试 (40)

总结 (43)

1.本文主要完成的工作及结论 (43)

2.完善与展望 (43)

第一章绪论

1.1选题的背景及意义

随着科技的发展和社会的进步,嵌入式计算机系统获得了越来越广泛的应用。在办公自动化领域,消费领域,通信领域,工业控制领域和军事领域等等领域中,都可以见到嵌入式系统的影子。尤其是在办公自动化、消费电子和通信领域中,可以说嵌入式系统应用得非常普遍。毫无疑问,伴随着嵌入式市场的蓬勃发展,会有越来越多的嵌入式设备希望得到嵌入式数据库管理系统的支持,进行数据的统一管理。

今天嵌入式系统尤其是ARM及ARM的程序移植带来的工业年产值已超过了1万亿美元,1997年来自美国嵌入式系统大会(Embedded System Conference)的报告指出,未来5年仅基于嵌入式计算机系统的全数字电视产品,就将在美国产生一个每年1500亿美元的新市场.美国汽车大王福特公司的高级经理也曾宣称,"福特出售的'计算能力'已超过了IBM",由此可以想见嵌入式计算机工业的规模和广度.1998年11月在美国加州举行的嵌入式系统大会上,基于RTOS的Embedded Internet成为一个技术新热点.在国内,"维纳斯计划"和"女锅计划"一度闹得沸沸扬扬,机顶盒、信息加电这两年更成了IT热点,而实际上这些都是嵌入式系统在特定环境下的一个特定应用.据调查,目前国际上已有两百多种嵌入式操作系统,而各种各样的开发工具、应用于嵌入式开发的仪器设备更是不可胜数.在国内,虽然嵌入式应用、开发很广,但该领域却几乎还是空白,只有三两家公司和极少数人员在从事这方面工作.由此可见,嵌入式系统技术发展的空间真是无比广大(ARM及ARM的程序移植)。

在一定程度上,对当代的办公自动化、工业控制、无限通信领域、网络方面提供了极大的方便。对嵌入式领域注入了血液,也对编程人员带来了便利。

1.2嵌入式数据库的移植应用

嵌入式数据库的名称来自其独特的运行模式。这种数据库嵌入到了应用程序进程中,消除了与客户机服务器配置相关的开销。嵌入式数据库实际上是轻量级的,在运行时,它们需要较少的内存。它们是使用精简代码编写的,对于嵌入式设备,其速度更快,效果更理想。嵌入式运行模式允许嵌入式数据库通过 SQL

来轻松管理应用程序数据,而不依靠原始的文本文件。嵌入式数据库还提供零配置运行模式,这样可以启用其中一个并运行一个快照。

在嵌入式系统中,对数据库的操作具有定时限制的特性,这里把应用于嵌入式系统的数据库系统称为嵌入式数据库系统或嵌入式实时数据库系统(ERTDBS)。

可靠性要求是毋庸置疑的,嵌入式系统必须能够在没有人工干预的情况下,长时间不间断地运行。同时要求数据库操作具备可预知性,而且系统的大小和性能也都必须是可预知的,这样才能保证系统的性能。嵌入式系统中会不可避免地与底层硬件打交道,因此在数据管理时,也要有底层控制的能力,如什么时候会发生磁盘操作,磁盘操作的次数,如何控制等。底层控制的能力是决定数据库管理操作的关键。

目前嵌入式软件系统开发的挑战之一,体现在对各种数据的管理能否建立一套可靠、高效、稳定的管理模式,嵌入式数据库可谓应运而生。

嵌入式数据库是嵌入式系统的重要组成部分,也成为对越来越多的个性化应用开发和管理而采用的一种必不可少的有效手段。

嵌入式数据库用途广泛,如用于消费电子产品、移动计算设备、企业实时管理应用、网络存储与管理以及各种专用设备,这一市场目前正处于高速增长之中。

举简单例子,手机原来只用来打电话、发短信,现在手机增加了很多新的功能,比如彩信、音乐、摄影、视频等等,应用的功能多了,系统就变得复杂。

1.3多媒体播放器的移植

1.3.1引言

随着人们生活水平的提高,消费结构发生了巨大变化,消费者用于娱乐方面的支出在总支出中所占的比例正在不断扩大。掌上多媒体系统可以满足人们对于试听以及便携的需求,另外还可以实现一些其他功能,如图片浏览、网络下载、以及影音录制等。目前市场上的掌上多媒体系统多是Windows CE、Symbian、Palm OS等商用操作系统,其开放的程序不够高,而且价格偏高,不适于第三方应用软件的移植。ARM体系作为专用嵌入式系统设计的通用处理器内核,具备高性能、低功耗、易扩展的特点。本系统基于ARM9、嵌入式Linux操作系统设计并实现了一个更为开放的嵌入式平台,来实现掌上多媒体系统的诸多功能

…第二章嵌入式系统简介

2.1 简介

嵌入式系统是以应用为中心,以计算机技术为基础,且软硬件可裁剪,适应应用系统对功能、可靠性、成本、体积、功耗有严格要求的专用计算机系统。它一般由以下几部分组成:

嵌入式微处理器

外围硬件设备

嵌入式操作系统

特定的应用程序特点:

应用的特定性和广泛性

技术、知识、资金的密集性

高效性

较长的生命周期

高可靠性

软硬一体,软件为主

无自举开发能力

嵌入式系统本身是一个相对模糊的定义。目前嵌入式系统已经渗透到我们生活中的每个角落,工业、服务业、消费电子……,而恰恰由于这种范围的扩大,使得“嵌入式系统”更加难于明确定义。

举个简单例子:一个手持的mp3是否可以叫做是嵌入式系统呢?答案肯定是“是”。另外一个PC104的微型工业控制计算机你会认为它是嵌入式系统吗?当然,也是,工业控制是嵌入式系统技术的一个典型应用领域。然而比较两者,你也许会发现二者几乎完全不同,除了其中都嵌入有微处理器。那是否可以说嵌入着微处理器的设备就是嵌入式系统?那鼠标中也有单片机,能叫嵌入式系统嘛?

那到底什么是嵌入式系统?莫非嵌入式系统只是一个难以定义的抽象概念?

2.2现状和发展趋势

2.2.1发展现状

随着信息化,智能化,网络化的发展,嵌入式系统技术也将获得广阔的发展空间。美国著名未来学家尼葛洛庞帝99年1月访华时预言,4~5年后嵌入式智能(电脑) 工具将是PC和因特网之后最伟大的发明。我国著名

嵌入式系统专家沈绪榜院士98年11月在武汉全国第11次微机学术交流会上发表的《计算机的发展与技术》一文中,对未来10年以嵌入式芯片为基础的计算机工业进行了科学的阐述和展望。1999年世界电子产品产值已超过12000亿美元,2000年达到13000亿美元,预计2005年,销售额将达18000亿美元。

进入20世纪90年代,嵌入式技术全面展开,目前已成为通信和消费类产品的共同发展方向。在通信领域,数字技术正在全面取代模拟技术。在广播电视领域,美国已开始由模拟电视向数字电视转变,欧洲的DVB(数字电视广播)技术已在全球大多数国家推广。数字音频广播(DAB)也已进入商品化试播阶段。而软件、集成电路和新型元器件在产业发展中的作用日益重要。所有上述产品中,都离不开嵌入式系统技术。象前途无可计量的维纳斯计划生产机顶盒,核心技术就是采用32位以上芯片级的嵌入式技术。在个人领域中,嵌入式产品将主要是个人商用,作为个人移动的数据处理和通讯软件。由于嵌入式设备具有自然的人机交互界面,GUI屏幕为中心的多媒体界面给人很大的亲和力。手写文字输入、语音拨号上网、收发电子邮件以及彩色图形、图像已取得初步成效。

目前一些先进的PDA在显示屏幕上已实现汉字写入、短消息语音发布,日用范围也将日益广阔。对于企业专用解决方案,如物流管理、条码扫描、移动信息采集等,这种小型手持嵌入式系统将发挥巨大的作用。自动控制领域,不仅可以用于ATM机,自动售货机,工业控制等专用设备,和移动通讯设备结合、GPS、娱乐相结合,嵌入式系统同样可以发挥巨大的作用。近期长虹推出的ADSL产品,结合网络,控制,信息,这种智能化,网络化将是家电发展的新趋势。

硬件方面,不仅有各大公司的微处理器芯片,还有用于学习和研发的各种配套开发包。目前低层系统和硬件平台经过若干年的研究,已经相对比较成熟,实现各种功能的芯片应有尽有。而且巨大的市场需求给我们提供了学习研发的资金和技术力量。

从软件方面讲,也有相当部分的成熟软件系统。国外商品化的嵌入式实时操作系统,已进入我国市场的有WindRiver、Microsoft、QNX和Nuclear 等产品。我国自主开发的嵌入式系统软件产品如科银(CoreTek)公司的嵌入式软件开发平台DeltaSystem,中科院推出的Hopen嵌入式操作系统(虽然还不够完善)。同时由于是研究热点,所以我们可以在网上找到各种各样的免费资源,从各大厂商的开发文档,到各种驱动,程序源代码,甚至很多厂商还提供微处理器的样片。这对于我们从事这方面的研发,无疑是个资源宝库。对于软件设计来说,不管是上手还是进一步开发,都相对来说比较容易。这就使得很多生手能够比较快的进入研究状态,利于发挥大家的积极创造性。

今天嵌入式系统带来的工业年产值已超过了1万亿美元,1997年来自

美国嵌入式系统大会(Embedded System Conference)的报告指出,未来5年仅基于嵌入式计算机系统的全数字电视产品,就将在美国产生一个每年1500亿美元的新市场。美国汽车大王福特公司的高级经理也曾宣称,“福特出售的‘计算能力’已超过了IBM”,由此可以想见嵌入式计算机工业的规模和广度。1998年11月在美国加州举行的嵌入式系统大会上,基于RTOS 的Embedded Internet成为一个技术新热点。在国内,“维纳斯计划”和“女锅计划”一度闹得沸沸扬扬,机顶盒、信息加电这两年更成了IT热点,而实际上这些都是嵌入式系统在特定环境下的一个特定应用。据调查,目前国际上已有两百多种嵌入式操作系统,而各种各样的开发工具、应用于嵌入式开发的仪器设备更是不可胜数。在国内,虽然嵌入式应用、开发很广,但该领域却几乎还是空白,只有三两家公司和极少数人员在从事这方面工作。由此可见,嵌入式系统技术发展的空间真是无比广大。

2.2.2发展趋势

信息时代,数字时代使得嵌入式产品获得了巨大的发展契机,为嵌入式市场展现了美好的前景,同时也对嵌入式生产厂商提出了新的挑战,从中我们可以看出未来嵌入式系统的几大发展趋势:

1.嵌入式开发是一项系统工程,因此要求嵌入式系统厂商不仅要提供嵌入式软硬件系统本身,同时还需要提供强大的硬件开发工具和软件包支持。

目前很多厂商已经充分考虑到这一点,在主推系统的同时,将开发环境也作为重点推广。比如三星在推广Arm7,Arm9芯片的同时还提供开发板和版及支持包(BSP),而WindowCE在主推系统时也提供Embedded VC++作为开发工具,还有Vxworks的Tonado开发环境,DeltaOS的Limda编译环境等等都是这一趋势的典型体现。当然,这也是市场竞争的结果。

2.网络化、信息化的要求随着因特网技术的成熟、带宽的提高日益提高,使得以往单一功能的设备如电话、手机、冰箱、微波炉等功能不再单一,结构更加复杂。

这就要求芯片设计厂商在芯片上集成更多的功能,为了满足应用功能的升级,设计师们一方面采用更强大的嵌入式处理器如32位、64位RISC 芯片或信号处理器DSP增强处理能力,同时增加功能接口,如USB,扩展总线类型,如CAN BUS,加强对多媒体、图形等的处理,逐步实施片上系统(SOC)的概念。软件方面采用实时多任务编程技术和交叉开发工具技术来控制功能复杂性,简化应用程序设计、保障软件质量和缩短开发周期。如HP 3.网络互联成为必然趋势。

未来的嵌入式设备为了适应网络发展的要求,必然要求硬件上提供各种网络通信接口。传统的单片机对于网络支持不足,而新一代的嵌入式处

理器已经开始内嵌网络接口,除了支持TCP/IP协议,还有的支持IEEE1394、USB、CAN、Bluetooth或IrDA通信接口中的一种或者几种,同时也需要提供相应的通信组网协议软件和物理层驱动软件。软件方面系统系统内核支持网络模块,甚至可以在设备上嵌入Web浏览器,真正实现随时随地用各种设备上网。

4.精简系统内核、算法,降低功耗和软硬件成本。

未来的嵌入式产品是软硬件紧密结合的设备,为了减低功耗和成本,需要设计者尽量精简系统内核,只保留和系统功能紧密相关的软硬件,利用最低的资源实现最适当的功能,这就要求设计者选用最佳的编程模型和不断改进算法,优化编译器性能。因此,既要软件人员有丰富的硬件知识,又需要发展先进嵌入式软件技术,如Java、Web和WAP等。

5.提供友好的多媒体人机界面

嵌入式设备能与用户亲密接触,最重要的因素就是它能提供非常友好的用户界面。图像界面,灵活的控制方式,使得人们感觉嵌入式设备就象是一个熟悉的老朋友。这方面的要求使得嵌入式软件设计者要在图形界面,多媒体技术上痛下苦功。手写文字输入、语音拨号上网、收发电子邮件以及彩色图形、图像都会使使用者获得自由的感受。目前一些先进的PDA在显示屏幕上已实现汉字写入、短消息语音发布,但一般的嵌入式设备距离这个要求还有很长的路要走。

第三章嵌入式开发环境

3.1硬件开发平台的介绍

本设计使用的硬件开发平台是华恒科技的HHARM9-EDU-R3教学实验系统,此平台由核心板和外设板组成,下面分别对这两部分进行介绍[10]。

3.1.1 核心板

核心板的功能模块结构图如图2-1所示,板上集成Samsung S3C2410处理器,16M的FLASH和64M SDRAM,它能为我们的研发、应用提供足够的空间。

图2-1 核心板功能模块结构图

S3C2410是一款16/32-bit RISC(精简指令集)高性价比,低功耗,体积小,高性能,高集成度的微处理器,采用203MHZ的ARM920T内核。集成了16KB指令缓存和16KB数据缓存,利用MMU实现对虚拟内存的管理,支持TFT LCD屏,支持NAND FLASH。正是由于S3C2410的这些特点,才使核心板的模块组成成为可能,也为Linux系统的移植提供必要的硬件资源。

3.1.2外设板

外设板为核心板的应用提供了其它的接口和设备,它提供以下外设接口:

(1) 10M/100M自适应以太网接口一个;

(2) 四线RS-232 串口(COM1)一个;

(3) 四线RS232/RS485串口各一个(COM2、COM3);

(4) IDE/CF卡接口;

(5) SD/MMC卡接口;

(6) USB HOST接口一个;

(7) USB Device接口一个;

(8) TFT LCD接口;

(9) 触摸屏接口;

(10) 音频输入输出接口,麦克风接口;

(11) A/D,D/A接口;

(12) PS/2接口;

核心板和底板是通过一个144针的插槽相接,它们配合后即构成一个完整的应用系统。

3.1.3设计所用硬件介绍

首先,核心板是必不可少的部分,它是一个最小系统。

其次,本设计是一个人机交互界面设计的应用,故需要一个LCD显示屏和触摸屏,通过以上的TFT LCD接口和触摸屏接口与外设板相接.

最后,设计的调试需要通过在PC Linux上运行minicom与开发板通信,所以需要使用到一个串口,并且,内核文件等镜像的下载需要网络接口,故开发板上的网络接口就必不可少了。

以上的设备即构成本设计中必需的硬件开发平台,缺一不可。

3.2硬件平台的设计方案

参考华恒HHARM9-EDU-R3教学实验平台的硬件电路设计,为了减小难度,增加通用性,我们可以选用跟实验平台相似的设计,把整个硬件电路设计成两个主要部分:核心板和外设板,两者通过插槽接口相接,功能的扩展只需通过对外设板的修改来达到。

3.2.1核心板设计

核心板的正面俯视图如图2-2所示:

根据功能模块分别介绍各个主要组成部分:

(1) 存储部分构成

核心板内存由图2-2中两块HY57V561620CT为16M*16位数据宽度的SDRAM 构成,两片拼成32位模式,公用nGCS6片选空间,共64M RAM。通过参考s3c2410技术手册的内存映像地址,如图2-3,可以知道内存的起始地址为0x30000000[12]。

核心板还集成有一片8M*16位数据宽度的INTEL 28F128J3C FLASH,通过nGCS0作为片选,从图2-3可知,起始地址为0x00000000。

根据地址的分配与片选设置,我们设计的核心板存储部分电路图如图2-4和图2-5所示,从图2-4中可以看到,FLASH使用的地址线为MA1到MA24,而使最高位A0接地,这

图2-2核心板正面俯视图

图2-3 s3c2410 内存映射

样使得FLASH的0地址为0x01000000,以后内核等的烧写地址也是以此为准。数据地址线为MD0到MD15,正好为16位的数据宽度。

从图2-5可见,两片内存使用的地址线为MA2到MA25,而数据线分别为MD0-MD15和MD16-MD31,由于共用地址线和片选nGCS6,而分别使用32位数据线,所以这两片16位宽度的内存共同组成了32位宽度的内存存储空间。

图2-4 FLASH电路接线

图2-5内存电路接线(2) 供电部分构成

核心板的供电部分由LV14A 六角施密特触发倒相器(HEX SCHMITT-TRIGGER INVERTERS)和AMS 1117 800mA低门限稳压器(800mA Low Dropout Voltage Regulator)构成,具体电路如图2-6和图2-7所示:

图2-6 LV14A电路

图2-7 AMS 1117电路

从图中还可以看到,核心板还有相应的电源指示灯D5 LED,当核心板接收到reset信号时,指示灯灭,而正常工作状态,指示灯亮。

(3) 振荡电路部分构成

核心板的振荡电路由两个晶振电路组成,如图2-8。

12MHz的晶振与s3c2410的XTIpll、XTOpll两个管脚相接,为内部振荡电路提供振荡源(for internal OSC circuit)。32.768KHz晶振与XTIrtc、XTOrtc 两个管脚相接,作为实时时钟(Real Time Clock,RTC)振荡源[11]。

图2-8 振荡电路

图2-9 DIMM 144引脚说明

(4) 与外设板接口部分

核心板与外设板是通过144针的插槽相接的,主要把核心板电路中的16根存储数据线DM0-DM16、24根存储地址线MA0-MA23、8根外部中断引线EINT0-EINT7、两路UART数据线与控制线、通用接口GPIO、IIC、SPI以及其它的读写信号、控制线等引出供外设板调用。详细请参见图2-9。

这里只使用到了144针的插槽接口,而没有使用168线的内存条接口插槽或者PCI插槽,是由于168线需要用到金手指,走线很密,而且工艺要求高,两层板布线很难实现,可能需要4层板才能完成,对于学校项目设计来说难度很大,而这样增加难度是没有必要的,因为144针的接线已经基本能够满足实际需要,通过以上的接口可以连接通常使用的器件,如本项目需要使用到的LCD和触摸屏等。

3.2.2外设电路设计

本设计中需要使用到的外设有LCD显示屏和触摸屏,并且作为一个应用平台,外设电路不再包括有调试用的COM接口和网络接口。因为软件的调试可以先在HHARM9-EDU-R3平台上测试好后,再把核心板放到外设电路板上进行实测。

(1)LCD显示屏模块接口

基于电路设计的模块化,我们把LCD显示屏与外设板分开,使用40针的数据线进行联接,因为LCD屏及其外围电路通常可以整块地进行购买,这样设计也即省下了不必要的电路设计的麻烦。LCD屏我们选用HHARM9-LCD-R4模块,屏幕的大小为240x320象素, LCD屏模块接口电路如图2-10所示。

图2-10 LCD屏模块接口电路

(2)触摸屏电路

触摸屏控制器选用ADS7846,由于触摸屏与LCD显示屏是贴在一起的,所以ADS7846的采集信号输入也是通过LCD显示屏模块接口引线接出来的,如图2-10中的RIGHT、LEFT 、UPPER、DOWN引脚。通过对这四路输入信息的转换,即可把触摸屏上响应的电压信息转换成相应的坐标信息。ADS7846电路如图2-11所示。

图2-11 触摸屏控制器ADS7846电路

3.3 嵌入式软件开发环境

本文设计的播放器是基于嵌入式Linux操作系统进行设计。嵌入式Linux是按照嵌入式操作系统的要求而设计的一种小型操作系统。相对于WinCE、pSOS、palm05等商用实时操作系统(RTOS)它具有源码开放、易移植、模块化、资源丰富等优势。支持多线程、多进程;支持多种平台,如x86、PowerPC、ARM、MIPS 等等。如图2-11所示,它是由一个内核和一些可以定制系统模块组成,如文件模块,网络模块,各种驱动模块等。针对本应用,对其进行了裁剪和配置,只包含了系统所需的模块支持ext2\jffs2等文件系统;内存驱动模块提供内存管理功能;网络接口模块支持以太网接口;GPIO驱动模块主要是提供给键盘和触摸屏使用;图形驱动模块是图形用户界面(GUI)和图像显示的底层支撑模块;音频设备输出驱动模块支持音频数据的数模转换。

图2-12 嵌入式Linux体系结构

3.3.1 引导装载程序

BootLoader就是在操作系统内核运行之前运行的一段小程序。通过这段小程序,我们可以初始化硬件设备、建立内存空间的映射图,从而将系统的软硬件环境带到一个合适的状态,以便为最终调用操作系统内核准备好正确的环境。最终,bootloader把操作系统内核映像加载到RAM中,并将系统控制权传递给它。

Bootloader程序与硬件平台有很强相关性,不同开发板需要不同的bootloader。与Linux一样,网上有很多开放源代码的bootloader,在为自己的开发板写bootloader程序时,可以先找到与硬件平台相类似的bootloader,然后只要做一些改动就可以在开发板上运行了。

Bootloader的功能相当于一个通信控制器,有了它之后,才可以通过串口或网口完成内核的加载和应用程序的烧写。当然,利用JTAG技术也可以完成上述任务,但是,JTAG烧写速度很慢[12]。

本系统采用的是ppcboot,ppcboot在嵌入式系统中相当于PC机的BI0S加上操作系统引导头部的内容,并且引导操作系统进行装载和运行,ppcboot启动后有一系列的命令,使得我们能够方便地对FLASH、RAM进行操作,同时ppcboot 己经对系统的频率、定时器进行了设置,初始化了一个调试串口,这样可以通过串口或以太网进行数据的下载。PPCBoot的主要特点如下表所示[13]:

ARM7(sc44b0)外部中断笔记

ARM7(sc44b0)外部中断笔记 对于sc44b0它也是一种单片机,一种比较高级的单片机而已,所以他也跟51单片机一样有外部中断,不同51单片机的是,他有8个外部中断源,对应的是8个管脚,(51只有两个,int0和int1,P3.3和P3.4),分别是Port G八个管脚。而对于外部中断4 \5\6\7很多都是共用寄存器,他们是通过或逻辑公用一个中断请求线。。下面就具体来说说使用外部中断的一些必要的配置。 一,对管脚的配置,因为Port G有三种功能用法,要通过对rPCONG(端口G 配置寄存器)的配置来选用Port G 的外部中断的功能。其配置表如下 所以应该将其配置为11(设置为中断功能状态); 二,中断模式的选择,中断模式有两种,FIQ(快速中断模式)和 IRQ(中断模式)两种,一般没有特殊要求都用IRQ模式即可。可以通过对中断模式寄存器rINTMOD配置获得。如表下 三,是否允许中断,即中断使能位。通过对中断控制寄存器INTCON的配置即可,如表下通过对中断控制寄存器的配置即可,

可以看出只要让intcon的【1】位置零即可使中断使能。 四,外部中断方式的选择,低电平或上升沿触发呢,还是别的,这就要对外部中断方式寄存器(EXTINT)的配置,其表如下

由上表可知,如果要用下降沿触发,就可将EXTINT 的值给0x22222222; 将所有的外部中断都设置为下降沿触发。 五,当中断捕抓到以后,要引起什么变化呢?或者说用什么来捕抓呢?在sc44b0中用了两个寄存器来捕抓,一个中断挂起寄存器(INTPND),和外部中断挂起寄存器(EXINTPND),一开始不明白挂起是什么意思,后来才懂,差不多就相当与51单片机的标志位一样,当中断发生后,就将挂起寄存器的对应的某一位置一或置零,外部中断挂起寄存器如表下 中断挂起寄存器:当中断产生后,是将INTPND的【21】位置一的; 所以,判断有无外部中断,就可以通过读取挂起寄存器对应的为,即可知道是否有无中断。 六,当中断发生后,挂起寄存器的对应位(即中断标志位)也发生了置位,那如果要检测下一个中断,就得将挂起寄存器的对应为复原,那怎么复原呢?在51单片机中是将中断标志位软件置零就可,在44b0中也是同样的道理,它是通过将对应的中断挂起寄存器的位置一就行了,对于EXTINTPND,他是直接将对应的位置一,对于EXTINTPND是通过将rI_ISPC的对应位置一(EXTINTPND和I_ISP的位数是一样的,两个是相互对应的) 附上程序; #define EXTINT4 0 #define EXTINT5 1 #define EXTINT6 2 #define EXTINT7 3 #define EXTINT4567 21

arm-linux下usb转串口移植手册

arm-linux下usb转串口移植手册: 讲述在嵌入式平台上,移植usb转串口的步骤: 1、配置Kernel 2、文件系统配置等。 Kernel:在配置内核时:加入usb转串口的支持、加入usb转串口器件的支持。 不同厂家的usb转串口工具需要的驱动可能不一样。 Device Drivers ---> USB support ---> --- USB port drivers USB Serial Converter support ---> <*> USB Serial Converter support [*] USB Serial Console device support [*] USB Generic Serial drivert < > USB AIRcable Bluetooth Dongle Driver (EXPERIMENTAL) <*> USB FTDI Single Port Serial Driver (EXPERIMENTAL) 本次实验才用的是FTDI的usb转串口工具 在配置Kernel时,还可以加入对其他厂家的驱动支持。 文件系统: 1、在/dev目录下建立设备文件/dev/ttyUSB0 mknod /dev/ttyUSB0 c 188 0 2、在运行/sbin/getty登陆命令之前要先设置好:usb转串口对应端口的波特率、停止位等。int usb_to_serial_init(viod) { iUSBTORS232 = open( "/dev/ttyUSB0", O_RDWR); if (iUSBTORS232 iRS232 < 0) { printf("Can't open device dev/ttyUSB00"); return -1; } set_speed(iUSBTORS232 iRS232,BAUDRA TE); set_Parity(iUSBTORS232 iRS232,8,1,'n'); close(iRS232); } 3、在/etc/inittab 加入如下命令。同时用consel和usb转串口工具登陆。 # Example of how to put a getty on a serial line (for a terminal) ::respawn:/sbin/getty -L ttyS0 115200 vt100 ::respawn:/sbin/getty -L ttyUSB0 115200 vt100

ARM中的中断要点

一、S5PV210中中断的特点 1、特点 ? Supports 93 vectored IRQ interrupts ? Fixed hardware interrupts priority levels ? Programmable interrupt priority levels ? Supports Hardware interrupt priority level masking ? Programmable interrupt priority level masking ? Generates IRQ and FIQ ? Generates Software interrupt 2、FIQ与IRQ的区别 1)FIQ和IRQ并不是中断源,而是中断的类型,我们可以将一个中断源设置成FIQ也可以设置成IRQ。2)FIQ是快速中断,IRQ是一般中断,FIQ的响应时间比IRQ短。 3)FIQ的优先级高于IRQ。 4)FIQ的分组寄存器(R8~R14)比IRQ(R13~R14)多。当在FIQ产生的时候,R8~R14不需要保存,响应的速度会快。 3、S5PV210的中断源

二、原理图分析

三、如何以中断的方式来检测按键:GPH2_2(EINT18) 、GPH2_3(EINT19) 按键的检测:轮询:将GPIO配置成输入……. 中断:将GPIO配置成外部中断……. 1、GPIO的配置,将一个GPIO配置成外部中断 2、外部中断的触发方式 (高电平、低电平、上升沿、下降沿)

3、外部中断的开关寄存器 0 = Enables Interrupt 打开中断 1 = Masked 关闭中断 4、外部中断判断寄存器 0 = Not occur 外部中断没有发生 1 = Occur interrupt 触发了中断

成功移植OpenSSH到ARM Linux开发板

成功移植OpenSSH到ARM Linux开发板 概述 如果是用到一些没有SSH的开发板,对于部分的应用开发来说,会受到影响,比如使用ARM DS-5进行RSE远程管理操作时,就会出现错误。下面就具体如何进行OPENSSH移植进行详细介绍。 步骤 1.下载源码包如下,下载 openssh、openssl 和 zlib 三个包。 openssh ?本地下载:openssh-6.6p1.tar.gz(1.22 MB, 下载次数: 2470) ?官网下载:https://www.doczj.com/doc/0912153642.html,/portable.html openssl ?本地下载:openssl-1.0.1h.tar.gz(4.27 MB, 下载次数: 2647) ?官方下载:https://www.doczj.com/doc/0912153642.html,/source zlib ?本地下载:zlib-1.2.8.tar.gz(557.71 KB, 下载次数: 3499) ?官方下载:https://www.doczj.com/doc/0912153642.html,/ 2.部署工作目录创建用户主目录下创建工作目录: 3.解压并编译

注意:openssh不需要make install 4.操作目标板 b)从PC机上将以下文件拷贝到目标板Linux系统中 PC机 /home/gary/work/openssh-6.6p1/ 目录下的 ?scp sftp ssh sshd ssh-add ssh-agent ssh-keygen ssh-keyscan 共8个文件拷

贝到目标板 /usr/local/bin ? moduli ssh_config sshd_config 共3个文件拷贝到目标板 /usr/local/etc ? sftp-server ssh-keysign 共2个文件拷贝到目标板 /usr/libexec c )生成Key 文件 将生成的 ssh_host_*_key 这4个文件copy 到目标板的 /usr/local/etc/ 目录下。其中 ssh_host_ed25519_key 是SSH 第二版协议用到的key ,放到开发板之后,要 d )修改目标板passwd 文件。 5.测试 如果开发板的 root 用户还没有密码,键入以下命令然输入两次密码来修改,否可以用 ps 命令查看sshd 是否在工作 如果运行的过程中有提示缺少动态连接库,可以在主机上搜索相应文件,拷贝到目标板/lib/目录下面,注意创建软连接! OK !不出意外的话可以成功,

ARMLinux移植基本概念

ARM的嵌入式Linux移植体验之基本概念 日前,笔者作为某嵌入式ARM(硬件)/Linux(软件)系统的项目负责人,带领项目组成员进行了下述工作: (1)基于ARM920T内核S3C2410A CPU的电路板设计; (2)ARM处理下底层软件平台搭建: a.Bootloader的移植; b.嵌入式Linux操作系统内核的移植; c.嵌入式Linux操作系统根文件系统的创建; d.电路板上外设Linux驱动程序的编写。 本文将真实地再现本项目开发过程中作者的心得,以便与广大读者共勉。第一章将简单地介绍本ARM开发板的硬件设计,第二章分析Bootloader的移植方法,第三章叙述嵌入式mizi Linux的移植及文件系统的构建方法,第四章讲解外设的驱动程序设计,第五章给出一个已构建好的软硬件平台上应用开发的实例。 如果您有嵌入式系统的开发基础,您将非常容易领会本文讲解地内容。即便是您从来没有嵌入式系统的开发经历,本文读起来也不会生涩。您可以通过如下email与作者联系:21cnbao@https://www.doczj.com/doc/0912153642.html,。 2.ARM体系结构 作为一种RISC体系结构的微处理器,ARM微处理器具有RISC体系结构的典型特征。还具有如下增强特点:

(l)在每条数据处理指令当中,都控制算术逻辑单元(ALU)和移位器,以使ALU和移位器获得最大的利用率; (2)自动递增和自动递减的寻址模式,以优化程序中的循环; (3)同时Load和Store多条指令,以增加数据吞吐量; (4)所有指令都条件执行,以增大执行吞吐量。 ARM体系结构的字长为32位,它们都支持Byte(8位)、Halfword(16位)和Word(32位)3种数据类型。 ARM处理器支持7种处理器模式,如下表: 大部分应用程序都在User模式下运行。当处理器处于User模式下时,执行的程序无法访问一些被保护的系统资源,也不能改变模式,否则就会导致一次异常。对系统资源的使用由操作系统来控制。 User模式之外的其它几种模式也称为特权模式,它们可以完全访问系统资源,可以自由地改变模式。其中的FIQ、IRQ、supervisor、Abort和undefined 5种模式也被称为异常模

Linux C语言 socket编程 聊天室 可移植到arm开发板

sockets聊天室 1.1介绍 包括一个客户端和一个服务器。可实现多人聊天和两人一对一单独聊天。 1.2开发环境和工具 Linux gcc 1.3程序设计 服务器: 1. 声明一个client结构体,包含用户自己的socket描述符mid,自己的用户名name以及 与自己聊天对象的Socket描述符fid(默认是-1,即公共聊天室)。并定义一个结构体数组。 2. 服务器新建一个socket设置默认的ip为自动获取,调用bind()函数绑定服务器socket 与ip。 3. 开启listen()监听客户端的连接请求。 4. 在while循环里,用accept()等待连接,连接成功后,把accept()返回的socket描述 符存入client结构体数组中。 5. 每成功新建一个连接,就创建一个对应的子线程,接收并转发消息。 6. 定义void rec_snd(int n)这个函数,用于接收和转发消息。可选择公共聊天室和私聊, 私聊需要正确输入对方的名字。连接建立以后就可以发送消息。当接收的消息为bye 时,断开当前连接,如果是一对一私聊,一方断开另一方自动转入公共聊天室。 客户端: 1.新建一个socket,并与ip,端口进行绑定。 2.调用connect连接服务器。连接成功后新建一个线程用于发送消息, 主线程在while中调用read()接收服务器消息。 3.Snd()函数用于向服务器发送消息。 4._select()函数用于选择功能。 1.4应用演示 服务器端成功开启等待连接:

当有客户端连接时,会显示ip端口,socket标识符信息。客户端成功连接上服务器时会收到提示输入用户名: 输入姓名后会提示选择功能:

ARM接口编程笔记

ARM接口编程笔记 一、ARM编程模式 1.ARM的含义 ●ARM是一家公司的名字 ●ARM代表的是一种RISC技术 ●ARM是一种CPU体系结构的名称,同x86、PPC、MIPS等并列 2.ARM体系结构中对字节、半字、字、双字的定义 ●字节:8 bit ●半字:16 bit ●字:32 bit ●双字:64 bit 3.ARM指令集 ●ARM指令集,32 bit,功能最全 ●Thumb指令集,16 bit,是ARM指令集的子集,完成部分功能 ●Thumb‐2指令集,16 bit和32 bit混合 ●Thumb‐EE指令集,16 bit和32 bit混合 ●Java指令集,直接执行绝大部分的Java字节流,但需要授权 4.ARM处理器的权限 ●非特权级:部分指令不能执行,是一种硬件的保护机制,通常用户应用 程序运行在该权限级别 ●特权级:能执行所有指令,通常操作系统运行在该权限级别 5.ARM的工作模式,处理对应模式下的特定事务,使得这些特定事务能够在硬 件资源的使用上部分地独立开来,这是通过各种模式下有对应的私有硬件资源来实现的。 ●User:应用程序一般运行在该模式下 ●Supervisor:操作系统一般运行在该模式下 ●IRQ:中断处理程序一般运行在该模式下 ●FIQ:快速中断处理程序一般运行在该模式下 ●Abort:发生存取异常后会进入该模式 ●Undef:执行未定义的指令会进入该模式 ●System:为解决中断不可重入而设计的一种特殊模式 ●Monitor:Cortex‐A特有的模式,执行监控代码 ●除User模式外,其他7种模式都是特权模式 6.ARM寄存器 寄存器最靠近CPU中的ALU,存取速度最快,没有地址,只有编号。部分寄存器有别名,在汇编程序中本名和别名可以混用。

linux arm 移植手册(分享)

Linux系统移植 目 录 第一部分 前言 (8) 1 硬件环境 (8) 1.1主机硬件环境 (8) 1.2 目标板硬件环境 (8) 1.3工具介绍 (8) 2软件环境 (8) 2.1主机软件环境 (8) 2.1.1 Windows 操作系统 (8) 2.1.2 Linux操作系统 (8) 2.1.3 目标板最后运行的环境 (9) 2.2 Linux下工作用户及环境 (9) 2.2.1 交叉工具的安装 (9) 2.2.2 u-boot移植工作目录 (9) 2.2.3 内核及应用程序移植工作 (9) 2.3 配置系统服务 (10) 2.3.1 tftp服务器的配置 (10) 2.4 工具使用 (12) 2.4.1 minicom的使用 (12) 3 作者介绍 (13) 3.1 策划, 组织, 指导, 发布者 (13) 3.2 ADS bootloader部分 (13) 3.3 交叉工具部分 (13) 3.4 uboot部分 (13) 3.5 内核部分 (13) 3.6 应用程序部分 (13) 3.7 网卡驱动部分 (13) 3.8 Nand Flash 驱动部分 (13) 第二部分 系统启动bootloader的编写(ADS) (14) 1 工具介绍 (14) 1.1 ADS 命令行命令介绍 (14) 1.1.1 armasm (14) 1.1.2 armcc, armcpp (14) 1.1.3 armlink (14) 2 基本原理 (15) 2.1 可执行文件组成及内存映射 (15) 2.1.1 可执行文件的组成 (15)

2.1.3 启动过程的汇编部分 (17) 2.1.4 启动过程的C部分 (17) 3 AXD的使用以及源代码说明 (18) 3.1 源代码说明 (18) 3.1.1 汇编源代码说明 (18) 3.1.2 C语言源代码说明 (23) 3.1.3 源代码下载 (23) 3.2 AXD的使用 (23) 3.2.1 配置仿真器 (23) 3.2.2 启动AXD 配置开发板 (23) 第三部分 GNU交叉工具链 (25) 1 设置环境变量,准备源码及相关补丁 (25) 1.1 设置环境变量 (25) 1. 2 准备源码包 (25) 1.2.1 binuils (25) 1.2.2 gcc (25) 1.2.3 glibc (25) 1.2.4 linux kernel (26) 1.3 准备补丁 (26) 1.3.1 ioperm.c.diff (26) 1.3.2 flow.c.diff (26) 1.3.3 t-linux.diff (26) 1.4 编译 GNU binutils (26) 1.5 准备内核头文件 (26) 1.5.1 使用当前平台的gcc编译内核头文件 (26) 1.5.2 复制内核头文件 (27) 1.6 译编glibc头文件 (27) 1.7 编译gcc第一阶段 (27) 1.8 编译完整的glibc (27) 1.9 编译完整的gcc (28) 2 GNU交叉工具链的下载 (28) 2.1 ARM官方网站 (28) 2.2 本文档提供的下载 (28) 3 GNU交叉工具链的介绍与使用 (29) 3.1 常用工具介绍 (29) 3.2.1 arm-linux-gcc的使用 (29) 3.2.2 arm-linux-ar 和 arm-linux-ranlib的使用 (30) 3.2.3 arm-linux-objdump的使用 (30) 3.2.4 arm-linux-readelf的使用 (31) 3.2.6 arm-linux-copydump的使用 (32) 4 ARM GNU常用汇编语言介绍 (32)

ARM的中断原理

ARM的中断原理(转) 1.中断概述 CPU与外设的数据传输方式通常有以下3种方式:查询方式、中断方式、DMA方式。 所谓查询方式是指,CPU不到查询外设的状态,如果外设准备就绪则开始进行数据传输;如果外设还没有准备好,CPU将进入循环等待状态。很显然这样浪费了大量的CPU时间,降低了CPU的利用率。 所谓中断方式是指,当外设准备好与CPU进行数据传输时,外设首先向CPU发出中断请求,CPU 接收到中断请求并在一定条件下,暂时停止原来的程序并执行中断服务处理程序,执行完毕以后再返回原来的程序继续执行。由此可见,采用中断方式避免了CPU把大量的时间花费在查询外设状态的操作上,从而大大提高了CPU的执行效率。 1.中断概述 CPU与外设的数据传输方式通常有以下3种方式:查询方式、中断方式、DMA方式。 所谓查询方式是指,CPU不到查询外设的状态,如果外设准备就绪则开始进行数据传输;如果外设还没有准备好,CPU将进入循环等待状态。很显然这样浪费了大量的CPU时间,降低了CPU的利用率。 所谓中断方式是指,当外设准备好与CPU进行数据传输时,外设首先向CPU发出中断请求,CPU 接收到中断请求并在一定条件下,暂时停止原来的程序并执行中断服务处理程序,执行完毕以后再返回原来的程序继续执行。由此可见,采用中断方式避免了CPU把大量的时间花费在查询外设状态的操作上,从而大大提高了CPU的执行效率。 ARM系统包括两类中断:一类是IRQ中断,另一类是FIQ中断。IRQ是普通中断,FIQ是快速中断,在进行大批量的复制、数据传输等工作时,常使用FIQ中断。FIQ的优先级高于IRQ。 在ARM系统中,支持7类异常,包括:复位、未定义指令、软中断、预取中止、数据中止、IRQ和FIQ,每种异常对应于不同的处理器模式。一旦发生异常,首先要进行模式切换,然后程序将转到该异常对应的固定存储地址执行。这个固定的地址称为异常向量。异常向量中保存的通常为异常处理程序的地址。ARM的异常向量如下: 异常模式正常地址高向量地址 复位管理 0x00000000 0xFFFF0000 未定义指令未定义 0x00000004 0xFFFF 0004 软中断管理 0x00000008 0xFFFF 0008 预取指中止中止0x0000000C 0xFFFF 000C 数据中止中止0x00000010 0xFFFF0010 IRQ IRQ 0x00000018 0xFFFF0018

ARM中异常中断处理概述

异常中断处理概述 1.ARM中异常中断处理概述 1)在正常程序执行过程中,每执行一条ARM指令,程序计数器寄存器PC的值加4个字 节;每执行一条Thumb指令,程序计数器寄存器PC的值加两个字节.整个过程是顺序执行. 2)通过跳转指令,程序可以跳转到特定的地址标号处执行,或者跳转到特定的子程序处 执行; B指令用于执行跳转操作; BL指令在执行跳转操作的同时,保存子程序的返回地址; BX指令在执行跳转操作的同时,根据目标地址的最低位可以将程序状态切换到Thumb状态; BLX指令执行3个操作:跳转到目标地址处执行,保存子程序的返回地址(R15保存在R14中),根据目标地址的最低位可以将程序状态切换到Thumb状态. 3)当异常中断发生时,系统执行完当前指令后,将跳转到相应的异常中断处理程序处执 行.在当异常中断处理程序执行完成后,程序返回到发生中断的指令的下一条指令处执行. 4)在进入异常中断处理程序时,要保存被中断的程序的执行现场,在从异常中断处理程 序退出时,要恢复被中断的程序的执行现场.本章讨论ARM体系中的异常中断机制. 2.ARM体系中异常中断种类. ARM体系中的异常中断如下表所示:

3. 中断向量表中指定了各异常中断及其处理程序的对应关系.它通常存放在存储地址的低端.在ARM体系中,异常中断向量表的大小为32字节.其中,每个异常中断占据4个字节大小,保留了4个字节空间. 每个异常中断对应的中断向量表的4 .通过这两种指令,程序将跳转到相应的异常中断处理程序处执行. 当几个异常中断同时发生时,就必须按照一定的次序来处理这些异常中断.在ARM 中通过给各异常中断富裕一定的优先级来实现这种处理次序.当然有些异常中断是不坑能同时发生的,如指令预取中止异常中断和软件中断(SWI)异常中断是有同一条指令的执行触发的,他们是不可能同时发生的.处理器执行某个特定的异常中断的过程中,称为处理器处于特定的中断模式.各异常中断的中断向量地址以及中断的处理优先级如表2所示. 4.异常中断使用的寄存器 各异常中断对应着一定的处理器模式.应用程序通常运行在用户模式下.ARM中的处理器模式如表3所示. 各种不同的处理器模式可能有对应于该处理器模式的物理寄存器组,如表4所示,其中,R13_svc表示特权模式下的R13寄存器,R13_abt表示中止模式下的R13寄存器,其余的各寄存器名称含义类推. 表4 各处理器模式的物理寄存器组

基于ARM的嵌入式linux内核的裁剪与移植.

基于ARM的嵌入式linux内核的裁剪与 移植 0引言微处理器的产生为价格低廉、结构小巧的CPU和外设的连接提供了稳定可靠的硬件架构,这样,限制嵌入式系统发展的瓶颈就突出表现在了软件方面。尽管从八十年代末开始,已经陆续出现了一些嵌入式操作系统(比较著名的有Vxwork、pSOS、Neculeus和WindowsCE)。但这些专用操作系统都是商业化产品,其高昂的价格使许多低端产品的小公司望而却步;而且,源代码封闭性也大大限制了开发者的积极性。而Linux的开放性,使得许多人都认为Linu 0 引言 微处理器的产生为价格低廉、结构小巧的CPU和外设的连接提供了稳定可靠的硬件架构,这样,限制嵌入式系统发展的瓶颈就突出表现在了软件方面。尽管从八十年代末开始,已经陆续出现了一些嵌入式操作系统(比较著名的有Vxwork、pSOS、Nec uleus和Windows CE)。但这些专用操作系统都是商业化产品,其高昂的价格使许多低端产品的小公司望而却步;而且,源代码封闭性也大大限制了开发者的积极性。而Linux的开放性,使得许多人都认为Linux 非常适合多数Intemet设备。Linux操作系统可以支持不同的设备和不同的配置。Linux对厂商不偏不倚,而且成本极低,因而很快成为用于各种设备的操作系统。嵌入式linux是大势所趋,其巨大的市场潜力与酝酿的无限商机必然会吸引众多的厂商进入这一领域。 1 嵌入式linux操作系统 Linux为嵌入操作系统提供了一个极有吸引力的选择,它是个和Unix 相似、以核心为基础、全内存保护、多任务、多进程的操作系统。可以支持广泛的计算机硬件,包括X86、Alpha、Sparc、MIPS、PPC、ARM、NEC、MOTOROLA 等现有的大部分芯片。Linux的程序源码全部公开,任何人都可以根据自己的需要裁剪内核,以适应自己的系统。文章以将linux移植到ARM920T内核的 s3c2410处理器芯片为例,介绍了嵌入式linux内核的裁剪以及移植过程,文中介绍的基本原理与方法技巧也可用于其它芯片。 2 内核移植过程 2.1 建立交叉编译环境 交叉编译的任务主要是在一个平台上生成可以在另一个平台上执行的程序代码。不同的CPU需要有不同的编译器,交叉编译如同翻译一样,它可以把相同的程序代码翻译成不同的CPU对应语言。 交叉编译器完整的安装涉及到多个软件安装,最重要的有binutils、gcc、glibc三个。其中,binutils主要用于生成一些辅助工具;gcc则用来生成交叉编译器,主要生成arm—linux—gcc交叉编译工具;glibc主要是提供用户程序所使用的一些基本的函数库。 自行搭建交叉编译环境通常比较复杂,而且很容易出错。本文使用的是

arm汇编指令笔记.

ARM assembler guide DUI0068 是一个RISC指令结构,因为有一个加载存储结构。只有load和store可以读取内存。 ARM的处理器模式 可以全部大写或小写,不能混 标志符表示一个地址

常量的定义格式: 123 0x1C 2_1001 ARM编译、链接后最终生成一个ELF格式(Executable and Linking Format)的可执行文件(后缀.axf) ELF中是分section部分的,一个ELF section 在汇编中定义一个section使用AREA指令。

ENTRY指令指示汇编代码第一条要执行的指令。 start是一个标识符,代表一个地址。 结束的方式是产生一个软件中断,把控制权交给调试器。 END指令指示汇编的结束 使用cmd进行调试: Microsoft Windows XP [版本5.1.2600] (C) 版权所有1985-2001 Microsoft Corp. C:\Documents and Settings\Administrator>cd D:\Program Files\ARM\ADSv1_2\Bin C:\Documents and Settings\Administrator>D; 'D' 不是内部或外部命令,也不是可运行的程序 或批处理文件。 C:\Documents and Settings\Administrator>D: D:\Program Files\ARM\ADSv1_2\Bin>armsd E:\dsparm\pxa270\project\armex\__image.ax f ARM Source-level Debugger, ADS1.2 [Build 805] Software supplied by: Team-EFA

如何向一块ARM裸板移植linux系统

11. How to port Linux to a raw ARM board This document provides a summary of the steps when porting Linux to a new ARM platform or a new processor. In this page we assume that the reader has a knowledge of C and assembly programming and is familiar with ARM and operating systems concepts such as interrupt handling, system calls and memory management. Some useful information can be found in the kernel documentation section on how to configure the kernel itself. It is probably best to familiarize with Linux on x86 before if you are not familiar with embedded platforms. In addition to Linux kernel source documentation, some notes maintained by community members are available on booting and setting up Linux for ARM platforms, you can consult the following kernel document and Vincent Sander?s documentation for additional information. Porting steps ?Install a cross-development environment. ?Setup the board and ensure that the serial port is working so we can print data through the serial port. ?Download and install the Linux kernel, most of the porting work will be done at this level. ?Add board specific code into the kernel tree. ?Build a kernel image to run on the board ?Test that early kernel printk is working ?Get the real printk working with the serial console. ?For a new board, a new board-specific directory should be added as well as support for interrupt handling, kernel timer services and mapping for memory areas. ?Ethernet drivers are usually the next drivers to focus on as they enable setup of NFS root file system to get access to user utilities and applications. ?Filesystem can be provided in different forms which are listed on LinuxFilesystem

ARM的三种中断调试方法简介.

ARM的三种中断调试方法简介 1嵌入式软件开发流程参照嵌入式软件的开发流程。第一步:工程建立和配置。第二步:编辑源文件。第三步:工程编译和链接。第四步:软件的调试。第五步:执行文件的固化。在整个流程中,用户首先需要建立工程并对工程做初步的配置,包括配置处理器和配置调试设备。编辑工程文件,包括自己编写的汇编和C语言源程序,还有工程编译时需要编写的链接脚本文件,调试过程中需要编写存储区映像文件和命令脚本文件,以及上电复位时的程序运行 1 嵌入式软件开发流程 参照嵌入式软件的开发流程。第一步:工程建立和配置。第二步:编辑源文件。第三步:工程编译和链接。第四步:软件的调试。第五步:执行文件的固化。 在整个流程中,用户首先需要建立工程并对工程做初步的配置,包括配置处理器和配置调试设备。编辑工程文件,包括自己编写的汇编和C语言源程序,还有工程编译时需要编写的链接脚本文件,调试过程中需要编写存储区映像文件和命令脚本文件,以及上电复位时的程序运行入口的启动程序文件。 对后四种文件的理解很重要,其作用解释如下。 (1) 链接脚本文件:在程序编译时起作用。该文件描述代码链接定位的有关信息,包括代码段,数据段,地址段等,链接器必须使用该文件对整个系统的代码做正确的定位。在SDRAM中调试程序、在FLASH中调试或固化后运行的链接脚本文件应加以区分。(在IDE开发环境中使用扩展名*.ld) (2)命令脚本文件:在SDRAM中调试程序时起作用。在集成环境与目标连接时、软件调试过程中以及目标板复位后,有时需要集成环境自动完成一些特定的操作,比如复位目标板、清除看门狗、屏蔽中断寄存器、存储区映射等。这些操作可以通过执行一组命令序列来完成,保存一组命令序列的文本文件称为命令脚本文件(在 IDE开发环境中使用扩展名*.cs)。 (3)存储区映像文件:在SDRAM中调试程序时起作用。在软件调试过程中访问非法存储区在部分处理器和目标板上会产生异常,如果异常没有处理,则会导致软件调试过程无法继续,为了防止以上问题并调整仿真器访问速度以达到最合适的水平,提供这样一种用于描述各个存储区性质的文件叫存储区映像文件(在IDE开发环境中使用扩展名*.map)。 在程序的调试过程中可以选择使用存储区映像文件*.map和命令脚本文件*. cs 配合程序的调试。

基于ARM的嵌入式linux 内核的裁剪与移植.

基于ARM的嵌入式linux 内核的裁剪 与移植 摘要:实现了一种全集成可变带宽中频宽带低通滤波器,讨论分析了跨导放大器-电容(OTA—C)连续时间型滤波器的结构、设计和具体实现,使用外部可编程电路对所设计滤波器带宽进行控制,并利用ADS软件进行电路设计和仿真验证。仿真结果表明,该滤波器带宽的可调范围为1~26 MHz,阻带抑制率大于35 dB,带内波纹小于0.5 dB,采用1.8 V电源,TSMC 0.18μm CMOS工艺库仿真,功耗小于21 mW,频响曲线接近理想状态。关键词:Butte 0 引言 微处理器的产生为价格低廉、结构小巧的CPU和外设的连接提供了稳定可靠的硬件架构,这样,限制嵌入式系统发展的瓶颈就突出表现在了软件方面。尽管从八十年代末开始,已经陆续出现了一些嵌入式操作系统(比较著名的有Vxwork、pSOS、Neculeus和Windows CE)。但这些专用操作系统都是商业化产品,其高昂的价格使许多低端产品的小公司望而却步;而且,源代码封闭性也大大限制了开发者的积极性。而Linux的开放性,使得许多人都认为Linux 非常适合多数Intemet设备。Linux操作系统可以支持不同的设备和不同的配置。Linux对厂商不偏不倚,而且成本极低,因而很快成为用于各种设备的操作系统。嵌入式linux是大势所趋,其巨大的市场潜力与酝酿的无限商机必然会吸引众多的厂商进入这一领域。 1 嵌入式linux操作系统 Linux为嵌入操作系统提供了一个极有吸引力的选择,它是个和Unix 相似、以核心为基础、全内存保护、多任务、多进程的操作系统。可以支持广泛的计算机硬件,包括X86、Alpha、Sparc、MIPS、PPC、ARM、NEC、MOTOROLA 等现有的大部分芯片。Linux的程序源码全部公开,任何人都可以根据自己的需要裁剪内核,以适应自己的系统。文章以将linux移植到ARM920T内核的 s3c2410处理器芯片为例,介绍了嵌入式linux内核的裁剪以及移植过程,文中介绍的基本原理与方法技巧也可用于其它芯片。 2 内核移植过程 2.1 建立交叉编译环境 交叉编译的任务主要是在一个平台上生成可以在另一个平台上执行的程序代码。不同的CPU需要有不同的编译器,交叉编译如同翻译一样,它可以把相同的程序代码翻译成不同的CPU对应语言。 交叉编译器完整的安装涉及到多个软件安装,最重要的有binutils、gcc、glibc三个。其中,binutils主要用于生成一些辅助工具;gcc则用来生成交叉编译器,主要生成arm—linux—gcc交叉编译工具;glibc主要是提供用户程序所使用的一些基本的函数库。 自行搭建交叉编译环境通常比较复杂,而且很容易出错。本文使用的是

ARM中断系统.

该文章介绍了ARM处理器的中断系统,以周立功公司的LPC2000为例。希望对大家有用! 1.1 中断源 LPC2000系列的向量中断控制器(VIC)支持32个中断请求输入,也即是支持32个中断源,见表5.1。这32个中断按顺序称为VIC通道0,VIC通道1,…,VIC通道31。 每一个VIC通道都支持软件中断与硬件中断,即每个中断均可由软件或硬件中断产生,软件中断与对应通道上的硬件中断是逻辑“或”的关系。软件中断可通过置位VICSoftInt寄存器相应位来产生,也可通过置位VICSoftIntClear 寄存器相应位来清除。 表5.1 外设功能的中断源 1.2 三种中断类型 LPC2000具有3类中断:FIQ、向量IRQ和非向量IRQ。LPC2000系列可通过对VICIntSelect和VICVectCntlx(x=0,1,…,15)这两类寄存器的设置,将以上的32个中断源设置为这三类中断的任何一种。其中,快速中断请求FIQ具有最高优先级。建议只分配一个中断请求给FIQ以减少中塅处理程序的延迟。当然,VIC支持多个FIQ中断。向量IRQ具有中等优先级。该级别最多可分配32个请求中的16个。32个请求中的任何一个都可以分配到16个向量IRQslot中的任意一个。其中,slot0具有最高优先级,而slot15则为最低优先级。非向量IRQ 具有最低优先级。 1.3 如何初始化某个中断源为三类中断中的一类 通过VICIntSelect中断选择寄存器将32个中断请求分配为FIQ或IRQ (包括向量IRQ与非向量IRQ);通过VICVectCntlx(x=0,1,…,15)来选择32个中断请求中的某个为向量IRQ并设定此中断请求为IRQ slotx(x对应于VICVectCntlx中的x)。若某个中断源被设定为IRQ,但却未通过VICVectCntlx 使能,则该中断源将被默认为非向量IRQ。 1.4 中断处理过程中断处理过程如下所示: 初始化:设置中断源为3种中断源之一,设置中断地址,使能中断,然后正常运行用户程序;当有IRQ中断产生时,VIC将会根据中断源设置VICVectAddr

ARM中断及相关寄存器

ARM中断及相关寄存器 要正确应用ARM处理器必须首先对它的系统寄存器进行正确配置,下面简要介绍一下ARM寄存器,包括一些中断寄存器设置如中断状态(0x8000.0240,0x8000.1240,0x8000.2240)和中断屏蔽寄存器(0x8000.0280,0x8000.1280,0x8000.2280)。 ARM中断寄存器主要包括: ·中断模式寄存器可以设置2个中断源为IRQ或FIQ方式。 ·中断挂起寄存器,当有中断请求产生时,相应的位会被硬件置1,处于挂起状态。当进入中断处理程序时,必须通过软件清除这个标志位,以标志响应中断请求。 ·中断屏蔽寄存器,当需要屏蔽某些中断源时,可以设置相对应的位。 ·中断优先级寄存器可以设置21个中断源优先级的高低。 ·中断偏移寄存器,中断响应时通过读这个寄存器可以查到当前的中断源。 如表1所示是ARM的一些系统寄存器列表。 表1 ARM系统寄存器列表 系统寄存器中的每一位或几位都对应系统功能的控制、状态等信息。例如: ·SYSCON1中的UARTIEN、LCD EN位分别控制异步串口1与LCD显示的使能。 ·SYSCON2中的SDRAM Z用来设置SDRAM存储器的位宽。 ·SYSCON3中的CLKCTL用来在18MHz、37MHz、49MHz和74MHz中选择一种作

为系统工作频率。 与系统运行紧密相关的其他寄存器如表2所示,对它们进行正确设置,就可以启用 SDRAM、LCD或者串行通信口。 表2 ARM的其他重要寄存器列表 数据手册上是这么说的: INTPND 寄存器中的26 个位对应着每一个中断源。当某个中断产生时,INTPND 中相 应的pending 位就会置1,说明该中断还未被处理。中断服务程序中必须清除该pending 位,从而使系统能够及时响应下一次中断。INTPND 是一个只读寄存器,清除pending 位的方式 是向I_ISPC/F_ISPC 的相应位写入“1”。在多个中断同时发生时,INTPND 将所有发生的中断pending 位都置1。虽然中断请求可以通过INTMSK 寄存器屏蔽,但是如果被屏蔽的中断 发生了,INTPND 中的pending 位仍然会被置1。

ARM11外部中断C语言编程实现总结

ARM11(3)——外部中断 WF 2013.1.24 最近正在学习ARM11(S3C6410开发板)的外部中断部分,稍有心得,特此总结一些学习笔记,分享出来,献给那些像我一样正在ARM11上裸奔的嵌入式学徒们,同时也希望看到此文的业界前辈多多指教。 外部中断基础知识总结: ARM11(S3C6410开发板)共有187根多功能I/O口,其中127根可用于外部中断,而这127个外部中断引脚又被分为十组:EINT0~EINT9,这十组对应VICX(中断矢量寄存器)中0、1、32、33、53五个中断号。十组外部中断和五个中断号之间的对应关系却是略显复杂:EINT0共28根引脚被分为了四部分分别对应了0、1、32、33四个中断号,EINT1~EINT9这9组共99根引脚却只对应了53一个中断号。 外部中断逻辑图: 外部中断的基本编程思想总结: 1、初始化I/O引脚设置——GPX; (1)、必须设置所需引脚为中断模式——GPXCON; (2)、可选性设置上下拉电阻和数据位——GPXPUD、GPXDAT; 2、初始化外部中断设置——EINTX; (1)、选择外部中断的触发方式——EINTXCON; (2)、清除外部中断屏蔽——EINTXMASK; (3)、外部中断悬挂给1置0——EINTXPEND; 3、初始化总中断设置——VICX; (1)、选择中断模式——VICXINTSELECT; (2)、设置中断函数入口——VICXVECTADDR; (3)、中断使能——VICXINTENABLE; 4中断函数出口处设置; (1)、清除当前中断函数记录——VICXADDR; (2)、给1置0外部中断悬挂位——EINTXPEND。 程序实例: 程序说明:实现按键中断控制LED灯的显示,每按一个键LED会显示一种方案。 .c文件代码: //引入GPN引脚(外接按键)三个寄存器的地址标号 #define rGPNCON (*(volatile unsigned*)(0x7f008830)) #define rGPNDAT (*(volatile unsigned*)(0x7f008834))

相关主题
文本预览
相关文档 最新文档