资料介绍
1.实验目的
通过指定指令的vi操作练习,使读者能够熟练使用vi中的常见操作,并且熟悉vi的3种模式,如果读者能够熟练掌握实验内容中所要求的内容,则表明对vi的操作已经很熟练了。
2.实验内容
(1)在“/root”目录下建一个名为“vi”的目录。
(2)进入“vi”目录。
(3)将文件“/etc/inittab”复制到“vi”目录下。
(4)使用vi打开“vi”目录下的inittab。
(5)设定行号,指出设定initdefault(类似于“id:5:initdefault”)的所在行号。
(6)将光标移到该行。
(7)复制该行内容。
(8)将光标移到最后一行行首。
(9)粘贴复制行的内容。
(10)撤消第9步的动作。
(11)将光标移动到最后一行的行尾。
(12)粘贴复制行的内容。
(13)光标移到“si::sysinit:/etc/rc.d/rc.sysinit”。
(14)删除该行。
(15)存盘但不退出。
(16)将光标移到首行。
(17)插入模式下输入“Hello,this is vi world!”。
(18)返回命令行模式。
(19)向下查找字符串“0:wait”。
(20)再向上查找字符串“halt”。
(21)强制退出vi,不存盘。
分别指出每个命令处于何种模式下?
3.实验步骤
(1)mkdir /root/vi
(2)cd /root/vi
(3)cp /etc/inittab 。/
(4)vi 。/inittab
(5):set nu(底行模式)
(6)17《enter》(命令行模式)
(7)yy
(8)G
(9)p
(10)u
(11)$
(12)p
(13)21G
(14)dd
(15):w(底行模式)
(16)1G
(17)i 并输入“Hello,this is vi world!”(插入模式)
(18)Esc
(19)/0:wait(命令行模式)
(20)?halt
(21):q!(底行模式)
4.实验结果
该实验的最终结果是对“/root/inittab”增加了一行复制的内容:“id:5:initdefault”。
3.7.2 用gdb调试程序的bug
1.实验目的
通过调试一个有问题的程序,使读者进一步熟练使用vi操作,而且熟练掌握gcc编译命令及gdb的调试命令,通过对有问题程序的跟踪调试,进一步提高发现问题和解决问题的能力。这是一个很小的程序,只有35行,希望读者认真调试。
2.实验内容
(1)使用vi编辑器,将以下代码输入到名为greet.c的文件中。此代码的原意为输出倒序main函数中定义的字符串,但结果显示没有输出。代码如下所示:
#include 《stdio.h》
int display1(char *string);
int display2(char *string);
int main ()
{
char string[] = “Embedded Linux”;
display1 (string);
display2 (string);
}
int display1 (char *string)
{
printf (“The original string is %s \n”, string);
}
int display2 (char *string1)
{
char *string2;
int size,i;
size = strlen (string1);
string2 = (char *) malloc (size + 1);
for (i = 0; i 《 size; i++)
{
string2[size - i] = string1[i];
}
string2[size+1] = ‘ ’;
printf(“The string afterward is %s\n”,string2);
}
(2)使用gcc编译这段代码,注意要加上“-g”选项以方便之后的调试。
(3)运行生成的可执行文件,观察运行结果。
(4)使用gdb调试程序,通过设置断点、单步跟踪,一步步找出错误所在。
(5)纠正错误,更改源程序并得到正确的结果。
3.实验步骤
(1)在工作目录上新建文件greet.c,并用vi启动:vi greet.c。
(2)在vi中输入以上代码。
(3)在vi中保存并退出,使用命令“:wq”。
(4)用gcc编译:gcc -g greet.c -o greet。
(5)运行greet,使用命令“。/greet”,输出为:
The original string is Embedded Linux
The string afterward is
可见,该程序没有能够倒序输出。
(6)启动gdb调试:gdb greet。
(7)查看源代码,使用命令“l”。
(8)在30行(for循环处)设置断点,使用命令“b 30”。
(9)在33行(printf函数处)设置断点,使用命令“b 33”。
(10)查看断点设置情况,使用命令“info b”。
(11)运行代码,使用命令“r”。
(12)单步运行代码,使用命令“n”。
(13)查看暂停点变量值,使用命令“p string2[size - i]”。
(14)继续单步运行代码数次,并检查string2[size-1]的值是否正确。
(15)继续程序的运行,使用命令“c”。
(16)程序在printf前停止运行,此时依次查看string2[0]、string2[1]…,发现string[0]没有被正确赋值,而后面的赋值都是正确的,这时,定位程序第31行,发现程序运行结果错误的原因在于“size-1”。由于i只能增到“size-1”,这样string2[0]就永远不能被赋值而保持NULL,故不能输出任何结果。
(17)退出gdb,使用命令“q”。
(18)重新编辑greet.c,把其中的“string2[size - i] = string1[i]”改为“string2[size – i - 1] = string1[i];”即可。
(19)使用gcc重新编译:gcc -g greet.c -o greet。
(20)查看运行结果:。/greet
The original string is Embedded Linux
The string afterward is xuniL deddedbmE
这时,输出结果正确。
4.实验结果
将原来有错的程序经过gdb调试,找出问题所在,并修改源代码,输出正确的倒序显示字符串的结果。
3.7.3 编写包含多文件的makefile
1.实验目的
通过对包含多文件的makefile的编写,熟悉各种形式的makefile,并且进一步加深对makefile中用户自定义变量、自动变量及预定义变量的理解。
2.实验过程
(1)用vi在同一目录下编辑两个简单的hello程序,如下所示:
#hello.c
#include “hello.h”
int main()
{
printf(“Hello everyone!\n”);
}
#hello.h
#include 《stdio.h》
(2)仍在同一目录下用vi编辑makefile,且不使用变量替换,用一个目标体实现(即直接将hello.c和hello.h编译成hello目标体)。然后用make验证所编写的makefile是否正确。
(3)将上述makefile使用变量替换实现。同样用make验证所编写的makefile是否正确。
(4)编辑另一个makefile,取名为makefile1,不使用变量替换,但用两个目标体实现(也就是首先将hello.c和hello.h编译为hello.o,再将hello.o编译为hello),再用make的“-f”选项验证这个makefile1的正确性。
(5)将上述makefile1使用变量替换实现。
3.实验步骤
(1)用vi打开上述两个代码文件“hello.c”和“hello.h”。
(2)在shell命令行中用gcc尝试编译,使用命令:“gcc hello.c –o hello”,并运行hello可执行文件查看结果。
(3)删除此次编译的可执行文件:rm hello。
(4)用vi编辑makefile,如下所示:
hello:hello.c hello.h
gcc hello.c -o hello
(5)退出保存,在shell中键入:make,查看结果。
(6)再次用vi打开makefile,用变量进行替换,如下所示:
OBJS :=hello.o
CC :=gcc
hello:$(OBJS)
$(CC) $^ -o $@
(7)退出保存,在shell中键入make,查看结果。
(8)用vi编辑makefile1,如下所示:
hello:hello.o
gcc hello.o -o hello
hello.o:hello.c hello.h
gcc -c hello.c -o hello.o
(9)退出保存,在shell中键入:make -f makefile1,查看结果。
(10)再次用vi编辑makefile1,如下所示:
OBJS1 :=hello.o
OBJS2 :=hello.c hello.h
CC :=gcc
hello:$(OBJS1)
$(CC) $^ -o $@
$(OBJS1):$(OBJS2)
$(CC) -c $《 -o $@
在这里请注意区别“$^”和“$《”。
(11)退出保存,在shell中键入make -f makefile1,查看结果。
4.实验结果
各种不同形式的makefile都能正确地完成其功能。
3.7.4 使用autotools生成包含多文件的makefile
1.实验目的
通过使用autotools生成包含多文件的makefile,进一步掌握autotools的使用方法。同时,掌握Linux下安装软件的常用方法。
2.实验过程
(1)在原目录下新建文件夹auto。
(2)将上例的两个代码文件“hello.c”和“hello.h”复制到该目录下。
(3)使用autoscan生成configure.scan。
(4)编辑configure.scan,修改相关内容,并将其重命名为configure.in。
(5)使用aclocal生成aclocal.m4。
(6)使用autoconf生成configure。
(7)使用autoheader生成config.h.in。
(8)编辑makefile.am。
(9)使用automake生成makefile.in。
(10)使用configure生成makefile。
(11)使用make生成hello可执行文件,并在当前目录下运行hello查看结果。
(12)使用make install将hello安装到系统目录下,并运行,查看结果。
(13)使用make dist生成hello压缩包。
(14)解压hello压缩包。
(15)进入解压目录。
(16)在该目录下安装hello软件。
3.实验步骤
(1)mkdir 。/auto。
(2)cp hello.* 。/auto(假定原先在“hello.c”文件目录下)。
(3)命令:autoscan。
(4)使用vi编辑configure.scan为:
# -*- Autoconf -*-
# Process this file with autoconf to produce a configure script.
AC_PREREQ(2.59)
AC_INIT(hello, 1.0)
AM_INIT_AUTOMAKE(hello,1.0)
AC_CONFIG_SRCDIR([hello.h])
AC_CONFIG_HEADER([config.h])
# Checks for programs.
AC_PROG_CC
# Checks for libraries.
# Checks for header files.
# Checks for typedefs, structures, and compiler characteristics.
# Checks for library functions.
AC_OUTPUT(makefile)
(5)保存退出,并重命名为configure.in。
(6)运行:aclocal。
(7)运行:autoconf,并用ls查看是否生成了configure可执行文件。
(8)运行:autoheader。
(9)用vi编辑makefile.am文件为:
AUTOMAKE_OPTIONS=foreign
bin_PROGRAMS=hello
hello_SOURCES=hello.c hello.h
(10)运行:automake,然后运行automake –a。
(11)运行:。/configure。
(12)运行:make。
(13)运行:。/hello,查看结果是否正确。
(14)运行:make install。
(15)运行:hello,查看结果是否正确。
(16)运行:make dist。
(17)在当前目录下解压hello-1.0.tar.gz:tar –zxvf hello-1.0.tar.gz。
(18)进入解压目录:cd 。/hello-1.0。
(19)下面开始Linux下常见的安装软件步骤:。/configure。
(20)运行:make。
(21)运行:。/hello(在正常安装时这一步可省略)。
(22)运行:make install。
(23)运行:hello,查看结果是否正确。
4.实验结果
能够正确使用autotools生成makefile,并且能够成功安装短小的hello软件。
通过指定指令的vi操作练习,使读者能够熟练使用vi中的常见操作,并且熟悉vi的3种模式,如果读者能够熟练掌握实验内容中所要求的内容,则表明对vi的操作已经很熟练了。
2.实验内容
(1)在“/root”目录下建一个名为“vi”的目录。
(2)进入“vi”目录。
(3)将文件“/etc/inittab”复制到“vi”目录下。
(4)使用vi打开“vi”目录下的inittab。
(5)设定行号,指出设定initdefault(类似于“id:5:initdefault”)的所在行号。
(6)将光标移到该行。
(7)复制该行内容。
(8)将光标移到最后一行行首。
(9)粘贴复制行的内容。
(10)撤消第9步的动作。
(11)将光标移动到最后一行的行尾。
(12)粘贴复制行的内容。
(13)光标移到“si::sysinit:/etc/rc.d/rc.sysinit”。
(14)删除该行。
(15)存盘但不退出。
(16)将光标移到首行。
(17)插入模式下输入“Hello,this is vi world!”。
(18)返回命令行模式。
(19)向下查找字符串“0:wait”。
(20)再向上查找字符串“halt”。
(21)强制退出vi,不存盘。
分别指出每个命令处于何种模式下?
3.实验步骤
(1)mkdir /root/vi
(2)cd /root/vi
(3)cp /etc/inittab 。/
(4)vi 。/inittab
(5):set nu(底行模式)
(6)17《enter》(命令行模式)
(7)yy
(8)G
(9)p
(10)u
(11)$
(12)p
(13)21G
(14)dd
(15):w(底行模式)
(16)1G
(17)i 并输入“Hello,this is vi world!”(插入模式)
(18)Esc
(19)/0:wait(命令行模式)
(20)?halt
(21):q!(底行模式)
4.实验结果
该实验的最终结果是对“/root/inittab”增加了一行复制的内容:“id:5:initdefault”。
3.7.2 用gdb调试程序的bug
1.实验目的
通过调试一个有问题的程序,使读者进一步熟练使用vi操作,而且熟练掌握gcc编译命令及gdb的调试命令,通过对有问题程序的跟踪调试,进一步提高发现问题和解决问题的能力。这是一个很小的程序,只有35行,希望读者认真调试。
2.实验内容
(1)使用vi编辑器,将以下代码输入到名为greet.c的文件中。此代码的原意为输出倒序main函数中定义的字符串,但结果显示没有输出。代码如下所示:
#include 《stdio.h》
int display1(char *string);
int display2(char *string);
int main ()
{
char string[] = “Embedded Linux”;
display1 (string);
display2 (string);
}
int display1 (char *string)
{
printf (“The original string is %s \n”, string);
}
int display2 (char *string1)
{
char *string2;
int size,i;
size = strlen (string1);
string2 = (char *) malloc (size + 1);
for (i = 0; i 《 size; i++)
{
string2[size - i] = string1[i];
}
string2[size+1] = ‘ ’;
printf(“The string afterward is %s\n”,string2);
}
(2)使用gcc编译这段代码,注意要加上“-g”选项以方便之后的调试。
(3)运行生成的可执行文件,观察运行结果。
(4)使用gdb调试程序,通过设置断点、单步跟踪,一步步找出错误所在。
(5)纠正错误,更改源程序并得到正确的结果。
3.实验步骤
(1)在工作目录上新建文件greet.c,并用vi启动:vi greet.c。
(2)在vi中输入以上代码。
(3)在vi中保存并退出,使用命令“:wq”。
(4)用gcc编译:gcc -g greet.c -o greet。
(5)运行greet,使用命令“。/greet”,输出为:
The original string is Embedded Linux
The string afterward is
可见,该程序没有能够倒序输出。
(6)启动gdb调试:gdb greet。
(7)查看源代码,使用命令“l”。
(8)在30行(for循环处)设置断点,使用命令“b 30”。
(9)在33行(printf函数处)设置断点,使用命令“b 33”。
(10)查看断点设置情况,使用命令“info b”。
(11)运行代码,使用命令“r”。
(12)单步运行代码,使用命令“n”。
(13)查看暂停点变量值,使用命令“p string2[size - i]”。
(14)继续单步运行代码数次,并检查string2[size-1]的值是否正确。
(15)继续程序的运行,使用命令“c”。
(16)程序在printf前停止运行,此时依次查看string2[0]、string2[1]…,发现string[0]没有被正确赋值,而后面的赋值都是正确的,这时,定位程序第31行,发现程序运行结果错误的原因在于“size-1”。由于i只能增到“size-1”,这样string2[0]就永远不能被赋值而保持NULL,故不能输出任何结果。
(17)退出gdb,使用命令“q”。
(18)重新编辑greet.c,把其中的“string2[size - i] = string1[i]”改为“string2[size – i - 1] = string1[i];”即可。
(19)使用gcc重新编译:gcc -g greet.c -o greet。
(20)查看运行结果:。/greet
The original string is Embedded Linux
The string afterward is xuniL deddedbmE
这时,输出结果正确。
4.实验结果
将原来有错的程序经过gdb调试,找出问题所在,并修改源代码,输出正确的倒序显示字符串的结果。
3.7.3 编写包含多文件的makefile
1.实验目的
通过对包含多文件的makefile的编写,熟悉各种形式的makefile,并且进一步加深对makefile中用户自定义变量、自动变量及预定义变量的理解。
2.实验过程
(1)用vi在同一目录下编辑两个简单的hello程序,如下所示:
#hello.c
#include “hello.h”
int main()
{
printf(“Hello everyone!\n”);
}
#hello.h
#include 《stdio.h》
(2)仍在同一目录下用vi编辑makefile,且不使用变量替换,用一个目标体实现(即直接将hello.c和hello.h编译成hello目标体)。然后用make验证所编写的makefile是否正确。
(3)将上述makefile使用变量替换实现。同样用make验证所编写的makefile是否正确。
(4)编辑另一个makefile,取名为makefile1,不使用变量替换,但用两个目标体实现(也就是首先将hello.c和hello.h编译为hello.o,再将hello.o编译为hello),再用make的“-f”选项验证这个makefile1的正确性。
(5)将上述makefile1使用变量替换实现。
3.实验步骤
(1)用vi打开上述两个代码文件“hello.c”和“hello.h”。
(2)在shell命令行中用gcc尝试编译,使用命令:“gcc hello.c –o hello”,并运行hello可执行文件查看结果。
(3)删除此次编译的可执行文件:rm hello。
(4)用vi编辑makefile,如下所示:
hello:hello.c hello.h
gcc hello.c -o hello
(5)退出保存,在shell中键入:make,查看结果。
(6)再次用vi打开makefile,用变量进行替换,如下所示:
OBJS :=hello.o
CC :=gcc
hello:$(OBJS)
$(CC) $^ -o $@
(7)退出保存,在shell中键入make,查看结果。
(8)用vi编辑makefile1,如下所示:
hello:hello.o
gcc hello.o -o hello
hello.o:hello.c hello.h
gcc -c hello.c -o hello.o
(9)退出保存,在shell中键入:make -f makefile1,查看结果。
(10)再次用vi编辑makefile1,如下所示:
OBJS1 :=hello.o
OBJS2 :=hello.c hello.h
CC :=gcc
hello:$(OBJS1)
$(CC) $^ -o $@
$(OBJS1):$(OBJS2)
$(CC) -c $《 -o $@
在这里请注意区别“$^”和“$《”。
(11)退出保存,在shell中键入make -f makefile1,查看结果。
4.实验结果
各种不同形式的makefile都能正确地完成其功能。
3.7.4 使用autotools生成包含多文件的makefile
1.实验目的
通过使用autotools生成包含多文件的makefile,进一步掌握autotools的使用方法。同时,掌握Linux下安装软件的常用方法。
2.实验过程
(1)在原目录下新建文件夹auto。
(2)将上例的两个代码文件“hello.c”和“hello.h”复制到该目录下。
(3)使用autoscan生成configure.scan。
(4)编辑configure.scan,修改相关内容,并将其重命名为configure.in。
(5)使用aclocal生成aclocal.m4。
(6)使用autoconf生成configure。
(7)使用autoheader生成config.h.in。
(8)编辑makefile.am。
(9)使用automake生成makefile.in。
(10)使用configure生成makefile。
(11)使用make生成hello可执行文件,并在当前目录下运行hello查看结果。
(12)使用make install将hello安装到系统目录下,并运行,查看结果。
(13)使用make dist生成hello压缩包。
(14)解压hello压缩包。
(15)进入解压目录。
(16)在该目录下安装hello软件。
3.实验步骤
(1)mkdir 。/auto。
(2)cp hello.* 。/auto(假定原先在“hello.c”文件目录下)。
(3)命令:autoscan。
(4)使用vi编辑configure.scan为:
# -*- Autoconf -*-
# Process this file with autoconf to produce a configure script.
AC_PREREQ(2.59)
AC_INIT(hello, 1.0)
AM_INIT_AUTOMAKE(hello,1.0)
AC_CONFIG_SRCDIR([hello.h])
AC_CONFIG_HEADER([config.h])
# Checks for programs.
AC_PROG_CC
# Checks for libraries.
# Checks for header files.
# Checks for typedefs, structures, and compiler characteristics.
# Checks for library functions.
AC_OUTPUT(makefile)
(5)保存退出,并重命名为configure.in。
(6)运行:aclocal。
(7)运行:autoconf,并用ls查看是否生成了configure可执行文件。
(8)运行:autoheader。
(9)用vi编辑makefile.am文件为:
AUTOMAKE_OPTIONS=foreign
bin_PROGRAMS=hello
hello_SOURCES=hello.c hello.h
(10)运行:automake,然后运行automake –a。
(11)运行:。/configure。
(12)运行:make。
(13)运行:。/hello,查看结果是否正确。
(14)运行:make install。
(15)运行:hello,查看结果是否正确。
(16)运行:make dist。
(17)在当前目录下解压hello-1.0.tar.gz:tar –zxvf hello-1.0.tar.gz。
(18)进入解压目录:cd 。/hello-1.0。
(19)下面开始Linux下常见的安装软件步骤:。/configure。
(20)运行:make。
(21)运行:。/hello(在正常安装时这一步可省略)。
(22)运行:make install。
(23)运行:hello,查看结果是否正确。
4.实验结果
能够正确使用autotools生成makefile,并且能够成功安装短小的hello软件。
下载该资料的人也在下载
下载该资料的人还在阅读
更多 >
- 嵌入式linux报警,嵌入式Linux下LED报警灯驱动设计及编程.doc
- Arduino的实验例程之实时时钟DS1302的详细资料说明 25次下载
- Linux下C语言编程入门教程详细说明 39次下载
- 信号与定时器的使用在Linux系统下的C语言程序免费下载
- LINUX系统教程之如何在Linux系统下进行编程 9次下载
- Linux操作系统实用教程之如何进行Linux系统下的编程管理 5次下载
- Linux操作系统下C语言编程入门.pdf 95次下载
- Linux下C编程 嵌入式开发 31次下载
- 基于Linux操作系统下C语言编程入门 11次下载
- linux 下C编程 9次下载
- Linux下C语言编程概述 0次下载
- Linux基础命令之实验内容与小结 0次下载
- Linux下C编程电子书 0次下载
- linux下c语言编程pdf 0次下载
- Linux操作系统-C语言编程入门-pdf
- Linux 下GCC的编译 2026次阅读
- Linux 下的make 工具和 Makefile 859次阅读
- 深入探索Linux中的C语言 1228次阅读
- Linux需要学习哪些内容? 1460次阅读
- Linux系统编程有哪些优势 1224次阅读
- 虚拟机:Linux查看tar包文件内容的方法 6541次阅读
- 为什么Linus不用C井语言写Linux系统 3662次阅读
- 嵌入式系统C语言编程实战教程合集 9264次阅读
- 浅谈嵌入式Linux下的C语言编程知识要点 4572次阅读
- 嵌入式Linux下的C编程知识要点汇总 3040次阅读
- 基于嵌入式linux系统下的串口编程具体设置详解 6843次阅读
- 关于Linux下多线程编程技术学习总结 2135次阅读
- mybatis使用经验小结 1973次阅读
- ZedBoard上的点灯签名实验(三)linux内核引导 746次阅读
- Linux下ARM 和单片机的串口通信设计 3431次阅读
下载排行
本周
- 1TC358743XBG评估板参考手册
- 1.36 MB | 330次下载 | 免费
- 2开关电源基础知识
- 5.73 MB | 6次下载 | 免费
- 3100W短波放大电路图
- 0.05 MB | 4次下载 | 3 积分
- 4嵌入式linux-聊天程序设计
- 0.60 MB | 3次下载 | 免费
- 5基于FPGA的光纤通信系统的设计与实现
- 0.61 MB | 2次下载 | 免费
- 6基于FPGA的C8051F单片机开发板设计
- 0.70 MB | 2次下载 | 免费
- 751单片机窗帘控制器仿真程序
- 1.93 MB | 2次下载 | 免费
- 8基于51单片机的RGB调色灯程序仿真
- 0.86 MB | 2次下载 | 免费
本月
- 1OrCAD10.5下载OrCAD10.5中文版软件
- 0.00 MB | 234315次下载 | 免费
- 2555集成电路应用800例(新编版)
- 0.00 MB | 33564次下载 | 免费
- 3接口电路图大全
- 未知 | 30323次下载 | 免费
- 4开关电源设计实例指南
- 未知 | 21548次下载 | 免费
- 5电气工程师手册免费下载(新编第二版pdf电子书)
- 0.00 MB | 15349次下载 | 免费
- 6数字电路基础pdf(下载)
- 未知 | 13750次下载 | 免费
- 7电子制作实例集锦 下载
- 未知 | 8113次下载 | 免费
- 8《LED驱动电路设计》 温德尔著
- 0.00 MB | 6653次下载 | 免费
总榜
- 1matlab软件下载入口
- 未知 | 935054次下载 | 免费
- 2protel99se软件下载(可英文版转中文版)
- 78.1 MB | 537796次下载 | 免费
- 3MATLAB 7.1 下载 (含软件介绍)
- 未知 | 420026次下载 | 免费
- 4OrCAD10.5下载OrCAD10.5中文版软件
- 0.00 MB | 234315次下载 | 免费
- 5Altium DXP2002下载入口
- 未知 | 233046次下载 | 免费
- 6电路仿真软件multisim 10.0免费下载
- 340992 | 191185次下载 | 免费
- 7十天学会AVR单片机与C语言视频教程 下载
- 158M | 183278次下载 | 免费
- 8proe5.0野火版下载(中文版免费下载)
- 未知 | 138040次下载 | 免费
评论
查看更多