116709047陈俊松嵌入式Linux课程设计
- 格式:doc
- 大小:383.50 KB
- 文档页数:12
基于linux嵌入式课程设计一、课程目标知识目标:1. 掌握Linux操作系统的基本原理和嵌入式系统开发环境;2. 学会使用Linux命令行进行基本操作和文件管理;3. 理解嵌入式系统硬件与Linux内核的交互原理;4. 了解Linux内核模块的编译、加载和卸载方法;5. 掌握基于Linux的嵌入式应用程序开发方法。
技能目标:1. 能够在Linux环境下搭建嵌入式开发环境;2. 熟练运用Linux命令行进行文件操作和系统管理;3. 能够编写简单的嵌入式设备驱动程序;4. 学会使用调试工具对嵌入式系统进行调试;5. 具备独立完成基于Linux的嵌入式项目的能力。
情感态度价值观目标:1. 培养学生对嵌入式系统及Linux操作系统的兴趣,激发学习热情;2. 培养学生的团队合作精神,学会与他人共同解决问题;3. 增强学生的动手实践能力,培养勇于尝试、敢于创新的精神;4. 提高学生的计算机素养,使其认识到Linux在嵌入式领域的重要地位;5. 引导学生树立正确的价值观,将所学知识应用于国家经济建设和社会发展。
本课程针对高年级学生,结合学科特点和学生实际情况,注重理论与实践相结合,提高学生的实际操作能力。
通过本课程的学习,使学生掌握基于Linux的嵌入式系统开发技能,为从事相关领域工作打下坚实基础。
同时,培养学生良好的情感态度价值观,使其成为具有创新精神和实践能力的优秀人才。
二、教学内容1. Linux操作系统基础:介绍Linux操作系统的历史、特点及优势,学习Linux系统的基本操作和文件系统结构。
- 教材章节:第1章 Linux操作系统概述- 内容:Linux发展史、系统结构、文件系统、常用命令。
2. 嵌入式开发环境搭建:学习在Linux环境下搭建嵌入式开发环境,包括交叉编译工具链、文件传输工具等。
- 教材章节:第2章 嵌入式开发环境搭建- 内容:交叉编译工具链、文件传输工具、开发板连接与配置。
3. Linux内核与驱动编程:学习Linux内核模块的编写、编译、加载和卸载,了解嵌入式设备驱动程序开发。
嵌入式Linux系统开发基础课程设计一、课程概述本课程旨在为学生提供嵌入式Linux系统开发的基础知识,并引导学生通过实践掌握相关技能。
本课程包括嵌入式系统概述、Linux系统基础知识、应用开发、内核驱动开发等内容。
二、课程目标1.了解嵌入式系统的概念、特点和应用领域。
2.掌握Linux操作系统基础知识,如文件系统、进程管理和网络协议等。
3.能够熟练使用常用Linux开发环境和工具,如gcc、gdb、make等。
4.能够开发简单的应用程序和内核驱动程序,并运行在嵌入式系统上。
5.能够使用实际开发板进行操作系统、驱动和应用程序开发,并完成系统移植和调试。
三、教学大纲第一章嵌入式系统概述1.嵌入式系统定义和特点2.嵌入式系统应用场景3.嵌入式系统开发流程及其特点第二章 Linux系统基础知识1.Linux系统启动流程2.Linux文件系统3.Linux进程管理4.Linux网络协议栈第三章 Linux开发环境和工具介绍1.Linux下的gcc和gdb工具2.makefile的编写和使用3.熟悉Linux下的vim编辑器第四章嵌入式应用程序开发1.基于Linux系统的应用程序开发2.C语言程序设计3.Linux下的多线程编程第五章嵌入式内核驱动开发1.Linux内核驱动概述2.Linux设备驱动框架分析3.基于Linux内核的驱动程序开发第六章嵌入式Linux运行与调试1.交叉编译器的使用2.根文件系统制作与移植3.基于开发板的运行环境搭建4.嵌入式系统调试技巧四、实践环节为了帮助学生更好地掌握理论知识,本课程还将设置若干实践任务,包括:1.基于开发板制作运行环境。
2.使用交叉编译器编写应用程序。
3.开发LED驱动程序并运行在开发板上。
4.基于网络协议栈设计TCP/IP协议。
5.开发并使用系统监控功能等。
五、课程评价本课程采取理论与实践相结合的教学方式,通过课堂教学和实践环节的训练,学生将掌握嵌入式Linux系统开发的基础知识和技能。
嵌入式linux开发课程设计一、课程目标知识目标:1. 理解嵌入式Linux系统的基本概念、原理和架构。
2. 掌握嵌入式Linux开发环境的搭建与使用。
3. 学习嵌入式Linux内核配置、编译与移植方法。
4. 掌握常见的嵌入式Linux设备驱动编程技术。
技能目标:1. 能够独立搭建嵌入式Linux开发环境。
2. 熟练运用Makefile、交叉编译工具链进行代码编译。
3. 能够编写简单的嵌入式Linux设备驱动程序。
4. 学会分析并解决嵌入式Linux开发过程中的常见问题。
情感态度价值观目标:1. 培养学生对嵌入式系统开发的兴趣,提高学习积极性。
2. 培养学生的团队协作意识,增强沟通与表达能力。
3. 培养学生勇于克服困难,面对挑战的精神。
分析课程性质、学生特点和教学要求:本课程为高年级专业课程,要求学生具备一定的C语言基础和计算机硬件知识。
课程性质为理论与实践相结合,注重培养学生的实际动手能力。
针对学生特点,课程目标设定了明确的知识点和技能要求,旨在使学生能够掌握嵌入式Linux开发的基本方法,为后续项目实践和职业发展奠定基础。
课程目标分解为具体学习成果:1. 学生能够阐述嵌入式Linux系统的基本概念、原理和架构。
2. 学生能够自主搭建嵌入式Linux开发环境,并进行简单的程序编译与运行。
3. 学生能够编写简单的嵌入式Linux设备驱动程序,并实现相应的功能。
4. 学生能够针对嵌入式Linux开发过程中遇到的问题,提出合理的解决方案,并进行实际操作。
二、教学内容1. 嵌入式Linux系统概述- 嵌入式系统基本概念- 嵌入式Linux的发展历程- 嵌入式Linux系统的特点与优势2. 嵌入式Linux开发环境搭建- 交叉编译工具链的安装与配置- 嵌入式Linux文件系统制作- 常用开发工具的使用(如Makefile、GDB)3. 嵌入式Linux内核与驱动- 内核配置与编译- 内核移植方法- 常见设备驱动编程(如字符设备、块设备、网络设备)4. 实践项目与案例分析- 简单嵌入式Linux程序编写与运行- 设备驱动程序编写与调试- 分析并解决实际问题(如系统性能优化、故障排查)教学内容安排与进度:1. 嵌入式Linux系统概述(2课时)2. 嵌入式Linux开发环境搭建(4课时)3. 嵌入式Linux内核与驱动(6课时)4. 实践项目与案例分析(8课时)本教学内容基于课程目标,结合教材章节内容,注重理论与实践相结合,旨在培养学生的实际动手能力和解决问题的能力。
嵌入式Linux开发课程设计指导书课程编码:适应专业:计算机专业、电子信息工程专业学时:3周(计算机专业),2周(电子信息工程专业)学分: 3(计算机专业),2(电子信息工程专业)时间安排:分散先修课程:高级语言程序设计、计算机组成原理、接口技术,嵌入式系统,操作系统指导书名称:一、目的与任务:课程设计为学生提供了一个既动手又动脑,独立实践的机会,将课本上的理论知识和实际应用问题进行有机结合,锻炼学生分析、解决实际问题的能力。
本课程设计采用理论指导与实践相结合的方式,系统地学习并实践嵌入式Linux程序开发技术。
通过课程设计,学生可以熟练掌握Linux的基本操作,系统管理,并具备Linux下文件、进程、网络、GUI的开发方法,为实际应用开发打下坚实的基础。
二、目标通过本次课程设计要求学生达到以下目标:1)熟悉Linux操作系统具体操作(安装、基本命令、系统管理、FTP服务器搭建) 2)熟悉Linux下C程序开发调试的基本过程。
3)熟悉嵌入式Linux进程及进程间通信4)能够熟练编写Linux应用程序,包括文件、网络、图形等三、内容任务1、基础知识,完成以下任务:Linux操作系统的安装、基本命令的使用,网络的配置,FTP服务器搭建,VI编辑器的使用,文件压缩方法。
任务2、Linux系统C程序设计的基本知识,完成以下任务1)GCC编译器的使用,Linux系统C程序设计编译、调试方法。
2)分别用if和switch判断一个数的奇偶性并输出结果。
3)用for语句编写程序,计算100到200之间所有奇数的和。
4)用while语句编写程序,计算1000到2000之间所有能被16整除的数的和。
5)编写程序,将数组内容前后倒置a[]="abcdefghijkl"。
6)利用指针将数据A的内容复制到数组B。
7)定义一个结构变量成绩(姓名,课程,分数),对结构赋值并打印其内容。
任务3、嵌入式Linux程序设计,完成以下任务1)创建两线程,通过打印输出各自的线程号和打印次序,要求从打印结果能看出两个线程是并发执行的。
摘要随着后PC时代的到来,嵌入式系统技术已经成为了一个万众瞩目的焦点。
目前已广泛应用于信息家电、数据网络、工业控制、医疗卫生、航空航天等众多领域。
巨大的市场潜力,无穷的商机,吸引了各路英豪纷踵沓来。
硬件方面,各大电子厂商相继推出了自己的专用嵌入式芯片,漫天而至的是mp3,PDA,无线上网装置,让人们充分感受到了这股强劲之势;软件方面,在Vxworks、pSOS、Neculeus和Windows CE等嵌入式操作系统引领下,也出现了空前繁荣的局面,但这些专用操作系统都是商业化产品,其高昂的价格使许多面向低端产品的小公司望而却步,并且其源代码的封闭性也大大限制了开发者的积极性。
近两年在我国登陆并蓬勃发展的Linux,也已广泛应用于各类计算应用,不仅包括IBM的微型Linux腕表、手持设备(PDA和蜂窝电话)、因特网装置、客户机、防火墙、工业机器人和电话基础设施设备,甚至还包括了基于集群的超级计算机。
Linux在高端服务器的优越表现及其天生具有的突出特点,就注定它必将在低端嵌入式系统中再次给人们以惊喜,而基于嵌入式Linux操作系统的应用,必定给我们未来的工作和生活带来翻天覆地的变化。
本课程设计是以Red Hat Linux---VMware Workstation ACE版为基础平台,利用Fcntl函数实现多用户共享下给文件加文件锁,其中文件锁包括建议性锁和强制性锁。
目录一.嵌入式Linux简介 (3)二.嵌入式Linux开发平台简介 (3)三.嵌入式linux开发流程 (3)ⅰ建立开发环境 (3)ⅱ配置开发主机 (4)ⅲ建立引导装载程序BOOTLOADER (4)ⅳ下载别人已经移植好的LINUX操作系统 (4)ⅴ建立根文件系统 (4)ⅵ建立应用程序的flash磁盘分区 (4)ⅶ开发应用程序 (5)ⅷ烧写内核、根文件系统、应用程序 (5)四.课程设计目的和要求 (5)fcntl函数格式 (5)程序流程图: (6)五.VI简介与源程序 (7)六.Gcc编译器的安装过程 (11)七.程序运行 (13)八.心得体会 (14)九.参考文献 (15)八.评分表 (15)一.嵌入式Linux简介嵌入式系统是以应用为中心,以计算机技术为基础,并且软硬件可裁剪,适用于应用系统对功能、可靠性、成本、体积、功耗有严格要求的专用计算机系统。
linux操作系统课程设计一、教学目标本节课的教学目标是使学生掌握Linux操作系统的基本概念、命令和操作,培养学生具备基本的Linux操作系统使用能力。
具体目标如下:1.知识目标:–了解Linux操作系统的起源、发展和特点;–掌握Linux操作系统的基本命令和操作;–理解Linux操作系统的文件系统结构和权限管理。
2.技能目标:–能够熟练地在Linux操作系统上进行基本操作,如文件创建、编辑、删除等;–能够使用Linux命令行工具进行日常的网络和系统管理;–能够配置Linux操作系统的用户和权限设置。
3.情感态度价值观目标:–培养学生对Linux操作系统的兴趣和好奇心,提高学生对计算机操作的自信;–培养学生团队合作的精神,通过小组讨论和实验,共同解决问题;–培养学生对开源软件和自由软件理念的理解和尊重。
二、教学内容本节课的教学内容主要包括以下几个部分:1.Linux操作系统的起源、发展和特点:介绍Linux操作系统的起源和发展历程,讲解Linux操作系统的特点和优势。
2.Linux基本命令和操作:讲解Linux操作系统的常用命令,如文件操作命令、文本处理命令、网络命令等,并通过实际操作演示。
3.Linux文件系统结构和权限管理:介绍Linux操作系统的文件系统结构,讲解文件和目录的权限管理,包括读、写、执行权限的设置和更改。
三、教学方法本节课采用多种教学方法,以激发学生的学习兴趣和主动性:1.讲授法:讲解Linux操作系统的起源、发展和特点,以及基本命令和操作。
2.讨论法:学生进行小组讨论,共同解决问题,培养学生的团队合作精神。
3.案例分析法:通过实际案例,让学生学会使用Linux命令行工具进行日常的网络和系统管理。
4.实验法:安排学生进行实际操作,掌握Linux操作系统的使用方法。
四、教学资源本节课的教学资源包括以下几个方面:1.教材:选用《Linux操作系统教程》作为主要教材,为学生提供系统性的知识学习。
嵌入式Linux系统开发教程第二版课程设计简介嵌入式 Linux 系统开发技术正在越来越广泛地应用于各种领域,如智能家居、智能交通、医疗健康、工业控制等等。
本课程旨在通过嵌入式 Linux 系统开发的理论和实践内容,帮助学生掌握嵌入式系统的开发和调试方法,为学生今后从事相关工作打下坚实的基础。
教学目标•掌握嵌入式系统开发的基本原理和方法;•掌握 Linux 操作系统在嵌入式系统中的基本应用;•掌握嵌入式系统的硬件和软件调试技术;•实践中了解常见的嵌入式开发板和开发工具。
教学内容第一章课程介绍•课程目标和要求•学习方法和教材第二章嵌入式系统基础知识•嵌入式系统的概念和发展历程•嵌入式系统的应用领域和特点•嵌入式处理器的分类和特点•嵌入式系统的软硬件架构第三章 Linux 操作系统介绍•Linux 操作系统的发展历程和特点•Linux 操作系统的组成结构和功能模块•Linux 操作系统的应用领域和特点•Linux 操作系统的安装和配置•Linux 操作系统的命令和脚本编写第四章嵌入式 Linux 系统的应用•嵌入式 Linux 系统开发的基本流程•嵌入式 Linux 系统的软件架构和应用程序设计•嵌入式 Linux 系统的应用场景和案例研究第五章嵌入式系统的硬件调试•嵌入式硬件开发的基础知识和原理•嵌入式系统的硬件调试流程和方法•嵌入式系统的常见故障和排查方法第六章嵌入式系统的软件调试•嵌入式软件开发的基础知识和原理•嵌入式系统的软件调试流程和方法•嵌入式系统的常见故障和排查方法第七章嵌入式系统的开发工具•嵌入式开发板和硬件接口的介绍•嵌入式开发工具的选择和使用•嵌入式开发板调试和软件下载第八章课程总结和复习•课程知识点的回顾和复习•课程设计和开发的总体评估•学生自主学习的实践和拓展实验项目•基于 ARM Cortex-A8 处理器的嵌入式 Linux 系统开发•基于 Raspberry Pi 或者 BeagleBone Black 开发板的嵌入式 Linux 应用开发•基于实际项目的嵌入式系统设计和开发成果评估•实验报告和代码实现•成果展示和演示•期末考试和总评成绩参考文献•《嵌入式 Linux 系统开发实战》(李剑颖著)•《嵌入式 Linux 环境构建实战》(赵勇著)•《嵌入式系统原理与实践》(颜向东著)•《ARM Cortex-A8 处理器和嵌入式 Linux 应用开发》(吴明辉著)。
嵌入式Linux操作系统课程设计一、前言随着物联网技术的发展,越来越多的嵌入式设备需要运行Linux操作系统。
本课程旨在通过对嵌入式Linux操作系统的学习和实践,让学生了解嵌入式Linux系统及其开发的基本知识,掌握常用的Linux内核驱动开发技术和应用开发技术,以及运用这些技术进行嵌入式系统开发的能力。
二、课程内容2.1 基础知识•嵌入式系统基础概念•嵌入式开发环境搭建•Linux操作系统概述及安装•Linux应用开发工具介绍•Linux内核结构及驱动开发2.2 实践环节•嵌入式Linux系统移植•Linux应用开发实践•常用Linux内核驱动开发实践•案例分析:基于嵌入式Linux系统的智能家居控制系统三、课程目标1.掌握嵌入式Linux系统的基本知识和开发环境的搭建方法。
2.熟练掌握Linux系统的应用开发技术与内核驱动技术。
3.学会嵌入式Linux系统的移植和应用开发,并能应用于实际项目中。
4.通过案例分析,了解智能家居控制系统的设计与实现。
四、课程要求1.学生需要熟悉C/C++编程语言,有一定的嵌入式系统开发经验。
2.学生需要具备基本的Linux操作系统使用经验。
3.学生需要认真听讲、积极参加课堂讨论,并按时完成实验和作业。
4.学生需要按照课程安排,认真进行课程实践和项目开发。
五、课程开发本课程采用理论结合实践的教学方法,通过教师的讲授、案例分析、课程实践等多种方式进行教学。
5.1 教师讲授教师会为学生详细讲解嵌入式Linux系统的基本知识和常用技术,帮助学生理解和掌握这些知识,并培养学生独立思考和解决问题的能力。
5.2 案例分析通过对智能家居控制系统的案例分析,让学生了解嵌入式系统的实际应用场景,培养学生解决实际问题的能力。
5.3 课程实践课程实践分为两部分:移植和应用开发实践。
学生需要在实验室进行嵌入式Linux系统的移植和应用开发实践,完成预定的实验和作业,并提交实验报告。
5.4 最终项目学生需要在课程结束时,完成一个基于嵌入式Linux系统的智能家居控制系统的设计与实现,并提交最终项目报告。
Linux系统开发课程设计一、课程目标知识目标:1. 理解Linux操作系统的基本原理和架构,掌握Linux系统的基本操作命令。
2. 学习Linux系统下的编程环境,熟悉Shell脚本编写和执行过程。
3. 了解Linux系统开发工具,如GCC、GDB等,掌握编译器使用和程序调试技巧。
4. 掌握Linux系统下的文件系统结构和进程管理。
技能目标:1. 能够熟练使用Linux命令行,进行文件操作、目录管理和简单文本处理。
2. 能够编写简单的Shell脚本,实现自动化批处理任务。
3. 能够运用GCC等工具进行C/C++程序编译、链接和调试。
4. 能够分析和解决Linux系统开发中遇到的问题,具备一定的系统编程能力。
情感态度价值观目标:1. 培养学生对Linux系统的兴趣,激发他们探究操作系统原理的欲望。
2. 培养学生严谨的编程态度,注重代码规范和程序优化。
3. 培养学生的团队协作意识,学会在团队中分工合作,共同解决问题。
4. 培养学生面对挑战时的自信和毅力,敢于尝试,勇于创新。
本课程针对高中年级学生,课程性质为实践性较强的学科。
结合学生特点,课程目标注重基础知识掌握、动手实践能力和团队合作精神的培养。
在教学过程中,要求教师关注学生的个体差异,提供丰富的实践机会,引导学生主动探究,培养学生解决问题的能力。
通过本课程的学习,使学生能够掌握Linux系统开发的基本技能,为后续专业课程打下坚实基础。
二、教学内容1. Linux操作系统概述- 操作系统原理- Linux系统发展历史- Linux系统特点2. Linux基本操作命令- 文件和目录操作- 文本处理工具- 用户和权限管理3. Shell脚本编程- Shell概述- 基本语法和变量- 控制结构- 常用命令和函数4. Linux系统开发工具- GCC编译器使用- GDB调试技巧- Makefile编写5. Linux文件系统和进程管理- 文件系统结构- 进程和线程概念- 进程控制命令6. 实践项目与案例分析- 简单的Shell脚本编写- C/C++程序编译与调试- Linux系统编程实例分析教学内容根据课程目标,按照由浅入深的顺序进行组织,确保学生能够逐步掌握Linux系统开发的相关知识。
福建农林大学金山学院电子信息类课程设计课程名称:嵌入式linux应用开发课程设计设计题目:嵌入式linux Web服务器的设计姓名:陈俊松系:信息与机电工程系专业:电子信息工程年级:2011级学号:116709047指导教师:朱仕浪职称:讲师2014年11 月24 日福建农林大学金山学院电子信息类课程设计结果评定评价内容评价指标评分权值评定成绩工作态度工作努力,严格按照课程技能训练设计的要求去做,表现好;遵守纪律,工作作风严谨务实。
20业务水平能按时优异地完成课程设计任务,能熟练地综合运用所学理论和专业知识,在技能训练中对某些技能、技术有新建议、有小革新、有创见。
动手能力强,实干精神强,团结协作能力强,适应能力强。
30设计报告质量报告或成果完整、正确,概念清楚,图纸表格齐全,文字通顺,排版打印符合要求。
40工作量按期完成规定的任务,工作量饱满,难度较大。
10成绩:指导教师签字:评定日期:目录设计的目的-------------------------------------------------------- 1 设计要求---------------------------------------------------------- 1 主要仪器设备(软硬件环境)---------------------------------------- 1 设计内容---------------------------------------------------------- 14.1 设计原理---------------------------------------------------- 14.2总体方案设计------------------------------------------------- 34.3 程序设计---------------------------------------------------- 34.4 程序的调试和运行结果---------------------------------------- 7总结-------------------------------------------------------------- 8 参考文献---------------------------------------------------------- 9嵌入式linux Web服务器的设计1.设计的目的通过课程设计进一步掌握嵌入式linux基本程序设计的能力。
掌握嵌入式linux程序的设计、运行和调试工作。
熟悉搭建嵌入式开发环境及交叉编译器。
掌握下载程序到目标板正确运行。
2.设计要求熟练应用socket()、bind()、accept()、connect()、send()、recv()等函数,编写网络通信程序,编写makefile文件,通过make工程管理器交叉编译程序,实现宿主PC机使用浏览器访问PXA270-EP目标板的WEB服务器。
3.主要仪器设备(软硬件环境)本课程设计硬件:普通的PC机,PXA270-EP嵌入式实验箱。
软件:Redhat9 并配置好ARMlinux开发环境。
4.设计内容4.1 设计原理Internet的基本协议是TCP/IP协议,然而在TCP/IP模型最上层的是应用层。
它包含文件传输协议(FTP)、简单邮件传输协议(SMTP)、域名系统服务(DNS)、网络新闻传输协议(NNTP)和超文本传输协议(HTTP)等很多高层协议。
本节将运用前面学到的知识编写一个简单功能的基于应用层HTTP协议的Web 服务器。
客户端(浏览器)与Web服务器之间的交互主要包含客户的请求和服务器的应答。
请求和应答的格式在超文本传输协议(HTTP)中有定义。
HTTP协议是用于从WWW服务器传输超文本到本地浏览器的传送协议。
它可以使浏览器更加高效,使网络传输减少。
它不仅保证计算机正确快速地传输超文本文档,还确定传输文档中的哪一部分,以及哪部分内容首先显示(如文本先于图形)等。
通常,由HTTP客户端发起一个请求,建立一个到服务器指定端口(默认是80端口)的TCP连接。
HTTP服务器则在该端口监听客户端发送过来的请求。
一旦收到请求,服务器(向客户端)发回一个状态行和响应的消息,消息的消息体可能是请求的文件、错误消息、或者其它一些信息。
1) HTTP请求HTTP请求信息格式如下所示:HTTP请求消息 := 请求行实体头信息列表 CRLF [实体内容]请求行 := 方法URL HTTP版本号CRLF方法 := GET|HEAD|POST|扩展方法URL := 协议名称+宿主名+目录与文件名实体头信息列表 := 实体头信息1 CLRF 实体头信息2 CLRF ……实体头信息n CLRF实体头信息 := 头部字段名:值其中"CRLF"表示回车换行。
"请求行"中的"方法"描述了对指定资源执行的动作,常用的方法"GET"、"HEAD"和"POST"等3种方法描述GET 从WEB服务器中获取对象,不同类型的对象将获取不同的信息,比如:·文件类型对象,获取该文件的内容。
·可运行程序类型对象,获取该程序执行的结果。
·数据库查询类型对象,获取该查询的结果。
HEAD 要求服务器查找对象的元信息。
POST 从客户端向WEB服务器发送数据。
2)HTTP应答Web服务器处理客户请求,并向客户机发送应答报文,HTTP协议的应答报文格式为如下所示。
应答报文 := 状态行实体头信息列表 CRLF [实体内容]状态行 = HTTP版本号状态码原因叙述实体头信息列表 := 实体头信息1 CLRF 实体头信息2 CLRF ……实体头信息n CLRF实体头信息 := 头部字段名:值状态码描述了Web服务器执行客户机请求的状态信息状态码含义1XX 保留2XX 成功接收,比如“200”表示处理成功。
3XX 客户需进一步细化请求。
4XX 客户错误,比如“404”表示访问的指定资源不存在。
5XX服务器出错。
4.2总体方案设计Web 服务器实际上是一个目录服务器的扩展,通过HTTP 协议读取服务器相关目录上的内容。
Web 服务器通常需要具备3种用户操作:列举目录信息、显示文件内容和运行应用程序。
Web 服务器通过基于流的套接字连接,为客户提供上述3种操作。
用户连接到服务器后,用户陆续发送请求,服务器会处理每条客户的请求信息并返回应答信息 。
从流程图可以看出,Web 服务器和浏览器之间的通信流程为:客户端(用户的浏览器)向Web 服务器发送连接请求,服务器会接收该请求,建立一个套接字连接。
服务器端陆续读取客户端的请求,进行相应的处理并返回应答信息 客户端读取服务器端的应答信息,并将其按照各种格式显示在浏览器中(文本、图片、声音等内容)。
Web 浏览器Web 服务器·列举目录信息·显示文件内容·运行应用程序用户选择一个链接连接到服务器接收连接请求发送HTTP 请求接收并处理HTTP 请求目录:显示目录列表文件:显示文件内容.cgi 文件:运行不存在:错误信息返回应答信息接收应答信息显示应答信息html:显示网页格式image:绘图sound:运行请求应答4.3 程序设计1)服务器代码:#include <netinet/in.h>#include <arpa/inet.h>#include <sys/stat.h>#include <sys/socket.h>#include <netdb.h>#include <error.h>#include <string.h>#include <stdio.h>#include <sys/types.h>#include <unistd.h>#include <fcntl.h>#include <pthread.h>#include <time.h>const char PATH[]="/mnt/hgfs/shiyan";//接收web浏览器请求void *recvMsg(void *param){int len;int fd2 = *(int*) param; //客户端的sockidchar buf[1024];char exname[100];if(recv(fd2, buf, sizeof(buf), 0)>0){len=strlen(buf);printf("浏览器请求内容为:%s", buf);if(strstr(buf,"Accept: ")!=NULL) //获取浏览器发送的http请求中的内容类别{char *pp=strstr(buf,"Accept: ");char *p1=strchr(pp,' ');char *p2=strchr(pp,',');strncpy(exname,p1+1,p2-p1-1);}printf("name:%s", exname); //输出text/html或image/pngif (strncmp(buf, "GET",3) == 0) {char webname[100];char *p1=strchr(buf,' ');char *p2=strchr(p1+1,' ');strncpy(webname,p1+1,p2-p1-1); //获取浏览器请求的文件名printf("%s", webname);struct stat st;char filename[1024]={'\0'};strcpy(filename,PATH);strcat(filename,webname);stat(filename,&st);char protol[2048]={'\0'};char strTime[200]={'\0'};char content_type[100]={'\0'};if(strncmp(webname,"/sword.jpg",10)==0){strncpy(content_type,"Content-Type: image/jpeg\r\n", \strlen("Content-Type: image/jpeg\r\n"));}else{strncpy(content_type,"Content-Type: \text/html\r\n",strlen("Content-Type: text/html\r\n"));}char *wday[] = {"Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"};time_t timep;struct tm *p;time(&timep);p = gmtime(&timep);sprintf(strTime,"%s,%d-%d-%d %d:%d:%d\n", wday[p->tm_wday], \(1900+p->tm_year),(1+p->tm_mon),p->tm_mday,p->tm_hour,p->tm_min, p->tm_sec);sprintf(protol,"HTTP/1.1 200 OK\r\n""Server: Apache-Coyote/1.1\r\n""ETag: \"W/8888-8888888888888\"\r\n""Last-Modified: Thursday, 2014-11-12 12:00:00 \r\n""%s""Content-Length: %d bytes\r\n""Date: %s \r\n""Connection:keep-alive\r\n\r\n",content_type,(int)st.st_size, strTime);printf("%s", protol);printf("%s", strTime);send(fd2,protol,strlen(protol),0);size_t len=0;char fbuf[1024]={'\0'};const char*filename2="/mnt/hgfs/shiyan/abc.jpg";int fd4=open(filename2,O_WRONLY|O_CREAT,0777);int fd=open(filename,O_RDONLY,0777);while((len=read(fd,fbuf,sizeof(fbuf)))>0){send(fd2,fbuf,len,0);write(fd4,fbuf,len);}close(fd);close(fd2);}}pthread_exit(NULL);return NULL;}int main(){int fd;struct sockaddr_in serveraddr;struct sockaddr_in clientaddr;memset(&serveraddr, 0, sizeof(serveraddr));while ((fd = socket(AF_INET, SOCK_STREAM, 0)) < 0) {printf( "socket failed!\n");}int reuser=1;setsockopt(fd,SOL_SOCKET,SO_REUSEADDR,&reuser,sizeof(reuser));serveraddr.sin_family = AF_INET;serveraddr.sin_port = htons(8080); //端口号指定为:8080serveraddr.sin_addr.s_addr = inet_addr("192.168.224.134"); //设定服务器IP socklen_t len = sizeof(serveraddr);if (bind(fd, (const struct sockaddr*)&serveraddr, len)< 0) {printf("bind error\n");return 0;}int ret = listen(fd, 5);if (ret != 0){printf("listen error\n");return 0;}else{printf("listening......\n");}while(1){socklen_t size=sizeof(clientaddr);int fd2 = accept(fd,(struct sockaddr*)&clientaddr, &size);if (fd2==-1) {printf("accept failed\n" );return 0;}printf("客户端地址:%s\n", inet_ntoa(clientaddr.sin_addr));pthread_t id1;pthread_create(&id1,NULL,recvMsg,&fd2);}close(fd);return 0;}4.4 程序的调试和运行结果调试编译:运行结果:5.总结通过这次嵌入式linux Web服务器的设计,让我多linux的设计编程有了更深的了解。