嵌入式Linux应用实验指导书.docx

上传人:b****6 文档编号:3644061 上传时间:2022-11-24 格式:DOCX 页数:11 大小:262.69KB
下载 相关 举报
嵌入式Linux应用实验指导书.docx_第1页
第1页 / 共11页
嵌入式Linux应用实验指导书.docx_第2页
第2页 / 共11页
嵌入式Linux应用实验指导书.docx_第3页
第3页 / 共11页
嵌入式Linux应用实验指导书.docx_第4页
第4页 / 共11页
嵌入式Linux应用实验指导书.docx_第5页
第5页 / 共11页
点击查看更多>>
下载资源
资源描述

嵌入式Linux应用实验指导书.docx

《嵌入式Linux应用实验指导书.docx》由会员分享,可在线阅读,更多相关《嵌入式Linux应用实验指导书.docx(11页珍藏版)》请在冰豆网上搜索。

嵌入式Linux应用实验指导书.docx

嵌入式Linux应用实验指导书

 

嵌入式Linux应用

实验指导书

 

三亚学院理工学院

2014年8月修订

实验一、多文件makefile编写实验

一、实验目的

通过对编写及调试程序简单程序,熟练Vi编辑器的使用,GCC编译器GDB调试器及make工程编译器的使用。

二、实验内容

1)在Linux字符环境下,练习使用基本的文件操作命令(cprmmvlsmkdirclearpwdchmod等命令);

2)在同一目录下用Vi编辑makefile,然后用make验证所编写的makefile是否正确。

三、实验仪器

PC机,虚拟平台

四、预备知识

Linux基本命令

五、实验原理

1、文件编辑器vi

vi是在UNIX上被广泛使用的中英文编辑软件。

vi是visualeditor的缩写,是UNIX提供给用户的一个窗口化编辑环境。

基本上vi可以分为三种状态,分别是命令模式(commandmode)、插入模式(Insertmode)和底行模式(lastlinemode),各模式的功能区分如下:

1)vi的基本操作

(1)进入vi

  在系统提示符号输入vi及文件名称后,就进入vi全屏幕编辑画面:

   $vimyfile

  不过有一点要特别注意,就是您进入vi之后,是处于「命令行模式(commandmode)」,您要切换到「插入模式(Insertmode)」才能够输入文字。

(2)切换至插入模式(Insertmode)编辑文件

  在「命令行模式(commandmode)」下按一下字母「i」就可以进入「插入模式(Ins

ertmode)」,这时候你就可以开始输入文字了。

(3)Insert的切换

  您目前处于「插入模式(Insertmode)」,您就只能一直输入文字,如果您发现输错

了字!

想用光标键往回移动,将该字删除,就要先按一下「ESC」键转到「命令行模式(c

ommandmode)」再删除文字。

(4)退出vi及保存文件

  在「命令行模式(commandmode)」下,按一下「:

」冒号键进入「Lastlinemode

」,例如:

:

wfilename(输入「wfilename」将文章以指定的文件名filename保存)

:

wq(输入「wq」,存盘并退出vi)

:

q!

(输入q!

,不存盘强制退出vi)

2)命令行模式(commandmode)功能键

(1)插入模式

  按「i」切换进入插入模式「insertmode」,按“i”进入插入模式后是从光标当前位

置开始输入文件;

  按「a」进入插入模式后,是从目前光标所在位置的下一个位置开始输入文字;

  按「o」进入插入模式后,是插入新的一行,从行首开始输入文字。

(2)从插入模式切换为命令行模式

  按「ESC」键。

2、GNUC编译器

LINUX上可用的C编译器是GNUC编译器,它建立在自由软件基金会编程许可证的基础上,因此可以自由发布。

LINUX上的GNUC编译器(GCC)是一个全功能的ANCIC兼容编译器,而一般UNIX(如SCOUNIX)用的编译器是CC。

下面介绍GCC和一些GCC编译器最常用的选项。

1)使用GCC

通常后跟一些选项和文件名来使用GCC编译器。

GCC命令的基本用法如下:

gcc[options][filenames]

命令行选项指定的编译过程中的具体操作

2)GCC常用选项

GCC有超过100个的编译选项可用,这些选项中的许多可能永远都不会用到,但一些主要的选项将会频繁使用。

很多的GCC选项包括一个以上的字符,因此必须为每个选项指定各自的连字符,并且就像大多数LINUX命令一样不能在一个单独的连字符后跟一组选项。

例如,下面的命令是不同的:

gcc-p-ghello.c

gcc-pghello.c

第一条命令告诉GCC编译hello.c时为prof命令建立剖析(profile)信息并且把调试信息加入到可执行文件里。

第二条命令告诉GCC只为gprof命令建立剖析信息。

当不用任何选项编译一个程序时,GCC将建立(假定编译成功)一个名为a.out的可执行文件。

例如,

gcchello.c

编译成功后,当前目录下就产生了一个a.out文件。

也可用-o选项来为即将产生的可执行文件指定一个文件名来代替a.out。

例如:

gcc–ohellohello.c

此时得到的可执行文件就不再是a.out,而是hello。

GCC也可以指定编译器处理步骤多少。

-c选项告诉GCC仅把源代码编译为目标代码而跳过汇编和连接步骤。

这个选项使用得非常频繁因为它编译多个C程序时速度更快且更易于管理。

默认时GCC建立的目标代码文件有一个.o的扩展名。

3)执行文件

格式:

./可执行文件名

例:

./a.out

./hello

3、gdb调试工具

LINUX包含了一个叫gdb的GNU调试程序。

gdb是一个用来调试C和C++程序的强有力调试器。

它使你能在程序运行时观察程序的内部结构和内存的使用情况。

它具有以下一些功能:

·监视程序中变量的值;

·设置断点以使程序在指定的代码行上停止执行;

·一行行的执行代码。

以下是利用gdb进行调试的步骤:

1)调试编译代码

为了使gdb正常工作,必须使你的程序在编译时包含调试信息。

调试信息里包含你程序里的每个变量的类型和在可执行文件里的地址映射以及源代码的行号。

gdb利用这些信息使源代码和机器码相关联。

在编译时用–g选项打开调试选项。

4、makefile工程管理器

make是一个命令工具,是一个解释makefile中指令的命令工具。

1)makefile文件的基本结构

(1)需要由make工具创建的目标体,一般是目标文件或可执行文件,也可以是一个标签,对于标签这种特性,在后续的“伪目标”章节中会有叙述。

(2)目标文件或可执行文件所依赖的文件。

(3)创建每个目标体时所需要执行的命令,这一行必须以制表符(tab)开头。

target...:

prerequisites...

command

2)makefile变量

变量是在makefile中定义的名字,用来代表一个文本字符串,该文本字符串称为该变量的值,引用时用$引用。

两种变量定义形式:

(1)递归定义展开方式:

VAR=var,在引用该变量的时候进行替换,如果该变量中包含了对其他变量的引用,则在引用该变量的时候一次性将内嵌的变量全部展开。

(2)简单扩展方式:

VAR:

=var,在定义处展开,只展开一次,不包含对其他变量的引用。

makefile中几个常见的自动变量:

$<:

第一个依赖文件的名称;

$^:

所有不重复的依赖文件,以空格分开;

$@:

目标文件的完整名称;

$?

所有时间戳比目标文件新的依赖文件,并以空格分开;

六、实验步骤

1)编辑hello.c

打开Linux虚拟机,

$cd/home;进入/home目录,

$mkdirhello;新建文件夹hello

$vihello.c;打开vi编辑器,编辑hello.c

输入“i”进入编辑状态

编写一个1+2+…+10的程序

按“ESC”,输入“:

”保存退出

2)利用GCC编译生成可执行文件hello

$gcchello.c–ohello

$./hello;输出结果

3)利用GDB调试

$gcc–ghello.c–ohello

$gdbhello

$l;查看源代码

$b3;设置断点

$c;继续运行

4)编写makefile(在/home/maketest)

在/home/maketest目录下,输入附录中5个文件,

$vimakefile;打开vi编辑器,编辑makefile

$make;生成可执行文件main

$./main;输出结果

七、思考题

1)什么是makefile?

为什么编写makefie?

附录:

makefile所需代码

/*main.c*/

#include"mytool1.h"

#include"mytool2.h"

intmain()

{

mytool1_print("hellomytool1!

");

mytool2_print("hellomytool2!

");

return0;}

/*mytool1.c*/

#include"mytool1.h"

#include

voidmytool1_print(char*print_str)

{

printf("Thisismytool1print:

%s",print_str);}

/*mytool1.h*/

#ifndef_MYTOOL_1_H

#define_MYTOOL_1_H

voidmytool1_print(char*print_str);

#endif

/*mytool2.c*/

#include"mytool2.h"

#include

voidmytool2_print(char*print_str)

{

printf("Thisismytool2print:

%s",print_str);}

/*mytool2.h*/

#ifndef_MYTOOL_2_H

#define_MYTOOL_2_H

voidmytool2_print(char*print_str);

#endif

参考makefile:

main:

main.omytool1.omytool2.o

gcc-omainmain.omytool1.omytool2.o

main.o:

main.cmytool1.hmytool2.h

gcc-cmain.c

mytool1.o:

mytool1.cmytool1.h

gcc-cmytool1.c

mytool2.o:

mytool2.cmytool2.h

gcc-cmytool2.c

clean:

rm-f*.omain

实验二、主机开发环境搭建

一、实验目的

了解虚拟机与Linux操作系统的基础知识,熟悉虚拟机的安装与设置,掌握在Vmware上安装RedHatLinux9.0,掌握在Linux环境下交叉编译器的使用,超级终端的使用以及NFS配置。

二、实验内容

1)开发环境:

Linux+minicom

2)Linux:

定制或全部安装。

下载安装交叉编译器

3)设置windows下超级终端。

4)配置网络:

主要是配置NFS,需关闭iptables。

三、实验仪器

PC机,虚拟平台

四、预备知识

Linux基本命令

五、实验原理

1、交叉编译

所谓交叉编译就是在一个平台上生成可以在另一个平台上执行的代码。

由于编译的过程包括编译、链接等几个阶段,因此,嵌入式的交叉编译也包括交叉编译、交叉链接等过程,通常ARM的交叉编译器为arm-elf-gcc、arm-linux-gcc等,交叉链接器为arm-elf-ld、arm-linux-ld等

2、交叉调试

调试器和被调试进程运行在不同的机器上,调试器运行在PC机(宿主机),而被调试的进程则运行在各种专业调试板上(目标板)。

特点:

(1)调试器通过某种通信方式(串口、并口、网络、JTAG等)控制被调试进程。

(2)在目标机上一般会具备某种形式的调试代理,它负责与调试器共同配合完成对目标机上运行着的进程的调试。

这种调试代理可能是某些支持调试功能的硬件设备,也可能是某些专门的调试软件(如gdbserver)。

(3)目标机可能是某种形式的系统仿真器,通过在宿主机上运行目标机的仿真软件,整个调试过程可以在一台计算机上运行。

此时物理上虽然只有一台计算机,但逻辑上仍然存在着宿主机和目标机的区别

3、NFS为NetworkFileSystem的简称,最早是由Sun公司提出发展起来的,其目的就是让不同的机器、不同的操作系统之间通过网络可以彼此共享文件。

NFS可以让不同的主机通过网络将远端的NFS服务器共享出来的文件安装到自己的系统中,从客户端看来,使用NFS的远端文件就像是使用本地文件一样。

在嵌入式中使用NFS会使应用程序的开发变得十分方便,并且不用反复地进行烧写映像文件。

NFS的使用分为服务端和客户端,其中服务端是提供要共享的文件而客户端则通过挂载(“mount”)这一动作来实现对共享文件的访问操作。

在嵌入式开发中,通常NFS服务端在宿主机上运行,而客户端在目标板上运行。

六、实验步骤

1、安装交叉编译器

点击“VM”,“setting”

打开对话框,选择option,sharedfolders

右上方,选择“alwaysenabled,然后点击“ADD”打开对话框

选择共享目录,然后点next,finished,完成。

打开共享目录

$cd/mnt/hgfs;即可看到共享目录。

将共享目录中的交叉编译压缩包拷贝到,Linux目录下

$cparm-linux-gcc-4.3.2.tgz/home/;(以arm-linux-gcc-4.3.2.tgz为例)

2、安装交叉编译器

例:

arm-linux-gcc-4.3.2.tgz

1)tarxzfvarm-linux-gcc-4.3.2.tgz-C/

2)vi/etc/profile

在profile中添加环境变量

exportPATH=/usr/local/arm/4.3.2/bin:

$PATH

3)最后,是刚才添加的环境变量生效

source/etc/profile

3、编写hello.c程序,并进行交叉编译生成嵌入式Linux的可执行文件hello。

4、打开超级终端

5、配置nfs

(1)关闭防火墙

$/etc/init.d/iptablesstop

(2)启动portmap服务

$serviceportmaprestart

(3)启动nfs服务

$servicenfsrestart

(4)将宿主机(PC机)和目标机(实验箱)配置在同一网段

(5)两边ping通

(6)客户端挂载NFS服务器中的192.168.1.108:

/home/hello目录

$mount192.168.1.108:

/home/hello/mnt

6、复制程序并运行

$cphello/tmp

$cd/tmp

$./hello;输出结果

七、思考题

1)什么是交叉编译?

为什么要交叉编译?

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高中教育 > 语文

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1