嵌入式报告.docx
- 文档编号:10002040
- 上传时间:2023-02-07
- 格式:DOCX
- 页数:20
- 大小:162.98KB
嵌入式报告.docx
《嵌入式报告.docx》由会员分享,可在线阅读,更多相关《嵌入式报告.docx(20页珍藏版)》请在冰豆网上搜索。
嵌入式报告
《嵌入式应用系统设计》
课设报告
基于WEB的LED远程控制
任课教师
班级
姓名
学号
指导教师
北华航天工业学院计算机科学与工程系
2011年11月
摘要
随着现代通信技术的发展、Internet的普及,网络技术特别是基于TCP/IP通信协议的Web技术得到了广泛的应用和普及。
Web技术允许任意地点的用户通过Web浏览器接入网络,访问Web服务器发布的各类信息,实现世界范围内的互联。
Web浏览器使用的是基于HTTP超文本协议的HTML超文本模式语言,其标准化的界面表达独立于客户端软硬件平台,极大地节省了客户端人机界面维护工作和使用人员的培训费用。
在传统的Web应用中,Web服务器往往与数据库系统或者文件系统并存在一台高性能的计算机系统中,数据库服务器是Web服务器的信息来源,Web服务器则是系统的信息发布中心,它接收来自浏览器的请求,并根据请求生成新的页面发送给Web浏览器,完成信息在网络范围内的传输。
Web服务器检索的信息来自数据库系统,实时性要求不高,可以满足常规的查询和检索系统的要求。
随着嵌入式系统技术的发展,人们越来越多的采用WEB技术进行嵌入式系统的远程控制,来完成相应的任务。
本系统即实现通过WEB网页对开发板上的LED灯的控制。
关键字:
嵌入式WEB技术远程控制HTTP超文本协议
目录
第一章课设目的与要求3
1.1课程设计目的3
1.2设计内容及基本要求3
第二章实验环境4
第三章课设内容4
第四章系统实施5
4.1系统实现原理5
4.2详细设计7
4.2.1根文件系统的制作7
4.2.2boa服务器的移植9
4.2.3驱动程序的编写与编译10
4.2.4cgi程序的编写与编译10
4.2.5根文件系统的挂载10
4.2.6远程控制程序测试准备阶段11
第五章程序测试报告11
体会13
附录14
《嵌入式应用设计》课设报告
组别学号
时间地点
课设题目基于WEB的LED远程控制
第一章课设目的与要求
1.1课程设计目的
本课程设计是学生学习完《嵌入式应用系统设计》课程后,进行的一次全面的综合训练,通过课程设计,让学生更好地掌握操作系统的原理及实现方法,加深对操作系统基础理论和重要算法的理解,加强学生的动手能力。
1.2设计内容及基本要求
题目一:
基于web的远程控制led
编写了led驱动程序,并通过web网页对其进行远程控制。
题目二:
按键驱动程序+qt编程
针对试验箱上的四个按键,实现中断驱动程序,编写qt程序,将音频播放器移植到嵌入式系统。
题目三:
人脸识别项目的移植
根据所给文档,将实现人脸识别部分的程序剥离出来,移植到嵌入式系统。
题目四:
自拟
题目要符合课程设计的难度和工作量。
第二章实验环境
硬件:
PC机
Sinosyss3c2440实验箱
软件:
LINUX操作系统
交叉编译环境
BOA服务器
串口通信工具(TFTPDownloader、超级终端)
第三章课设内容
随着嵌入式系统技术的发展,人们越来越多的采用WEB技术进行嵌入式系统的远程控制,来完成相应的任务。
本系统即实现为开发板编写LED驱动程序,通过WEB网页对开发板上的LED的亮灭进行远程控制。
第四章系统实施
4.1系统实现原理
嵌入式WEB服务器及远程测控总的思想就是网络化仪器。
完成的目标就是基于Linux操作系统的远程控制系统,并且讨论实践性中的可行性,我们通过普通的浏览器就可以对远端现场的测控和测量以及获取远端现场的图像信息。
使用嵌入式WEB服务器的好处有这样几点:
(1)远程监控终端仅需要安装浏览器即可IE或Netscape等软件大多有操作系统自带,无序开发专门的应用软件,降低系统成本。
(2)浏览器所在的监控终端平台与WEB所在的服务器平台无关,监控终端可以采用多种操作系统,真正实现了跨平台。
(3)操作界面简单统一,表达直观生动,用户无需经过经过专门培训。
(4)易于扩展新的功能,系统升级仅需在WEB服务器一端添加相应模块,与远程监控终端无关,降低系统升级维护费用。
(5)可提供分布式并行处理,基于WEB的测控系统可构成一个多CPU协调工作的分布式测控系统,可并行处理多个测控指令。
整个结构是一个B/S结构的。
系统整体结构如图4-1所示:
图4-1系统整体结构
它所涉及的知识很多,主要包括Linux操作系统,内核移植,文件系统的移植,服务器的移植,CGI程序的移植,CGI脚本的编写,A/D采集的调试和JavaScript脚本,TCP服务器与客户端,UDP服务器与客户端,Java中的多线程技术,Java画图板及各种控件的添加。
嵌入式WEB服务器的软件开发主要包括以下几项内容:
BootLoader的移植
嵌入式操作系统的移植和TCP/IP协议的剪裁
相关驱动程序的编写
CGI、数据采集、数据处理等相关应用程序的编写
基于web的远程控制led涉及的内容有:
根文件系统的制作与烧写(NFS挂载)、boa服务器的移植、驱动程序的编写与加载、CGI、数据采集、数据处理等相关应用程序的编写等。
操作流程如图4-2所示:
图4-2操作流程
4.2详细设计
4.2.1根文件系统的制作
制作Linux根文件系统,也就是创建根文件系统必须的各种目录,并在目录种种创建各种文件,如在/bin,/sbin目录下存放各种命令程序,在/etc下创建配置文件,在/lib下存放依赖库。
制作步骤如下:
1、安装libncurses5-dev,这个程序库提供了文本选单界面
(1)将libncurses5-dev_5.7+20090803-2ubuntu3_i386.deb文件通过共享目录拷贝到虚拟机Linux系统的“/work”目录下,打开Linux命令终端,切换到“/work”目录;
(2)输入命令:
dpkg-ilibncurses5-dev_5.7+20090803-2ubuntu3_i386.deb即可安装libncurses5-dev;
2、拷贝busybox源代码至虚拟机中Linux目录下
将“c:
\嵌入式系统设计Linux实验\Manual\教材\实验\4、根文件系统\src”目录下的“busybox-1.10.3.tar.bz2”通过虚拟机与Windows共享目录将其拷贝到虚拟机Linux系统的“/work”目录并解压至该目录,产生一个名为“busybox-1.10.3”的目录,这是busybox的源代码目录;
3、修改“/work/busybox-1.10.3”目录下的编译配置
在Makefile文件中找到ARCH和CROSS_COMPILE修改如下:
ARCH?
=arm
CROSS_COMPILE?
=arm-linux
即将处理器改为arm,将编译器设置为arm-linux-gcc;
4、配置busybox
(1)Linux下打开命令终端,切换到“/work/busybox-1.10.3”目录,使用命令“makedefconfig”产生配置文件;
(2)使用命令“makemenuconfig”,出现字符界面的配置内核界面
按照以下选项进行配置:
设置1:
BosyboxSettings--->
BuildOptions--->
[]BuildBusyBoxasastaticbinary//进行动态编译
BusyboxLibraryTuning--->
[*]Supportfor/etc/networks
[*]vi-stylelineeditingcommands
(15)Historysize
[*]Historysaving
[*]Tabcompletion
[*]Usernamecompletion
[*]Fancyshellprompts
设置2:
MiscellaneousUtilities--->
[]taskset
设置3:
LinuxModuleUtilities--->
[]Supportversion2.2.xto2.4.xLinuxkernels
配置完成后,在主菜单里选择
5、使用命令“makeallinstall”进行编译,若无错误将在busybox-1.10.3/_install目录生成binsbinusr目录及linuxrc启动初始化程序;
在“/work”目录下新建一目录rootfs,将生成的binsbinusr目录及linuxrc启动初始化程序拷贝到新建的rootfs目录下;
6、切换到“/work/rootfs”目录,分别使用以下命令创建其他目录:
mkdirdevetchomelibmntprocsystmproot
mkdirmnt/etc
mkdirusr/lib
7、拷贝依赖库到lib目录
(1)查看依赖库,切换到“/work/busybox-1.10.3/_install/bin”目录,使用命令arm-linux-readelf–a./busybox|grep“Sharedlibrary”查看需要那些依赖库;
(2)将libcrypt.so.1、libm.so.6、libc.so.6、libcrypt-2.3.2.so、libm-2.3.2.so、libc-2.3.2.so、ld-linux.so.2、ld-2.3.2.so文件拷贝到根文件系统的lib目录下
8、在根文件系统的dev目录下创建基本的设备文件
切换到目录“/work/rootfs/dev”,用以下命令创建设备文件
mknodconsole51
mknodnull13
在linux系统启动时,dev目录下必须要有console设备文件;
9、创建配置文件rcS,是一个脚本文件,借助启动脚本可以设置各种程序开机后自动运行
在etc目录下创建目录“init.d”,在init.d目录下创建文件rcS,其内容如下:
#!
/bin/sh
mount–a
echo/sbin/mdev>/proc/sys/kernel/hotplug
mdev–s
之后执行命令chmod+xrcS,将rcS文件变为可执行文件;
10、创建配置文件fstab,该文件定义了一些文件系统的挂载点
在“/work/rootfs/etc”目录下创建文件fstab,其内容如下:
proc/procprocdefaults00
mdev/devramfsdefaults00
sysfs/syssysfsdefaults00
tmpfs/tmptmpfsdefaults00
11、创建配置文件inittab
在目录“/work/rootfs/etc”下创建inittab文件,其内容如下:
:
:
sysinit:
/etc/init.d/rcS
Console:
:
askfirst:
-/bin/sh
:
:
restart:
/sbin/init
:
:
ctrlaltdel:
/sbin/reboot
:
:
shutdown:
/bin/umount–a–r
:
:
shutdown:
/sbin/swapoff–a
12、创建配置文件mdev.conf
在“/work/rootfs/etc”目录下创建mdev.conf文件,其内容为空;
4.2.2boa服务器的移植
1、将boa-0.94.13.tar.gz通过共享目录vmshare共享到虚拟机中,将其拷贝到/work目录下,输入命令tarzxvfboa-0.94.13.tar.gz
2、进入src目录输入./configure生成Makefile文件
3、修改Makefile文件的内容
将CC=gcc修改为CC=arm-linux-gcc
将CPP=gcc–E修改为CPP=arm-linux-gcc–E
4、修改源文件src/boa.c
将底下判断是注解掉:
/*if(setuid(0)!
=-1){
DIE(“ickyLinuxkernelbug!
”);
}*/
将底下两个判断是注解掉:
/*if(passwdbuf==NULL){
DIE(“getpwuid”);
}
If(initgroups(passwdbuf->pw_name,passwdbuf->pw_gid)==-1){
DIE(“initgroups”);
}*/
5、修改src/compat.h文件
将#defineTIMEZONE_OFFSET(foo)foo##->tm_gmtoff
修改为#defineTIMEZONE_OFFSET(foo)foo->tm_gmtoff
6、执行make命令生成boa的可执行程序,输入arm-liunx-stripboa剥去调试信息,对可执行程序进行瘦身。
7、修改配置文件boa.conf
将Usernobody
Groupnogroup
修改为:
User0
Group0
将ServerNamewww.your.org.here
修改为:
ServerName
将CGIPath/bin:
/usr/bin:
/usr/local/bin
修改为CGIPath/bin:
/usr/bin:
/var/www/cgi-bin
将ScriptAlias/cgi-bin//usr/lib/cgi-bin/
修改为ScriptAlias/cgi-bin//var/www/cgi-bin/
8、在自己制作的根文件系统的/etc下创建/boa,在/var下创建/www/cgi-bin和/log/boa,将mime.types文件拷贝到/etc下,把boa可执行文件拷贝到自己制作的根文件系统的/sbin下,把boa.conf复制到/etc/boa下。
4.2.3驱动程序的编写与编译
1、编写驱动程序。
2、通过共享目录vmshare将kernel-2.6.13.tar.gz共享到虚拟机中,拷贝到/root/Myjob目录下,解压产生kernel-2.6.13,进入该目录下执行“makemodules”和“makemodules_install”命令编译内核模块。
3、进入到led_driver.c所在的目录/mnt/module,执行“make”命令,生成led_driver.ko文件。
4.2.4cgi程序的编写与编译
1、编写cgi程序。
2、进入到自己制作的根文件系统的/var/www/cgi-bin下使用命令“arm-linux-gcc–ocgi_led.cgicgi_led.c”对源程序进行编译生成.cgi程序。
4.2.5根文件系统的挂载
1、将自己制作的根文件系统拷贝到虚拟机的“/work/nfsdir”目录下;
2、设置WindowsIP地址为10.0.0.2,虚拟机的IP地址为10.0.0.3,默认网关均为10.0.0.255,实验箱计划采用10.0.0.1作为IP地址,使用ufwdisable命令关闭虚拟机防火墙;
3、连接实验箱,启动方式为Nandflash,打开超级终端,设置串口参数,重启实验箱,在计数值减为0前按任意键进入,输入下列命令设置启动参数“setenvbootargsconsole=ttySAC0,115200root=/dev/nfsnfsroot=10.0.0.3:
/work/nfsdir/rootfs_liuip=10.0.0.1:
:
:
:
:
eth0”,再输入命令“saveenv”进行保存设置。
4、验证是否挂载成功:
若重启实验箱,没有出现卡死现象,按“enter”键进入后可以执行“ls”,“cd”等命令,证明挂载成功。
4.2.6远程控制程序测试准备阶段
1、在超级终端下进入/dev,用命令“mknodgpiosc2153”创建进行远程控制程序led所需的设备文件;
2、进入/mnt/module,使用命令“insmodled_driver.ko”加载驱动程序
3、进入/sbin,使用命令“./boa”启动boa服务器,若启动成功会出现版本号、监听端口等信息,如图4-3所示:
图4-3boa启动成功
4、打开计算机的IE浏览器,输入“http:
/10.0.0.1”即可进行远程控制led。
若成功,则实验箱上的四个led灯全部由亮变灭。
当输入相应的序号及状态即可控制led的亮灭。
第五章程序测试报告
1、在IE浏览器中输入“http:
/10.0.0.1”,IE浏览器弹出如图5-1所示的初始界面,实验箱立即出现如图5-1所示的初始状态:
图5-1初始界面
2、本系统可以通过WEB控制开发板上0-3号4个LED灯的亮灭,状态“0”为灯灭,状态“1”为灯亮。
成功将会使开发板上对应LED灯处于规定状态,并在WEB浏览器得到如图5-2所示的回应:
图5-2控制LED0亮的IE浏览器界面
3、如果传递参数不正确,如要求4号灯亮,由于开发板上4号灯不存在,WEB浏览器将会得到如图5-3所示的回应:
图5-3LED状态出错提示界面
体会
本课程设计是学习完《嵌入式应用系统设计》课程后,对所学知识的检验和综合运用。
通过课程设计,能够更好地掌握嵌入式系统的设计、原理及实现方法,加深对所学知识的理解,加强动手能力。
本次课设中遇到了许多这样或那样的问题,让我深刻的了解到了嵌入式系统的设计作为基于具体硬件的设计,从来都不是一帆风顺的,也只有在遇到问题、解决问题的过程中,所学知识才能被掌握,动手实践能力才能增强。
本次课设中所遇到各种问题和体会基本可以总结为以下几点:
(1)嵌入式系统的设计是面向具体硬件的
不同的硬件有着不同的结构,端口、引脚等可能都不相同。
对于遇到问题时,从网络或是其他途径找到的解决办法不一定适合自己的硬件环境。
我们要根据自己的具体硬件,对这些解决办法做具体的修改才能解决所遇到的具体问题。
(2)遇到问题应考虑全面,寻求多种解决方法
有些问题可能不是单一原因造成的,有时候一种解决办法不能彻底地解决问题,这时候就要耐下心来,全面分析可能的各种原因,针对不同原因寻找多种解决办法,综合这多种办法才有可能解决所遇到的问题。
(3)合理使用网络资源
嵌入式LINUX操作系统、BOA服务器等工具虽然是开源的,我们可以通过网络获得各种技术信息,但也导致这些技术信息良莠不齐,错误很多。
我们在利用网络的便捷的同时,不能照搬照用,要耐心分辨,理解其本质思想,再为我所用。
总之,本次课设我获益良多,也要感谢各位老师、同学和网友们的热心帮助,才能使我基本完成本次课设的要求。
附录
Sinosyss3c2440实验箱LED驱动程序:
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#defineDEVICE_NAME"gpios"
#defineGPIO_MAJOR215
staticunsignedlonggpio_table[]={
S3C2410_GPF0,
S3C2410_GPF1,
S3C2410_GPF2,
S3C2410_GPF3,
};
staticunsignedintgpio_cfg_table[]={
S3C2410_GPF0_OUTP,
S3C2410_GPF1_OUTP,
S3C2410_GPF2_OUTP,
S3C2410_GPF3_OUTP,
};
staticintsbc2440_gpios_ioctl(
structinode*inode,
structfile*file,
unsignedintcmd,
unsignedlongarg)
{
switch(cmd){
case0:
case1:
if(arg>4){
return-EINVAL;
}
s3c2410_gpio_setpin(gpio_table[arg],!
cmd);
return0;
default:
return-EINVAL;
}
}
staticstructfile_operationssbc2440_gpios_fops={
.owner=THIS_MODULE,
.ioctl=sbc2440_gpios_ioctl,
};
staticint__initsbc2440_gpios_init(void)
{
intret;
inti;
ret=register_chrdev(GPIO_MAJOR,DEVICE_NAME,&sbc2440_gpios_fops);
if(ret<0){
printk(DEVICE_NAME"can'tregistermajornumber\n");
returnret;
}
devfs_mk_cdev(MKDEV(GPIO_MAJOR,0),S_IFCHR|S_IRUSR|S_IWUSR|S_IRGRP,DEVICE_NAME);
for(i=0;i<4;i++){
s3c2410_gpio_cfgpin(gpio_table[i],gpio_cfg_table[i]);
s3c2410_gpio_setpin(gpio_table[i],1);
}
printk(DEVICE_NAME"initialized\n");
return0;
}
staticvoid__exitsbc2440_gpios_exit(void)
{
devfs_remove(DEVICE_NAME);
unregister_chrdev(GPIO_MAJOR,DEVICE_NAME);
}
MODULE_LICENSE("DualBSD/GPL");
module_init(sbc2440_gpios_init);
module_exit(sbc2440_gpios_exit);
控制LED的CGI程序:
#include
#include
#include
#include
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 嵌入式 报告