




已阅读5页,还剩22页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
实践教学实践教学 兰州理工大学兰州理工大学 计算机与通信学院 2015 年春季学期 嵌入式系统开发课程设计嵌入式系统开发课程设计 题 目 基于 LINUX 系统的嵌入式 WEB 服务器的设计 专业班级 通信工程 12 级 1 班 姓 名 王爱强 学 号 12250110 指导教师 张玺君 成 绩 目录目录 摘 要 1 前 言 2 一 基本原理 3 1 1 嵌入式 WEB 服务器概述 3 1 2 SOCKET 编程概述 4 二 系统分析 6 2 1 整体结构图 6 2 2 连接处理模块 6 三 详细设计 7 3 1 主程序设计 7 3 2 客户连接处理模块设计 8 3 3 客户请求解析处理模块设计 8 3 4 发送 HTTP 协议数据头模块设计 9 四 运行结果 11 参考文献 14 总 结 15 致 谢 16 附录 17 摘摘 要要 嵌入式 Web 服务器主要用于远程监测和控制 它不同于传统的 Web 服务器 硬件 处理器能力和储存能力有限 因此操作系统等相关软件需要进行裁剪以适应嵌入式环 境 开源代码的操作系统 Linu 型具有强大的网络服务功能 支持多种网络接口和网络 协议栈 同时具有成本低性能稳定 扩充能力强等特点 成为嵌入式操作系统的首选 关键词 Linux Web 服务器 浏览器 交叉编译 前前 言言 嵌入式系统已经成熟并且得到了广泛地使用 在传统的测控系统中 为了实现多 个测控点之间的信息交流 一般采用 RS 485 CAN SPI 等总线将多个测控节点组织成 一个网络 但是这样的网络专用性太强 有效地通信范围太窄 而基于 TCP IP 协议的 Web 技术得到了普及 更重要的是这些协议是可开发的 标准的 独立于平台的 把嵌 入式系统和与 Web 技术结合在一起 将 Web 技术引入到测量和控制系统中 实现基于 嵌入式 Web 服务器的远程控制系统 必将有良好地应用前景 嵌入式系统离不开嵌入式操作系统 目前商用的操作系统往往价格昂贵 不适应 广泛应用 嵌入式 Linux 操作系统源码可开发 移植性好 支持多种硬件平台并且支 持几乎所有的常见网络通信协议支持的文件系统也很丰富 是一个功能完整的嵌入式 操作系统并且有大量的优秀开发码源的应用软件和开发工具可以使用 因此 采用 Linux 作为平台 使用 Web 技术进行远程在线测控系统的设计 一 基本原理一 基本原理 1 1 嵌入式 WEB 服务器概述 1 WEB 服务器 通常是在远程机器上 负责对浏览器页面请求作出响应 返回 HTML 编码或 类似的数据流 通俗的讲 Web 服务器传送 serves 页面使浏览器可以浏览 然而应用程序服务器提供的是客户端应用程序可以调用 call 的方法 methods 确切一点 你可以说 Web 服务器专门处理 HTTP 请求 request 但是应用程 序服务器是通过很多协议来为应用程序提供 serves 商业逻辑 business logic 随着 Internet 技术的兴起 在嵌入式设备的管理与交互中 基于 Web 方式 的应用成为目前的主流 这种程序结构也就是大家非常熟悉的 B S 结构 即在 嵌入式设备上运行一个支持脚本或 CGI 功能的 Web 服务器 能够生成动态页面 在用户端只需要通过 Web 浏览器就可以对嵌入式设备进行管理和监控 非常方 便实用 2 WEB 浏览器 WEB 浏览器是个显示网页伺服器或档案系统内的 HTML 文件 并让用户与此 些文件互动的一种软件 个人电脑上常见的网页浏览器包括微软的 Internet Explorer Mozilla 的 Firefox Opera 和 Safari 浏览器是最经常使用到的客 户端程序 3 嵌入式 WEB 服务器架构 图 1 嵌入式 WEB 服务器架构 常见的嵌入式 WEB 服务器有 lighttpd shttpd thttpd boa mathopd minihttpd appweb goahead 等 上百种 1 2 SOCKET 编程概述 现在大多数的操作系统都提供了已编译好了的网络通讯程序 TCP IP 范围 内最普通的例子就是 web 客户端 浏览器 和 web 服务器 还有就是 FTP 和 Telnet 的客户端和服务器等 Socket 接口是 TCP IP 网络的 API Socket 接口定义了许多函数或例程 程序员可以用它们来开发 TCP IP 网络上的应用程序 SOCKET 编程接口 include int socket int domain int type int protocol 说明 socket 函数创建一个套接字 参数 domain 应用程序所在主机使用的通信协议族 type 建立的套接字的类型 Protocol 使用的特定协议 include int bind int sockfd struct sockaddr my addr socklen t addrlen 说明 将套接字地址与所创建的套接字号联系起来 参数 sockfd 调用 socket 返回的文件描述符 my addr 指向数据结构 struct sockaddr 的指针 它保存地址 即 端 口和 IP 地址 信息 addrlen 设置为 sizeof struct sockaddr include int connect int sockfd const struct sockaddr serv addr socklen t addrlen 说明 建立套接字连接 成功返回 0 失败返回 1 参数 sockfd 调用 socket 返回的文件描述符 serv addr 保存着目的地端口和 IP 地址的数据结构 struct sockaddr addrlen 设置为 sizeof struct sockaddr include int listen int s int backlog 说明 用于面向连接服务器 表明它愿意接收连接 参数 sockfd 调用 socket 返回的文件描述符 backlog 在进入队列中允许的连接数目 在发生错误的时候返回 1 include int accept int s struct sockaddr addr socklen t addrlen 说明 建立套接字连接 成功返回文件描述符 失败 1 参数 sockfd 调用 socket 返回的文件描述符 addr 指向局部的数据结构 sockaddr in 的指针 addrlen 设置为 sizeof struct sockaddr in include include ssize t send int s const void buf size t len int flags 说明 用于流式套接字或者数据报套接字的通讯 返回实际发送的数据的字 节数 它在 错误的时候返回 1 参数 sockfd 发送数据的套接字描述符 或者是调用 socket 或者 accept msg 指向发送数据的指针 len 数据长度 flags 总是设置为 0 include include ssize t recv int s void buf size t len int flags 说明 用于流式套接字的通讯 recv 返回实际读入缓冲 的数据的字节数 或者在错误的时候返回 1 参数 sockfd 要读的 SOCKET 描述符 buf 要读的信息的缓冲区 len 缓冲的最大长度 flags 总是设置为 0 二 二 系统分析系统分析 2 1 整体结构图 主程序 建立 TCP 类型 SOCKET 在 80 端口进行监听连接请求 接收到连接 请求 将请求传送给连接处理模块处理 并继续进行监听 如图 2 所示 主程序MAIN 1 环境设置 2 建立侦听SOCKET及客户连接处 理调用主循环 客户连接处理 解析客户请求HTTP协议头 发送HTTP协议数据头 发送GIF文件 发送文本文件 发送JPG文件 发送HTML文件 发送当前目录信息 图 2 整体流程 2 2 连接处理模块 客户请求获取服 务器资源 解析客户请求字 符串 发送HTTP协议头 发送资源数据 侦听客户请求 客户计算机 读取客户请求资 源 图 3 连接处理模块 三 详细设计三 详细设计 3 1 主程序设计 1 功能说明 系统的总入口 也是系统的主要控制函数 分别完成如下功能 建立环境设置 设置信号处理方式 建立侦听 TCP 流方式 SOCKET 并绑定 80 端口 建立连接侦听及客户连接处理调用主循环 2 算法流程图 算法流程图如图 4 所示 设置信号处理 句柄 进入根目录 命令行处理 建立TCP流SOCKET 绑定监听端口 设置允许客户 连接数量 侦听客户连接 请求 客户连接请求 处理 图 4 算法流程图 3 命令行输入处理 用户在命令行输入参数 i 则将客户输入文件描述字设为 0 即标准输入 用于在本机进行测试 其他输入全部忽略 3 2 客户连接处理模块设计 1 功能说明 用于初步处理客户的连接请求 并将请求信息传递给客户请求解析函数处理 2 算法 具体算法如图 5 所示 打开文件描述字 并建立文件描述符 读取连接信息 获取Refferer字段信息 赋值给Refferer全局变量 获取content length字段信息 调用客户请求 解析模块 关闭文件流 图 5 算法流程图 3 3 客户请求解析处理模块设计 1 功能说明 用于解析客户的请求 并根据请求信息调用相应的函数进行请求处理 2 算法 算法流程图如图 6 所示 对客户的请求字符 串进行空格处理 发送当前目录 的INDEX HTML文件 请求目录下 的index html是否存在 发送当前目录 信息 是否请求目录 是 是JPG或JPEG 文件 判断客户请求 文件类型 否 是GIF图像文件 是HTML文件 是纯文本文件 发送协议头 Content type image jpeg 请求资源是否存 在 是 回应请求资源 不存在 否 发送协议头 Content type image gif 发送协议头 Content type text html 发送协议头 Content type text plain 发送文件数据 是 否 图 6 算法流程图 3 4 发送 HTTP 协议数据头模块设计 1 功能说明 根据参数的不同 发送不同的 HTTP 协议头信息 2 算法 函数定义为 int PrintHeader FILE f int content type 发送请求成功信息 HTTP 1 0 200 OK 根据文档类型发送相应的信息 fprintf 函数中的第一个参数 f 为客户连接文件 流句柄 switch content type case t fprintf f Content type text plain n break case g fprintf f Content type image gif n break case j fprintf f Content type image jpeg n break case h fprintf f Content type text html n break 发送服务器信息 fprintf f Server AMRLinux httpd 0 2 4 n 发送文件过期为永不过期 fprintf f Expires 0 n 四 运行结果四 运行结果 1 进入目录 root localhost cd UP CUP210 II SRC exp basic 04 webserver root localhost 04 webserver ls Google Makefile copy c copy o doc httpd httpd c httpd o index html root localhost 04 webserver 2 清除中间代码 重新编译 root localhost 04 webserver make clean rm f bin httpd httpd elf gdb o root localhost 04 webserver make arm linux gcc DHTTPD DOCUMENT ROOT mnt yaffs c o httpd o httpd c arm linux gcc DHTTPD DOCUMENT ROOT mnt yaffs c o copy o copy c arm linux gcc static o bin httpd httpd o copy o lpthread arm linux gcc static o httpd httpd o copy o lpthread root localhost 04 webserver ls Google Makefile copy c copy o doc httpd httpd c httpd o index html 当前目录下生成可执行程序 httpd 4 启动 UP CUP210 II 型实验系统 连好网线 串口线 通过串口终端挂载宿 主机实验目录 root UP TECH yaffs mountnfs 192 168 12 157 UP CUP210 II mnt nfs 6 进入串口终端的 NFS 共享实验目录 root UP TECH yaffs cd mnt nfs SRC exp basic 04 webserver root UP TECH 04 webserver ls Google copy c doc httpd c index html Makefile copy o httpd httpd o root UP TECH 04 webserver 6 执行程序 启动 HTTP 服务器 root UP TECH 04 webserver httpd starting httpd press q to quit wait for connection 此时 UP CUP210 II 型设备端 HTTP 服务器启动并等待连接 打开 PC 机 Windows XP 系统上的 IE 浏览器 在地址栏输入 UP CUP210 II 型 设备 IP 地址 http 192 168 12 199 如图 7 所示 图 7 输入 IP 地址 输入正确的 IP 地址即可访问 UP CUP210 II 型设备上 HTTP 提供的服务 结果如下 ARM 端 root UP TECH 04 webserver httpd starting httpd press q to quit wait for connection buf GET HTTP 1 1 Got buf1 Accept image gif image x xbitmap image jpeg image pjpeg application x shockwave flash application vnd ms excel application vnd ms powerpoint Got buf1 application msword Got buf1 Accept Language zh cn Got buf1 Accept Encoding gzip deflate Got buf1 User Agent Mozilla 4 0 compatible MSIE 6 0 Windows NT 5 1 SV1 QQPinyinSetup 620 CIBA MAXTHON 2 0 Got buf1 Host 192 168 12 199 Got buf1 Connection Keep Alive 浏览器端 如图 8 所示 图 8 浏览器端显示 参考文献参考文献 1 孙天泽 袁文菊 张海峰 嵌入式设计及 Linux 驱动开发指南 基于 ARM9 处理器 M 北京 电子工业出版社 2005 2 于明 范书瑞 曾祥烨 ARM9 嵌入式系统设计与开发教程 M 北京 电子 工业出版社 2006 3 王田苗 嵌入式系统设计与实例开发 M 北京 清华大学出版社 2003 4 Samsung Electronics S3C2410X 32 Bit RISC Microprocessor User s Manual 2003 5 周立功等 ARM嵌入式Linux系统构建与驱动开发范例 北京 北京航空航 天大学出版社 2006 6 郑慕德 编著 嵌入式微型计算机系统实例教程 ARM 与 LINUX 科学出版社 2006 7 7 王进德 编著 嵌入式 LINUX 程序设计与应用案例 中国电力出版社 2007 5 8 王学龙著 嵌入式 LINUX 系统设计与应用 M 北京 清华大学出版社 2001 9 林宇 郭凌云 LINUX 网络编程 M 北京 人民邮电出版社 2000 10 张斌 高波等 LINUX 网络编程 M 北京 清华大学出版社 2000 总总 结结 两周的课设在不知不觉中已经结束了 虽说时间不长 但是收获颇丰 不 仅学到了一些新知识 巩固了以前学习的内容 增强了我的动手操作调试能力 虽说一些技术我们在课堂上野曾经学习过 但是大都停留在理论学习上 实际 开发很少 而这次课程设计给了我们一个很好的边学习边实践的机会 对我们 深入学习这些技术有很大的帮助 深刻体会到了这些技术的实用性 本次课程设计利用实验室提供的博创经典 UP CUP210 II 型嵌入式实验平 台 通过上位机编程控制下位机进行 web 服务器的设计 使用 C 语言编程 生成 目标文件 并且通过对宿主机下位机的相关上机操作 实现对书本内容的实际 操作 巩固加深对嵌入式系统的认知和了解 最终在此基础上进行创新设计 了解了一个实际的网络通讯应用程序整体设计后 我们共同编写 C 程序实现对 服务器的访问 经过这段时间的学习 系统分析 方案论证 硬件和软件设计 调试等 的努力 完成了嵌入式 web 服务器的设计制作 在系统的设计制作过程中 确实 遇到了各种各样的问题 如调试思路正确但是没有能够进行找到合适的方法进 行进一步的实验 设计中对于程序的编写以及目录结构的认知上存在偏差 其 主要原因还是基础功不扎实 把握系统的能力不足 这为我们以后的学习和工 作提了一个醒 在问题的解决过程中 也提高了我的动手动脑能力 学到了许 多在书本上学不到的知识 在具体的设计当中解决了诸如 httpd 服务器的搭建 和 C 程序的修改 程序的调试和系统的整体认识等问题 收获很大 做课程设计是一次再系统的学习 课程设计的完成 让我在其中学到了许 多 尤其是学会了合作 懂得了合作早就的效益和成果 在这里再次感谢和我 一起搭档的同学 还有对我们精心指导的老师 致致 谢谢 通过近两周的努力 我们的课程设计终于完成了 这意味着这一阶段艰苦 的热烈的付出即将告一段落 在整个课程设计中 我在学习上和思想上都受益 匪浅 这除了自身的努力外 与指导的老师 同学的关心 支持和鼓励是分不 开的 做课程设计是一次再系统的学习 课程设计的完成 让我在其中学到了许 多 尤其是学会了合作 懂得了合作早就的效益和成果 在这里再次感谢和我 一起搭档的同学 还有对我们精心指导的老师 附录附录 Httpd c include include include include include include include include include include include include include include pthread h define DEBUG int KEY QUIT 0 int TIMEOUT 30 ifndef O BINARY define O BINARY 0 endif char referrer 128 int content length define SERVER PORT 80 int PrintHeader FILE f int content type alarm TIMEOUT fprintf f HTTP 1 0 200 OK n switch content type case t fprintf f Content type text plain n break case g fprintf f Content type image gif n break case j fprintf f Content type image jpeg n break case h fprintf f Content type text html n break fprintf f Server uClinux httpd 0 2 2 n fprintf f Expires 0 n fprintf f n alarm 0 return 0 int DoJpeg FILE f char name char buf FILE infile int count if infile fopen name r alarm TIMEOUT fprintf stderr Unable to open JPEG file s d n name errno fflush f alarm 0 return 1 PrintHeader f j copy infile f prints the page alarm TIMEOUT fclose infile alarm 0 return 0 int DoGif FILE f char name char buf FILE infile int count if infile fopen name r alarm TIMEOUT fprintf stderr Unable to open GIF file s d n name errno fflush f alarm 0 return 1 PrintHeader f g copy infile f prints the page alarm TIMEOUT fclose infile alarm 0 return 0 int DoDir FILE f char name char buf DIR dir struct dirent dirent if dir opendir name 0 fprintf stderr Unable to open directory s d n name errno fflush f return 1 PrintHeader f h alarm TIMEOUT fprintf f Index of s n n name alarm 0 if name strlen name 1 strcat name while dirent readdir dir alarm TIMEOUT fprintf f s n name dirent d name dirent d name alarm 0 closedir dir return 0 int DoHTML FILE f char name char buf FILE infile int count char dir 0 if infile fopen name r alarm TIMEOUT fprintf stderr Unable to open HTML file s d n name errno fflush f alarm 0 return 1 PrintHeader f h copy infile f prints the page alarm TIMEOUT fclose infile alarm 0 return 0 int DoText FILE f char name char buf FILE infile int count if infile fopen name r alarm TIMEOUT fprintf stderr Unable to open text file s d n name errno fflush f alarm 0 return 1 PrintHeader f t copy infile f prints the page alarm TIMEOUT fclose infile alarm 0 return 0 int ParseReq FILE f char r char bp struct stat stbuf char arg char c int e int raw ifdef DEBUG printf req is s n r endif while r skip non white space while isspace r r while r r bp r while r ifdef DEBUG printf bp s x r s n bp bp r endif if r char e r 0 arg r 1 if e strchr arg e 0 else arg 0 r 0 c bp zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz if c 0 0 x20 c 0 c 1 0 zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz if c 0 0 strcat c if c strcat c index html if stat c else end 0 DoDir f c else if strcmp r 4 gif DoGif f c else if strcmp r 4 jpg strcmp r 5 jpeg DoJpeg f c else if strcmp r 4 htm strcmp r 5 html DoHTML f c else DoText f c else PrintHeader f h alarm TIMEOUT fprintf f 404 File Not Found n fprintf f The requested URL was not found on this server n alarm 0 return 0 void sigalrm int signo got an alarm exit int HandleConnect int fd FILE f char buf 160 char buf1 160 f fdopen fd a if f fprintf stderr httpd Unable to open httpd input fd error d n errno alarm TIMEOUT close fd alarm 0 return 0 setbuf f 0 alarm TIMEOUT if fgets buf 150 f fprintf stderr httpd Error reading connection error d n errno fclose f alarm 0 return 0 ifdef DEBUG printf buf s n buf endif alarm 0 referrer 0 0 content length 1 alarm TIMEOUT read other line to parse Rrferrer and content length infomation while fgets buf1 150 f ifdef DEBUG printf Got buf1 s n buf1 endif if strncasecmp buf1 Referer 8 char c buf1 8 while isspace c c strcpy referrer c els
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 福建省福州市晋安区20142015学年八年级(下)期末物理试题(解析版)
- 2025年Python二级考试冲刺押题专项训练试题集锦
- 买卖钢材的协议书6篇
- 机动车驾驶培训合同书5篇
- 吉林省吉林市第十区四校联考2026届数学九上期末预测试题含解析
- 历届殡葬考试题及答案
- 历史课标试题及答案
- 山东省潍坊市诸城龙源学校2026届数学九上期末调研模拟试题含解析
- 2026届湖南省长沙市明德麓谷学校七年级数学第一学期期末经典模拟试题含解析
- 2025年碳排放管理员技能竞赛理论考试题库500题(典型题)
- 生物地理学第2章生物群落课件
- 重离子、质子治疗前景与适应症-武汉
- 组织行为学(-)(英文版)课件
- 商务谈判(完整版)课件
- 小学数学教师新课标考试试题
- 小学数学北师大四年级上册五方向与位置四上《用数对确定位置》北师大版李雪梅PPT
- 步进电机控制系统课件
- 2022年混凝土预制U型槽单元工程质量评定表
- 井喷及井喷失控案例教育
- 职业发展与就业创业指导ppt课件完整版
- 挠度计算模板表格(自动版)
评论
0/150
提交评论