吕梁seo网站建设,青岛网站设计微动力百家号,wordpress-5.6.20下载,做网站的关键技术1.项目描述#xff1a; \qquad基于飞凌单片机OKA40i-C开发板#xff0c;使用browserboa进行通信#xff0c;可以通过网页下载单片机的文件#xff0c;也可以通过网页上传电脑客户端的文件到单片机。
2.开发环境#xff1a; \qquad单片机是飞凌公司的OKA40i-C开发板#…1.项目描述
\qquad基于飞凌单片机OKA40i-C开发板使用browserboa进行通信可以通过网页下载单片机的文件也可以通过网页上传电脑客户端的文件到单片机。
2.开发环境
\qquad单片机是飞凌公司的OKA40i-C开发板使用系统镜像为sun8iw11p1_linux_OKA40i_C_uart0-1080p.img \qquad另外有两台电脑负责对单片机进行开发一台操作系统是Ubuntu20.04.1另外一台为windows10。Ubuntu电脑的交叉编译器是arm-linux-gnueabi-gcc-5.3.1。 \qquad单片机和两台电脑通过交换价互相连接可以基于局域网的IP地址通过sshtelnet方式进行控制通过sftpftp方式进行文件传输。
3. 问题描述
3.1 把boa移植到Ubuntu电脑上和网页的简单编写
83~92讲
3.2 把boa移植到开发板上
嵌入式boa的移植 在嵌入式Linux系统OK6410中移植Boa 服务器
3.3 网页把电脑文件上传到单片机
CGIC编程
\qquad在这一步遇到问题首先是网页上传文件不成功出现下面错误 502 Bad Gateway The CGI was not CGI/1.1 compliant \qquad这个问题一直没有解决然后发现在Ubuntu电脑经过交叉编译器编译的程序通过ftp发到单片机中运行会出现下面错误 ** segmentation fault** \qquad参考这篇文章之后发现解决方案 segmentation fault顺着这个思路发现前者那个问题也有了思路单片机和开发电脑之间的文件传输有两种方式一个是ftp一个是sftp。 \qquad我发现经过sftp方式上传到单片机的编译完的程序在单片机上运行都没问题然后我改变的发送方式将upload.cgi和upload.html通过sftp方式发送到单片机然后通过网页上传文件就可以成功了。
4.boa的移植
4.1 boa的编译
将boa的压缩包解压之后进入src文件这里面放置boa的源码在进行make之前需要进行修改里面的文件和安装一些必须工具比如flexbison再进行make编译编译之后得到可执行文件boa。
4.2 配置boa.conf
boa.conf的放置位置有define.h决定一般放在/etc/boa下面在boa.conf中可以修改端口号log日志文件的存放位置HTML文件存放位置cgi程序文件的存放位置。没有相应的目录和文件的话需要进行创建。
4.3 移植和启动
将boa可执行程序和boa.conf移植到开发板
5.浏览器和单片机之间的http通信
浏览器中输入ip地址默认端口号为80再加上要请求的文件比如index.html浏览器界面就可以跳转到对应的文件。
!DOCTYPE html PUBLIC -//W3C//DTD HTML 4.01//ENhttp://www.w3.org/TR/html4/strict.dtd
html
headmeta http-equivContent-Type contenttext/html; charsetutf-8titleTest Upload/titlemeta nameauthor contentscorpio!-- Date: 2016-07-30 --
/head
body
form actioncgi-bin/upload.cgi methodpost enctypemultipart/form-data target_blankinput typefile namefile value /input typesubmit namesubmit valueOK
/form
/body
/html6.cgi编程
cgi是外部拓展应用程序和web服务器交互的标准接口 CGIC是一个功能比较强大的支持CGI开发的标准C库。
6.1 CGI处理步骤
1、通过浏览器将用户请求送到服务器 2、服务器接收用户请求并交给CGI程序处理 3、CGI程序把处理结果传送给服务器 4、服务器把结果送回到浏览器
1.取得html页面中file元素的值应该是文件在客户机上的路径名
cgiFormFileName(file, name, sizeof(name))2.目前文件存在于系统临时文件夹中通常为/tmp通过该命令打开临时文件。临时文件的名字与用户文件的名字不同所以不能通过路径/tmp/userfilename的方式获得文件
cgiFormFileOpen(file, file) 3.在当前目录下建立新的文件第一个参数实际上是路径名此处的含义是在cgi程序所在的目录当前目录建立新文件 \
open(fileNameOnServer,O_RDWR|O_CREAT|O_TRUNC|O_APPEND,mode); 4.从系统临时文件中读出文件内容并放到刚创建的目标文件中
cgiFormFileRead(file, buffer, BufferLen, got)