第5章 嵌入式Linux应用程序开发  分类:其他 | 上传于: 2020-01-10 20:30:30
嵌入式Linux应用程序开发\r\n" 2."5.1 开发环境的建立\r\n进行项目开发前,首先要做的是搭建一套基于Linux操作系统的应用开发环境,一般由目标板和宿主机所构成。目标板用于运行操作系统和系统应用软件,而目标板所用到的操作系统的内核编译、应用程序的开发和调试则需要通过宿主机来完成。开发环境对硬件没有特殊的要求,但是为了双方之间建立连接关系,关键的接口包括串口、以太网口和USB口等是必不可少的。\r嵌入式Linux的开发环境\r传统的嵌入式开发环境需要单片机的仿真器,包含C语言、汇编语言、调试工具等的集成开发环境IDE和实时操作系统等,整个开发系统建立起来至少需要几万元。由于Flash技术的发展,特别是一些CPU可以用JTAG接口下载调试,故仿真器已可以省去。随着标准化的推广,JTAG调试工具变得越来越简单、越来越通用。一些BDM调试工具已经简单到只需在PC机并行口和单片机的JTAG接口之间加一级5V到3.3V的电平转换,这使得自制调试工具变得越来越容易。软件方面,Linux下的自由软件GNU gcc可以完成几乎所有知名CPU,以及DSP的交叉C编译和调试,故可以省去IDE。\r个人用Linux开发嵌入式应用程序,可以在自己的PC机上安装一套Linux操作系统,使用Linux中的X Windows打开若干个窗口用于编译、下载、调试等。\r如果整个研发小组由多名工程师组成,常采用的办法是:用1台PC机运行Linux作为服务器;开发小组中每个成员都通过局域网用Telnet登录到这台Linux服务器上去;被开发的目标板也挂在网上。在服务器的Linux环境下,各个工程师用GNU gcc编译生成目标代码,再用FTP传回到自己的PC机上,然后通过串行口或网络下载到目标机上。\r\n" 3."利用Cygwin建立模拟环境 \r\n" 4."" 5."" 6."" 7."交叉编译环境的建立 \r\n交叉编译就是在一个平台上生成可以在另一个平台上执行的代码。在宿主机上对即将运行在目标机上的应用程序进行编译,生成可在目标机上运行的代码格式。交叉编译环境是一个由编译器、连接器和解释器组成的综合开发环境。交叉编译工具主要包括针对目标系统的编译器gcc、目标系统的二进制工具binutils、目标系统的标准c库glibc和目标系统的Linux内核头文件。\r在建立交叉编译环境之前,首先需要下载包括binutils、gcc、glibc及Linux内核在内的源代码,尽量选用较新版本,glibc和内核源代码的版本必须与目标机上实际使用的版本保持一致,并设定shell变量PREFIX指定可执行程序的安装路径。\r(1)编译binutils。\r运行configure文件,并使用--prefix=$PREFIX参数指定安装路径,使用--target=arm-linux参数指定目标机类型,然后执行make install。\r(2)配置Linux内核头文件。\r执行make mrproper进行清理工作,然后执行make config ARCH=arm(或make menuconfig/xconfig ARCH=arm)进行配置。一定要在命令行中使用ARCH=arm指定CPU架构,因为默认架构为主机的CPU架构,这一步需要根据目标机的实际情况进行详细的配置。\r配置完成之后,需要将内核头文件拷贝到安装目录: \rcp -dR include/asm-arm \r$PREFIX/arm-linux/include/asm\rcp -dR include/linux \r$PREFIX/arm-linux/include/linux \r\n" 8."(3)第一次编译gcc。configure的运行参数设置:\r--prefix=$PREFIX\r--target=arm-linux\r--disable-threads\r--disable-shared\r--enable-languages=c\r执行make install,将生成一个最简单的gcc。由于编译整个gcc是需要目标机的glibc库的,它现在还不存在,因此需要首先生成一个最简单的gcc,它只需要具备编译目标机glibc库的能力即可。\r(4)交叉编译glibc。\r由于这一步骤生成的代码是针对目标机cpu的,因此它属于一个交叉编译过程。又因为该过程要用到Linux内核头文件,默认路径为$PREFIX/arm-linux/sys-linux,因而需要在$PREFIX/arm-linux中建立一个名为sys-linux的软连接,使其指向内核头文件所在的include目录;也可以在接下来要执行的configure命令中使用--with-headers参数指定linux内核头文件的实际路径。\rconfigure的运行参数设置如下,因为是交叉编译,所以要将编译器变量CC设为arm-linux-gcc:\rCC=arm-linux-gcc ./configure \r--prefix=$PREFIX/arm-linux \r--host=arm-linux \r--enable-add-ons \r最后,按以上配置执行configure和make install,glibc的交叉编译过程就算完成了,这里需要指出的是,glibc的安装路径设置为$PREFIXARCH=arm/arm-linux,如果此处设置不当,第二次编译gcc时可能找不到glibc的头文件和库。 \r\n" 9."(5)第二次编译gcc。\r运行configure,参数设置为\r--prefix=$PREFIX --target=arm-linux \r--enable-languages=c 10.c 。 \r运行make install。 \r到此为止整个交叉编译环境就完全生成了。 \r建立一个交叉编译工具链是一个相当复杂的过程,为了节省时间,网上有一些编译好的可用的交叉编译工具链可以下载。本书所附光盘也带有编译好的交叉编译工具链arm-linux- toolchains.tgz,只需简单地解压缩即可使用:\rtar xvzf arm-linux-toolchains.tgz –C /arm9\r假设工具链解压缩到目录/arm9。\r解压完毕后把工具链目录加入到环境变量PATH中即可。\r交叉编译工具做完后,简单验证一下。首先用文字输入软件建立一个helloworld.c文件:\r#include \rint main(void)\r{\r printf(\"hello world\\n\");\r return 0;\r}\r然后在命令行执行:\r$arm-linux-gcc helloworld.c -o helloworld\r$file helloworld\r如果输出以下信息,说明成功建立了编译工具。\rhelloworld: ELF 32-bit LSB executable 11. ARM 12. version 1 13. dynamically linked (uses shared libs) 14. not stripped \r\n" 15."5.2 Linux及开发工具的使用\r\nGNU提供的编译工具包括汇编器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格式),用二进制转换工具生成可下载的二进制代码。\rLinux下的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/上下载 \r\n" 16." Linux常用命令 \r\n用户在命令行输入命令后,由外壳进行解释。外壳是一种命令解释器,提供了用户和操作系统之间的交互接口。外壳是面向命令行的,而X Window则是图形界面。外壳解释的命令送往操作系统执行。外壳可以执行Linux的系统内部命令,也可以执行应用程序。用户还可以利用外壳编程,执行复杂的命令程序。\rLinux提供几种外壳程序以供选择。常用的有Bourne外壳、C外壳和Korn外壳。各个外壳都能提供基本的功能,又有其各自的特点。\rBourne外壳是由Steven Bourne编写的,是UNIX的默认外壳。Bourne外壳的外壳编程能力很强,但是不能处理命令的用户交互特征,bash是Bourne外壳的增强版。\rC外壳是由加利福尼亚大学伯克利分校的Bill Joy编写的。能提供Bourne外壳所不能处理的用户交互特征,如命令补全、命令别名、历史命令替换等。C外壳的编程能力不如Bourne 外壳,但由于它的语法和C语言类似,所以C程序员将发现C外壳很顺手。\rKorn外壳是由Dave Korn编写的。Korn外壳融合了C外壳和Bourne外壳的优点,并与Bourne外壳完全兼容。Korn外壳的效率很高,其命令交互界面和编程交互界面都很不错。\rBash是大多数Linux系统的默认外壳。其克服了Bourne外壳的缺点,又和Bourne外壳完全兼容。 \r\n" 17."1.登录和退出\rLinux启动后,给出login命令,等待用户登录。\rLogin:\rPassword:\r使用logout命令退出外壳。\r2.更改账号密码\r使用passwd命令来设置新用户的口令。在设置口令之后,账号即能正常工作。\r语法:passwd\rOld password:\rNew password:\rRetype new password:\r3.联机帮助\r系统上几乎每条命令都带有相关的Man page。在有困难时,可以立刻找到文件。\r语法:man命令\r例如,如果使用ls命令时遇到困难,可以输入:man ls\r4.远程登录\r用来连接到其他机器执行工作。在Linux上,由于对TCP/IP协议的完全支持,用户可以很容易的从Linux主机连接其他的计算机系统。\r语法:rlogin主机名[-l用户名 -->
嵌入式Linux应用程序开发
" 2."5.1 开发环境的建立
进行项目开发前,首先要做的是搭建一套基于Linux操作系统的应用开发环境,一般由目标板和宿主机所构成。目标板用于运行操作系统和系统应用软件,而目标板所用到的操作系统的内核编译、应用程序的开发和调试则需要通过宿主机来完成。开发环境对硬件没有特殊的要求,但是为了双方之间建立连接关系,关键的接口包括串口、以太网口和USB口等是必不可少的。
嵌入式Linux的开发环境
传统的嵌入式开发环境需要单片机的仿真器,包含C语言、汇编语言、调试工具等的集成开发环境IDE和实时操作系统等,整个开发系统建立起来至少需要几万元。由于Flash技术的发展,特别是一些CPU可以用JTAG接口下载调试,故仿真器已可以省去。随着标准化的推广,JTAG调试工具变得越来越简单、越来越通用。一些BDM调试工具已经简单到只需在PC机并行口和单片机的JTAG接口之间加一级5V到3.3V的电平转换,这使得自制调试工具变得越来越容易。软件方面,Linux下的自由软件GNU gcc可以完成几乎所有知名CPU,以及DSP的交叉C编译和调试,故可以省去IDE。
个人用Linux开发嵌入式应用程序,可以在自己的PC机上安装一套Linux操作系统,使用Linux中的X Windows打开若干个窗口用于编译、下载、调试等。
如果整个研发小组由多名工程师组成,常采用的办法是:用1台PC机运行Linux作为服务器;开发小组中每个成员都通过局域网用Telnet登录到这台Linux服务器上去;被开发的目标板也挂在网上。在服务器的Linux环境下,各个工程师用GNU gcc编译生成目标代码,再用FTP传回到自己的PC机上,然后通过串行口或网络下载到目标机上。
" 3."利用Cygwin建立模拟环境
" 4."" 5."" 6."" 7."交叉编译环境的建立
交叉编译就是在一个平台上生成可以在另一个平台上执行的代码。在宿主机上对即将运行在目标机上的应用程序进行编译,生成可在目标机上运行的代码格式。交叉编译环境是一个由编译器、连接器和解释器组成的综合开发环境。交叉编译工具主要包括针对目标系统的编译器gcc、目标系统的二进制工具binutils、目标系统的标准c库glibc和目标系统的Linux内核头文件。
在建立交叉编译环境之前,首先需要下载包括binutils、gcc、glibc及Linux内核在内的源代码,尽量选用较新版本,glibc和内核源代码的版本必须与目标机上实际使用的版本保持一致,并设定shell变量PREFIX指定可执行程序的安装路径。
(1)编译binutils。
运行configure文件,并使用--prefix=$PREFIX参数指定安装路径,使用--target=arm-linux参数指定目标机类型,然后执行make install。
(2)配置Linux内核头文件。
执行make mrproper进行清理工作,然后执行make config ARCH=arm(或make menuconfig/xconfig ARCH=arm)进行配置。一定要在命令行中使用ARCH=arm指定CPU架构,因为默认架构为主机的CPU架构,这一步需要根据目标机的实际情况进行详细的配置。
配置完成之后,需要将内核头文件拷贝到安装目录:
cp -dR include/asm-arm
$PREFIX/arm-linux/include/asm
cp -dR include/linux
$PREFIX/arm-linux/include/linux
" 8."(3)第一次编译gcc。configure的运行参数设置:
--prefix=$PREFIX
--target=arm-linux
--disable-threads
--disable-shared
--enable-languages=c
执行make install,将生成一个最简单的gcc。由于编译整个gcc是需要目标机的glibc库的,它现在还不存在,因此需要首先生成一个最简单的gcc,它只需要具备编译目标机glibc库的能力即可。
(4)交叉编译glibc。
由于这一步骤生成的代码是针对目标机cpu的,因此它属于一个交叉编译过程。又因为该过程要用到Linux内核头文件,默认路径为$PREFIX/arm-linux/sys-linux,因而需要在$PREFIX/arm-linux中建立一个名为sys-linux的软连接,使其指向内核头文件所在的include目录;也可以在接下来要执行的configure命令中使用--with-headers参数指定linux内核头文件的实际路径。
configure的运行参数设置如下,因为是交叉编译,所以要将编译器变量CC设为arm-linux-gcc:
CC=arm-linux-gcc ./configure
--prefix=$PREFIX/arm-linux
--host=arm-linux
--enable-add-ons
最后,按以上配置执行configure和make install,glibc的交叉编译过程就算完成了,这里需要指出的是,glibc的安装路径设置为$PREFIXARCH=arm/arm-linux,如果此处设置不当,第二次编译gcc时可能找不到glibc的头文件和库。
" 9."(5)第二次编译gcc。
运行configure,参数设置为
--prefix=$PREFIX --target=arm-linux
--enable-languages=c 10.c 。
运行make install。
到此为止整个交叉编译环境就完全生成了。
建立一个交叉编译工具链是一个相当复杂的过程,为了节省时间,网上有一些编译好的可用的交叉编译工具链可以下载。本书所附光盘也带有编译好的交叉编译工具链arm-linux- toolchains.tgz,只需简单地解压缩即可使用:
tar xvzf arm-linux-toolchains.tgz –C /arm9
假设工具链解压缩到目录/arm9。
解压完毕后把工具链目录加入到环境变量PATH中即可。
交叉编译工具做完后,简单验证一下。首先用文字输入软件建立一个helloworld.c文件:
#include
int main(void)
{
printf(\"hello world\
\");
return 0;
}
然后在命令行执行:
$arm-linux-gcc helloworld.c -o helloworld
$file helloworld
如果输出以下信息,说明成功建立了编译工具。
helloworld: ELF 32-bit LSB executable 11. ARM 12. version 1 13. dynamically linked (uses shared libs) 14. not stripped
" 15."5.2 Linux及开发工具的使用
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格式),用二进制转换工具生成可下载的二进制代码。
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/上下载
" 16." Linux常用命令
用户在命令行输入命令后,由外壳进行解释。外壳是一种命令解释器,提供了用户和操作系统之间的交互接口。外壳是面向命令行的,而X Window则是图形界面。外壳解释的命令送往操作系统执行。外壳可以执行Linux的系统内部命令,也可以执行应用程序。用户还可以利用外壳编程,执行复杂的命令程序。
Linux提供几种外壳程序以供选择。常用的有Bourne外壳、C外壳和Korn外壳。各个外壳都能提供基本的功能,又有其各自的特点。
Bourne外壳是由Steven Bourne编写的,是UNIX的默认外壳。Bourne外壳的外壳编程能力很强,但是不能处理命令的用户交互特征,bash是Bourne外壳的增强版。
C外壳是由加利福尼亚大学伯克利分校的Bill Joy编写的。能提供Bourne外壳所不能处理的用户交互特征,如命令补全、命令别名、历史命令替换等。C外壳的编程能力不如Bourne 外壳,但由于它的语法和C语言类似,所以C程序员将发现C外壳很顺手。
Korn外壳是由Dave Korn编写的。Korn外壳融合了C外壳和Bourne外壳的优点,并与Bourne外壳完全兼容。Korn外壳的效率很高,其命令交互界面和编程交互界面都很不错。
Bash是大多数Linux系统的默认外壳。其克服了Bourne外壳的缺点,又和Bourne外壳完全兼容。
" 17."1.登录和退出
Linux启动后,给出login命令,等待用户登录。
Login:
Password:
使用logout命令退出外壳。
2.更改账号密码
使用passwd命令来设置新用户的口令。在设置口令之后,账号即能正常工作。
语法:passwd
Old password:
New password:
Retype new password:
3.联机帮助
系统上几乎每条命令都带有相关的Man page。在有困难时,可以立刻找到文件。
语法:man命令
例如,如果使用ls命令时遇到困难,可以输入:man ls
4.远程登录
用来连接到其他机器执行工作。在Linux上,由于对TCP/IP协议的完全支持,用户可以很容易的从Linux主机连接其他的计算机系统。
语法:rlogin主机名[-l用户名
-->
1."第5章 嵌入式Linux应用程序开发
" 2."5.1 开发环境的建立
进行项目开发前,首先要做的是搭建一套基于Linux操作系统的应用开发环境,一般由目标板和宿主机所构成。目标板用于运行操作系统和系统应用软件,而目标板所用到的操作系统的内核编译、应用程序的开发和调试则需要通过宿主机来完成。开发环境对硬件没有特殊的要求,但是为了双方之间建立连接关系,关键的接口包括串口、以太网口和USB口等是必不可少的。
嵌入式Linux的开发环境
传统的嵌入式开发环境需要单片机的仿真器,包含C语言、汇编语言、调试工具等的集成开发环境IDE和实时操作系统等,整个开发系统建立起来至少需要几万元。由于Flash技术的发展,特别是一些CPU可以用JTAG接口下载调试,故仿真器已可以省去。随着标准化的推广,JTAG调试工具变得越来越简单、越来越通用。一些BDM调试工具已经简单到只需在PC机并行口和单片机的JTAG接口之间加一级5V到3.3V的电平转换,这使得自制调试工具变得越来越容易。软件方面,Linux下的自由软件GNU gcc可以完成几乎所有知名CPU,以及DSP的交叉C编译和调试,故可以省去IDE。
个人用Linux开发嵌入式应用程序,可以在自己的PC机上安装一套Linux操作系统,使用Linux中的X Windows打开若干个窗口用于编译、下载、调试等。
如果整个研发小组由多名工程师组成,常采用的办法是:用1台PC机运行Linux作为服务器;开发小组中每个成员都通过局域网用Telnet登录到这台Linux服务器上去;被开发的目标板也挂在网上。在服务器的Linux环境下,各个工程师用GNU gcc编译生成目标代码,再用FTP传回到自己的PC机上,然后通过串行口或网络下载到目标机上。
" 3."利用Cygwin建立模拟环境
" 4."" 5."" 6."" 7."交叉编译环境的建立
交叉编译就是在一个平台上生成可以在另一个平台上执行的代码。在宿主机上对即将运行在目标机上的应用程序进行编译,生成可在目标机上运行的代码格式。交叉编译环境是一个由编译器、连接器和解释器组成的综合开发环境。交叉编译工具主要包括针对目标系统的编译器gcc、目标系统的二进制工具binutils、目标系统的标准c库glibc和目标系统的Linux内核头文件。
在建立交叉编译环境之前,首先需要下载包括binutils、gcc、glibc及Linux内核在内的源代码,尽量选用较新版本,glibc和内核源代码的版本必须与目标机上实际使用的版本保持一致,并设定shell变量PREFIX指定可执行程序的安装路径。
(1)编译binutils。
运行configure文件,并使用--prefix=$PREFIX参数指定安装路径,使用--target=arm-linux参数指定目标机类型,然后执行make install。
(2)配置Linux内核头文件。
执行make mrproper进行清理工作,然后执行make config ARCH=arm(或make menuconfig/xconfig ARCH=arm)进行配置。一定要在命令行中使用ARCH=arm指定CPU架构,因为默认架构为主机的CPU架构,这一步需要根据目标机的实际情况进行详细的配置。
配置完成之后,需要将内核头文件拷贝到安装目录:
cp -dR include/asm-arm
$PREFIX/arm-linux/include/asm
cp -dR include/linux
$PREFIX/arm-linux/include/linux
" 8."(3)第一次编译gcc。configure的运行参数设置:
--prefix=$PREFIX
--target=arm-linux
--disable-threads
--disable-shared
--enable-languages=c
执行make install,将生成一个最简单的gcc。由于编译整个gcc是需要目标机的glibc库的,它现在还不存在,因此需要首先生成一个最简单的gcc,它只需要具备编译目标机glibc库的能力即可。
(4)交叉编译glibc。
由于这一步骤生成的代码是针对目标机cpu的,因此它属于一个交叉编译过程。又因为该过程要用到Linux内核头文件,默认路径为$PREFIX/arm-linux/sys-linux,因而需要在$PREFIX/arm-linux中建立一个名为sys-linux的软连接,使其指向内核头文件所在的include目录;也可以在接下来要执行的configure命令中使用--with-headers参数指定linux内核头文件的实际路径。
configure的运行参数设置如下,因为是交叉编译,所以要将编译器变量CC设为arm-linux-gcc:
CC=arm-linux-gcc ./configure
--prefix=$PREFIX/arm-linux
--host=arm-linux
--enable-add-ons
最后,按以上配置执行configure和make install,glibc的交叉编译过程就算完成了,这里需要指出的是,glibc的安装路径设置为$PREFIXARCH=arm/arm-linux,如果此处设置不当,第二次编译gcc时可能找不到glibc的头文件和库。
" 9."(5)第二次编译gcc。
运行configure,参数设置为
--prefix=$PREFIX --target=arm-linux
--enable-languages=c 10.c 。
运行make install。
到此为止整个交叉编译环境就完全生成了。
建立一个交叉编译工具链是一个相当复杂的过程,为了节省时间,网上有一些编译好的可用的交叉编译工具链可以下载。本书所附光盘也带有编译好的交叉编译工具链arm-linux- toolchains.tgz,只需简单地解压缩即可使用:
tar xvzf arm-linux-toolchains.tgz –C /arm9
假设工具链解压缩到目录/arm9。
解压完毕后把工具链目录加入到环境变量PATH中即可。
交叉编译工具做完后,简单验证一下。首先用文字输入软件建立一个helloworld.c文件:
#include
int main(void)
{
printf(\"hello world\
\");
return 0;
}
然后在命令行执行:
$arm-linux-gcc helloworld.c -o helloworld
$file helloworld
如果输出以下信息,说明成功建立了编译工具。
helloworld: ELF 32-bit LSB executable 11. ARM 12. version 1 13. dynamically linked (uses shared libs) 14. not stripped
" 15."5.2 Linux及开发工具的使用
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格式),用二进制转换工具生成可下载的二进制代码。
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/上下载
" 16." Linux常用命令
用户在命令行输入命令后,由外壳进行解释。外壳是一种命令解释器,提供了用户和操作系统之间的交互接口。外壳是面向命令行的,而X Window则是图形界面。外壳解释的命令送往操作系统执行。外壳可以执行Linux的系统内部命令,也可以执行应用程序。用户还可以利用外壳编程,执行复杂的命令程序。
Linux提供几种外壳程序以供选择。常用的有Bourne外壳、C外壳和Korn外壳。各个外壳都能提供基本的功能,又有其各自的特点。
Bourne外壳是由Steven Bourne编写的,是UNIX的默认外壳。Bourne外壳的外壳编程能力很强,但是不能处理命令的用户交互特征,bash是Bourne外壳的增强版。
C外壳是由加利福尼亚大学伯克利分校的Bill Joy编写的。能提供Bourne外壳所不能处理的用户交互特征,如命令补全、命令别名、历史命令替换等。C外壳的编程能力不如Bourne 外壳,但由于它的语法和C语言类似,所以C程序员将发现C外壳很顺手。
Korn外壳是由Dave Korn编写的。Korn外壳融合了C外壳和Bourne外壳的优点,并与Bourne外壳完全兼容。Korn外壳的效率很高,其命令交互界面和编程交互界面都很不错。
Bash是大多数Linux系统的默认外壳。其克服了Bourne外壳的缺点,又和Bourne外壳完全兼容。
" 17."1.登录和退出
Linux启动后,给出login命令,等待用户登录。
Login:
Password:
使用logout命令退出外壳。
2.更改账号密码
使用passwd命令来设置新用户的口令。在设置口令之后,账号即能正常工作。
语法:passwd
Old password:
New password:
Retype new password:
3.联机帮助
系统上几乎每条命令都带有相关的Man page。在有困难时,可以立刻找到文件。
语法:man命令
例如,如果使用ls命令时遇到困难,可以输入:man ls
4.远程登录
用来连接到其他机器执行工作。在Linux上,由于对TCP/IP协议的完全支持,用户可以很容易的从Linux主机连接其他的计算机系统。
语法:rlogin主机名[-l用户名
查看更多