ImageVerifierCode 换一换
格式:DOCX , 页数:15 ,大小:96.05KB ,
资源ID:9807652      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/9807652.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(linux嵌入式系统期末作业.docx)为本站会员(b****8)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

linux嵌入式系统期末作业.docx

1、linux嵌入式系统期末作业linux嵌入式系统期末作业选 题: webserver编程实例学 号: 姓 名: 班 级: 成 绩: 2014年6月19日目录1、代码解析: 3 (1)index.html文件解析: 3(2)adc.html文件解析: 3(3)Adc.xml文件代码解析: 5(4)run.c文件代码解析: 5(5)stop.c文件代码解析: 82、程序完成的主要功能: 93、必要的操作步骤: 104、执行程序的结果(效果图): 125、本门课程体会及建议: 131、代码解析:(1)index.html文件解析: AD远程采集实验/* 设置网页标题*/ /*设置页面背景颜色为青绿色

2、*/ AD远程采集实验/*定义最大标题并居中*/ 2008-12-11 /*设置日期居中*/ /*生成一个链接到http:/192.168.1.233/cgi-bin/run.cgi的表单*/ /*生成一个“查看”按钮*/ (2)adc.html文件解析: /* 创建脚本的格式为javascript */ var XMLdoc; /* 创建XMLdoc对象 */function loadXML() if(window.ActiveXObject) /*判断是否支持ActiveX控件*/ XMLdoc = new ActiveXObject(Microsoft.XMLDOM);/*实例化一个Ac

3、tiveX控件*/ XMLdoc.async = false; XMLdoc.load(adc.xml);/*读取xml文件*/ getmessage();/*函数调用*/ setTimeout(loadXML(), 1000);/* 页面每1000毫秒刷新一次*/function getmessage()/* 获取旋钮值*/ document.getElementById(ch_0).innerHTML= XMLdoc.getElementsByTagName(ch_0)0.childNodes0.nodeValue; /*从xml文件里取出ch_0的值写入网页中id为ch_0的文件中*/

4、document.getElementById(ch_1).innerHTML= XMLdoc.getElementsByTagName(ch_1)0.childNodes0.nodeValue; /*从xml文件里取出ch_1的值写入网页中id为ch_1的文件中*/ document.getElementById(ch_2).innerHTML= XMLdoc.getElementsByTagName(ch_2)0.childNodes0.nodeValue; /*从xml文件里取出ch_2的值写入网页中id为ch_2的文件中*/*背景颜色是青绿色*/ AD远程测试实验/*定义最大标题并居中

5、*/ /* 生成表单并居中 */ /* 生成宽度是屏幕的50%,表格线条粗细为1的表格并居中 */ AD远程测试实验/* 表头单元格内容为AD远程测试实验并居中 */ 通道0 V/* 设置id为ch_0并居中* / 通道1 V/* 设置id为ch_1并居中 */ 通道2 V/* 设置id为ch_2 并居中*/ /*生成一个链接到http:/192.168.1.233/cgi-bin/stop.cgi的表单*/ /*生成一个“停止采集”按钮并居中*/(3)Adc.xml文件代码解析: 0.0/* 设置ch_0的初始值为0.0 */ 1.0/* 设置ch_1的初始值为1.0 */ 3.0/* 设置

6、ch_2的初始值为3.0 */ A/*解析通道中的AD数据*/(4)run.c文件代码解析:#include #include #include #include #include void getdata(char *buff, int adcfd, int ret) /*AD数据的采集,并进行格式转换*/ int temp; int i=0, j; for(j=0; j3; j+)/*控制通道的循环*/ ioctl(adcfd, j, 0); /*控制I/O通道*/ read(adcfd, &temp, sizeof(int);/*将开发板的值返回到temp*/ temp += 16; t

7、emp = temp/31; for(; iret; i+) if(buffi = ) & (buffi+1 = c) & (buffi+2 = h) break; /* 判断字符串ch是否出现,若出现,跳出循环,进行数据转换;若没有,继续循环. */ buffi+6 = (temp/10) + 48; buffi+8 = (temp%10) + 48; /*获取数据赋值给temp,并进行格式的转化*/ i+; void lock_set(int fd, int type) /*文件上锁函数,在主程序中将被调用*/ struct flock lock; /* 定义结构体flock lock *

8、/ lock.l_whence = SEEK_SET; lock.l_start = 0; lock.l_len = 0; lock.l_type = type; while(1) if(fcntl(fd, F_SETLK, &lock) = 0) return; /* 判断文件是否被锁定,若锁定,则退出;否则,继续锁定*/ int main(void) pid_t pc; int adcfd, xmlfd, ret; unsigned char buff150; int i; pc = fork();/*创建主线程,用于打印一些HTML代码,使页面跳转到adc.html页面去,打印完HTML

9、信息后该线程就退出*/ if(pc0) printf(fork error!n); return -1; /* 判断进程,若pc0,打印HTML文档 */ else if(pc0) /* 打印HTML文档 */ printf(Content-type:text/htmlnn); printf(n); printf();/* 使页面跳转到adc.html页面 */ printf(); exit(0); else setsid(); /*脱离父进程*/ chdir(/); /*改变当前目录*/ umask(0); /*重设文件权限掩码*/ for(i=0;i65535;i+) close(i);

10、/*关闭设备文件描述符*/ adcfd = open(/dev/adc, O_RDWR); /* 打开adc设备文件*/ if(adcfd 0) printf(Cannot open adc device!n);/* 判断能不能打开adc设备文件,若打开继续下面程序;反之,打印出不能打开adc设备*/ return adcfd; while(1) while(1) xmlfd = open(/var/www/adc.xml, O_RDWR);/* 打开adc.xml文件*/ if(xmlfd0) continue; else lock_set(xmlfd, F_WRLCK);/* 给文件上锁,

11、避免其他进程对该文件进行写操作*/ break; ret = read(xmlfd, buff, 150); /* 将xml值读到buff */ for(i=0; iret; i+) if(buffi = $) /*如果为$,则说明用户按下了停止采集键,结束程序*/ buffi = A; lseek(xmlfd, 0, SEEK_SET);/* 移动文件指针*/ write(xmlfd, buff, ret); /*写入修改后的值*/ lock_set(xmlfd, F_UNLCK); /*给文件上锁,阻止被删除*/ close(xmlfd); close(adcfd); return 0;

12、getdata(buff, adcfd, ret); lseek(xmlfd, 0, SEEK_SET); write(xmlfd, buff, ret); /*采集数据并把数据显示在页面上,以便于监测*/ lock_set(xmlfd, F_UNLCK); /*给xml文件上锁*/ close(xmlfd); sleep(1); close(xmlfd); close(adcfd); return 0; (5)stop.c文件代码解析:#include #include #include #include void lock_set(int fd, int type) struct floc

13、k lock; /* 定义flock lock结构体*/ lock.l_whence = SEEK_SET; /* 读写位置指向文件头 */ lock.l_start = 0; lock.l_len = 0; lock.l_type = type; while(1) if(fcntl(fd, F_SETLK, &lock) = 0) return; /* 判断文件是否被锁定,若锁定,则退出;否则,继续锁定*/ int main(void) int fd, ret; char buff150; int i;/*打印HTML文档*/ printf(Content-type:text/htmlnn)

14、; printf(n); printf(n);/* 停留在此页面,不断刷新*/ printf(); while(1) fd = open(./adc.xml, O_RDWR); /*打开adc.xml文件*/ if(fd0) continue; /* 判断文件是否打开,若没打开,继续;若打开,给文件上锁*/ else lock_set(fd, F_WRLCK);/* 给文件上锁,避免其他进程对该文件进行写操作*/break; ret = read(fd, buff, 150); /* 将标志文件中的值读到buff */ for(i=0; iret; i+) if(buffi = s) & (b

15、uffi+1 = t) & (buffi+2 = o) & (buffi+3 = p) /* 判断是否出现字符串stop,若出现,跳出循环,执行下面操作;反之,一直循环*/ break; buffi+5 = $; /*如果为$,则说明用户按下了“停止采集”键,结束程序,否则继续执行*/ lseek(fd, 0, SEEK_SET); write(fd, buff, ret);/* 写文件,改变文件内容,以便视频采集程序能检测到该变化*/ lock_set(fd, F_UNLCK); /*给文件上锁*/ close(fd); /*关闭设备文件描述符*/ return 0;2、程序完成的主要功能:

16、(1)index.html是我们在IE浏览器的地址栏中输入服务器IP地址时所看到的页面, 当点击查看按钮时,页面会跳转到数据采集的显示页面,同时,服务器的后台程序也会开始运行,对我们的三个输入通道进行采集,是索引网页,是让用户进行使用(2)adc.html这个文件的页面就是我们在按下上面的Index.html的查看按钮后跳转过来的, 它分别显示了我们的开发板上的三个AD通道的采样值,是为数据采集而制作的网页(3)Adc.xml后台服务程序也会对这个文件进行读写,从而达到服务器和用户进行数据交换的目的。(4)Run.c这个程序是在点击第一个页面(index.html)上的“查看”按钮后执行的。程

17、序的开始会调用fork来创建两个线程:一个主线程,用于打印一些HTML代码,使页面跳转到我们的adc.html页面去,打印完HTML信息后该线程就退出;另一个子线程执行真正的AD数据采集,它读取三个通道的AD值,并对读出来的值进行转换,并将读取的结果写入adc.xml文件中,供用户检索。同时,这个线程还会检查adc.xml的标签中的内容,如果为$,则说明用户按下了“停止采集”键,那么就结束程序的执行,否则继续执行。(5)Stop.c该程序的实现比较简单,当用户按下数据采集页面的“停止采集”按钮后,会执行这个程序。本程序是改变adc.xml文件中的标签中的内容,在其中插入一个$字符,当我们的数据

18、采集程序检测到这个变化后,就会停止采集。3、必要的操作步骤:(1)在实验目录下为本实验创建webserver目录(2)进入webserver目录,使用编辑器vim建立文件webserver,将实验指导中有关代码粘贴过来(3)我们的光盘中提供了boa的源代码boa-0.94.13.tar.gz,解压该文件(4)编译BOA服务器和CGI程序(5)配置BOA服务器,另外在实验目录的/etc目录下还需要一个mime.types文件,直接从主机上的/etc目录拷贝。(6)启动开发板,制作完成rootfs,通过mkcramfs工具生成root.cramfs只读文件系统,1)确认serverip是Linux

19、虚拟机的IP地址;2) 将生成的uImage文件拷贝到tftpboot目录下;3)在ARM开发板上运行命令;把uImage文件下载到ARM开发板的SDRAM中0x30008000开始的空间中;擦除Nand Flash中起始地址为0x380000,大小为0x400000的空间;把SDRAM中0x30008000开始的内容写入Nand Flash0x380000开始的空间内,大小为0x400000(7)up-class2410 # setenv bootcmd nand read 0x30008000 0x80000 0x250000; bootm此项是内核自动启动的参数,如果已设置就不用再重新设

20、置up-class2410 # setenv bootargs root=/dev/mtdblock2 init=/linuxrc (接上面空一格)console=ttySAC0,115200up-class2410 # saveenv(8)把上面的index.html、adc.html和adc.xml三个文件拷贝到开发板的/var/www目录下;把前面编译得到的run.cgi和stop.cgi拷贝到/var/www/sgi-bin目录下;还要在/var/log/boa目录下建立一个error_log文件(9)把刚才编译得到的boa可执行文件拷贝到/bin目录下,然后执行boa命令,就可以启动

21、boa服务器了(10)手动加载该平台配套的ADC设备驱动s3c2410-adc.ko.并且手动建立好ADC设备节点,这样本次实验程序才可以正确调用该设备接口(11)创建完成后设置权限,所有用户具有全部权限(12)在PC机的IE浏览器中输入开发板的IP地址(13)转动开发板上的AD输入的三个旋钮,查看三个通道的采样值是否变化。点击“停止采集”按钮后,会跳回第一个页面,点击第一个页面的“查看”可以重新开始。4、执行程序的结果(效果图):5、本门课程心得体会:学习是个自主的过程,光靠老师是远远不够的,更多的是靠自己的态度,俗话说师傅引进门修行靠个人,linux嵌入式系统这门课有些部分很难掌握像li nux内 核 移 植、uboot移 植 等 有 些 命令 不会用,例如压缩解压命令,下载命令等记不住。但是lcd和t 、s、a d远程采集实验等等比较容易掌握。实验的过程中也遇到一些问题,像内核烧写不成功、程序不能实现果等,但这些都通过老师和同学的帮助得到了很好的解决。我们学习的知识是有限的,在以后的工作中我们肯定会遇到许多未知的领域,这方面的能力便会使我们受益非浅。在设计过程中,总是遇到这样或那样的问题。有时发现一个问题的时候,需要做大量的工作,花大量的时间才能解决。自然而然,我的耐心便在其中建立起来了。为以后的工作积累了经验,增强了信心

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1