嵌入式Linux实验一 Linux常用命令 - 图文 下载本文

(2)

(3)

(4)

(5)

五、实验小结(对实验现象、实验故障及处理方法、实验中存在的问题等进行分析和讨论。)

我们在做实验的过程中,遇到了两个问题,后面通过检查和比对发现漏掉了空格和斜杠。在这个实验中了解到了基本的linus命令的操作。接下去我会用更多的时间去多加熟悉这些命令以及对所遇到的问题进行反思。

福建师范大学协和学院《嵌入式Linux》实验报告

实验日期: 2017 年 3 月 14 日

学号: 124242014080 姓名: 谢志杰 实验台: D1 组员姓名: 谢志杰、洪剑锋

实验二 Linux下C语言开发环境

一、实验目的

1.熟悉Linux下C语言开发环境 2.掌握Vi、GCC和GDB的使用 3. 掌握Makefile文件的编写

3.学习和掌握Linux下C语言程序设计流程

二、实验环境

硬件:PC机一台

软件:VMware Workstation虚拟机和Linux操作系统

三、实验内容及步骤

1. 准备工作

(1)登录系统:在虚拟机中启动Linux系统,启动系统后需要输入用户名和密码,这里用root用户登录,密码123456;

(2)启动终端:在桌面右键->选择“在终端中运行”或选择应用程序->系统工具->终端; (3)在终端中执行Linux命令,就可以在这里输入Linux命令,并按回车键执行。

2.(1)使用vim编辑源程序,在终端中输入“vim hello.c”,然后按下列图输入源代码,编辑完成后存盘,退出vim。

图2-1 编辑源代码

(2)编译源代码:在终端下输入“gcc hello.c – o hello”进行编译。 (3)运行程序:在终端下输入“./hello”查看程序运行结果(结果截图) 3. GCC编辑器的使用

仍使用第2题的hello.c代码(以下5小题全执行完后截图)

(1)预处理阶段,使用GCC的选项“-E”,生成hello.c的预处理文件hello.i : 命令:gcc -E hello.c -o hello.i

(2)编译阶段,使用GCC的选项“-S”,只编译不汇编,生成汇编代码hello.s : 命令:gcc -S hello.i -o hello.s

(3)汇编阶段,使用GCC的选项“-c”,只汇编不链接,生成二进制目标代码hello.o: 命令:gcc -c hello.s -o hello.o

(4)链接阶段,将生成的*.o的二进制目标文件进行链接,生成可执行文件:

命令:gcc hello.o -o hello

(5)查看这四个阶段生成的所有文件,并运行可执行文件:

命令:ls

./hello

4. GDB基本命令的使用

GDB所提供的功能,使用Vim编辑源程序,在终端输入“vim greet.c”,输入如下源代码,编辑完成后存盘。此代码的功能为输出倒序main函数中定义的字符串,但结果没有输出显示,现通过调试的方式来解决程序中存在的问题,程序源代码如下(见Page 379-380): 1 #include 2 #include 3 #include

4 int display1(char *string); 5 int display2(char *string1); 6 int main() 7 {

8 char string[] = \ Linux\9 display1(string); 10 display2(string); 11 return 0; 12 }

13 int display1(char *string) 14 {

15 printf(\ original string is %s \\n\ string ); 16 }

17 int display2(char *string1) 18 {

19 char *string2; 20 int size , i;

21 size = strlen(string1);

22 string2 = (char *)malloc(size + 1); 23 for(i=0; i

24 string2[size-i]=string1[i]; 25 string2[size+1] = ' ';

26 printf(\ string afterward is %s\\n\ string2); 27 }

(1)用GCC编译生成有调试信息的可执行程序

gcc -g greet.c -o greet (2)运行greet:

./greet

见结果可见改程序没有能够倒序输出

(3)启动GDB调试:gdb greet

查看源代码:list (或l)

在23行(for循环处)设置断点:b 23 在26行(printf函数出)设置断点:b 26 查看断点设置情况:info b 运行代码:run (或r) 单步运行代码:n

查看暂停点变量值:p string2[size-i]

继续单步运行代码数次,并使用命令查看,发现string2[size-1]的值正确 继续运行程序:continue (或c)

程序在printf前停止运行,此时依次查看string2[0],string2[1], …,发现string[0]没有被正确赋值,而后面的复制都是正确的,这是,定位程序第24行,发现程序运行结果错误的原因在于“size-1”。由于i只能增到“size - 1”,这样string2[0]就永远不能被赋值而保持null,故输不出任何结果。

退出GDB: quit (或q)

重新编辑greet.c, 把其中的“string2[size - i] = string1[i]”改为“string2[size - i - 1] = string1[i];”即可。

使用GCC重新编译,查看运行结果:./greet (调试过程及程序运行结果截图) 5. Make工程管理器的使用 仍使用第2题的hello.c代码

(1)编写makefile文件:利用vim文本编辑器创建一个makefile文件,并将其保存到与hello.c相同的目录下,注意:命令前的缩进必须用Tab键。 CC = gcc hello: hello.o

$(CC) hello.o -o hello