基于嵌入式linux远程升级设计实现论文内容摘要:
网络应用程序总会和线程交缠在一起呢。 这是因为网络应用程序在执行的时候,会遇到很多意想不到的问题,其中最常见的是网络阻塞和网络等待等[7]。 程序在处理这些问题的时候往往需要花费很多的时间,如果不使用线程则程序在执行时的就会表现出如运行速度慢,执行时间长,容易出现错误、反应迟钝等问题。 而如果把这些可能造成大量占用程序执行时间的过程放在线程中处理,就往往能够大大提高应用程序的运行效率和性能和获得更优良的可伸缩性。 那么这是否就意味着应该在网络应用程序中广泛的使用线程呢。 情况并非如此,线程其实是一把双刃剑[8],如果不分场合,在不需要使用的地方强行使用就可能会产生许多程序垃圾,或者在程序结束后,由于没有能够销毁创建的进程而导致应用程序挂起等问题。 同样的道理,为了提高网络的传输效率,本项目中在对文件进行分块传输的时候,采用的是多线程的形式,每个线程获得要传输的块号,然后读取相应块,发送到终端。 :线程1Main函数创建第一个线程线程2线程n创建第二个线程创建第n个线程终端发送指定的文件块发送指定的文件块发送指定的文件块File定位写入文件 多线程传输//创建线程进行分块传输 pthread_t thread_id1,thread_id2。 int ret1,ret2。 ret1=pthread_create(amp。 thread_id1,NULL,(void *) file_thread1,(void *)can)。 If(ret1!=0){ printf(Create pthread error!\n)。 exit(1)。 } ret2=pthread_create(amp。 thread_id2,NULL,(void *) file_thread2,(void *)can)。 if(ret2!=0){ printf(Create pthread error!\n)。 exit(1)。 }//文件分块传输线程void file_thread1(void* info){ struct FileSend fs。 //初始化块编号为0 =0。 //初始化保留位 =0。 //获得参数 int* can。 can = (int*)info。 int newfd,file,file1,size。 newfd=can[0]。 //套接字描述符 file=can[1]。 //文件描述符 file1=can[2]。 //文件双线程,设置每个线程所传的块数 size =can[3]。 =size。 //strcpy(rfiBlockstate,0000\0)。 printf(rifBlockstate:%s\n,rfiBlockstate)。 //定义接收数据缓冲区 char buf[size]。 printf(size:%d\n,size)。 int k。 //循环读取和发送数据 while(1){ //从文件开始读取 int F_blockID=。 if(rfiBlockstate[F_blockID]==39。 039。 ){ //获得文件偏移位 off_t offset = F_blockID*()。 //设置文件当前位置 lseek(file,offset,SEEK_SET)。 //读取数据 if((k=read(file,sizeof()))=0) break。 //输出读到的数据 printf(%s\n,)。 //设置传输的字节大小 k=k+3。 //发送数据包 write(newfd,amp。 fs,k)。 } //将块编号加1 ++。 printf(%x\n,)。 //如果块编号超过本线程要传的块,退出循环 if(=file1) break。 //清空缓冲区 memcpy((char*)buf,\0,sizeof(buf))。 //清空结构体中数据区 memcpy((char*),\0,sizeof())。 }}5. 断点续传的基本原理为了实现断点续传,设计出了本论文的远程升级通信流程和规约,规约中定义了相应的通信格式和方法,利用相应的通信格式,当主站请求文件信息时,如果得到的回答不是全新升级,则得到该文件信息中相应的哪些块没有传过去,并且只发送相应的块,从而实现断点续传的功能。 具体原理阐述如下: 主站请求文件信息: 终端返回文件信息格式厂商编号(1BYTE)厂商功能扩展码(1BYTE)操作码(1BYTE)会话号(4BYTE)文件版本(1BYTE)文件大小(4BYTE)升级状态(2BYTE)已升级的块掩码(nBYTE)*操作码:14h文件版本:需升级的文件最后升级版本,版本表示方式:,文件大小:文件的实际大小,以字节为单位。 升级状态:上次升级结果,分总数,块大小,: 升级状态格式76543210低字节高字节低字节0-2位:块大小 0: 256字节() 1: 512字节() 2:1024字节(1K) 3:2048字节(2K)低字节3-7位,以及高字节0-4位:块总数,共可表示1024块高字节5-6位:上次升级结果 3:文件不存在 2:成功 1:正在传 0:上次传输失败高字节7位:保留(默认0h)已升级的块掩码:表示已升级的块,字节不确定,根据升级状态中块总数来定,其字节数为=块总数/8 + 1。 由低字节到高字节,由低位到高位的顺序分别来表示第1块,第2块,第3块…第n块。 : 块掩码7654321087654321第1字节161514131211109第2字节2423222120191817第3字节n*8+8n*8+7n*8+6n*8+5n*8+4n*8+3n*8+2n*8+1第n字节 该位为1,表示该块已传;该位为0,表示该块未传。 : 升级信息帧格式厂商编号(1BYTE)厂商功能扩展码(1BYTE)操作码(1BYTE)会话号(4BYTE)文件大小(4BYTE)传输属性(2BYTE)文件版本(1BYTE) 操作码:15h传输属性:块大小,分割块的数目,: 传输属性76543210低字节高字节低字节0-2位:块大小 0: 256字节() 1: 512字节() 2:1024字节(1K) 3:2048字节(2K)低字节3-7位,以及高字节0-4位:块总数,共可表示1024块高字节5位:升级方式, 0:须传 1:全新升级高字节6—7位:保留,默认为0 文件版本:该升级文件需要升级的版本: 发送数据包格式厂商编号(1BYTE)厂商功能扩展码(1BYTE)操作码(1BYTE)会话号(4BYTE)块编号(3BYTE)数据长度数据(nBYTE)数据的CRC校验(2BYTE) 操作码:17h块编号、数据长度:两个字节表示,: 块编号和数据长度格式76543210第1字节第2字节第3字节 第1字节0位-第2字节1位表示块编号,共10位,可以表示1024个块 第2字节2位-第3字节5位表示数据长度,共12位,可以表示2048BYTE的数据长度。 第3字节6位-第3字节7位保留,默认为0。 利用上述的通信格式,当主站请求文件信息时,如果得到的回答不是全新升级,则得到该文件信息中相应的哪些块没有传过去,并且只发送相应的块,从而实现断点续传的功能。 断点续传流程图本系统实现远程升级时,由主站发起会话请求,和终端成功建立会话连接后,再开始建立升级文件连接,在终端返回肯定回答后,主站发送请求升级信息数据包,终端对之进行响应,如果成功,则发送已经升级的文件类型和版本。 主站在收到终端的信息后,开始设置块属性和传输属性,然后再等待终端应答。 得到肯定回答后,两者之间开始传递数据包。 数据文件传输完毕后,主站开始请求升级块信息,终端返回结果,然后主站关闭升级文件连接,关闭会话,文件升级成功。 远程升级时序图 远程升级活动图7. 测试结果和分析 客户端从配置文件中取得终端IP地址,自己设置升级版本号,选择要升级的文件进行升级,和终端建立会话后,提示文件升级成功。 与终端通讯,文件传输成功 终端下文件传输成功的界面在发送完第202块时,将程序强行中止,模拟真实升级过程中网络不稳定,失去连接的状况,再次连接时,客户端从第202块开始重传文件,终端依据传过去的块号定位文件,将块数据写入文件。 断点续传成功界面 错误检测当客户端的升级版本号比终端的版本号要低时,说明文件不需要升级,提示错误。 错误检测8. 工作总结和展望本系统实现了由服务器端全程控制的远程升级,随着嵌入式系统的日益发展,这种文件升级的机制必然会更加的进步和完善。 所做的主要工作如下: 1.详细了解了嵌入式Linux系统的基础知识以及它所具有的优势。 2.对系统总体架构进行了分析。 3.利用自己定义的规约实现了文件的断点续传 4.采用了简单的对称加密,以及lzw压缩算法,对文件进行加密压缩传缩。 5.采用了多线程,支持文件分块传输。 6.支持一次性对多台终端进行远程升级。 由于时间的原因,还有自己的技术也并不成熟,工作中还有些问题等待进一步的解决:,采用的是把终端地址固定在一个配置文件中,应改用更为先进的消息队列机制。 ,升级程序将退出,而没有继续向另外终端升级。 ,并没有自己实现编程控制。 致谢本毕业设计从开题到完成论文,总耗时近四个月。 在这段时间里,我十分感谢软件学院对我们的重视,为了让我们能够顺利的按时按质完成课题,学院为我们提供了配置齐全的机器和舒适的工作学习环境,制定了严格的管理制度。 院领导和老师无时无刻不在关注着我们的工作进展,对我们的每一项工作细节都提出了极高的要求,这对即将走入社会的我们来说无疑是最宝贵的财富。 在整个毕业设计期间,本人得到了不少同学的帮助,使得这篇论文能够顺利的完成。 我对帮助过我的同学表示感谢。 特别要提出致谢的是我的指导老师xxx,他为人随和,工作一丝不苟,只要我提出的问题,他都帮我尽力解决,并且给了我很多的指导和建议,如果没有他的指导的话,我想我的毕业设计也不会这么顺利地完成。 另外还要感谢并不相识的xx经理,xx老师把他介绍给我,他帮我解决了MFC和Linux下文件传输出现乱码的问题。 在他眼里也许这是小事,但我一直心存感激。 在本篇论文完成之际,我要对他们表示衷心的感谢。 在以后的工作学习中,我也要再接再厉,不辜负他们对我的期望。 最后,再次对给予我的帮助和鼓励的老师、同学和朋友们致以最诚挚的谢意。 参考文献[1] 鲍卫兵,杜丰, 在远程抄。基于嵌入式linux远程升级设计实现论文
相关推荐
该进行尺寸换算。 216。 80 孔和 A 面既是装配基准,又是设计基准,用它们做精基准,能使加工遵循 “ 基准重合 ” 的原则 ,其余各面和孔的加工也能用它定位,这样使工艺规程路线遵循了 “ 基准统一 ” 的原则。 此外, A 面的面积较大,定位比较稳定,夹紧方案也毕业设计说明书论文 1961660126 课件之家的资料精心整理好资料 比较简单、可靠,操作方便。 由于生产类型为中批生产
所选择的特征应尽可能表达原始图像的信息。 同时,可以借助一些先进的数学工具来提取图像特征,如基于泛函分析和小波分析的特征数据表示等。 总之,特征提取是检索方法成功与否的关键步骤。 数据库检索技术 应选择一种最有效的数据库查询方法来检索目标图像,而且在构造数据库时应充分考虑查询的方便性。 因此,数据库检索技术是图像查询效率的最直接反映。 综合查询技术 由于图像内容特征可由颜色、纹理或形状等表示
e’ ,’ url’ )。 本系统实现功能包括前台功能,前台功能主要是与客户交互。 前台功能包括:首页、用户登录注册、商品详情显示、购物车、订单操作。 毕业设计(论文) 文件编号: TC/04/XL/045 服务质量文件 第 13页 /共 43页 13 body div class=border div class=index strong style=color:2BB8AA/strong
VDD_1 75 VDD_2 100 VDD_3 28 VDD_4 11 VDD_5 22 VDDA 21 VREF + 20 VREF 63 PC6/ TI M3_CH1 64 PC7/ TI M3_CH2 65 PC8/ TI M3_CH3 66 PC9/ TI M3_CH4 78 PC10/ USART3_TX 79 PC11/ USART3_RX 80 PC12/ USART3_CK 7
移,设其伸缩因子 (又称尺度因子 )为 a,平移因子为 ,令其平移伸缩后的函数为 )(, ta ,则有 Raatata ,0,2/1, (21) 称 )(, ta 为依赖于参数 ,a 的小波基函数,由于尺度因子 a、平移因子 是取连续变化的 值,因此称 )(, ta 为连续小波基函数。 它们是由同一母函数)(t
tf f )(),(11)( 2 () 存在几种扩展的可能性,一种可能性是选择小波 )()( 2 nRLtf 使其为球对称,其傅立叶变换也同样球对称, )()(ˆ () 并且其相容性条件变为 共 47 页 第 9 页 tdttC 0 22 )()2( () 对所有的 )(, 2 ngLgf 。 fCdbbaWbaWada gfn )