




已阅读5页,还剩6页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
嵌入式系统基础实验报告 班级: 学号: 姓名: 教师: 目 录实验说明 实验做为学习的重要促进手段,是为了深化对理论的理解,锻炼实践动手能力,此为实验目的。实验准备工作 1.安装 ARM 交叉编译工具链 2.如何在 PC 端进入开发板目录 3.在开发板上挂载 PC 目录实验内容l 专题一 IPC 实验 1.Unix Socket 2.FiFo Pipe 3.SystemV 4.Mmapl专题二 Drive实验 1.字符驱动 2.Poll Device 专题一:IPC(进程间通信)实验编号1题目Unix Socket整体理解使用socket实现进程间通信:(UNIX domain中面向连接通信)使用套接字除了可以实现网络间不同主机间的通信外,还可以实现同一主机的不同进程间的通信,且建立的通信是双向的通信。 首先创建SOCKET,选择连接的方式TCP,面向连接,然后通过bind函数将他们绑定起来,服务端通过listen监听,看是否有连接请求,如果有就accept,客户端通过connect函数连接服务端,连接完成后,通过调用read/write函数来传递消息。理解代码一Socket的三个参数1. socket的domain参数AF_UNIX,AF_LOCAL,AF_INET,PF_UNIX,PF_LOCAL,PF_INET.这几个参数有AF_UNIX=AF_LOCAL, PF_UNIX=PF_LOCAL, AF_LOCAL=PF_LOCAL, AF_INET=PF_INET.AF_UNIX 表示以文件方式创建 socket,AF_INET 表示以端口方式创建 socket2.type:指定一个通信语义,其中:SOCK_STREAM:提供一系列reliable,two-way,connection-based byte stream.An out-of-band data transmission tocal:指定一个给socket使用的协议,其中0:由于在本地通讯中不使用协议,所以设置0表示不使用任何协议二地址格式4. 地址格式常用的有两种 socket 域:AF_UNIX 或 AF_INET,因此就有两种地址格式:sockaddr_un 和sockaddr_in,un_path 存放 socket 的本地文件名,sin_addr 存放 socket 的 ip 地址5.创建完一个 socket 后,使用 bind 将其绑定:int bind(int socket, const struct sockaddr * address, size_t address_len)/将两种地址格式统一起来6.接下来开始监听:int listen(int socket, int backlog)7.接受连接:int accept(int socket, struct sockaddr * address, size_t * address_len)8.客户端通过 connect()函数与服务器连接:int connect(int socket, const struct sockaddr * address, size_t address_len)9.双方都建立连接后,就可以使用常规的 read/write 函数来传递数据了10.通信完成后,我们需要关闭 socket:int close(int fd)实验结果 分 析使用套接字在UNIX域内实现进程间通信的客户端程序。相比服务端的程序,客户段较为简单。程序首先通过调用socket函数创建通信所需的套接字,然后,调用connect函数来连接服务器,在成功建立连接后,通过调用write函数向服务器发送指定的消息。先挂载服务器,然后开启运行客户端,得到运行结果如图的上半部分。通过ipcs指令可以查看进程间通信的状态,得到如图的下半部分。实验编号2题目FiFo Pipe整体理解1.fifo和pipe的区别mkfifo 得到的是有名管道。这样的管道,在外界看起来像是一个文件。pipe() 得到的是匿名管道,外界一般看不到它,故称 “匿名” 管道。fifo:可用于任意进程间,双工,有文件名,数据在内存,pipe :具有亲缘关系的进程间,单工,数据在内存中。2. 创建匿名管道#include int pipe(int filedes2);该函数返回一个文件描述符数组 fd,fd0用于读管道,fd1用于写管道。进程调用 fork 之后,子进程也会得到这两个文件描述符,且操作的是同一个管道。这样就在父子进程之间建立了通信连接。若父进程关闭写端 f1,子进程关闭读端 f0,那么就建立了一条子进程到父进程的单向管道。类似地,还可以建立一条父进程到子进程的单向管道。如果父进程在 fork 之前调用了 pipe 两次,创建了两条管道,那么可以在之后利用上面的方法建立两条半双工管道,一条从子进程读数据,一条向子进程写数据。这样就相当于建立了父子进程之间的全双工管道。3. 创建有名管道fifo可以调用 mkfifo 函数来创建一个 FIFO 文件。#include int mkfifo(const char* pathname, mode_t mode);因为它本质上是一个文件,所以进程用 open 函数来打开一个 FIFO,并在打开时指定文件操作模式(只读,只写还是读写)。之后用 read(write)函数来读(写)FIFO。当一个进程以只写方式打开 FIFO 文件,另一个进程以只读方式打开同一个 FIFO 文件,这样就建立了两个进程之间的通信管道。4. fifo和pipe的各自特点:Fifo突破了pipo只能用于同源进程通信的限制,可以用于任意进程间通信。5. 管道运行机制图解实验结果分析先运行fifo_read 显示出无内容读出当运行fifo_write写入313后,运行fifo_read时显示读出了313管道是通过内核缓冲区按先进先出的方式数据传输,管道一端顺序地写入数据,另一端顺序地读入数据读写的位置都是自动增加,数据只读一次,之后就被释放。在缓冲区写满时,则由相应的规则控制读写进程进入等待队列,当空的缓冲区有写入数据或满的缓冲区有数据读出时,就唤醒等待队列中的写进程继续读写。管道的读写规则:管道两端可分别用描述字fd0以及fd1来描述,需要注意的是,管道的两端是固定了任务的。即一端只能用于读,由描述字fd0表示,称其为管道读端;另一端则只能用于写,由描述字fd1来表示,称其为管道写端。如果试图从管道写端读取数据,或者向管道读端写入数据都将导致错误发生。一般文件的I/O函数都可以用于管道,如close、read、write等等。课设编号3题目SystemV整体理解 System V IPC 包括 System V 消息队列、System V 信号灯和 System V 共享内存;Posix IPC 包括 Posix 消息队列、 Posix 信号灯和 Posix 共享内存区。 Linux 支持所有 System V IPC和 Posix IPC,并分别为它们提供了系统调用。其中,System V IPC 在内核以统一的数据结构方式实现。理解代码key_t 键和 ftok 函数 三种类型的 IPC 使用 key_t 值作为他们的名字,头文件把 key_t 定义为一个整数,通常是一个至少 32 位的整数,由 ftok 函数赋予的。函数 ftok 把一个已存的路径和一个整数标识符转换成一个 key_t 值,称为 IPC 键。key_t ftok(const char *pathname, int proj_id);成功返回 IPC 键,出错返回-1 对于共享内存来说,主要有以下几个 API:shmget()、shmat()、shmdt()及 shmctl()。shmget()用来获得共享内存区域的 ID,如果不存在指定的共享区域就创建相应的区域。shmat()把共享内存区域映射到调用进程的地址空间中去,这样,进程就可以方便地对共享区域进行访问操作。shmdt()调用用来解除进程对共享内存区域的映射。shmctl 实现对共享内存区域的控制操作。实验结果分析通过ipcs -m 查看内容状态实验编号4题目Mmap整体理解 mmap()系统调用使得进程之间通过映射同一个普通文件实现共享内存。普通文件被映射到进程地址空间后,进程可以像访问普通内存一样对文件进行访问,不必再调用read(),write()等操作。理解代码1、 mmap()系统调用形式如下:void* mmap ( void * addr , size_t len , int prot , int flags , int fd , off_t offset ) 函数的返回值为最后文件映射到进程空间的地址,进程可直接操作起始地址为该值的有效地址。详解如下:参数fd为即将映射到进程空间的文件描述字,一般由open()返回,同时,fd可以指定为-1,此时须指定flags参数中的MAP_ANON,表明进行的是匿名映射(不涉及具体的文件名,避免了文件的创建及打开,很显然只能用于具有亲缘关系的进程间通信)。len是映射到调用进程地址空间的字节数,它从被映射文件开头offset个字节开始算起。prot 参数指定共享内存的访问权限。可取如下几个值的或:PROT_READ(可读) , PROT_WRITE (可写), PROT_EXEC (可执行), PROT_NONE(不可访问)。flags由以下几个常值指定:MAP_SHARED , MAP_PRIVATE , MAP_FIXED,其中,MAP_SHARED , MAP_PRIVATE必选其一,而MAP_FIXED则不推荐使用。offset参数一般设为0,表示从文件头开始映射。参数addr指定文件应被映射到进程空间的起始地址,一般被指定一个空指针,此时选择起始地址的任务留给内核来完成。2.系统调用mmap()的方式使用普通文件提供的内存映射:打开或创建一个文件,然后再调用mmap()Mmap_write.c 中的核心代码fd=open(FILENAME ,O_CREAT|O_RDWR|O_TRUNC,00777 );pmap=mmap(0,sizeof(people),PROT_READ|PROT_WRITE,MAP_SHARED,fd,0);write(fd,sizeof(people);Mmap_read.c中对应的核心代码fd=open(FILENAME ,O_CREAT|O_RDWR,00777 );pmap=mmap(0,sizeof(people),PROT_READ|PROT_WRITE,MAP_SHARED,fd,0);实验结果分析 测试及结果:分析如下: 在mmap_write中写入我的学号和姓名,在mmap_read中读出即得到如下结果 专题二 Driver(驱动)实验编号1题目字符驱动整体理解Linux中编写一个内核模块可以通过module_param()传递参数,包括传递单个参数和传递数组参数。核心思想是内核模块的动态加载,在内核模块中定义操作集合,然后在用户态调用操作集合。实验结果分析测试及结果运用dmesg查看运行中读出了我的学号实验编号2题目Poll device整体理解 应用程序常常使用select系统调用,它可能会阻塞进程。这个调用由驱动的 poll 方法实现,原型为:unsigned int (*poll)(struct file *filp,poll_table *wait)poll函数作用是把当前的文件指针挂到设备内部定义的等待队列中,返回的是响应事件的个数理解代码读数据到用户空间*/ copy_to_user从用户空间读数据cope_from_userpoll和select实现功能差不多,但poll效率高,以后要多用pollpoll()接受一个指向结构struct pollfd列表的指针,其中包括了你想测试的文件描述符和事件。事件由一个在结构中事件域的比特掩码确定。当前的结构在调用后将被填写并在事件发生后返回。在SVR4(可能更早的一些版本)中的 poll.h文件中包含了用于确定事件的一些宏定义。事件的等待时间精确到毫秒 (但令人困惑的是等待时间的类型却是int),当等待时间为0时,poll()函数立即返回,-1则使poll()一直挂起直到一个指定事件发生。下面是pollfd的结构。struct pollfd int fd; /*文件描述符*/short events; /* 等待的需要测试事件 */short revents; /* 实际发生了的事件,也就是返回结果 */;与select()十分相似,当返回正值时,代表满足响应事件的文件描述符的个数,如果返回0则代表在规定时间内没有事件发生。如发现返回为负则应该立即查看 errno,因为这代表有错误发生。如果没有事件发生,revents会被清空 实验结果分析
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 物业企业战略联盟合作续约合同及资源共享方案
- 机械臂式管道清理设备的应用技术研究
- 楼盘活动策划方案
- 金库建筑项目方案设计书
- 2025年光伏电站智能化运维管理平台在光伏电站智能运维服务模式变革中的应用报告
- 2025年古典吉他乐理题库及答案
- DB65T 4378-2021 滴灌冬小麦化肥农药减施增效技术规程
- DB65T 4353-2021 风力发电机组塔筒倾斜度测量方法
- 2025年教育行业质量评估与认证体系下的教育改革趋势报告
- 动画专业面试题目及答案
- 餐饮公司股东协议合同范本
- 2025年上海百联集团股份有限公司招聘笔试参考题库含答案解析
- 2025年浙江金华武义县国资公司招聘笔试参考题库含答案解析
- 企业员工信息安全意识培训
- Unit 1 Lesson 5 I like my school!教学实录2024-2025学年冀教版(2024)初中英语七年级上册
- 【语文试题卷】2024学年第一学期九年级12月学情调研(终)
- 设备故障分析报告范文
- 越战老兵进校园演讲稿
- 2024年国家网络安全宣传周网络安全知识培训讲座
- 2022年第十七届广东省中学生天文知识竞赛试题(含答案)
- 传感器技术与应用电子教案
评论
0/150
提交评论