ARM Cortex-A8/A9开发板 | ARM11开发板ARM11开发套件 | ARM9开发板ARM9开发套件 | 飞思卡尔I.MX28I.MX6开发板 |
tiny210/mini210开发板 | mini6410开发板/套餐 | Tiny6410开发板无线套件 | mini2440开发板/套餐 | micro2440开发板带核心板 | 友善开发板配件 模块 | QQ2440 V3 SBC-2410X |
FL2440 OK2440-IV V4 | OK2440-III OK2440V3 | TE2440-II TE2440V2 | OK6410 S3C6410 ARM11 | FL6410/OK6410B ARM11 | TE6410 S3C6410 ARM11 | TE-9263 AT91SAM9263 | 开发板配件 模块和其他 |
Xilinx开发板/fpga开发套件 | altera开发板/fpga开发套件 | 基于FMC FPGA/DSP子卡 |
BeagleBoard原厂开发板 | PandaBoard原厂开发板 |
TI DM3730 DevKit8500D | TI系列 omap3530开发板 | ATMEL系列 开发板 | Samsung系列 开发板 | 开发板配件-仿真器 模块 | NXP LPC3250 mini3250 |
Tiny210 三星S5PV210 | Mini210/Mini210s开发板 | Tiny4412开发板Cortex-A9 | Tiny6410开发板 ARM11 | mini2440开发板 ARM9 | micro2440开发板 ARM9 | mini6410开发板 ARM11 | 友善ARM开发板配件 模块 |
keil ARM仿真器/开发工具 | STM32开发板 Cortex-M3 | NXP LPC开发板Cortex-M3 | ATMEL系列 ARM开发板 | Luminary EKK8962开发板 | Freescale i.MX31开发板 | 三星s3c2440 s3c6410开发板 |
FL2440 OK2440-IV V4 | OK6410 S3C6410 ARM11 | FL6410/OK6410B ARM11 | OK210/-A Cortex-A8 | TE2440-II TE2440V2 | TE6410 S3C6410 ARM11 | TE-9263 AT91SAM9263 | ARM开发板配件 模块等 |
Real6410开发板/套餐 | Real210开发板/Real2410 | WIFI GPS GPRS模块摄像头 |
Xilinx开发板/开发套件KIT | Altera开发板/开发套件KIT | 配套模块 |
NXP LPC开发板 ARM7 | Cortex-M3 STM32开发板 | 最小系统模块类(初学者勿选) | 开发工具 仿真器 调试器 | TFT液晶屏LCD 液晶模块 |
DM642开发板/DM642实验箱 | DM6446开发板/DSP实验箱 | DSP仿真器 液晶屏 摄像头等 |
DM3730/AM3715/AM3359 | OMAP3530AM1808AM3517 | 飞思卡尔Cortex-A9开发板 | ATMEL系列ARM开发板 | NXP LPC3250 LPC1788 | Samsung系列ARM开发板 | STM32系列F207/F407 | ARM开发板配件-仿真器 模块 |
Realv210 S5PV210开发板 | Real6410开发板 ARM11 | WIFI GPS GPRS模块摄像头 |
NXP LPC开发板 ARM7 | Cortex-M3 STM32开发板 | ARM小系统模块(初学勿选) | 开发工具 ARM仿真器 调试器 | TFT液晶屏LCD 液晶模块 |
keil ARM仿真器/开发工具 | STM32开发板 Cortex-M3 | NXP LPC开发板Cortex-M3 | ATMEL系列 ARM开发板 | Luminary EKK8962开发板 | Freescale i.MX31开发板 | 三星s3c2440 s3c6410开发板 |
Exynos4412开发板A9四核 | UT-S5PV210 S5PC100 | UT-S3C6410开发板 ARM11 | idea 6410开发板 ARM11 | UT-S3C2450开发板 ARM9 | UT-S3C2416开发板 ARM9 | UT-S3C6410核心板 工控 |
Xilinx开发板 FPGA开发套件 | altera开发板 FPGA开发套件 | FMC模块 配件 下载线 |
DM642开发板/DM642实验箱 | DM6446开发板/DSP实验箱 | DSP仿真器 液晶屏 摄像头等 |
s3c2410 ARM9 FS2410 | s3c2440开发板 ARM9 | s3c44B0开发板 ARM7 | s3c6410 2450 2443/13 | PXA270 PXA320 PXA255 | Atmel 9200 9261 9G20 | Philips NXP开发板YL-LPC | FS-EP9315开发板ARM9 | LCD液晶屏TFT真彩/触摸屏 | ARM仿真器/仿真调试工具 | ARM开发板配套ARM核心板 |
三星s3c2410 s3c44B0 | 三星s3c6410 s3c2443 | Intel PXA270 PXA320 | UP-CUP OMAP5910平台 | FPGA Xilinx altera平台 | 配件-仿真器 模块 液晶屏LCD | 龙芯开发板UP-DRAGON-I | 物联网教学科研设备 | EDA/FPGA/SOPC教学科研 |
utu2440-F-V4.5 含核心板 | utu2440-S-V4.1 单板结构 | YC2440-F-V5.1开发板 豪华型 | YC-ePC-A系列人机界面 | Mars-EDA套件CPLD FPGA | 触摸屏LCD 摄像头 WI-FI模块 |
ARM开发板/开发平台 | FPGA开发板/开发平台 | 编程器/烧写器下载器烧录 | ZLG 仿真器ARM FPGA DSP | ZLG周立功逻辑分析仪 |
DSP初学者开发套件(DSK) | DSP仿真器/仿真系统 | DSP开发板/DSP试验箱 | DaVinci系列多媒体平台 | Xilinx FPGA大学计划产品 | SEED教学实验系统 | FPGA/DSP FPGA开发板 | TI原厂开发板套件/CCS软件 |
ARM开发板 | XSCALE开发板 | ARM仿真器 | SOPC开发板 | DSP开发板 | 达芬奇系列DSP开发平台 | DSP仿真器 | DSP实验箱 | DSP专业研究平台 | ARM实验箱系列 |
广嵌实验室项目产品 | GEC2440/GEC6410开发板 |
泰克Tektronix示波器 | 普源RIGOL示波器 | USB虚拟示波器 |
UT-S5PC100 UT-S5PV210 | UT-S3C6410开发板 ARM11 | idea 6410开发板 ARM11 | UT-S3C2450开发板 ARM9 | UT-S3C2416开发板 ARM9 | UT-S3C6410核心板 工控 | 开发板模块wifi gps等 |
EMA OMAP3530开发板 | EMA OMAP 3530核心板 |
三星s3c2410 s3c44B0 | 三星s3c6410 s3c2443 | Intel PXA270 PXA320 | UP-CUP OMAP5910平台 | FPGA Xilinx Altera平台 | 配件-仿真器 模块 液晶屏LCD | 龙芯系列 UP-DRAGON-I |
utu2440-F-V4.5 含核心板 | utu2440-S-V4.1 单板结构 | YC2440-F-V5.1开发板 豪华型 | 触摸屏LCD 摄像头 WI-FI模块 | Mars-EDA套件CPLD FPGA | ePC系列工控一体机ARM9 A8 |
ARM开发板/开发平台 | FPGA开发板/开发平台 | 编程器/烧写器下载器烧录 | ZLG 仿真器ARM FPGA DSP | ZLG周立功逻辑分析仪 |
DSP初学者开发套件(DSK) | DSP仿真器 | DSP开发板 | DSP实验箱 | Xilinx FPGA大学计划产品 |
ARM开发板 | XSCALE开发板 | ARM仿真器 | SOPC开发板 | DSP开发板 | 达芬奇系列DSP开发平台 | DSP仿真器 | DSP实验箱 | DSP专业研究平台 | ARM实验箱系列 |
ARM开发板S3C6410等 | Cortex-A8/ARM11仿真器 | ADSP Blackfin开发板 | FPGA Spartan-3E开发板 |
GEC2410开发套件ARM9 | GEC2440开发套件ARM9 |
泰克 示波器 |
本文先容怎样利用GNU的东西开辟基于ARM的嵌入式体系,以及利用编译器、连接器和调试东西的详细要领,为宽大嵌入式体系开辟职员提供一种低本钱的开辟本领。
当前,ARM公司的32位RISC处理惩罚器,以其内核耗电少、本钱低、成果强、特有16/32位双指令集,已成为移动通讯、手持谋略、多媒体数字斲丧等嵌入式办理方案的RISC标准,市场占据率高出了75 %。多家公司都推出了本身的基于ARM内核的处理惩罚器产品,越来越多的开辟职员开始了针对ARM平台的开辟。通常开辟职员必要购买芯片厂商或第三方提供的开辟板,还必要购买开辟软件,如C编译器大概集成了及时操纵体系的开辟环境。开辟板的代价从数百到上千美元,而编译器、及时操纵体系代价更是动辄数千到数万美元。如许,在开辟初期,软硬件上的投资就必要上万美元,对付海内大多数开辟职员来说,无疑是太贵了。
光荣的是,GNU所提倡的自由软件给开辟者带来了福音。1984 年,旨在开辟一个雷同 Unix 的,并且是完全免费的完备操纵体系和配套东西:GNU 体系(发音为"guh-NEW")。GNU的操纵体系和开辟东西都是免费的,依照GNU 通用大众容许证 (GPL)协议,任意人都可以从网上获取全部的源代码。关于GNU和大众容许证协议的细致数据,读者可参看GNU网站的中文先容:http://www.gnu.org/home.cn.html。
除了大家熟知的Linux操纵体系外,GNU的软件还包括编译器(gcc,g++)、二进制转换东西(objdump,objcopy)、调试东西(gdb,gdbserver,kgdb)和基于差别硬件平台的开辟库。GNU开辟东西的重要缺点是采取下令行方法,用户掌握和利用比较困难,不如基于Windows体系的开辟东西好用。但是,GNU东西的巨大性是由于它更贴近编译器和操纵体系的底层,并提供了更大的机动性。一旦学习和掌握了相干东西,也就相识了体系计划的底子知识,为以后的开辟事变打下底子。GNU的开辟东西都是免费的,依照GPL协议,任意人都可以从网上获取。笔者参加了一个基于ARM平台的嵌入式Linux体系开辟,采取的是摩托罗拉龙珠系列的MC928MX1。从测试代码、引导步伐、嵌入式Linux移植、应用步伐、图形界面都可以用GNU东西举行开辟,不必要在开辟东西上做分外的投入。本文所先容的开辟要领同样实用于别的公司的基于ARM的产品。
1 硬件平台
MC928MX1(以下简称MX1)是摩托罗拉公司基于ARM内核的第一款MCU,重要面向高端嵌入式应用。内部采取ARM920T内核,并集成了SDRAM/Flash、LCD、USB、蓝牙(bluetooth)、多媒体闪存卡(MMC)、CMOS摄像头等控制器。关于MX1的细致数据,感兴趣的读者可以参考http://www.motorola.com.cn/semiconductors/。作为应用开辟的最小体系必须包括RAM(步伐运行空间)、Flash(存放目标代码)和串行接口(用于调试和下载步伐)。MX1提供了6个片选端(CS0~CS5),内置了SDRAM控制器,数据宽度32位。在笔者的体系中采取了2片8M×16位的SDRAM和2片4M×16位的同步Flash存储器,分别接入数据线的低16位和高16位,如图1所示。
图1中SDRAM接片选端CS2,Flash接片选端CS3,别的为SDRAM/Flash的控制信号。最小体系还包括至少1个串行接口,可以采取MX1内置的UART控制器,图略。
2 自举模式
如今,很多嵌入式处理惩罚器都提供了自举模式(Bootstrap),供用户写入引导代码。自举模式利用了固化在芯片内部的一段引导步伐,当处理惩罚器复位时,要是在特定引脚上加信号,则处理惩罚器将在复位后实行固化ROM中的步伐。比方,MX1提供了4条复位引脚,复位时引脚差别的电平组合可以从差别的片选端启动体系。自举ROM中的步伐完成串口的初始化,然后等待用户从串口写入用户代码。自举模式所能担当的是一种专门格局的文本文件,包括数据和要写入/读出的地点。关于自举模式的代码格局,可参考相干芯片的手册。在摩托罗拉的网站还提供了很多小东西,资助开辟者将别的格局的文件转换成为自举模式格局。通过自举模式下载的通常是一段和上位机软件(如超等终端)通讯的步伐,完成吸取数据并写入Flash的操纵。写入的数据可以是用户本身的应用步伐、数据大概操纵体系的内核。通过自举模式下载的引导步伐同样可以用GNU东西开辟。
3 GNU的编译器和开辟东西
GNU提供的编译东西包括汇编器as、C编译器gcc、C++编译器g++、连接器ld和二进制转换东西objcopy。基于ARM平台的东西分别为arm-linux-as、arm-linux-gcc、arm-linux-g++、arm -linux-ld 和arm-linux-objcopy。GNU的全部开辟东西都可以从www.gnu.org上下载,基于ARM的东西可以从www.uclinux.org得到。GNU的编译器成果非常强大,共有上百个操纵选项,这也是这类东西让初学者头痛的缘故起因。不过,实际开辟中只必要用到有限的几个,大部分可以采取缺省选项。GNU东西的开辟流程如下:编写C、C++语言或汇编源步伐,用gcc或g++天生目标文件,编写连接脚本文件,用连接器天生终极目标文件(elf格局),用二进制转换东西天生可下载的二进制代码。GNU东西都运行在Linux下,开辟者必要1台运行Linux的PC作为上位机。由于篇幅所限,不克不及完备地先容整个嵌入式操纵体系的开辟进程,将以第二节中提到的通过自举模式下载的引导步伐为例,阐明开辟的进程。对付像Linux如许的大体系,根本的开辟流程是一样的。
引导步伐将通过自举模式下载到MX1的片内RAM,从地点0x00300000开始并实行。完成串口和SDRAM的初始化后,引导步伐将等待吸取应用步伐或操纵体系内核,将吸取到的数据放在SDRAM中。数据吸取完毕后,引导步伐将SDRAM中的数据写入Flash,下一次就可以从Flash中直接引导体系了。由于操纵体系的内核比较大,如Linux有1 MB以上,下载进程必须思量纠错。因此,吸取部分采取Xmode协议,可以用Windows下超等终真个Xmode发送方法发送文件。
(1)编写C、C++语言或汇编源步伐
通常汇编源步伐用于体系最根本的初始化,如初始化堆栈指针、设置页表、操纵ARM的协处理惩罚器等。初始化完成后就可以跳转到C代码实行。必要细致的是,GNU的汇编器依照AT&T的汇编语法,读者可以从GNU的站点(www.gnu.org)上下载有关范例。汇编步伐的缺省入口是start标号,用户也可以在连接脚本文件中用ENTRY标记指明别的入口点(见下文关于连接脚本的阐明)。
(2)用gcc或g++天生目标文件
要是应用步伐包括多个文件,就必要举行分别编译,末了用连接器连接起来。如笔者的引导步伐包括3个文件:init.s(汇编代码、初始化硬件) xmrecever.c(通讯模块,采取Xmode协议)和flash.c(Flash擦写模块)。
分别用如下下令天生目标文件:
arm-linux-gcc-c-O2-o init.o init.s
arm-linux-gcc-c-O2-o xmrecever.o xmrecever.c
arm-linux-gcc-c-O2-o flash.o flash.c
此中-c下令表现只天生目标代码,不举行连接;-o 下令指明目标文件的名称;-O2表现采取二级优化,采取优化后可使天生的代码更短,运行速率更快。要是项目包括很多文件,则必要编写makefile文件。关于makefile的内容,请感兴趣的读者参考相干数据。
(3)编写连接脚本文件
gcc等编译器内置有缺省的连接脚本。要是采取缺省脚本,则天生的目标代码必要操纵体系才华加载运行。为了能在嵌入式体系上直接运行,必要编写本身的连接脚本文件。编写连接脚本,起重要对目标文件的格局有肯定相识。GNU编译器天生的目标文件缺省为elf格局。elf文件由多少段(section)构成,如不特别指明,由C源步伐天生的目标代码中包括如下段:.text(正文段)包括步伐的指令代码;.data(数据段)包括牢固的数据,如常量、字符串;.bss(未初始化数据段)包括未初始化的变量、数组等。C++源步伐天生的目标代码中还包括.fini(析构函数代码)和.init(布局函数代码)等。有关elf文件格局,读者可自行参考相干数据。连接器的任务便是将多个目标文件的.text、.data和.bss等段连接在一起,而连接脚本文件是报告连接器从什么地点开始安排这些段。比方笔者的引导步伐连接文件link.lds为:
|
此中,ENTRY(begin)指明步伐的入口点为begin标号;.=0x00300000指明目标代码的肇始地点为0x00300000,这一段地点为MX1的片内RAM;.text : { *(.text) }表现从0x00300000开始安排全部目标文件的代码段,随后的.data: { *(.data) }表现数据段从代码段的末端开始,再后是.bss段。
(4)用连接器天生终极目标文件
有了连接脚本文件,如下下令可天生终极的目标文件:
arm-linux-ld-nostadlib-o bootstrap.elf-T link.lds init.o xmrecever.o flash.o
此中,ostadlib表现不毗结合统的运行库,而是直接从begin入口;-o指明目标文件的名称;-T指明采取的连接脚本文件;末了是必要连接的目标文件列表。
(5)天生二进制代码
连接天生的elf文件还不克不及直接下载实行,通过objcopy东西可天生终极的二进制文件:
arm-linux-objcopy-O binary bootstrap.elf bootstrap.bin
此中-Obinary指定天生为二进制格局文件。Objcopy还可以天生S格局的文件,只需将参数换成-O srec。要是想将天生的目标代码反汇编,还可以用objdump东西:
arm-linux-objdump-D bootstrap.elf
至此,所天生的目标文件就可以直接写入Flash中运行了。要是要通过自举模式下载,还必要转换为自举模式的文件格局,相干转换东西可以在摩托罗拉的网站上找到。
掌握了GNU东西后,开辟者就可以开辟或移植C或C++代码的步伐。用户可以不必要操纵体系,直接开辟大略应用步伐。但对付更巨大的应用来说,操纵体系必不可少。如今盛行的源代码公然的操纵体系如Linux、μC/OS都可以用GNU东西编译。ARM的Linux已有很多成熟的版本,可以支持ARM720、ARM920、ARM1020等多种处理惩罚器,读者可从www.uclinux.org或www.armdevzone.com上获取最新信息。Linux移植进程中和处理惩罚器相干的代码都放在arch/arm目次下。对付内核,用户必要做的是设置本身体系的内存映像,RAM肇始地点,I/O地点空间和假造I/O地点空间,参看arch/arm/mach-integrator/arch.c文件。除了内核外,用户还必要为本身的体系方式种种百般的驱动步伐。
4 调试东西
Linux下的GNU调试东西重要是gdb、gdbserver和kgdb。此中gdb和gdbserver可完成对目标板上Linux下应用步伐的长途调试。gdbserver是一个很小的应用步伐,运行于目标板上,可监控被调试进程的运行,并通过串口与上位机上的gdb通讯。开辟者可以通过上位机的gdb输入下令,控制目标板上进程的运行,查察内存和寄存器的内容。gdb5.1.1以后的版本参加了对ARM处理惩罚器的支持,在初始化时参加-target==arm参数可直接天生基于ARM平台的gdbserver。gdb东西可以从ftp://ftp.gnu.org/pub/gnu/gdb/上下载。
对付Linux内核的调试,可以采取kgdb东西,同样必要通过串口与上位机上的gdb通讯,对目标板的Linux内核举行调试。由于篇幅所限,感兴趣的读者可以从http://oss.sgi.com/projects/kgdb/上相识详细的利用要领。
结束语
本文以一个详细的实例为例,对GNU东西中的常用成果作了先容。着实GNU东西的成果还远不止这些,更进一步的操纵有:针对差别处理惩罚器,差别算法的软件优化、高效的内嵌汇编、大型项目办理成果等。信托GNU能成为越来越多开辟职员的选择。
博航网 www.broadon.net 版权所有
京ICP备10051899号-2 京公网安备110108006479号