火龙果·整理 节(序列中最不重要的值)先存放在低地址处的顺序。举例来说,在使用Big-endian顺序的计算机中,要 存储一个十六进制数5F48所需要的字节将会以5F48的形式存储(比如5F存放在内存的1000位置,而48 将会被存储在l001位置)。而在使用Litt1e-endian顺序的系统中,存储的形式将会是485F(48在地址 1000处,5F在地址1001处)。如果将0x5F48写到以0x0000开始的地址中,则存放的顺序如下: 地址 Big-endian Little-endian 0x0000 5F 48 0x0001 48 5F IBW的370种大型机、大多数基于RISC的计算机以及Motorola的微处理器使用的是Big-endian顺序,TCP/IP 协议也是。而Intel的处理器和DEC公司的一些程序则使用的Little-endian方式。 ■emory ARM7TDMI-Memory Start address Tabl-Hex -No prefix Tab2-Hex -No prefix]Tab3-Hex -No prefix]Tab4- Address 0123456789 a b 0x0000000010 00FFE700 E800 E8 DA 29 00 EA 0x000000101000 FF E7 00 E8 00 E8 10 00 FF E7 0x0000002010 00 FF E7 00 E8 00 E8 10 00 FF E7 0x0000003010 00 FF E700 E8 00 E8 10 00 FF E7 0x0000004010 00 FF E7 00 E8 00 E8 10 00 FF 0x0000005010 00 FF E7 00 E8 00 E8 10 00 FF E7 0x0000006010 00 FF E7 00 E8 00 E8 10 00 FF E7 0x0000007010 00 FF E7 00 E8 00 E8 10 00 0x0000008010 00 FF E7 00 E8 00 E8 10 00 F 7 0x0000009010 00 FF E7 00 E8 00 E8 10 00 F 7 0x000000A010 00 FF E7 00 E8 00 E8 10 00 x000nonBo 10 00 FF F7 0n R只 00 行只 10 00 尽T 行7 图1.11查看寄存器值 1.3.3.4查看变量值 在调试过程中,经常需要查看某个变量的值,在AXD工具中,查看变量值的方法是: 先用鼠标选中要查看的变量,然后鼠标右击,在探出的对话框中选择“Watch..”,将会显示 指定变量的详细信息。此处以62行的res3为要查看的变量,先选中rs3变量,然后鼠标 右击,选择“Watch..”项,将弹出如图1.l2的对话框,该对话框显示了res3变量的地址和 值等详细信息
节(序列中最不重要的值)先存放在低地址处的顺序。举例来说,在使用 Big-endian 顺序的计算机中,要 存储一个十六进制数 5F48 所需要的字节将会以 5F48 的形式存储(比如 5F 存放在内存的 1000 位置,而 48 将会被存储在 1001 位置)。而在使用 Little-endian 顺序的系统中,存储的形式将会是 485F(48 在地址 1000 处,5F 在地址 1001 处)。如果将 0x5F48 写到以 0x0000 开始的地址中,则存放的顺序如下: 地址 Big-endian Little-endian 0x0000 5F 48 0x0001 48 5F IBM的370种大型机、大多数基于RISC的计算机以及Motorola的微处理器使用的是Big-endian顺序,TCP/IP 协议也是。而 Intel 的处理器和 DEC 公司的一些程序则使用的 Little-endian 方式。 图 1.11 查看寄存器值 1.3.3.4 查看变量值 在调试过程中,经常需要查看某个变量的值,在 AXD 工具中,查看变量值的方法是: 先用鼠标选中要查看的变量,然后鼠标右击,在探出的对话框中选择“Watch..”,将会显示 指定变量的详细信息。此处以 62 行的 res_3 为要查看的变量,先选中 res_3 变量,然后鼠标 右击,选择“Watch..”项,将弹出如图 1.12 的对话框,该对话框显示了 res_3 变量的地址和 值等详细信息
Add Tatch 3x Expression res_3 Add To View Processor: ARM7TDMI Evaluate Expression Value Close 曰-ARM7TDMl {.} 白res3 》 Help ",8 0w0000aA,68 ….b 0x0000000C View- Proc 0×00004A08 CSystem d 0x0000917C CTab- G Tab1 C Tab2 C Tab3 C Tab4 图1.12查看变量对话框 总之,AXD工具的使用方法还有很多,关于AXD IDE的具体使用请参考ADS软件的 在线帮助文件,这里不再赘述。 1.4嵌入式Linux开发介绍 在这一节中主要讲述Liux开发的基础知识,其中包括Linux的发展历史,Linuⅸ的开 发环境和ARM Linux系统的开发流程,首先让我们来看一下Liuⅸ的发展历史。 1.4.1 Linux历史 Linux是Unix操作系统的一个克隆,由名叫Linus Torvalds的大学生在1991年开发诞 生的。Linus Torvalds将他写的操作系统源代码放在了nternet上,受到很多计算机爱好者的 热烈欢迎,并且这些计算机爱好者不断地添加新的功能和特性,并不断的提高它的稳定性。 在1994年,Linx1.0正式发布。现在,Linux己经成为一个功能超强的32位操作系统。Linux 为嵌入操作系统提供了一个极有吸引力的选择,它是个和Unⅸ相似、以核心为基础的、完 全内存保护、多任务多进程的操作系统。支持广泛的计算机硬件,包括X86,Alpha,Sparc, MPS,PPC,ARM,NEC,MOTOROLA等现有的大部分芯片。源代码全部公开,任何人 可以修改并在GNU通用公共许可证(GNU General Public License)下发行,这样开发人员可 以对操作系统进行定制。同时由于有GPL的控制,大家开发的东西大都相互兼容,不会走 向分裂之路。Linux用户遇到问题时可以通过nternet向网上成千上万的Linux开发者请教, 这使得最困难的问题也有办法解决。Linux带有Unix用户熟悉的完善的开发工具,几乎所 有的Uniⅸ系统的应用软件都已移植到了Linuⅸ上。Liux还提供了强大的网络功能,有多种 可选择窗口管理器(X windows)。其强大的语言编译器gcc、g++等也可以很容易得到。不 但成熟完善、而且使用方便。 关于嵌入式Linux的发展也如同Linux发展一样非常迅速,在1999年,Linux开始根植
图 1.12 查看变量对话框 总之,AXD 工具的使用方法还有很多,关于 AXD IDE 的具体使用请参考 ADS 软件的 在线帮助文件,这里不再赘述。 1.4 嵌入式 Linux 开发介绍 在这一节中主要讲述 Linux 开发的基础知识,其中包括 Linux 的发展历史,Linux 的开 发环境和 ARM Linux 系统的开发流程,首先让我们来看一下 Linux 的发展历史。 1.4.1 Linux 历史 Linux 是 Unix 操作系统的一个克隆,由名叫 Linus Torvalds 的大学生在 1991 年开发诞 生的。Linus Torvalds 将他写的操作系统源代码放在了 Internet 上,受到很多计算机爱好者的 热烈欢迎,并且这些计算机爱好者不断地添加新的功能和特性,并不断的提高它的稳定性。 在 1994 年,Linux 1.0 正式发布。现在,Linux 已经成为一个功能超强的 32 位操作系统。Linux 为嵌入操作系统提供了一个极有吸引力的选择,它是个和 Unix 相似、以核心为基础的、完 全内存保护、多任务多进程的操作系统。支持广泛的计算机硬件,包括 X86,Alpha,Sparc, MIPS,PPC,ARM,NEC,MOTOROLA 等现有的大部分芯片。源代码全部公开,任何人 可以修改并在 GNU 通用公共许可证(GNU General Public License)下发行,这样开发人员可 以对操作系统进行定制。同时由于有 GPL 的控制,大家开发的东西大都相互兼容,不会走 向分裂之路。Linux 用户遇到问题时可以通过 Internet 向网上成千上万的 Linux 开发者请教, 这使得最困难的问题也有办法解决。Linux 带有 Unix 用户熟悉的完善的开发工具,几乎所 有的 Unix 系统的应用软件都已移植到了 Linux 上。Linux 还提供了强大的网络功能,有多种 可选择窗口管理器(X windows)。其强大的语言编译器 gcc、g++等也可以很容易得到。不 但成熟完善、而且使用方便。 关于嵌入式 Linux 的发展也如同 Linux 发展一样非常迅速,在 1999 年,Linux 开始根植
火龙果·整理 大子天大euml.org.cn 于嵌入式系统开发,同年9月在嵌入式系统会议(Embedded System Conference,ESC)上 许多公司宣布支持嵌入式Linux,这些公司包括FSM Labs,MontaVista,.Zentropix和Lineo等。 在2000年,Samsung公司推出一款名为Yopy的PDA,其应用嵌入式Liux系统.同年Ericsson 公司推出一款名为HS210的基于Liux的无绳带屏电话,它可以通过无线连接上网,打电 话,收发E-mail等功能。同年许多公司采用嵌入式Linux在他们的产品线上。在2001年, 最重要的宣布就是发布了Linx内核2.4,该版本被后期采用到许多嵌入式Liux分支中。 在2002年,可以看到许多上市的基于Linux的产品,并且Linux已经在向数字娱乐领域发 展。在2003年,Motorola宣布A760手机采用Linux作为它的嵌入式操作系统,这一年Linux 也在小型办公市场上发展很快。在2004年,Lynux Works发布基于Linux22.6内核的BlueCat。 它作为第一个基于Linux2.6内核的商业嵌入式Linux。在2005年,基于Linux2.6内核的嵌 入式产品己经非常广泛,尤其是基于ARM内核的芯片己经广泛使用Liux为其操作系统。 现在许多公司己经采用嵌入式Liuw作为他们新的设计方案。目前,AMD,ARM,TI, Motorola,Intel和IBM等知名企业把Linuⅸ作为一个首选的操作系统。相信嵌入式Linux 的发展会越来越好,用户也会越来越多。 1.4.2 Linux开发环境 习惯在Windows下编成的开发人员经常会感觉在Linux系统下编程很复杂,比如环境 变量、编译器的选择以及繁琐的命令等等都会让他们头疼,因为往往是Windows下这些东 西都己经做好,并且基本上都是图形界面的设置,不像Liux下大都用命令行形式执行。其 实Linux环境下编程并不像许多人想象的那么难,一旦你熟悉了Liuⅸ操作系统的基本原理 和编译原理,相对来说你会觉得Liuⅸ开发更容易一些,因为它能让你清楚地知道程序之间 的编译关系,以及内部的逻辑结构,总之会让你清楚地知道你所编译的项目而不是只了解最 上层的一些应用。常见的Lix开发环境有以下三种组合方式: 1.Windows操作系统+Cygwin工具 Cygwin于1995年开始开发,是cygnus solutions公司(已经被Red Hat公司收购)的产 品。Cygwin是一个windows平台下的Linux模拟环境。它包括一个DLL(cygwinl.d),这个 dl为POSIX系统提供接口调用的模拟层,还有一系列模拟linux平台的工具。Cygwin的dl 可以用于windonws95之后的x86系列windows上面。其API竭尽模拟单个Unix和linux的 规范。另外Cygwin和linux之间的重要区别是:一是C函数库的不同,前者用newlib而后 者用的是gibc。二是shell不同,前者用ash而在大多数linux发行版上用的是bash。Windows +Cygwin组合的开发方式非常适合初学者使用,笔者学习Linux环境下的开发也是从使用 Cygwin开始的,但是这种组合不能开发QT等GUI,因为它没有提供X服务器。Cygwin的 下载站点是http://www.cvgwin.com/。Cygwin在Windows系统上的打开界面如图1.l3所示
于嵌入式系统开发,同年 9 月在嵌入式系统会议(Embedded System Conference,ESC)上 许多公司宣布支持嵌入式 Linux,这些公司包括 FSM Labs, MontaVista, Zentropix 和 Lineo等。 在2000年,Samsung公司推出一款名为Yopy的PDA,其应用嵌入式Linux系统。同年Ericsson 公司推出一款名为 HS210 的基于 Linux 的无绳带屏电话,它可以通过无线连接上网,打电 话,收发 E-mail 等功能。同年许多公司采用嵌入式 Linux 在他们的产品线上。在 2001 年, 最重要的宣布就是发布了 Linux 内核 2.4,该版本被后期采用到许多嵌入式 Linux 分支中。 在 2002 年,可以看到许多上市的基于 Linux 的产品,并且 Linux 已经在向数字娱乐领域发 展。在 2003 年,Motorola 宣布 A760 手机采用 Linux 作为它的嵌入式操作系统,这一年 Linux 也在小型办公市场上发展很快。在 2004 年,LynuxWorks 发布基于 Linux2.6 内核的 BlueCat。 它作为第一个基于 Linux2.6 内核的商业嵌入式 Linux。在 2005 年,基于 Linux2.6 内核的嵌 入式产品已经非常广泛,尤其是基于 ARM 内核的芯片已经广泛使用 Linux 为其操作系统。 现在许多公司已经采用嵌入式 Linux 作为他们新的设计方案。目前,AMD,ARM,TI, Motorola,Intel 和 IBM 等知名企业把 Linux 作为一个首选的操作系统。相信嵌入式 Linux 的发展会越来越好,用户也会越来越多。 1.4.2 Linux 开发环境 习惯在 Windows 下编成的开发人员经常会感觉在 Linux 系统下编程很复杂,比如环境 变量、编译器的选择以及繁琐的命令等等都会让他们头疼,因为往往是 Windows 下这些东 西都已经做好,并且基本上都是图形界面的设置,不像 Linux 下大都用命令行形式执行。其 实 Linux 环境下编程并不像许多人想象的那么难,一旦你熟悉了 Linux 操作系统的基本原理 和编译原理,相对来说你会觉得 Linux 开发更容易一些,因为它能让你清楚地知道程序之间 的编译关系,以及内部的逻辑结构,总之会让你清楚地知道你所编译的项目而不是只了解最 上层的一些应用。常见的 Linux 开发环境有以下三种组合方式: 1. Windows 操作系统 + Cygwin 工具 Cygwin 于 1995 年开始开发,是 cygnus solutions 公司(已经被 Red Hat 公司收购)的产 品。Cygwin 是一个 windows 平台下的 Linux 模拟环境。它包括一个 DLL(cygwin1.dll),这个 dll 为 POSIX 系统提供接口调用的模拟层,还有一系列模拟 linux 平台的工具。Cygwin 的 dll 可以用于 windonws95 之后的 x86 系列 windows 上面。其 API 竭尽模拟单个 Unix 和 linux 的 规范。另外 Cygwin 和 linux 之间的重要区别是:一是 C 函数库的不同,前者用 newlib 而后 者用的是 glibc。二是 shell 不同,前者用 ash 而在大多数 linux 发行版上用的是 bash。Windows + Cygwin 组合的开发方式非常适合初学者使用,笔者学习 Linux 环境下的开发也是从使用 Cygwin 开始的,但是这种组合不能开发 QT 等 GUI,因为它没有提供 X 服务器。Cygwin 的 下载站点是 http://www.cygwin.com/。Cygwin 在 Windows 系统上的打开界面如图 1.13 所示
-99火爆:理 c ✉▣x AdministratoreMIKEYFLI~ 图1.13 Cygwin工具 2.Windows操作系统+VMware工具+Linux操作系统 VMware是一个“虚拟机”软件。它使你可以在一台机器上同时运行二个或更多的操作 系统,比如WN2O00/WNNT/WN9X/DOS/LINUX系统。与“多启动”系统相比,VMware 采用了完全不同的概念。多启动系统在一个时刻只能运行一个系统,在系统切换时需要重新 启动机器。VMware是真正“同时”运行多个操作系统在主系统的平台上,就象Word/Excel 那种标准Windows应用程序那样切换。Windows+VMware这种组合对于实际开发应用来说 比较广泛,因为在VMware工具中可以安装Linux系统,可以完全实现Linx系统的开发。 几乎和在真正的Linw系统下开发没有什么区别,并且其最大的好处是在Liuⅸ系统和 Windows系统的之间的切换是非常的方便。所以笔者推荐读者使用这种组合方式学习Linx 系统开发,因为它可以开发Qt等图形用户界面程序,与Cygwin工具相比,它更接近Linux 真是环境。关于VMware的具体了解可参考hp:www.vmware.com站点。图1.l4所示的是 VMware工具+ReadHat9.0系统在Windows系统下的一个登陆界面
图 1.13 Cygwin 工具 2. Windows 操作系统 + VMware 工具 + Linux 操作系统 VMware 是一个“虚拟机”软件。它使你可以在一台机器上同时运行二个或更多的操作 系统,比如 WIN2000 / WINNT / WIN9X / DOS / LINUX 系统。与“多启动”系统相比,VMware 采用了完全不同的概念。多启动系统在一个时刻只能运行一个系统,在系统切换时需要重新 启动机器。VMware 是真正“同时”运行多个操作系统在主系统的平台上,就象 Word / Excel 那种标准 Windows 应用程序那样切换。Windows + VMware 这种组合对于实际开发应用来说 比较广泛,因为在 VMware 工具中可以安装 Linux 系统,可以完全实现 Linux 系统的开发。 几乎和在真正的 Linux 系统下开发没有什么区别,并且其最大的好处是在 Linux 系统和 Windows 系统的之间的切换是非常的方便。所以笔者推荐读者使用这种组合方式学习 Linux 系统开发,因为它可以开发 Qt 等图形用户界面程序,与 Cygwin 工具相比,它更接近 Linux 真是环境。关于 VMware 的具体了解可参考 http://www.vmware.com 站点。图 1.14 所示的是 VMware 工具 + ReadHat 9.0 系统在 Windows 系统下的一个登陆界面
@ked菲t Linox-Vivare雪orkstation ✉回x File Edit View Vl Tean Windows Help redhat Welcome to localhost.localdomain Username: Please enter your username Language Session Reboot Shut down Tue Jan 09,10:09 AM Your vorsion of Vware Tools is out of date. 色口但蹈么 图1.14 VMware工具+Reahat9.0操作系统 3.Linux操作系统+自带的开发工具 这种组合是最完整和最权威的Linux系统开发方式,不过对于那些习惯Windows系统 的Liux初学者来说比较困难,因为Linux下的许多操作都是基于命令行的,所以需要记住 常用的命令,并且与Windows系统下的文件共享比较困难。一般常用的Linux系统有:Red Hat,红旗Linux等。 总之,以上三种Liuⅸ环境的开发组合读者可以根据自己的兴趣进行选择,Linux环境 下开发经常用到的工具有GCC或gcc,Make和GDB或gdb,以下将逐一介绍。 1.4.2.1GCC介绍 在Linux下编译程序一般都用GCC(GNU C Compile)开发工具,无论你是编译内核代 码还是应用程序,一般都用GCC工具来完成。GCC是一个全功能的ANSI C兼容编译器。 使用GCC通常后跟一些选项和文件名来使用。GCC命令的基本用法如下,本书中所有命 令操作都是基于bash(Bourne Again shell),常见的shell*(注3)有Bourne shell(bin/sh), C shell (/bin/csh),Korn shell (/bin/ksh),Bourne again shell (/bin/bash). *注3:什么是Shell?Shel是一种具备特殊功能的程序,它是介于使用者和UNIX/Linux操作系统之核心 程序(kernel)间的一个接口。众所周知,对计算机下命令需要透过命令(command)或程序(program) 来执行:程序由编译器(compiler)将程序转为二进制代码,可是命令呢?其实shell也是一个程序,它由 输入设备读取命令,再将其转为计算机可以了解的机器码,然后执行它
图 1.14 VMware 工具 + Reahat 9.0 操作系统 3. Linux 操作系统 + 自带的开发工具 这种组合是最完整和最权威的 Linux 系统开发方式,不过对于那些习惯 Windows 系统 的 Linux 初学者来说比较困难,因为 Linux 下的许多操作都是基于命令行的,所以需要记住 常用的命令,并且与 Windows 系统下的文件共享比较困难。一般常用的 Linux 系统有:Red Hat,红旗 Linux 等。 总之,以上三种 Linux 环境的开发组合读者可以根据自己的兴趣进行选择,Linux 环境 下开发经常用到的工具有 GCC 或 gcc,Make 和 GDB 或 gdb,以下将逐一介绍。 1.4.2.1 GCC 介绍 在 Linux 下编译程序一般都用 GCC(GNU C Compile)开发工具,无论你是编译内核代 码还是应用程序,一般都用 GCC 工具来完成。GCC 是一个全功能的 ANSI C 兼容编译器。 使用 GCC 通常后跟一些选项和文件名来使用。GCC 命令的基本用法如下,本书中所有命 令操作都是基于 bash(Bourne Again shell),常见的 shell*(注 3)有 Bourne shell(/bin/sh), C shell(/bin/csh),Korn shell(/bin/ksh),Bourne again shell(/bin/bash)等。 *注 3:什么是 Shell?Shell 是一种具备特殊功能的程序,它是介于使用者和 UNIX/Linux 操作系统之核心 程序(kernel)间的一个接口。众所周知,对计算机下命令需要透过命令(command) 或程序(program) 来执行;程序由编译器(compiler)将程序转为二进制代码,可是命令呢?其实 shell 也是一个程序,它由 输入设备读取命令,再将其转为计算机可以了解的机器码,然后执行它