资源预览内容
第1页 / 共28页
第2页 / 共28页
第3页 / 共28页
第4页 / 共28页
第5页 / 共28页
第6页 / 共28页
第7页 / 共28页
第8页 / 共28页
第9页 / 共28页
第10页 / 共28页
亲,该文档总共28页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
通信与信息工程学院嵌入式开发技术课程设计报告班 级:姓 名:学 号:指导教师:设计时间:2016 年 1 月 11 日2016 年 1 月 14日成 绩:评 语:嵌入式开发技术课程设计报告II通信与信息工程学院二一六年目目 录录嵌入式课程设计11 设计要求11.1 基本题型.11.2 综合题型.22 开发环境、开发工具23 设计过程及结果.53.1 实现交叉编译环境.53.2 第几小组成员步骤53.3 实现 Linux 系统下的简易聊天室 74 设计总结20参考文献22嵌入式开发技术课程设计报告1嵌入式课程设计嵌入式课程设计1 设计要求设计要求1.1 基本题型基本题型(1)嵌入式开发环境配置采用 vmware+linux 配置开发主机系统,要求构建 linux 系统,配置 nfs,samba;掌握 minicom、samba 及 NFS 使用,能利用其实现windows、linux 开发主机与嵌入式实验系统间的通信;利用 NFS 服务实现主机与实验系统间文件共享;利用提供的工具构建交叉编译环境;要求:在下图时间上面一行显示小组成员姓名Armv4l-unknown-linux-gccArmv4l-unknown-linux-gcc 是 否 在/opt/host/armv4l/bin/opt/host/armv4l/bin/,如果不是这个路径,请使用 vivi 修改/root/.bash_profile/root/.bash_profile 文件中 。ATHATH 变 量 为 PATH=$PATH:$HOME/bin:/opt/host/armv4l/bin/PATH=$PATH:$HOME/bin:/opt/host/armv4l/bin/ , 存 盘 后 执 行 : sourcesource /root/.bash_profile/root/.bash_profile(2)熟悉 VI、GCC、GDB 及 MAKE 文件使用;(3)在开发系统中编写一个程序,实现打印“通信工程 13 级第 3嵌入式开发技术课程设计报告2小组嵌入式开发技术课程设计基础内容”功能,编写 makefile 文件,并通过 NFS 下载到实验箱中,验证交叉编译环境配置。1.2 综合题型综合题型基于 socket 编程的简单聊天室程序设计:(1)掌握 linux 下 socket 编程方法;(2)基于 C 语言设计一个简单的聊天室程序,PC 运行客户端程序,嵌入式系统运行服务器端程序,服务器随时侦听客户端请求并将其接入,要求至少实现 2 个客户端接入服务器并进行通信的功能;(3)编写 Makefile 文件;(4)利用 NFS 将程序下载到实验箱中,编译执行。(5)课程设计报告中应包含服务器端 socket 创建、绑定、监听、允许接入及接收数据等关键代码及其说明,客户端请求及数据发送等关键代码及说明;2 开发环境、开发工具开发环境、开发工具(1)安装 VWware 软件开始安装加载文件.双击该文件的图标,进入加载安装文件的界面。设置安装类型。安装文件加载完毕后进入开始安装界面。单击 next 按钮后,进入安装类型选择界面,选择 tyical 选项。执行软件包的安装选项,依据所做的选择,把对应的软件嵌入式开发技术课程设计报告3组件安装到系统中,输入正确的序列号。(2)配置 VMware打开桌面上 VMware 图形,双击打开再打开原来的文件夹,把汉化包打开执行软件的安装选项,依据所做的选择,确认安装。确认完后,即配置完成。点击打开虚拟机,选择标准,下一步,执行软件的安装选项。接下是密钥,填写老师所给的密码。安装完成。(3)安装驱动点击安装包,根据软件的安装选项,点击 next 按钮,即可安装完成。注:在电脑上安装好虚拟机之后配置相关参数注:在电脑上安装好虚拟机之后配置相关参数 配置 NFS:点击菜单运行系统设置-点击服务器设置-NFS服务器,点击增加,在目录中选择共享目录的路径,在主机(host)中填入主机 IP 地址(192.168.1.12) ,并选择客户对共享目录的操作位读写(Read/write);在常规选项中选择允许来自高于 1024的端口的连接,点击确定后即可配置好 NFS。配置完成后,可以简单测试一下 NFS 是否配置好了: 在虚拟机上自己 mount 自己,看是否成功就可以判断 NFS 是否配好了。mount 192.168.1.12:/arm2410cl /host之后 ls 命令查看 arm2410cl 之下的文件目录,如果文件目录在,那么说明 NFS 配置成功。嵌入式开发技术课程设计报告4端口配置用串口线连接好笔记本电脑和 2410 经典版平台。 计算机,属性,设备管理器,端口高级设置下端口号 COM1进入虚拟机设置,串行端口嵌入式开发技术课程设计报告53 设计过程及结果设计过程及结果3.1 实现交叉编译环境实现交叉编译环境结果:3.2第几小组成员步骤第几小组成员步骤(1)创建工作目录【rootvm-dev】# mkdir winter【rootvm-dev winter】# cd winter(2)编写 winter.c 文件【rootvm-dev】# vi winter.c(3)编写 Makefile 文件CC =armv4l-unknown-linux-gccEXEC=client serverOBJS=client.o server.o嵌入式开发技术课程设计报告6CFLAGS+=LDFLAGS+=-staticall:$(EXEC)$(EXEC):$(OBJS)$(CC) $(LDFLAGS) o $ $(OBJS)clean:-rm f *.elf *.gdb *.o 其中,CC 指明编译器EXEC 表示编译后生成的执行文件名称OBJS 目标文件列表CFLAGS 编译参数LDFLAGS 连接参数all: 编译主入口clean: 清除编译结果(4)运行 make 编译程序【rootvm-dev】# make clean【rootvm-dev winter】# make(5)源程序 #includeint main(void)嵌入式开发技术课程设计报告7printf(“ 通信工程 13 级第三小组嵌入式开发技术课程设计基础内容“);6)结果由于电脑与开发板不匹配,结果没有办法出来3.3 实现实现 Linux 系统下的简易聊天室系统下的简易聊天室(1)程序流程图返回-1numbytes0 10 numbytesnumbytes返回 0是否连接上服务器 connect()输入文字关闭 socket结束开始创建套接字 socket初始化结构体 server_addr嵌入式开发技术课程设计报告8=0=0=0!=- 1!=- 1!=- 1=-1=-1=-1开始定义套接字类型 结构体初始化绑定端口 bind()监听端口 listen()定义线程 ppid pid接收信息 accept()接收成功,发送 send()创建子进程 ppid创建子进程 pidPid 接收信息, 大小为 recvbyes睡眠 usleep(10000)将信息发回给客 户 send()结束=-1=-1=-1(2)程序工作过程服务端处于监听状态,客户端发送请求,连接成功并通信。首先服务端调用 socket()函数创建一个套接字,然后把协议,端口号,ip 信息通过 bind()进行绑定。以上操作完后服务端就开始监听客户端的请求,并设置监听的最大数目。当客户端发送链接请求时,服务端就调用 accept()函数接受客户端的请求。然后对于客户端来说,也是要先调用 socket()函数创建客户端的套接字,这里是用的 TCP协议,所以可以不用 bind()函数。接着调用 connect()函数与服务端嵌入式开发技术课程设计报告9建立连接。当服务端和客户端建立连接时,可以通过彼此之间的套接字描述符来进行数据传输。其中一方通过 send 函数把数据写入数据缓冲区,另一方通过 recv()函数从缓冲区内读出数据,这样就完成了服务端与客户端之间的数据传输。当双方数据传输完成后,函数close()关闭各自的 套接字,使客户端和服务端通信中断。(3)socket 编程方案设计一个简单的聊天室程序,PC 运行客户端程序,嵌入式系统运行服务器端程序,服务器随时侦听客户端请求并将其接入,要求至少实现 2 个客户端接入服务器并进行通信的功能;Makefile 文件NFS 将程序下载到实验箱中,编译执行。注:程序里的函数解释注:程序里的函数解释(1)Socket()作用:socket 函数为客户机或服务器创建一个 sokcet格式:int socket(int family,int type,int protocol);参数说明:Family:表示地址族,可以去 AF_UNLX 和 AF_INT。其中,AF_UNLX 只能够用于单一的 UNIX 系统进程间通信;AF_INT 是针对 Internet 的,因而可以允许在远程主机之间通信,实验中使用AF_INT。Type:网络程序所采用的通信协议,可以取 SOCK_STREAM 或嵌入式开发技术课程设计报告10SOCK_DGRAM。其中,SOCK_STREAM 表明使用的是 TCP 协议,这样提供按顺序的、可靠的、双向、面向连接的比特流;SOCKE_DGRAM 表明使用的是 UDP 协议,这样只会提供定长、不可靠、无连接的通信。(2)bind( )格式:int bind(int sockfd,struct sockaddr *addr,int addrlen);参数说明:Sockfd:socket 的文件描述符号。Sockaddr:表示名字所用的一个数据结构,用来保存地址(包括IP 地址和端口)Addrlen:设置结构大小长度。(3)listen()格式:int listen(int sockfd, int backlog);作用:监听连接信号,和 accepted 函数合同。参数说明:Sockfd:表示 socket 调用返回的文件描述符。Backlog:表示接入队列允许的连接数目,大多数系统允许 20 个,也可以子定义 510 个。(4)accept()格式:嵌入式开发技术课程设计报告11Int accept (int sockfd, void *addr, int *addrlen);作用:与 listen 函数合用,监听信息、接收客户端请求。参数说明:Sockfd:表示 socket 的文件描述符。Addr:表示指向局部的数据结构 struct sockaddr-in 的指针。Addrlen:表示地址的长度。(5)connect()格式:int connect( int sockfd , struct sockaddr *serv_addr , int addrlen);作用:在面向连接的系统中客户及连接服务器时使用,connect必须在 bind 后使用。参数作用: Sockfd:表示 socket 的文件描述符。Serv-addr:表示村访目的端口和 ip 地址(套接字)的数据结构。(6)send() 和 recv()格式 1:Int send (int sockfd, const vod *msg,int len, int flags);功能:发送信息。格式 2:Int recv (int sockfd , void *buf,int len, usigned int 嵌入式开发技术课程设计报告12flags);作用:用于流式 socket、数据报 socket 内部之间的通信。(7)close( ) 和 shutdown ( )格式:Close( int sockfd)或 Int shutdown(int sockfd , int f)
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号