北京科技大学嵌入式系统实验2---嵌入式 Linux 文件编程
对应一条机器语言。汇编相对于编译过程比较简单,根据汇编指令和机器指令的对照 表一一翻译即可,汇编的结果是产生一个扩展名为.o 的目标文件。 (4)链接(Linking) : 目标代码不能直接执行,要想将目标代码变成可执行程序,还需要进行链接操作。链 接器 ld 把文件中使用到的 C 库程序全部都链接到一起, 解决符号依赖和库依赖关系, 最终才会生成真正可以执行的可执行程序。
4. 统计 20 个学生成绩的程序:
#include <stdio.h> int main(void) { int i,a[20],n,j,k; printf("输入 20 个学生的成绩:"); for(i=0;i<20;i++) scanf("%d",&a[i]); n=j=k=0; while(--i>0) { switch(a[i]/10) { case 10: case 9: case 8:printf("%d:成绩为 A\n",a[i]);n++;break; case 7: case 6:printf("%d:成绩为 B\n",a[i]);j++;break; case 5: case 4: case 3: case 2: case 1: case 0:printf("%d:成绩为 C\n",a[i]);k++;break; } } printf("成绩为 A 的学生人数:%d\n",n); printf("成绩为 B 的学生人数:%d\n",j); printf("成绩为 C 的学生人数:%d\n",k); return 0; }
my_print2
printf ("The string is %s\n", string); } my_print2 (char *string) { char *string2; strlen (string); malloc (size + 1); size; i++) string[i]; printf } 2. Hello world 的三个子程序: (1)print.h #include<stdio.h> void printhello(); (2)print.c #include"print.h" void printhello() { printf("Hello, world\n"); } (3)main.c #include "print.h" int main(void){ printhello(); return 0; } ("The int size, i; size = string2 = (char *) for (i = 0; i < string2[size - i] = string2[size+1] = `\0'; string printed
北京科技大学实验报告
学院:自动化学院 专业: 班级:
姓名:
学号:
实验日期: 2018 年 4 月 2 日
实验名称:
嵌入式 Linux 编程基础实验
实验目的:
1.掌握 GCC 编译器的基本使用方法; 2.掌握 GDB 调试器的基本使用方法; 3.掌握 makefile 工程管理文件的编写方法;
实验仪器: Linux 操作系统,:
2. 静态库与动态库:
(1)静态库是指编译链接时,把库文件的代码全部加入到可执行文件中,因此生成的 文件比较大,但在运行时也就不再需要库文件了。其后缀名一般为“.a” 。 (2)动态库与之相反,在编译链接时并没有把库文件的代码加入到可执行文件中,而是 在程序执行时由运行时链接文件加载库,这样可以节省系统的存储空间。动态库一般 后缀名为“.so” 。
string2[size - i] =
string2[size+1] = `\0';
printf ("The string printed backward is %s\n", string2);
4.要编译一个 Hello world,需要如下三个文件,写出相应的 makefile 文件,并进行编译 运行。 (1)print.h #include<stdio.h> void printhello(); (2)print.c #include"print.h" void printhello() { printf("Hello, world\n"); } (3)main.c #include "print.h" int main(void){ printhello(); return 0; } 5.设某个程序由四个 C 语言源文件组成,分别是 a.c、b.c、c.c、d.c。其中 b.c 和 d.c 都使用了 defs.h 中的声明,最后生成的可执行文件名为 main。试分别用两种 方法为该程序编写相应的 makefile 文件:一种不用宏,一种使用宏。 6.编程练习 : (1) 编写一个程序输入 20 个学生的成绩, 成绩在 80-100 分列为 A, 60-79 分列 为 B, 60 分以下列为 C,然后输出得 A、B、C 的各有几人; (2)编写一个程序实现从控制台里读取 N(N>3)个整型参数,然后用冒泡排序法 对这些数字排序; (3)写两个 makefile 文件,将上面(1) 、 (2)所写的代码分别在 makefile 中实现自动编 译。
3. GCC 编译器的基本用法:
GCC 最基本的使用格式:gcc [options] [filenames]其中:options 就是编译器所需 要的参数选项;filenames 给出相关的文件名称。 4.GDB 调试的功能: (1)运行程序,设置所有的能影响程序运行的参数和环境。 (2)控制程序在指定的条件下停止运行。 (3)当程序停止时,可以检查程序的状态。 (4)修改程序的错误,并重新运行程序。 (5)动态监视程序中变量的值。 (6)可以单步逐行执行代码,观察程序的运行状态。 (7)分析崩溃程序产生的 core 文件。 5.makefile 文件应用: makefile文件用于描述系统中模块之间的相互依赖关系,以及产生目标文件所要执行的命 令,所以,一个makefile文件由依赖关系和规则两部分内容组成。依赖关系由一个目标和
5. 冒泡法排序程序:
#include<stdio.h> int main() { int a[10],i,j,t; for(i=0;i<10;i++) scanf("%d",&a[i]); for(j=1;j<10;j++) for(i=0;i<10-j;i++) if(a[i]<a[i+1]) {t=a[i]; a[i]=a[i+1]; a[i+1]=t;} for(i=0;i<10;i++) printf("%-3d",a[i]);
使用 GCC 编译程序时,编译过程可以被细化为以下四个阶段: (1)预处理(Pre-Processing) : 预处理是指对源程序中的伪指令(即以#开头的指令)和特殊符号进行处理过程。伪 指令包括宏定义指令、条件编译指令及头文件包含指令。预处理后输出 .i 文件。 (2)编译(Compiling) : 编译就是把预处理完的 .i 文件进行一系列词法分析、 语法分析、 语义分析及优化后生 成相应的汇编代码文件,即 .s 文件。在使用 gcc 进行编译时,缺省情况下,不输出 这个汇编代码的文件。如果需要,可以在编译时指定-S 选项。这样,就会输出同名的 汇编语言文件。 (3)汇编(Assembling) : 汇编的过程实际上是将汇编语言代码翻译成机器语言的过程。每一个汇编语句几乎都
一组该目标所依赖的源文件组成。这里所说的目标就是将要创建或更新的文件,最常见的 是可执行文件。规则用来说明怎样使用所依赖的文件来建立目标文件。 当make命令运行时,会读取makefile文件来确定要建立的目标文件或其他文件,然后对 源文件的日期和时间进行比较,从而决定使用哪些规则来创建目标文件。一般情况下,在 建立起最终的目标文件之前,免不了要建立一些中间性质的目标文件。这时,make命令 也是使用makefile文件来确定这些目标文件的创建顺序,以及用于它们的规则序列。
实验数据: 1. 被调试程序:
#include <stdio.h> #include <string.h> #include<stdlib.h> main () { char my_string[] = "hello there";
my_print (my_string); (my_string); } my_print (char *string) {
2. 不使用宏编写的 makefile 程序文件:
main:main.o a.o b.o c.o d.o gcc -o main main.o a.o b.o c.o d.o a.o:a.c gcc -c a.c b.o:b.c defs.h gcc -c b.c c.o:c.c gcc -c c.c d.o:d.c defs.h gcc -c d.c
实验内容与步骤:
1. 用 GCC 编译器编译一个文件,并进行优化前后的运行时间对比; 2. 分别采用动态链接库和静态链接库两种方式对一个 C 语言源文件进行编译,并对 比生成的可执行文件的大小; 3. 用 GDB 调试器调试下面的程序,并写出调试步骤。 #include <stdio.h> #include <string.h> #include<stdlib.h> main () { char my_string[] = "hello there"; my_print my_print2 (my_string); } my_print (char *string) { printf ("The string is %s\n", string); } my_print2 (char *string) { char *string2; size = strlen (string); (char *) malloc (size + 1); 0; i < size; i++) string[i]; } int size, i; string2 = for (i = (my_string);
嵌入式实验报告二
嵌入式实验报告二实验时间2013/6/9 报告人一、实验目的:1.学习cygwin;2.通过上机实验,使学生验证、巩固和充实所学理论知识,加深对相关内容的理解,了解嵌入式Linux的工具链,掌握基于Linux的C程序设计。
二、实验要求:1.安装cygwin;2.学习GCC的使用和Makefile的编写。
3.编程实现文件拷贝功能。
三、问题:1.简述Gcc的常用选项并举例说明。
Gcc基本使用格式:$ gcc [ 选项] <文件名>命令行中gcc表示我们是用gcc来编译我们的源程序,[选项]表示我们要求编译器给我们输出的文件为何种类型,相当于一种约束。
常见选项:-o :将源文件经过gcc处理过的结果输出,这个结果文件可能是预处理文件、汇编文件、目标文件或者最终的可执行文件。
比如:gcc hello.c –o hello 把源文件hello.c 经gcc编译后生成可执行的文件输出为hello-E :只激活源程序的预处理,这个不生成文件,你需要把它重新定向到一个输出文件里面。
比如:gcc –E hello.c –o hello.i 把源文件hello.c经gcc预处理后的文件输出为hello. i。
-c :只激活源程序的预处理,编译,和汇编,也就是他只把程序生成obj文件。
比如:gcc –c hello.c –o hello.o 把源文件hello.c经gcc 预处理,编译,和汇编后的文件输出为hello.o。
-S :只激活源程序的预处理和编译,就是指把文件编译成为汇编代码。
比如:gcc –S hello.c –o hello.s把源文件hello.c经gcc 预处理,编译后的文件输出为hello.s。
-g :表示我们要求编译器在编译的时候提供我们以后对程序进行调试的信息。
2.简述Makefile编写规则,举例说明。
makefile 编写规则:(1)以“#”开始的行为注释(2)文件依赖关系为:target: components //表示的是依赖关系TAB rule //编写规则,TAB表示那是一个TAB键例如有如下:/* main.c */#include "mytool1.h"#include "mytool2.h"int main(int argc,char **argv){mytool1_print("hello");mytool2_print("hello");}/* mytool1.c */#include "mytool1.h"void mytool1_print(char *print_str){printf("This is mytool1 print %s\n",print_str);}/* mytool2.c */#include "mytool2.h"void mytool2_print(char *print_str){printf("This is mytool2 print %s\n",print_str);}/* mytool1.h */#ifndef _MYTOOL_1_H#define _MYTOOL_1_Hvoid mytool1_print(char *print_str);#endif/* mytool2.h */#ifndef _MYTOOL_2_H#define _MYTOOL_2_Hvoid mytool2_print(char *print_str);#endif可以这样来编译gcc -c main.cgcc -c mytool1.cgcc -c mytool2.cgcc -o main main.o mytool1.o mytool2.o这样的话我们也可以产生main程序,而且也不时很麻烦在我们执行make之前,我们要先编写一个非常重要的文件——Makefile。
嵌入式实验报告二
嵌入式实验报告二嵌入式实验报告二二实验时间20__/6/9报告人一、实验目的:1.学习 cygwin; 2.通过上机实验,使学生验证、巩固和充实所学理论知识,加深对相关内容的理解,了解嵌入式 Linu_ 的工具链,掌握基于 Linu_ 的 C 程序设计。
二、实验要求:1.安装 cygwin; 2.学习 GCC 的使用和 Makefile 的编写。
3.编程实现文件拷贝功能。
三、问题:1.简述 Gcc 的常用选项并举例说明。
Gcc 基本使用格式:$ gcc[ 选项 ]<文件名> 命令行中 gcc 表示我们是用 gcc 来编译我们的源程序,[选项]表示我们要求编译器给我们输出的文件为何种类型,相当于一种约束。
常见选项:-o ::将源文件经过 gcc 处理过的结果输出,这个结果文件可能是预处理文件、汇编文件、目标文件或者最终的可执行文件。
比如:gcc hello.c ndash;o hello 把源文件 hello.c 经 gcc 编译后生成可执行的文件输出为 hello -E ::只激活源程序的预处理,这个不生成文件,你需要把它重新定向到一个输出文件里面。
比如:gcc ndash;E hello.c ndash;o hello.i 把源文件 hello.c 经 gcc 预处理后的文件输出为hello.i。
-c ::只激活源程序的预处理,编译,和汇编,也就是他只把程序生成obj 文件。
比如:gcc ndash;c hello.c ndash;o hello.o 把源文件 hello.c 经 gcc 预处理,编译,和汇编后的文件输出为hello.o。
-S ::只激活源程序的预处理和编译,就是指把文件编译成为汇编代码。
比如:gcc ndash;S hello.c ndash;o hello.s 把源文件hello.c 经 gcc 预处理,编译后的文件输出为 hello.s。
-g ::表示我们要求编译器在编译的时候提供我们以后对程序进行调试的信息。
嵌入式实验一(嵌入式 Linux 开发环境的搭建及 Makefile 应用)
实验一嵌入式 Linux 开发环境的搭建及 Makefile 应用一、实验目的:1.熟悉嵌入式 Linux 开发基本过程及基本命令。
2.了解嵌入式 Linux 开发中各种工具的基本用途。
3.搭建好嵌入式 Linux 的开发环境。
4.通过对包含多文件的 Makefile 的编写,熟悉各种形式的Makefile 编写,加深对 Makefile 中用户自定义变量、自动变量及预定义变量的理解。
二、实验内容:1.安装 Vmware 及 Ubuntu;2.熟悉 Linux 下相关命令:属性查询、修改,路径、目录的查询、修改、删除,压缩、解压等;3.熟悉编辑工具;4.熟悉 makefile 文件的基本作用(编写一个包含多文件的Makefile)。
三、Make 工程管理器:Makefile如今能得以广泛应用,这还得归功于它被包含在Unix系统中。
在make诞生之前,Unix系统的编译系统主要由“make”、“install”shell脚本程序和程序的源代码组成。
它可以把不同目标的命令组成一个文件,而且可以抽象化依赖关系的检查和存档。
这是向现代编译环境发展的重要一步。
1977年,斯图亚特·费尔德曼在1贝尔实验室里制作了这个软件。
2003年,斯图亚特·费尔德曼因发明了这样一个重要的工具而接受了美国计算机协会(ACM)颁发的软件系统奖。
Makefile文件是可以实现自动化编译,只需要一个“make”命令,整个工程就能完全自动编译,极大的提高了软件开发的效率。
目前虽有众多依赖关系检查工具,但是make是应用最广泛的一个。
一个程序员会不会写makefile,从一个侧面说明了这个程序员是否具备完成大型工程的能力。
1.Makefile 基本规则一个简单的 Makefile 语句由目标、依赖条件、指令组成。
smdk6400_config :unconfig@mkdir -p $(obj)include $(obj)board/samsung/smdk6400其中:smdk6400_config:目标;unconfig:先决条件;@mkdir -p $(obj)include $(obj)board/samsung/smdk6400:指令。
北京科技大学嵌入式系统实验4---嵌入式Linux 进程控制实验
2. 先运行子进程,后运行父进程,程序如下:
对 wait.c 文件进行编译生成可执行文件 wait,运行后发现首先运行的是子进程, 子进程的 ID 为 3920,子进程运行结束后才开始父进程的运行,父进程的 ID 为 3325,满足本实验创建一子进程,父进程需等待子进程运行结束后才能执行的要 求。
实验仪器:
linux 操作系统 64 位
实验原理:
1.创建子进程 fork() 所需的头文件:#include <unistd.h> #include<sys/types.h> 函数格式:pid_t fork(void) 函数功能:创建子进程。 fork()函数被调用一次,却返回两次. 2.创建子进程 vfork() 所需的头文件:#include <unistd.h> #include<sys/types.h> 函数格式:pid_t vfork(void) 函数功能:创建子进程。 返回值:如果成功,则在父进程会返回新建立的子进程代码(PID),而在新建立的 子进程中则返回 0。如果 vfork()函数失败则直接返回-1,失败原因存于 errno 中。 3.fork()函数与 vfock()函数都是创建一个进程,它们有以下三点区别: (1)fork()函数子进程拷贝父进程的数据段和堆栈段;vfork()函数子进程与父进程共 享数据段。 (2)fork()函数父子进程的执行次序不确定;vfork()函数保证子进程先运行。 (3)vfork()函数在调用 exec()或 exit()之前与父进程数据是共享的,在它调用 exec() 或 exit()之后父进程才可能被调度运行。如果在调用这两个函数之前子进程依赖
实验总结与心得: 本次的实验内容是关于嵌入式 linux 进程控制的实验,在以前没有接触这门
linux嵌入式实验2
嵌入式实验报告(二) 姓名:董辰辰 学号:111180031 专业:电子信息与科学一、 实验目的1、 了解Linux 内核源代码的目录结构以及各个目录的相关内容。
2、 了解Linux 内核各配置选项内容和作用。
3、 掌握Linux 内核的编译过程。
4、 了解嵌入式操作系统中文件系统的类型和作用。
5、 了解JFFS2文件系统的优点以及在嵌入式系统中的作用。
6、 掌握利用busybox 软件制作嵌入式文件系统的方法。
7、 掌握嵌入式Linux 文件系统的挂载过程。
二、实验内容和要求1、配置完整的内核,尽可能理解配置选项在操作系统中的作用。
2、以 Busybox 为基础,构建一个合适的文件系统。
3、制作ramdiak 文件系统映像。
4、将自己编译生成的内核和文件系统下载进开发板。
5、讨论自己的嵌入式系统所具备的的功能。
6、比较romfs 、ext2fs/ext3fs 、JFFS2等文件系统的优缺点。
三、实验设计和分析实验分为两个部分:Linux 内核配置编译和文件系统构建。
本次实验的目的就是自己搞一个内核和文件系统。
当然自己编写代码是不太可能啦,而是根据linux 提供的源代码自己配置编译出一个自己的内核,在构建一个自己需要的文件系统。
实验室用的内核版本是2.6.35.7 实验室的开发板有了内核和文件系统才能够对其进行开发。
内核是操作系统最基本的部分,可以说是一个软件,实验室的开发板有处理器、内存、Flash 闪存等硬件组成,可以说内核是调度它们的软件,有了内核各种应用程序才能够调用硬件资源,总的来说内核文件是操作系统的核心,负责系统的进程管理,内存管理,设备和文件管理等,决定着系统的性能和稳定性。
文件系统是操作系统的一个重要组成部分,通过对操作系统所管理的存储空间的抽象,向用户提供统一的、对象化的访问接口,屏蔽对物理设备的直接操作和资源管理。
我觉得内核的本质其实是程序,而文件系统是设置一些规则来用来管理存储的,在一个完整的操作系统中两者都是不可或缺的,内核在加载的时候需要有很多的挂载指令,应该挂载的就是文件系统的文件夹,比如将proc 文件系统挂载到proc 文件夹,这就是为什么在开发板启动时内核和文件系本页已使用福昕阅读器进行编辑。
嵌入式linux系统实验报告
嵌入式系统实验报告课程名称:嵌入式系统班级:姓名:学号:实验一. ARM 实验板卡资源及程序调试1.实验目的熟悉嵌入式Linux 开发环境,学会基于IMX6UL 教学平台的Linux 开发环境的配置和使用;利用arm-poky-linux-gnueabi-gcc 交叉编译器编译程序,使用基于NFS 的挂载方式进行实验,了解嵌入式开发的基本过程2. 实验内容本次实验使用ubuntu 操作系统环境,创建一个新目录,并在其中编写hello.c 和Makefile 文件。
学习在Linux 下的编程和编译过程,以及ARM 开发板的使用和开发环境的设置。
将已经编译好的文件通过NFS 方式挂载到目标开发板上运行2.实验环境硬件:IMX6 教学平台,PC 机酷睿i3 以上, 硬盘120G 以上,内存2G 以上软件:Vmware Workstation +Yocto 项目3硬件接线:电源线接到“12V电源线”,网线接到网口,串口线接到com1,4.实验原理4.1 嵌入式开发方式嵌入式开发当中通常会使用2 种方式来运行应用程序:1、下载;2、挂载。
4.2下载的方式:使用FTP、TFTP 等软件,利用宿主机与目标机的网络硬件进行,此种方法通常是将宿主机端编译好的目标机可执行的二进制文件通过网线或串口线下载固化到目标机的存储器(FLASH)中。
在目标机嵌入式设备存储资源有限的情况下受到存储容量的限制,因此,在调试阶段通常的嵌入式开发经常使用NFS 挂载的方式进行。
而在发布产品阶段才使用下载方式。
4.3 NFS 挂载方式:利用宿主机端NFS 服务,在宿主机端创建一定权限的NFS 共享目录,在目标机端使用NFS 文件系统挂载该目录,从而达到网络共享服务的目的。
这样做的好处是不占用目标机存储资源,可以对大容量文件进行访问。
缺点是由于实际并没有将宿主端文件存储到目标机存储设备上,因此掉电不保存共享文件内容。
通常在嵌入式开发调试阶段,采NFS 挂载方式进行。
《嵌入式操作系统》实验报告
..
..
..
..
..
思考:如何能在 Linux 系统启动时,输出显示自定义的文本信息,请修改 码,完成此功能。
Linux 核启动代
..
..
..
..
..
5. 实验中遇到的问题及解决方法
在 实 验 中 遇 到 一 些 问 题 , 例 如 在 复 制 的 时 候 我 记 得 原 来 用 cp
–
a /tmp/linux-2.4.18-br.tar.gz
} module_init(hello_init);
module_exit(hello_exit);
..
..
..
..
..
有关驱动程序的编写规, 请参考课程教材, 本实验只在编写简单的驱动 ( 核 ) 程序并加入 到 Linux 核目录树中,使用户熟悉编译核的过程。该驱动程序是向终端输出相关程序信息。 编写好 helloworld.c 后将其拷贝到核源码树的 drivers/char/ 目录下。
obj-$(CONFIG_PPDEV)
+= ppdev.o
(4) 、运行 make menuconfig 配置核对 helloworld 程序的支持 :
[rootlocalhost linux-2.6.35.7]# make distclean [rootlocalhost linux-2.6.35.7]# make menuconfig
[rootlocalhost
/]#
cp
/UP-Magic210/SRC/kernel/linux-2.6.35.7/drivers/char/
helloworld.c
(2) 、进入实验核源码目录修改 driver/char/ 添加 helloworld 程序的菜单支持
嵌入式系统及技术实验 实验二
1
嵌入式系统及技术实验
∶q 退出 vi,若文件被修改过,会要求确认是否放弃修改的内容。此命令可以与 w 配合使用 ∶w[filename] 另存为 filename 的文件 ∶set nu 显示行号 ∶set nonu 取消行号 注意:如果不知道现在处于什么模式,可以多按几次 Esc 键,以便确定进入命令模式。
7
嵌入式系统及技术实验
2、命令 gcc
(1). 首先调用 cpp 进行预处理, 在预处理过程中, 对源代码文件中的文件包含(include)、 预编译语句(如宏定义 define 等)进行分析。 (2). 接着调用 cc1 进行编译,这个阶段根据输入文件生成以.o 为后缀的目标文件。 (3). 汇编过程是针对汇编语言的步骤,调用 as 进行工作,一般来讲,.S 为后缀的汇编 语言源代码文件和汇编、 .s 为后缀的汇编语言文件经过预编译和汇编之后都生成以.o 为后缀 的目标文件。 (4). 当所有的目标文件都生成之后,gcc 就调用 ld 来完成最后的关键性工作,这个阶段 就是连接。在连接阶段,所有的目标文件被安排在可执行程序中的恰当的位置,同时,该程 序所调用到的库函数也从各自所在的档案库中连到合适的地方。 以上这些过程是 GCC 内部实现的机制,实际使用中上述过程也可以通过 Gபைடு நூலகம்C 的选项 实现。具体方法请通过实验体会。 常用文件的后缀名: 后缀名 .c .a/.so .C, .cc 或.cxx .h .i 所对应的语言 C 语言源代码文件 编译后的库文件 C++源代码文件 预处理文件(头文件) 已经预处理过的 C 源代码文件 后缀名 .ii .m .o .s .S 所对应的语言 已经预处理过的 C++源代码文件 Objective-C 源代码文件 编译后的目标文件 汇编语言源代码文件 经过预编译的汇编语言源代码文件
嵌入式操作系统实验指导书
嵌入式操作系统实验指导书《嵌入式操作系统》实验指导书实验1 Linux编程基础实验序号:1 适用专业:计算机科学与技术、通信工程一、实验目的1、熟悉Vim的工作模式,熟练使用vim中的常见操作。
2、熟练掌握gcc编译命令及gdb的调试命令,通过对有问题程序的跟踪调试,进一步提高发现问题和解决问题的能力。
3、熟悉多文件的makefile的编写,熟悉各种形式的makefile,并且进一步加深对makefile中用户自定义变量、自动变量的理解。
4、使用autotools生成多文件的makefile,进一步掌握autotools的使用方法。
二、实验内容1、vim使用练习(1)在“/root”目录下建一个名为“vim”的目录。
(2)进入“vim”目录。
(3)将文件“/etc/inittab”复制到“vim”目录下。
(4)使用vim打开“vim”目录下的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”。
1实验名称:Linux编程基础学时数:4学时(21)强制退出vim,不存盘。
2、用gdb调试程序的bug(1)使用vi编辑器,将以下代码输入到名为greet.c的文件中。
此代码的原意为输出倒序main函数中定义的字符串,但结果显示没有输出,代码如下所示。
嵌入式实验报告二
嵌入式实验报告二一、实验目的:1.学习cygwin;2.通过上机实验,使学生验证、巩固和充实所学理论知识,加深对相关内容的理解,了解嵌入式Linux的工具链,掌握基于Linux的C程序设计。
二、实验要求:1.安装cygwin;2.学习GCC的使用和Makefile的编写。
3.编程实现文件拷贝功能。
三、问题:1.简述Gcc的常用选项并举例说明。
Linux中gcc常用编译选项-x language filename设定文件所使用的语言,使后缀名无效,对以后的多个有效.也就是根据约定,C语言的后缀名称是.c的,而C++的后缀名是.C或者.cpp,如果你很个性,决定你的C代码文件的后缀名是. pig 哈哈,那你就要用这个参数,这个参数对他后面的文件名都起作用,除非到了下一个参数的使用。
可以使用的参数有下面的这些:`c', `objective-c', `c-header', `c++', `cpp-output', `assembler', and `assembler-with-cpp'.看到英文,应该可以理解的。
例子用法: cd..gcc -x c hello.pig-x none filename关掉上一个选项,也就是让gcc根据文件名后缀,自动识别文件类型例子用法:gcc -x c hello.pig -x none hello2.c-c只激活预处理,编译,和汇编,也就是他只把程序做成obj文件例子用法:gcc -c hello.c他将生成.o的obj文件-S只激活预处理和编译,就是指把文件编译成为汇编代码。
例子用法gcc -S hello.c他将生成.s的汇编代码,你可以用文本编辑器察看-E只激活预处理,这个不生成文件,你需要把它重定向到一个输出文件里面.例子用法:gcc -E hello.c > pianoapan.txtgcc -E hello.c | more慢慢看吧,一个hello word 也要预处理成800行的代码-o制定目标名称,缺省的时候,gcc 编译出来的文件是a.out,很难听,如果你和我有同感,改掉它,哈哈例子用法gcc -o hello.exe hello.c (哦,windows用习惯了)gcc -o hello.asm -S hello.c-pipe使用管道代替编译中临时文件,在使用非gnu汇编工具的时候,可能有些问题gcc -pipe -o hello.exe hello.c-ansi关闭gnu c中与ansi c不兼容的特性,激活ansi c的专有特性(包括禁止一些asm inline typeof 关键字,以及UNIX,vax等预处理宏/* 注释中的不常用****************************************************-fno-asm此选项实现ansi选项的功能的一部分,它禁止将asm,inline和typeof用作关键字。
