课设.docx
- 文档编号:28469668
- 上传时间:2023-07-14
- 格式:DOCX
- 页数:41
- 大小:1.58MB
课设.docx
《课设.docx》由会员分享,可在线阅读,更多相关《课设.docx(41页珍藏版)》请在冰豆网上搜索。
课设
学号:
课程设计
题目
基于Linux的嵌入式网关信息获取、存储和发布系统的设计与实现
学院
计算机科学与技术学院
专业
物联网工程
班级
1101班
姓名
指导教师
2014
年
7
月
3
日
课程设计任务书
学生姓名:
专业班级:
物联网1101
指导教师:
工作单位:
计算机学院
题目:
基于Linux的嵌入式网关信息获取、存储和发布系统的设计与实现
初始条件:
1.理论:
使用嵌入式系统设计、计算机组成原理、数字逻辑、微机原理与接口技术、C语言,程序设计方法等专业知识。
2.实践:
学习和使用嵌入式实验箱CVT6410的使用方法、Linux交叉编译软件环境。
完成从串口获取信息,将信息存储到嵌入式数据库,通过web页面发布相关信息。
要求完成的主要任务:
(包括课程设计工作量及其技术要求,以及说明书撰写等具体要求)
课程设计内容:
利用嵌入式实验箱CVT6410完成以下内容,撰写嵌入式系统设计报告。
搭建嵌入式系统开发环境,进行Linux内核移植,烧写Linux系统,编写应用程序,完成以下功能:
1.通过串口传输,获得ZigBee嵌入式网关采集的ZigBee传感器模块上的信息;
2.将采集的信息存储到嵌入式数据库(SQLite);
3.利用Linux下web服务器,建立动态Web页面,通过Web页面显示采集的信息。
课程设计报告书正文的内容应包括:
(1)系统描述(问题域描述);
(2)系统总体分析;
(3)系统总体设计;
(4)详细的流程图或伪代码;
(5)软件的测试方法和测试结果;
(6)研制报告(研制过程,本设计的评价、特点、不足、收获与体会等);
时间安排:
序号
设计内容
所用时间
1
查阅资料,熟悉实验平台和搭建嵌入式系统开发环境,完成Linux内核移植和烧写Linux系统
0.5周
2
相关基础技术掌握
1周
3
应用软件系统的开发与实现,及撰写文档
1.5周
合计
3周
指导教师签名:
2012年12月30日
系主任(或责任教师)签名:
年月日
1、安装VMware1
1.1【实验目的】1
1.2【实验设备】1
1.3【实验内容】1
1.4【实验步骤】1
2、安装虚拟机Fedora2
2.1【实验目的】2
2.2【实验设备】3
2.3【实验内容】3
3.4【实验步骤】3
3、配置IP和相关服务5
3.1、打开虚拟机,输入用户名和密码5
3.2、打开终端6
3.3、设置IP地址,要首先进入Root用户7
3.4、对相关服务进行设置7
4.配置编译环境9
4.1、安装编译器9
5、配置超级终端10
6、挂载虚拟机共享文件夹13
7、运行实例程序helloworld14
7.1【实验目的】14
7.2【实验设备】14
7.3【实验内容】14
7.4【实验前提】14
7.5【实验步骤】14
8、查看BOA服务器和SQlite数据库16
8.1、查看BOA服务器16
8.2、查看Sqlite数据库17
9、搜集传感器数据存储到数据库18
9.1.编写源程序sendData.c。
源程序见附录18
9.2、编写Makefile文件。
18
9.3、交叉编译18
10、在网页端显示数据18
10.2编写Makefile文件19
10.3、交叉编译19
10.4、运行sendData程序,产生数据20
10.5、在浏览器中显示结果20
11、课程设计中遇到的问题和解决方案22
11.1挂载不上/tftpboot共享文件夹22
11.2虚拟机和6410实验箱ping不通23
12、课程设计总结25
附录:
26
sendData.c的源代码26
cgictest.c的源代码32
1、安装VMware
1.1、【实验目的】
了解VMware的相关特性
熟悉并掌握虚拟机软件的安装
熟悉并掌握新建虚拟机
1.2、【实验设备】
PC机
Windows操作系统
1.3、【实验内容】
安装VMware软件
配置虚拟机
1.4、【实验步骤】
VMware的安装步骤跟一般的软件安装步骤一样。
在windows环境下安装虚拟机vmware,如下图:
安装完成后,如下图:
2、安装虚拟机Fedora
2.1、【实验目的】
了解Fedora操作系统的相关特性
熟悉并掌握虚拟机下安装Fedora操作系统
熟悉并掌握使用Ubuntu操作系统
2.2、【实验设备】
PC机
Windows操作系统
Vmware软件环境
2.3、【实验内容】
1.安装Fedora作系统
2.4、【实验步骤】
打开已经安装好的vmware,点击新建虚拟机,弹出新建虚拟机向导,选择类型配置为自定义,然后点击下一步
3、配置IP和相关服务
3.1、打开虚拟机,输入用户名和密码
3.2、打开终端
3.3、设置IP地址,要首先进入Root用户
3.4、对相关服务进行设置
#/sbin/serviceportmaprestart--设定语言环境加载funcation脚本中的函数.
#/sbin/servicenfsrestart--打开nfs网络文件系统服务
#/sbin/serviceiptablesstop--关闭防火墙服务
将6410实验箱和PC机用网线相连,启动实验箱#ping192.168.1.6
#vi/etc/exports
写入:
/tftpboot192.168.1.9/255.255.255.0(rw)保存并退出
创建tftpboot文件夹
#cd/
#mkdirtftpboot
#chmod777/tftpboot
4.配置编译环境
4.1、安装编译器
首先,请确保已经安装好Fedora操作系统。
以root身份登录Fedora
然后将光盘中的4.3.3.tar.gz拷到主机工作目录下/work
解压并安装,具体请执行如下命令:
#tarzxvf4.3.3.tar.gz
设置环境变量,执行如下命令:
#vi/etc/profile
在最后面添加一行
exportPATH=$PATH:
/4.3.3/bin
然后运行命令#source/etc/profile
测试是否配置成功,打开终端,输入以下命令:
#arm-linux-gcc–v
5、配置超级终端
1、将6410实验箱与PC机用串口线连接起来,(注意:
笔记本电脑要用USB转串口线与6410实验箱连接,并安装驱动。
在设备管理器中要显示串口)
2、打开超级终端,与6410实验箱连接。
3.选择连接属性:
波特率、数据位、奇偶校验位、停止位、数据流控制位。
如下图:
4、点击确定,进入下面的命令行界面
6、挂载虚拟机共享文件夹
在超级终端挂载共享文件夹/tftpboot到/mnt文件夹
在超级终端输入
#mount192.198.1.9:
/tftpboot/mnt-onolock
查看/tftpboot中的文件是否挂载上
#ls/mnt
7、运行实例程序helloworld
7.1【实验目的】
1.熟悉CVT-6410教学系统中的Linux开发环境;
2.掌握简单的Linux应用程序helloworld的编译;
3.掌握CVT-6410教学系统中Linux应用程序的调试。
7.2【实验设备】
1.硬件:
CVT-6410嵌入式实验箱、PC机Pentium500以上,硬盘10G以上;
2.软件:
PC机操作系统+虚拟机+Linux开发环境
7.3【实验内容】
1.编写helloworld应用程序;
2.编写Makefile文件;
3.编译helloworld应用程序;
4.下载并调试helloworld应用程序。
7.4【实验前提】
配置好交叉编译环境
7.5【实验步骤】
1.编写源程序
#Vihelloword.c然后输入代码并保存
#include
intmain(){
printf("Hello,World!
\n");
return0;
}
2、编写Makefile
CROSS=arm-linux-
all:
helloworld
helloworld:
$(CROSS)gcc-ohelloworldhelloworld.c
$(CROSS)striphelloworld
cphelloworld/tftpboot
clean:
@rm-vfhelloworld*.o*~
3、编译、运行
在虚拟机输入命令#make
[root@localhosthelloworld]#make
arm-linux-gcc-ohelloworldhelloworld.c
arm-linux-striphelloworld
cphelloworld/tftpboot
在超级终端
[root@Cvtech/]#cd/mnt/
[root@Cvtech/mnt]#ls
123my6410examples-6410led.htmlwebled
cgichelloworldsource
[root@Cvtech/mnt]#./helloworld
Hello,World!
!
!
!
!
!
[root@Cvtech/mnt]#
8、查看BOA服务器和SQlite数据库
8.1、查看BOA服务器
#top--查看当前运行进程
在图中可以看到boa服务器已经开启,PID为69
#kill69--杀死BOA进程
要打开BOA服务器可以直接在超级终端输入命令:
#boa
8.2、查看Sqlite数据库
实验箱启动后,在超级终端中输入:
#sqlite_testtest.db"createtabletbl0(namevarchar(10),numsmallint);"
#sqlite_testtest.db"insertintotbl0values('test1',1);"
#sqlite_testtest.db"insertintotbl0values('test2',2);"
#sqlite_testtest.db"select*fromtbl0"
下图是上面命令执行后的效果
9、搜集传感器数据存储到数据库
9.1.编写源程序sendData.c。
源程序见附录
源程序中包括的函数有:
•设置波特率的函数:
voidset_speed(intfd,intspeed)
•设置帧格式的函数:
intset_Parity(intfd,intdatabits,intstopbits,intparity)
•打开特定设备的函数:
intOpenDev(char*Dev)
•串口初始化的函数:
intserial_init(void)
主函数的功能:
•创建/打开数据库
•创建表
•串口初始化
•读取串口数据(传感器数据)到缓冲区
•从缓冲区读数据插入到sqlite数据库中
•关闭数据库
9.2、编写Makefile文件。
sendData:
sendData.c
arm-linux-gccsendData.c-osendData
-I/root/sql_arm/sqlite-autoconf-3080002/build/target/include
-L/root/sql_arm/sqlite-autoconf-3080002/build/target/lib-lsqlite3
9.3、交叉编译
输入命令#make,编译源文件
将生成的文件sendData复制到/tftpboot下的文件夹中
在6410实验箱上运行程序
#cd/mnt
#./sendData192.168.1.94050
10、在网页端显示数据
10.1编写CGIC动态网页cgictest.c(源文件见附录)
源程序实现步骤:
•打开数据库
•利用printf语句编写html,在网页上创建表格,设置网页刷新频率
printf("Content-type:
text/html\n\n");
printf("\n
\nprintf("
printf(" absolute;top: 20%;left: 29%;width: 45%;height: 50%;z-index: 1\"align=\"center\">\n"); printf(" 100%;\"cellpadding=\"2\"border=\"1\"align=\"center\">\n"); printf(" printf(" printf(" •使用select语句,将数据库中的数据显示到网页表格中 10.2、编写Makefile文件 data.cgi: cgictest.ccgic.hcgic.c arm-linux-gcc-wallcgictest.ccgic.c-odata.cgi -I/root/sql_arm/sqlite-autoconf-3080002/build/target/include -L/root/sql_arm/sqlite-autoconf-3080002/build/target/lib-lsqlite3; 10.3、交叉编译 #make--进行交叉编译 10.4、运行sendData程序,产生数据 10.5、在浏览器中显示结果 在浏览器中地址栏中输入192.168.1.6/data.cgi可以看到页面动态刷新 11、课程设计中遇到的问题和解决方案 11.1挂载不上/tftpboot共享文件夹 方法一: 重新设置服务 方法二: 重启(reboot)6410实验箱 方法三: 查看/etc/exports文件的内容,是否有错误,如果有错误则修改之后重启Fedora系统 11.2虚拟机和6410实验箱ping不通 方法一: 查看虚拟机和实验箱的IP地址是不是在同一网段,如果不是,将他们的IP修改到一个网段 方法二: 设置网络适配器,勾选桥接模式。 如图 方法三: (对于笔记本)无线网卡被占用,先关闭无线网,在ping。 之后再连接无线网。 12、课程设计总结 历时三周的课程设计终于结束了,收获颇多。 首先熟悉了嵌入式Linux系统下命令行的操作,利用命令行可以完成很多在图形界面下完成不了的功能。 特别表现在VI编辑器上,如果熟练的使用vi,可以事半功倍。 其次使用超级终端控制6410试验箱与虚拟机上的Fedora系统通信。 在虚拟机上完成程序的编写和交叉编译然后发布到试验箱上进行执行。 有点类似Android程序的开发过程。 还有就是熟悉了驱动的编写,传感器数据的处理过程。 在开发板上有BOAweb服务器和Sqlite数据库,本次实验从底层到上层所有的过程都接触了一遍,是我更加了解了嵌入式开发的整个过程。 附录: sendData.c的源代码 /* **sendData.c--adatagram"client"demo */ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #defineFALSE0 #defineTRUE1 //#defineMYPORT4050//theportuserswillbeconnectingto intMYPORT; intnread=0; charRecbuff[1024];//receiveBuffer intsRecDataLen=0;//setthelengthofDatawhichwillbereceived charsend_buf[20]; staticintserial_fd; //theBoadRatearray intspeed_arr[]={B230400,B115200,B57600,B38400,B19200,B9600,B4800,B2400,B1200,B300, B38400,B19200,B9600,B4800,B2400,B1200,B300}; intname_arr[]={230400,115200,57600,38400,19200,9600,4800,2400,1200,300, 38400,19200,9600,4800,2400,1200,300}; //----------------------------------------------- //setBoadRate,thespeedoftransmittingdataofaspecialport voidset_speed(intfd,intspeed) { inti; intstatus; structtermiosOpt; tcgetattr(fd,&Opt); for(i=0;i { if(speed==name_arr[i]) { tcflush(fd,TCIOFLUSH); cfsetispeed(&Opt,speed_arr[i]); cfsetospeed(&Opt,speed_arr[i]); status=tcsetattr(fd,TCSANOW,&Opt); if(status! =0) perror("tcsetattrfd1"); return; } tcflush(fd,TCIOFLUSH); } } intset_Parity(intfd,intdatabits,intstopbits,intparity) { //setport,databit,stopbitandparity structtermiosoptions; if(tcgetattr(fd,&options)! =0) { perror("SetupSerial1"); return(FALSE); } options.c_cflag&=~CSIZE; switch(databits) { case7: options.c_cflag|=CS7; break; case8: options.c_cflag|=CS8; break; default: fprintf(stderr,"Unsupporteddatasize\n"); return(FALSE); } switch(parity) { case'n': case'N': options.c_cflag&=~PARENB; options.c_iflag&=~INPCK; break; case'o': case'O': options.c_cflag|=(PARODD|PARENB); options.c_iflag|=INPCK; break; case'e': case'E': options.c_cflag|=PARENB; options.c_cflag&=~PARODD; options.c_iflag|=INPCK; break; case'S': case's': options.c_cflag&=~PARENB; options.c_cflag&=~CSTOPB; break; default: fprintf(stderr,"Unsupportedparity\n"); return(FALSE); } switch(stopbits) { case1: options.c_cflag&=~CSTOPB; break; case2: options.c_cflag|=CSTOPB; break; default: fprintf(stderr,"Unsupportedstopbits\n"); return(FALSE); } if(parity! ='n'&&parity! ='N') options.c_iflag|=INPCK; options.c_cflag&=~CRTSCTS; options.c_iflag&=~IXOFF; options.c_iflag&=~IXON; if(parity! ='n'&&parity! ='N') options.c_iflag|=INPCK; tcflush(fd,TCIOFLUSH); options.c_lf\n"); \n");PID VALUE \n");
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 课设.docx