linux嵌入式实验2

合集下载

北京科技大学嵌入式系统实验2---嵌入式 Linux 文件编程

北京科技大学嵌入式系统实验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; }

嵌入式实验报告二

嵌入式实验报告二

嵌入式实验报告二实验时间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。

嵌入式实验报告2

嵌入式实验报告2

嵌入式系统设计实验报告1 问题描述在Linux操作系统和ARM嵌入式实验系统环境下,分析linux下的键盘、数码管驱动程序,编写一个应用程序,实现以下功能:在ARM开发板上按下数字键1、2、3、4时,对应启动模拟量开发板上的模拟量输入端AIN0、AIN1、AIN2、AIN3采样,并把模数转换的结果从终端输出和数码管显示。

数码管显示格式:通道号转换的电压值;例如:2灭灭3.251.1设计目标在ARM开发板上按下数字键1、2、3、4时,对应启动模拟量AIN0、AIN1、AIN2、AIN3采样,并把A/D转换的结果从终端输出和LED显示。

显示格式:通道号转换的电压值。

1.2设计思路根据设计目标,该问题可分为六个模块进行设计,分别为驱动程序加载、打开设备、键盘扫描、A/D转换、数码管显示,总体设计方案如图1所示。

图1 总体设计方案(1)驱动程序加载用户的应用程序以设备文件方式访问驱动程序,即Linux把设备当文件,通过文件系统对设备进行访问。

针对这个实验,需要用到ADC0809芯片,LED显示数码管,小键盘。

为此,用lsmod命令加载这三个对应的驱动程序adc0809.c、led.c和keybd.c,再以insmod的方式加入内核。

驱动程序主要是设置一些寄存器的内容来确定端口的引脚输入输出方式以及键盘的扫描部分代码,LED控制显示函数等。

(2)打开各个设备在Linux系统下,各个设备都是通过文件来进行描述的,因此用open函数打开需要用到的LED、键盘、ADC0809芯片。

并且要有对应的出错处理。

(3)键盘扫描驱动程序加载进去以后,运行可执行文件,代码就进入到了按键按下等待的代码中了。

对于用户而言,只是在键盘中按下了某个键,在计算机里,通过驱动得到按下的键值并通过read(fd_kb,&result_kb,1)函数把值赋给变量result_kb中(其中fd_kb为键盘的文件描述符)。

(4)A/D转换启动ADC0809芯片对应的通道进行数据转换,这里主要通过iotcl和read 这两个函数实现,并把转化后的结果赋给result_ad这个变量。

嵌入系统linux基本实验

嵌入系统linux基本实验

嵌入系统实验报告第二章嵌入式系统开发实验一、实验目的了解嵌入式系统的开发环境、内核的下载和启动过程二、实验内容与要求1、下载相应的内核,并与主机进行挂载2、编写一段独立的程序并编译3、将编译生成的可执行程序拷到NFS共享目录下,在目标板上运行该程序三、串口设置minicomA - 串行设备多数人用/dev/tty1 或/dev/ttfS1。

B - Lock 文件位置多数系统上,这应该是/usr/spool/uucp。

Linux系统则使用var/lock。

若此目录不存在,minicom将不会试图使用lock 文件。

C - Callin program若你的串口上有uugetty设备或别的什么,可能你就需要运行某个程序以把modem的cq端口切换到dialin/dialout模式。

这就是进入dialin模式所需的程序。

D - Callout program这是进入dialout模式所用的程序。

E - Bps/Par/Bits启动时的缺省参数。

四、tftp和NFS服务器架设Tftp是基于UDP协议的简单文件传输协议,目标板作为客户机。

主机安装tftp-server,作为服务器。

主目录为/tftpboot,这个目录下的文件才能被客户机下载。

NFS用于在不同机器、不同操作系统之间通过网络共享文件的服务系统。

五、实验操作1、打开终端界面,输入minicom,按enter运行,按Ctrl-A、O,进入setup菜单在Serial port setup项上修改下述设置:A——“Serial Device”,口参数的设置。

设置通信位波特率、数据位、奇偶校验位和停止位。

F——“Hardware Flow Control”、G——“Software Flow Control”,数据流的控制选择。

按“F”“G”键完成硬件软件流控制切换。

本实验系统都设置为“NO”。

配置完成后,选择“Save setup as dfl”保存配置。

嵌入式Linux系统高级编程实验报告2

嵌入式Linux系统高级编程实验报告2

实验报告单课程名称:《嵌入式Linux系统高级编程》学号:1250312025姓名:郝耀峰班级:12计科3班院系:计算机学院专业:计算机科学与技术实验室:S4310同组人:无组号:无辅导老师:丁松实验项目编号:8103104002实验项目名称:文件的定位与控制日期:一、实验目的1掌握read write和open函数的用法2 掌握lseek函数的用法二、实验环境Red Hat Linux Server 6.0(64位)三、实验原理(或要求)程序1 复制/etc/passwd,利用open,read和write函数。

程序 2 生成1024字节长度的文件,内容为ascii形式的1,2,3,4,5,6,7,8,9,0,1,2,……程序3 读取上一个题目中产生文件的最后10个字节,并显示。

四、实验步骤程序1 复制/etc/passwd,利用open,read和write函数#include <stdio.h>#include <stdlib.h>int main(){char buf[1024];int fd1=open("/etc/passwd",O_RDONL Y);int fd2=open("a.txt",O_WRONL Y);if(fd1<0||fd2<0){printf("error in open file\r\n");exit(0);}int n=read(fd1,buf,sizeof(buf));write(fd2,buf,n);printf("copy finished\r\n");close(fd1);close(fd2);}程序2 生成1024字节长度的文件,内容为ascii形式的1,2,3,4,5,6,7,8,9,0,1,2,……#include <stdio.h>#include <stdlib.h>#define SIZE 1024int main(){int fd1=open("a.txt",O_WRONL Y|O_CREATE|O_TRUNC,0666);if(fd1<0){printf("error in open file\r\n");exit(0);}for(i=1;i<=SIZE;i++){char c=itoa(i%100);write(fd1,&c,1);}close(fd1);}程序3 读取上一个题目中产生文件的最后10个字节,显示#include <stdio.h>#include <stdlib.h>int main(){int i;char buf[10];int fd1=open("a.txt",O_RDONL Y);if(fd1<0){printf("error in file!");exit(0);};lseek(fd1,-10,SEEK_END);read(fd1,buf,10);for(i=0;i<10;i++)printf("%c",buf[i]);close(fd1);}五、实验小结通过本次实验,我们掌握了read write和open函数的用法和 lseek 函数的用法。

嵌入式实验报告二

嵌入式实验报告二

嵌入式实验报告二一、实验目的: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用作关键字。

嵌入式Linux多线程编程实验

嵌入式Linux多线程编程实验

实验二、嵌入式Linux多线程编程实验一、实验目的1. 熟悉线程的定义、创建及应用方法,掌握编译源代码时引入线程库的方法。

2. 掌握如何利用信号量完成线程间的同步与互斥。

3. 熟悉Makefile工作原理,掌握编写Makefile的编写方法。

二、实验基本要求1. 掌握熟悉线程的定义及操作方法。

2. 利用信号量的PV操作完成完成以下单个生产者和单个消费者模型的代码。

3. 编写在Ubuntu中编译执行的makefile文件,然后在Ubuntu中执行。

4. 编写在实验箱中编译执行的makefile文件,然后在实验箱中执行。

注意Makefile编写规范缩进应使用制表键即Tab键。

三、实验原理1.Linux线程的定义线程(thread)是在共享内存空间中并发的多道执行路径,它们共享一个进程的资源,如文件描述和信号处理。

在两个普通进程(非线程)间进行切换时,内核准备从一个进程的上下文切换到另一个进程的上下文要花费很大的开销。

这里上下文切换的主要任务是保存老进程CPU状态并加载新进程的保存状态,用新进程的内存映像替换进程的内存映像。

线程允许你的进程在几个正在运行的任务之间进行切换,而不必执行前面提到的完整的上下文。

另外本文介绍的线程是针对POSIX线程,也就是pthread。

也因为Linux对它的支持最好。

相对进程而言,线程是一个更加接近于执行体的概念,它可以与同进程中的其他线程共享数据,但拥有自己的栈空间,拥有独立的执行序列。

在串行程序基础上引入线程和进程是为了提高程序的并发度,从而提高程序运行效率和响应时间。

也可以将线程和轻量级进程(LWP)视为等同的,但其实在不同的系统/实现中有不同的解释,LWP更恰当的解释为一个虚拟CPU或内核的线程。

它可以帮助用户态线程实现一些特殊的功能。

Pthread是一种标准化模型,它用来把一个程序分成一组能够同时执行的任务。

2. 什么场合会使用Pthread即线程(1) 在返回前阻塞的I/O任务能够使用一个线程处理I/O,同时继续执行其他处理任务。

嵌入式系统 实验二 嵌入式Linux系统的编程

嵌入式系统 实验二 嵌入式Linux系统的编程

二、嵌入式LINUX系统的编程1、实验目的熟悉UP-TECHPXA270-S下Linux的开发环境,了解GNU/make工具的工作原理。

学会使用makefile管理项目,学会编写一个Makefile文件。

熟悉arm-linux-gcc 交叉编译的使用,了解嵌入式开发的基本过程。

2、实验内容新建一个目录,编写几个源文件,使用makefile 管理项目。

学习在linux 下的编程和编译过程,以及UP-TECHPXA270-S 开发板开发环境的设置。

下载已经编译好的文件到UP-TECHPXA270-S 开发板中运行。

3、预备知识C 语言的基础知识、程序调试的基础知识和方法,LINUX 的基本操作。

4、实验设备及工具(包括软件调试工具)硬件:UP-TECHPXA270-S 嵌入式开发板、PC 机Pentumn500 以上, 硬盘10G 以上。

软件:PC 机操作系统REDHAT LINUX 9.0 +MINICOM + ARM-LINUX 开发环境5、实验步骤(1)、建立工作目录(2)、编写程序源代码(3)、编写makefile 文件(4)、编译应用程序(5)、下载调试(6)、写一个简单的工程,并输出自己的姓名和学号,利用Makefile管理工程,并写出Makefile文件,进行调试。

5、实验报告要求(1)、写清每步实验步骤的具体操作内容。

1):建立工作目录: 创建一个工程目录hello, 命令如下: mkdir hello;2)编写程序源代码: 使用vi编写程序, 分别保存为: start.c, starfun.h , hello.h以及hello.c;3)编写makefile文件。

(2)、简述Makefile文件的规则。

目标文件: 相依文件列表如下:(TAB)<COMMOND> #产生目标文件需要执行的指令(3)、简述调试情况。

使用gdb命令, 进入调试界面, 使用file命令将工程文件装载起来, 用break命令插入断点, 然后用run命令执行程序, 用next(或n)一次一次的向下执行。

嵌入式实验二

嵌入式实验二

嵌入式实验报告二实验二优先级反转姓名:陈秀容班级:08通信(1)班学号:2108911011. 实验目的掌握在基于优先级的可抢占嵌入式实时操作系统的应用中,出现优先级反转现象的原理。

2.1 实验设计2.1.1. 优先级反转原理优先级反转发生在有多个任务需要使用共享资源的情况下,可能会出现高优先级任务被低优先级任务阻塞,并等待低优先级任务执行的现象。

高优先级任务需要等待低优先级任务释放资源,而低优先级任务又正在等待中等优先级任务,这种现象就被称为优先级反转。

两个任务都试图访问共享资源是出现优先级反转最通常的情况。

为了保证一致性,这种访问应该是顺序进行的。

如果高优先级任务首先访问共享资源,则会保持共享资源访问的合适的任务优先级顺序;但如果是低优先级任务首先获得共享资源的访问,然后高优先级任务请求对共享资源的访问,则高优先级任务被阻塞,直到低优先级任务完成对共享资源的访问。

2.1.2. 设计要点1)设计了3 个应用任务TA0~TA2,其优先级逐渐降低,任务TA0的优先级最高。

2)除任务TA1外,其它应用任务都要使用同一种资源,该资源必须被互斥使用。

为此,创建一个二值信号量mutex 来模拟该资源。

虽然μC/OS-Ⅱ在创建信号量时可以选择采用防止优先级反转的策略,但在本实验中我们不使用这种策略。

3)应用任务的执行情况如图2-1 所示:注意:图中的栅格并不代表严格的时间刻度,而仅仅表现各个任务启动和执行的相对先后关系。

2.1.3. 系统的运行流程1) 系统初始化,之后进入main 函数;2) 在main 函数中,首先创建一个二值的信号量mutex;3) 在main 函数中创建TaskStart 任务,由TaskStart 任务创建所有的应用任务(TA0、TA1、TA2)。

优先级较高的任务TA0、TA1 先延时若干个时钟节拍,以便低优先级任务TA2 运行。

4) t1 时刻,任务TA2运行并首先申请到信号量mutex;5) t2 时刻,任务TA1 延时到期,任务TA1 的优先级高于任务TA2 的优先级,因此任务TA1立刻抢占TA2执行,任务TA2由执行态转为就绪态;6) t3 时刻,任务TA0 延时到期,任务TA0 的优先级高于任务TA1 的优先级,所以任务TA0 立刻抢占执行,任务TA1 由执行态转为就绪态,任务TA0 申请二值信号量mutex 被阻赛;7) t4 时刻,任务TA1 由就绪态转回为执行态;此时TA0 在等待TA2 保持的mutex , 而TA2 又因为优先级低于TA1 被阻塞。

嵌入式linux实验报告

嵌入式linux实验报告

嵌入式操作系统Linux实验报告专业:计算机科学与技术班级:13419011学号:1341901124姓名:武易组员:朱清宇实验一Linux下进程的创建一实验目的1.掌握Linux下进程的创建及退出操作2.了解fork、execl、wait、waitpid及之间的关系二实验内容创建进程,利用fork函数创建子进程,使其调用execl函数,退出进程后调用wait 或waitpid清理进程。

三实验过程1.进程的创建许多进程可以并发的运行同一程序,这些进程共享内存中程序正文的单一副本,但每个进程有自己的单独的数据和堆栈区。

一个进程可以在任何时刻可以执行新的程序,并且在它的生命周期中可以运行几个程序;又如,只要用户输入一条命令,shell进程就创建一个新进程。

fork函数用于在进程中创建一个新进程,新进程是子进程。

原型如下:#include<sys/types.h> /* 提供类型pid_t的定义 */#include<unistd.h> /* 提供函数的定义 */pid_t fork(void);使用fork函数得到的子进程是父进程的一个复制品,它从父进程处继承了整个进程的地址空间fork系统调用为父子进程返回不同的值,fork调用的一个奇妙之处就是它仅仅被调用一次,却能够返回两次,它可能有三种不同的返回值:✓在父进程中,fork返回新创建子进程的进程ID;✓在子进程中,fork返回0;✓如果出现错误,fork返回一个负值;用fork创建子进程后执行的是和父进程相同的程序,子进程可以通过调用exec函数以执行另一个程序。

当进程调用一种exec函数时,该进程的用户空间代码和数据完全被新程序替换,从新程序的启动例程(例如其m a i n函数)开始执行。

调用e x e c并不创建新进程,进程I D并未改变,只是用另一个新程序替换了当前进程的正文、数据、堆和栈段。

e x e c函数原型execl,execlp,execle,execv,execve和execvp2.进程的退出一个进程正常终止有三种方式:由main()函数返回;调用exit()函数;调用_exit()或_Exit()函数。

嵌入式实验二

嵌入式实验二

;注意:x35 后面有个空格,然后有个“.”
然后执行“make menuconfig” ,出现配置内核界面,
这时不用做任何更改,在主菜单里选择<Exit>退出,这样做是为了生成相应 配置的头文件。
输入以下命令,开始编译内核:
#make zImage
编译结束后,会在 arch/arm/boot 目录下生成 linux 内核映象文件:zImage 注意:剩下的实验过程需要编译定制的内核才能进行 编译定制内核 在选定缺省配置文件编译内核的基础上,可以对默认的配置进行修改。对每 一个配置选项,用户有三种选择,它们分别代表的含义如下: <*>或[*]——将该功能编译进内核 []——不将该功能编译进内核 [M]——将该功能编译成可以在需要时动态插入到内核中的代码 例如:取消新内核中的对 LED 的驱动支持 在 Device Drivers 菜单中,选择进入 Character devices --->,找到并选中 LEDs 驱动,支持,如图
取消掉选项前的*号即可。 这里我们选择M:将LED驱动编译成可以在需要时动态插入到内核中的代码 例如置 LED Support for Mini2440 GPIO LEDs 选项前为 M 此时在内核根目录下输入 make modules 命令将在 drivers/char/目录下生成可 动态加载的内核模块 mini2440_hello_module.ko,然后输入 make zImage 生成内 核。zImage 文件位于 arch/arm/boot 文件夹下。 2. 加载新内核 (1)安装 MiniTools 工具。安装文件位于 D 盘; (2)连接好串口,打开超级终端; (3)接上 USB 电缆,在运行 MiniTools 程序; (4)将开发板上的 S2 接到 Nor Flash 标识一侧,启动开发板

嵌入式系统基础实验报告二

嵌入式系统基础实验报告二

实验 2. Linux 常用命令及工具实验1、实验目的掌握 linux 下各种常用命令和工具的使用。

2、实验设备PC 机上安装 VMWARE 虚拟机,运行 Ubuntu Linux 系统。

3、实验内容当前的各种 Linux 发行版,在图形界面下已可以完成大部分工作,但要对Linux系统做进一步了解,进行相关配置,必须掌握一些常见的命令。

以下为Linux 下的常见命令及其参数,进入 Linux 系统后,打开终端,可以运行各命令,查看运行结果。

3.1 注销,关机,重启logout 注销是登陆的相对操作,登陆系统后,若要离开系统,用户只要直接下达logout 命令即可:[root@localhostroot]#logoutLogin:←回到登陆的画面3.2 关机或重新启动的 shutdown 命令shutdown 命令可以关闭所有程序,依照用户的需要,重新启动或关机。

参数说明如下:立即关机:-h 参数让系统立即关机。

范例如下:[root@localhostroot]#shutdown–h now←要求系统立即关机指定关机时间:time 参数可指定关机的时间;或设置多久时间后运行 shutdown 命令,范例如下:[root@localhostroot]#shutdown now←立刻关机[root@localhostroot]#shutdown +5←5 分钟后关机[root@localhostroot]#shutdown 10:30←在 10:30 时关机关机后自动重启:-r 参数设置关机后重新启动。

范例如下:[root@localhostroot]#shutdown-rnow←立刻关闭系统并重启[root@localhostroot]#shutdown –r 23:59←指定在 23:59 时重启动3.3 重新启动计算机的 reboot 命令顾名思义,reboot 命令是用来重新启动系统的。

常用的参数如下:-f 参数:不依正常的程序运行关机,直接关闭系统并重新启动计算机。

嵌入式linux实验二

嵌入式linux实验二

嵌入式原理与应用实验实验二Linux系统的常用命令学号 1215108019克帆班级电子2华侨大学电子工程系实验二Linux系统的常用命令一、实验目的掌握Linux各类命令的使用方法。

二、实验容:1、首先查看所有进程,并终止某个进程,之后再次查看,看是否还有该进程号的进程。

查看进程杀死77号进程,再次查看确认已经杀死2、查看当前系统存的使用情况。

3、查看文件系统的磁盘空间占用情况。

4、统计目录(或文件)所占磁盘空间的大小。

5、查看硬盘分区情况。

6、利用自己学号建立的登录到系统,查看提示符。

7、/home/lab的目录中新建一个子目录。

在该目录中新建一个名为test01的文本文件,建立一个名为mylab的目录。

8、利用pwd命令查看当前的工作目录。

9、利用man命令查看ls命令的详细使用方法。

并利用ls命令列出文件和目录,确定建立了目录和文件。

10、选择附件中的文本编辑器,输入若干个字符并保存为test01.txt。

11、将test01.txt复制到mylab目录下并在复制的同时更改其名称为test02.txt。

12、将test01.txt移动到目录下mylab下。

13、利用通配符*将mylab下的所有文本文件复制到mylab的父目录中。

14、通过cd命令将当前的工作目录变更为mylab的父目录。

15、利用ls命令详细查看当前工作目录里的文件,并记录下mylab目录的权限说明。

16、利用删除命令将当前工作目录里的文件test01、test02批量删除掉。

17、在终端界面里输入redhat-config-network命令,熟悉LINUX系统的网络界面化配置。

18、查询当前有哪些用户挂在系统里,并记录显示的容。

19、熟悉文件查找命令查找文件名为httpd.conf的文件。

查找文件名包含httpd的文件。

查找/usr/目录下文件尺寸小于为2.5M的文件。

2.5M=2560KB查找/usr/目录下50分钟以前被访问过的所有文件。

实验二 嵌入式linux下GCC与GBD实验(1)

实验二 嵌入式linux下GCC与GBD实验(1)

实验二嵌入式linux下GCC与GBD实验一、实验目的:学会使用vi编辑器建立、编辑文件,掌握c语言程序GCC编译的基本用法,并掌握gdb调试工具的基本用法。

二、实验内容:1.利用vi写一段c程序代码,学会命令行的保存、离开等命令,对文件执行删除、复原、修改、替换等操作2.利用gcc编译c语言程序,使用不同选项,观察并分析结果3.用gdb调试一个编译后的c语言程序行三、实验步骤:1.vi的使用使用vi编辑文件welcome.c#include <stdio.h>main(){char name[20];printf("Please input your name:");scanf("%s",name); //输入姓名printf("Welcome %s!\n",name); //输出welcome 姓名return 0;}(1).使用vi进入一般模式vi welcome.c(2)按下I键进入编辑模式,开始编辑文字(3)按下ESC键回到一般模式(4)在一般模式下输入“:wq”保存后离开(5)对文件执行删除、复原、修改、替换等操作a. 使用vi进入命令模式vi filename1b.使用yy复制某行内容,使用P粘贴到光标所在行,使用dd等命令删除某行c.使用u命令复原此前的情况d.回到一般模式,在一般模式下输入“q!”2.gcc编译程序(1)编译文件gcc welcome.c –o welcome(2)如果有错误,再次使用vi修改hello.c的内容;然后再次编译。

直至编译时不报任何错误。

(3)使用下列选项进行编译,查看后删除编译生成的中间文件-I -D -E -l -c -orm welcomegcc –E welcome .c -o welcome .igcc –S welcome .i -o welcome .sgcc –c welcome .s -o welcome .ogcc welcome .o -o welcome3.gdb调试程序(1)用vi新建一个文件testgdb.c#include <stdio.h>int main(void){int sum(int sum);int i,result=0;sum(100);for(i=1;i<=100;i++){result+=i;}printf("The sum in main function is %d\n",result);}int sum(int num){int i,n=0;for(i=1;i<=num;i++){n+=i;}printf("The sum in sum function is %d\n",n);}编译生成可执行文件:gcc -g testgdb.c -o testgdb(2)启动GDBgdb testgdb(3)在main 函数处设置断点:break main在指定行添加断点:break(或b) 4查看断点info b(4)运行程序:run (或r)(5)单步运行:多次使用命令S,单步调试,执行S会跳入函数中单步调试,使用finish 命令可跳出这个函数(再次重新从头开始调试程序使用next(n)单步调试则不会进入函数中)调试过程中查看变量,使用: p i ; p n ; p result(6)继续运行continue : c(7)退出gdb:q。

嵌入式实验二(嵌入式Linux主机调试环境搭建)

嵌入式实验二(嵌入式Linux主机调试环境搭建)

实验二嵌入式Linux主机调试环境搭建一、实验目的:1.熟悉Linux TFTP配置,为后续Linux底层开发做准备。

2.熟悉Linux NFS文件系统的配置过程,为后续Linux底层开发实验做准备。

3.熟悉嵌入式Linux交叉开发环境的搭建与使用。

二、实验内容:1.利用安装好的虚拟机系统,测试TFTP服务是否正常。

2.重新配置NFS文件系统。

3.使用TFTP的方式下载内核,运行到开发板上;使用nfs方式挂载文件系统,为后续的开发做准备。

三、实验原理:TFTP协议是简单文件传输协议,基于UDP协议,没有文件管理、用户控制功能。

TFTP分为服务器端程序和客户端程序,在主机上通常同时配置有TFTP服务端和客户端。

NFS方式是开发板通过NFS挂载放在主机(PC)上的根文件系统。

此时在主机上文件系统中进行的操作同步反映在开发板上;反之,在开发板上进行的操作同步反映在主机中的根文件系统上。

实际工作中,我们经常使用NFS方式挂载系统,这种方式对于系统的调试非常方便。

四、实验步骤及过程:1. 打开虚拟机,运行Ubuntu 12.04系统,打开命令行终端。

回到home目录。

如上图所示,没有出现错误代码,且在家目录(/home/linux)下出现test文件,内容相同,则证明tftp服务建立成功。

2. 配置/etc/exports(sudo获取权限。

输入密码,默认为1;如不会使用vim,命令行vim字段用gedit代替,下面省略此说明。

):NFS允许挂载的目录及权限在文件/etc/exports中进行了定义。

例如,我们要将/source/rootfs目录共享出来,那么我们需要在/etc/exports文件末尾添加如下一行:其中:/source/rootfs是要共享的目录,*代表允许所有的网络段访问,rw是可读写权限,sync是资料同步写入内存和硬盘,no_root_squash是NFS客户端分享目录使用者的权限,如果客户端使用的是root用户,那么对于该共享目录而言,该客户端就具有root 权限。

嵌入式操作系统实验报告(二)(13级通信工程-陈勇48号)

嵌入式操作系统实验报告(二)(13级通信工程-陈勇48号)
嵌入式操作系统实验报告表
实验名称
Linux操作系统使用与系统配置
实验人
134090201048
通信工程班陈勇
实验目的
学习Linux常用命令及系统配置
实验时间
2015年9月
实验设施
个人电脑一台、虚拟机软件VMware Workstation、Linux系统、课本教材
实验步聚与内容Байду номын сангаас
1、fdisk命令的使用:可以查看硬盘分区情况,并可对硬盘进行分区管理。
8、du命令的使用:查看目录大小du -h /home带有单位显示目录信息
9、df命令的使用:查看磁盘大小df -h带有单位显示磁盘信息
10、显示网络状态信息
实验结果:
通过查询网络资料与同学的合作努力下,基本上掌握了Linux常用命令。
实验小结:
通过本次实验,对Linux系统的常用命令有初步的认识,但是一点都不熟悉操作,对于很多常用命令直接还不会使用,还需要进一步的学习。
2、ls命令的使用:显示文件或目录
3、ifconfig命令的使用:用于查看和配置网络接口的地址和参数,包括IP地址、网络掩码、广播地址等等。
4、pwd命令的使用:显示当前目录
5、who命令的使用:显示在线登陆用户
6、top命令的使用:动态显示当前耗费资源最多进程信息
7、ps命令的使用:显示瞬间进程状态ps -aux

二嵌入式实验

二嵌入式实验

整形变量,调用文件f2中定义的函数将两变量的值进行互换并将结果和 进程ID输出。
三、实验程序
1、F1.c include<stdio.h> #include<stdlib.h> unsigned int NumberExtract(unsigned int parg) { unsigned int FinalValue; FinalValue=(parg&0x0000ffff)|0x00ff; return FinalValue; } 2、F2.c #include<stdio.h> #include<stdlib.h> void ExchangeNumber(unsigned int *parg1,unsigned int *parg2) { unsigned int parg; parg=*parg1; *parg1=*parg2; *parg2=parg; } 3、 Main.c #include<stdio.h> #include<stdlib.h> #include<sys/types.h> #include<unistd.h> #include<sys/wait.h> int main(int argc, char **argv)
嵌入式实验报告 实验二 姓名:张慧 班级:信息10-1 学号:36
1、 实验目的
1、 熟悉在C语言源程序中使用Linux所提供的系统调用界面的方 法; 2、 掌握Linux中子进程的创建方法以及调度执行情况,理解进程 与程序的区别。
2、 实验内容
1、设计一个具有一个整形参数的子函数,取出参数的低16位并且把低8 位置一,将结果返回; 2、f2.c:设计一个具有两个参数的子函数,子函数将2参数值互换; 3、实现主函数,主函数中创建2个进程,进程1定义一个整形变量,调 用文件f1中定义的函数求取结果并将结果和进程ID输出;进程2定义2个
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

嵌入式实验报告(二) 姓名:董辰辰 学号: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 文件夹,这就是为什么在开发板启动时内核和文件系本页已使用福昕阅读器进行编辑。

福昕软件(C)2005-2009,版权所有,仅供试用。

统任何一个有问题都不会正常启动的一个原因之一吧,我觉得内核是执行单元,而文件系统是储存单元,内核通过文件系统访问数据来进行处理。

编译内核之前需要了解下内核源代码的目录,实验室用的内核源代码的文件包一开始在系统文件中需要拷贝到自己的目录下才可以进行编译,在文件系统的目录之下使用make命令编译很有可能发生不必要的错误,也可能是没有权限,将kernel_x210v3文件夹拷贝到自己的目录111180031下,可以看到最外面的文件夹里面有个Makefile,当编译执行make命令的时候就是按照这个Makefile的规则执行的,当然各个子文件夹也有对应的Makefile,这个最外层的Makefile可以调用里面子文件的Makefile,从而完成整个内核的编译。

当然内核源代码的编译规则非常的复杂,因为内核源码必须保证不同编译设置生成不同的内核以便在不同需要,不同配置的环境中运行,对于本实验来说是针对arm 体系编译的内核,其中在arch目录下包括与体系有关的内核代码,也包括本实验中用到的S5Pv210处理器。

init文件夹根据名字也可以看出来是初始化使用的,其中的main.c和version.c是研究内核起点的c文件,后面的文件系统也可以看出,包括在屏幕上写出嵌入式系统的基本系统,挂载proc文件夹,在屏幕上显示一个logo等等也就是内核加载之后载入的第一段程序应该就是这个文件夹中的代码编译出来的吧,mm包括的是内存管理的代码,这个就比较复杂了,内存的分配管理想当年我也是听得云里雾里的,kernel文件夹不必多说,自然包括的是实现linux内核主要的代码,还有包含驱动程序的文件夹driver,还有比较重要的fs文件夹它包含着所有文件系统的代码和各种类型的文件操作代码。

这些目录的内容作用其实就是摘抄书上啦,但是实验报告还是应该写上的,这也是编译内核之前所应该了解的基本内容吧。

实验的内容是配置一个自己的内核,自己的,这个很关键,因为linux源代码支持太多的功能,太多的平台,太多的环境了,但是对于实验室的开发板来说用到的或者说可能用到功能又是十分有限的,因此没有必要将那些根本不可能用到,或者很少用到的功能编译到内核中,那样不仅增加了内核的大小占用了系统不必要的空间,而且还会成为系统的负担,所以根据自己用到的功能,配置一个适合自己的内核是很有必要的。

向着老师配置的内核大小努力O(∩_∩)O哈哈~。

进入放着内核源码的文件夹,执行make menuconfig,这个命令提供基于Ncurses 的是图形化选择窗口,所以配置起来更加方便,还有make config和make xconfig 命令分别对应配置命令解释器(对配置脚本中的配置命令进行解释,配置非常繁琐)和基于xwindows的图形界面的用户配置界面,实验中用的就是menuconfig。

一般的配置变量可以选择不编译,静态编译,或者编译成模块,对于不可能在系统板上实现和很少用到的功能不编译,可能会用到的功能编译成模块能够有效的减小内核的大小。

实验中内核配置的选项是非常的多的,可精简的部分也着实有很多,但是有些很多时候并不理解如果不编译进内核会有什么弊端,有些配置是不能省略的,因为自己配置不恰当(video设备支持错误)引发的无法编译通过的情况出现了很多次,最终也算配置出自己的内核了。

修改的配置见实验过程。

最后精简完的zImage大小为:2.4M,并且并不影响系统的正常启动。

我一开始错误的认为生成的zImage中并不只有内核,还应该有模块,因为我将内核配置中的一些选项改为模块以后并不影响zImage的大小,这说明模块也在zImage中,我觉得应该是加载内核的时候会将zImage解压,然后加载其中的编译到内核中的部分,但是模块并不会加载进去,而是在需要的时候可以通过命令进行加载,所以如果准备减小zImage的大小,只有减小模块和编译进内核的选项才可以。

但是询问老师后得知zImage就是只有内核,模块在另外的文件夹中,如果要使用需要传输到开发板中进行加载,之所以改了几个模块以后大小没有变化,很可能是这几个模块本身比较小,编译成模块和编译进内核的不会对内核大小有明显的影响。

另外我觉得自己的内核不一定非要做到最小,因为开发板是需要用的,而不是仅仅可以启动起来就可以,如果仅仅为了启动起来,那样的话开发板好多可以实现的功能就浪费了,这并不是好的事情,所以根据需要编译出自己的内核是最好的,大小没有那么重要吧。

在编译的时候,顶层Makefile完成产生核心文件和内核模块两个任务,在执行顶层Makefile读取.config中的配置选项,在做实验的时候发现make命令不能执行,提示交叉编译器找不到,有三种方法解决这个问题,第一,找到顶层Makefile文件中的交叉编译选项,将编译器的地址改正,第二在make menuconfig 中选择交叉编译器的路径,第三直接修改.config文件(虽然没有试过)。

因为前两种方法的本质就是改变.config文件。

内核和文件系统加载之后,可以看到屏幕上出现了一个‚QT‛的logo,但是老师编写的内核的logo是一只小企鹅,我就有一个疑惑,这个logo是在文件系统中还是在内核中呢,因为加载的logo肯定是在某个源文件中,根据构建文件系统的过程并没有发现有加载logo的过程,而且寻找到logo的位置是drivers/video/logo 所以应该是编译内核的时候将这个logo图片的信息静态编译到内核中的,根据这个原理,就可以改变开机logo。

但是图片的大小是有限制的因为屏幕的分辨率是有限的,通过后面的实验可以知道系统板的屏幕分辨率是640*480,每个像素用32位数据显示那么所能显示的图片大小为9830400b,所以图片大小不能大于这个数取整也就是900k左右。

这一点是需要注意的。

文件系统的构建是本实验另一个内容,从本质上来讲,文件系统是特殊的数据分层存储结构,它包含文件、目录和相关的控制信息。

既然要构建文件系统,必须要了解下都有哪些文件系统,都各有什么特点。

以便决定到底用哪个文件系统。

(以下为抄书内容 = =)1. ext2fs/ext3fs可以实现快速符号链接,类似于windovs文件系统的快捷方式,可将目标名称直接存储在索引节点表中,提高了访问速度;支持内存达4TB,文件名称很长,可达1024个字符;管理者在创建系统文件时根据需要选择存储逻辑块的大小。

这种文件系统稳定,可靠,健壮,在台式机、服务器、工作站中普遍使用。

2.jffs2支持数据压缩,多种文件节点类型,是一种基FLASH的日志文件系统,提高了对闪存的利用率,降低了内存的损耗。

通过jffs2,可以通过flash 来存储数据,将flash当作硬盘来使用,而且系统运行的参数可以实时保存在flash中,在系统断电后数据不会丢失。

它在嵌入式系统中很受欢迎。

但是也有一定的缺点:JFFS2在挂载(mount)时会扫描整个flash 所有的数据,再将文件系统目录存储在system memory, 会线性倍数成长,消耗很多时间;JFFS2没有write-back机制,不能将数据暂存于缓存(cache), 以致于flash I/O的动作频繁;JFFS2设计机制过于复杂,代码不易阅读。

3.Ramdisk文件系统:使用内存的一部份空间来模拟一个硬盘分区这样构成的文件系统就是ramdisk将ramdisk用作根文件系统在嵌入式Linux中是种常用的方法。

因为在ram上运行,读写速度快二用grip算法进行压缩,可节省存储空问。

但它也有缺点:由于将内存的一部分用作rarndisk,这部分内存不能再作其它用途;此外系统运行是更新的内容无法保存,系统关机后内容将丢失。

(抄书结束)因为我做的实验只涉及这三种实验,所以其他的文件系统特点限于篇幅不写在这里了。

对于本实验中的flash分区做简要的介绍,flash中数据的存储是以块为单位进行存储的,实验中的开发板的flash扇区是512个字节,并不是常见的2k 字节,这也是比较奇葩的地方,flash中的数据擦出和烧写只能以块为单位进行,老师帮助查阅相关的资料,此flash分区中从地址0x00000000开始,u-boot占1M,misc占5M(包括u-boot拓展空间和bootloader参数区,kernel区占5M,ramdisk区占3M,system区占512M,再接下来是cache区和data区,实验中通过movi指令借助内存将文件系统和内核烧写到flash指定的分区中,并设置相关的环境变量,可以让内核自启动的过程中自己加载内核和文件系统,解决了每次都需要手动加载内核和文件系统的问题。

相关文档
最新文档