嵌入式课设报告.doc_第1页
嵌入式课设报告.doc_第2页
嵌入式课设报告.doc_第3页
嵌入式课设报告.doc_第4页
嵌入式课设报告.doc_第5页
已阅读5页,还剩13页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

目 录第1章 绪 论11.1、课程设计目的11.2、课程设计内容11.2.1 课设题目11.2.2 课设设计基本要求11.2.3 设计内容及设计要求11.3、课程设计环境1第2章 总体设计2第3章 详细设计43.1、根文件系统的制作43.2、boa服务器的移植63.3、驱动程序的编写与编译73.3.1、驱动程序的编写73.3.2、驱动程序的编译83.4、cgi程序的编写与编译93.4.1、cgi程序的编写93.4.2、cgi程序的编译113.5、根文件系统的挂载113.6、远程控制程序测试准备阶段12第4章 程序测试报告134.1、正确运行结果134.2、异常数据运行结果14第5章 总 结155.1、遇到的问题及解决方法155.2、课设体会15第1章 绪 论1.1、课程设计目的本课程设计是学生学习完嵌入式应用系统设计课程后,进行的一次全面的综合训练,通过课程设计,让学生更好地掌握操作系统的原理及实现方法,加深对操作系统基础理论和重要算法的理解,加强学生的动手能力。1.2、课程设计内容1.2.1 课设题目基于web的远程控制led1.2.2 课设设计基本要求每人从所给题目中任选一个(如自拟题目,需经教师同意,可以多选,鼓励多做),每个学生必须独立完成课程设计,不能相互抄袭;设计完成后,将所完成的工作交由老师检查;要求写出一份详细的设计报告。1.2.3 设计内容及设计要求题目一:基于web的远程控制led编写了led驱动程序,并通过web网页对其进行远程控制。题目二:按键驱动程序+qt编程针对试验箱上的四个按键,实现中断驱动程序,编写qt程序,将音频播放器移植到嵌入式系统。题目三:人脸识别项目的移植根据所给文档,将实现人脸识别部分的程序剥离出来,移植到嵌入式系统。题目四:自拟题目要符合课程设计的难度和工作量。1.3、课程设计环境硬件:PC机、开发板软件:Linux操作系统、交叉编译环境、超级终端第2章 总体设计嵌入式WEB服务器及远程测控总的思想就是网络化仪器。完成的目标就是基于Linux操作系统的远程控制系统,并且讨论实践性中的可行性,我们通过普通的浏览器就可以对远端现场的测控和测量以及获取远端现场的图像信息。使用嵌入式WEB服务器的好处有这样几点:(1)远程监控终端仅需要安装浏览器即可IE或Netscape等软件大多有操作系统自带,无序开发专门的应用软件,降低系统成本。(2)浏览器所在的监控终端平台与WEB所在的服务器平台无关,监控终端可以采用多种操作系统,真正实现了跨平台。(3)操作界面简单统一,表达直观生动,用户无需经过经过专门培训。(4)易于扩展新的功能,系统升级仅需在WEB服务器一端添加相应模块,与远程监控终端无关,降低系统升级维护费用。(5)可提供分布式并行处理,基于WEB的测控系统可构成一个多CPU协调工作的分布式测控系统,可并行处理多个测控指令。整个结构是一个B/S结构的。系统整体结构如图2-1所示:图 2-1 系统整体结构它所涉及的知识很多,主要包括Linux操作系统,内核移植,文件系统的移植,服务器的移植,CGI程序的移植,CGI脚本的编写,A/D采集的调试和JavaScript脚本,TCP服务器与客户端,UDP服务器与客户端,Java中的多线程技术,Java画图板及各种控件的添加。嵌入式WEB服务器的软件开发主要包括以下几项内容:BootLoader的移植嵌入式操作系统的移植和TCP/IP协议的剪裁相关驱动程序的编写CGI、数据采集、数据处理等相关应用程序的编写基于web的远程控制led涉及的内容有:根文件系统的制作与烧写(NFS挂载)、boa服务器的移植、驱动程序的编写与加载、CGI、数据采集、数据处理等相关应用程序的编写等。操作流程如图2-2所示:boa服务器的移植驱动程序的编写CGI程序的编写 根文件系统的烧写或NFS挂载创建设备文件gpios加载驱动模块启动boa服务器远程控制程序测试制作根文件系统远程控制程序准备及测试图2-2 操作流程第3章 详细设计3.1、根文件系统的制作制作Linux根文件系统,也就是创建根文件系统必须的各种目录,并在目录种种创建各种文件,如在/bin,/sbin目录下存放各种命令程序,在/etc下创建配置文件,在/lib下存放依赖库。制作步骤如下:1、安装libncurses5-dev,这个程序库提供了文本选单界面(1)将libncurses5-dev_5.7+20090803-2ubuntu3_i386.deb 文件通过共享目录拷贝到虚拟机Linux 系统的“/work”目录下,打开Linux 命令终端,切换到“/work”目录;(2) 输入命令: dpkg -i libncurses5-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 ?=armCROSS_COMPILE ?=arm-linux即将处理器改为arm,将编译器设置为arm-linux-gcc;4、配置busybox(1)Linux下打开命令终端,切换到“/work/busybox-1.10.3”目录,使用命令“make defconfig”产生配置文件;(2)使用命令“make menuconfig”,出现字符界面的配置内核界面按照以下选项进行配置:设置1:Bosybox Settings-BuildOptions- BuildBusyBox as a static binary /进行动态编译Busybox LibraryTuning-*Support for /etc/networks*vi-style line editing commands(15)History size*History saving*Tab completion*Username completion*Fancy shell prompts设置2:Miscellaneous Utilities- taskset设置3:Linux Module Utilities- Support version 2.2.x to 2.4.x Linux kernels配置完成后,在主菜单里选择推出并保存设置;5、使用命令“make all install”进行编译,若无错误将在busybox-1.10.3/_install目录生成bin sbin usr目录及linuxrc启动初始化程序;在“/work”目录下新建一目录rootfs,将生成的bin sbin usr目录及linuxrc启动初始化程序拷贝到新建的rootfs目录下;6、切换到“/work/rootfs”目录,分别使用以下命令创建其他目录:mkdir dev etc home lib mnt proc sys tmp root mkdir mnt/etcmkdir usr/lib7、拷贝依赖库到lib目录(1)查看依赖库,切换到“/work/busybox-1.10.3/_install/bin”目录,使用命令arm-linux-readelf a ./busybox|grep “Shared library”查看需要那些依赖库;(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”,用以下命令创建设备文件mknod console 5 1mknod null 1 3在linux系统启动时,dev目录下必须要有console设备文件;9、创建配置文件rcS,是一个脚本文件,借助启动脚本可以设置各种程序开机后自动运行在etc目录下创建目录“init.d”,在init.d目录下创建文件rcS,其内容如下:#!/bin/sh mount aecho /sbin/mdev/proc/sys/kernel/hotplugmdev s之后执行命令chmod +x rcS,将rcS文件变为可执行文件;10、创建配置文件fstab,该文件定义了一些文件系统的挂载点在“/work/rootfs/etc”目录下创建文件fstab,其内容如下:proc/procprocdefaults00mdev/devramfsdefaults00sysfs/syssysfsdefaults00tmpfs/tmptmpfsdefaults0011、创建配置文件inittab在目录“/work/rootfs/etc”下创建inittab文件,其内容如下::sysinit:/etc/init.d/rcSConsole:askfirst:-/bin/sh:restart:/sbin/init:ctrlaltdel:/sbin/reboot:shutdown:/bin/umount a r:shutdown:/sbin/swapoff a12、创建配置文件mdev.conf在“/work/rootfs/etc”目录下创建mdev.conf文件,其内容为空;3.2、boa服务器的移植1、将boa-0.94.13.tar.gz通过共享目录vmshare共享到虚拟机中,将其拷贝到/work目录下,输入命令tar zxvf boa-0.94.13.tar.gz2、进入src目录输入./configure生成Makefile文件3、修改Makefile文件的内容将CC = gcc 修改为CC = arm-linux-gcc将CPP = gcc E 修改为CPP = arm-linux-gcc E4、修改源文件src/boa.c将底下判断是注解掉:/*if(setuid(0) != -1)DIE(“icky Linux kernel bug!”);*/将底下两个判断是注解掉:/*if(passwdbuf=NULL)DIE(“getpwuid”);If(initgroups(passwdbuf-pw_name,passwdbuf-pw_gid) = -1)DIE(“initgroups”);*/5、修改src/compat.h文件将#define TIMEZONE_OFFSET(foo) foo#-tm_gmtoff修改为#define TIMEZONE_OFFSET(foo) foo-tm_gmtoff6、执行make命令生成boa的可执行程序,输入arm-liunx-strip boa剥去调试信息,对可执行程序进行瘦身。7、修改配置文件boa.conf将User nobodyGroup nogroup修改为:User 0Group 0将ServerName .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下。3.3、驱动程序的编写与编译3.3.1、驱动程序的编写驱动程序led_driver.c:#include #include #include #include #include #include #include #include #include #include #include #define DEVICE_NAMEgpios#define GPIO_MAJOR 215static unsigned long gpio_table = S3C2410_GPF0,S3C2410_GPF1,S3C2410_GPF2,S3C2410_GPF3,;static unsigned int gpio_cfg_table = S3C2410_GPF0_OUTP,S3C2410_GPF1_OUTP,S3C2410_GPF2_OUTP,S3C2410_GPF3_OUTP,;static int sbc2440_gpios_ioctl(struct inode *inode, struct file *file, unsigned int cmd, unsigned long arg)switch(cmd) case 0:case 1:if (arg 4) return -EINVAL;s3c2410_gpio_setpin(gpio_tablearg, !cmd);return 0;default:return -EINVAL;static struct file_operations sbc2440_gpios_fops = .owner=THIS_MODULE,.ioctl=sbc2440_gpios_ioctl,;static int _init sbc2440_gpios_init(void)int ret;int i;ret = register_chrdev(GPIO_MAJOR, DEVICE_NAME, &sbc2440_gpios_fops);if (ret 0) printk(DEVICE_NAME cant register major numbern); return ret;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_tablei, gpio_cfg_tablei);s3c2410_gpio_setpin(gpio_tablei, 1);printk(DEVICE_NAME initializedn);return 0;static void _exit sbc2440_gpios_exit(void)devfs_remove(DEVICE_NAME);unregister_chrdev(GPIO_MAJOR, DEVICE_NAME);MODULE_LICENSE(Dual BSD/GPL);module_init(sbc2440_gpios_init);module_exit(sbc2440_gpios_exit);makefile文件:obj-m+=gpio.oKDIR:=/lib/modules/kernel-2.6.13all:make -C $(KDIR) M=$(PWD) modulesclean:make -C $(KDIR) M=$(PWD) clean3.3.2、驱动程序的编译1、通过共享目录vmshare将kernel-2.6.13.tar.gz共享到虚拟机中,拷贝到/root/Myjob目录下,解压产生kernel-2.6.13,进入该目录下执行“make modules”和“make modules_install”命令编译内核模块。2、进入到led_driver.c所在的目录/mnt/module,执行“make”命令,生成led_driver.ko文件。3.4、cgi程序的编写与编译3.4.1、cgi程序的编写led.html文件:CGI LED test基于S3C2440 的Web 服务器的设计程序系统资源:s3c2440,16M Flash,32M SDRM,IP:输入要点亮的LED:输入LED状态: cgi_led.c文件:#include #include #include #include #include #include #include #include #define DEVICE_GPIODRV /dev/gpiosint main()int fd;int led;int status;char *data;if(fd=open(DEVICE_GPIODRV,O_RDONLY | O_NONBLOCK)0)printf(open device: %sn,DEVICE_GPIODRV);perror(can not open device);exit(1);printf(Content-type: text/html;charset=gb2312nn);printf(n);printf(CGI LED DEMOn);printf(n);printf(n);printf(n);printf(CGI LED DEMO BY Xie Zhixinn);printf(go backn);printf(n);printf(n);printf(n);data=getenv(QUERY_STRING);if(sscanf(data,led=%ld&status=%ld,&led,&status)!=2) printf(请正确输入); printf();if(led3)printf(Please input 0=led=3!);printf();if(led=0&status=1)printf(led0 turn up!);printf();if(led=1&status=1)printf(led1 turn up!);printf();if(led=2&status=1)printf(led2 turn up!);printf();if(led=3&status=1)printf(led3 turn up!);printf();if(led=0&status=0)printf(led0 turn down!);printf();if(led=1&status=0)printf(led0 turn down!);printf();if(led=2&status=0)printf(led0 turn down!);printf();if(led=3&status=0)printf(led0 turn down!);printf();if(status1)printf(Please input 0=status=1!);printf();ioctl(fd,status,led);close(fd);printf(n);exit(0);3.4.2、cgi程序的编译进入到自己制作的根文件系统的/var/www/cgi-bin下使用命令“arm-linux-gcc o cgi_led.cgi cgi_led.c”对源程序进行编译生成.cgi程序。3.5、根文件系统的挂载1、将自己制作的根文件系统拷贝到虚拟机的“/work/nfsdir”目录下;2、设置Windows IP地址为02,虚拟机的IP地址为01,默认网关均为04,实验箱计划采用03作为IP地址,使用ufw disable命令关闭虚拟机防火墙;3、连接实验箱,启动方式为Nand flash,打开超级终端,设置串口参数,重启实验箱,在计数值减为0前按任意键进入,输入下列命令设置启动参数“setenv bootargs console=ttySAC0,115200 root=/dev/nfs nfsroot=01:/work/nfsdir/rootfs ip=03:eth0”,再输入命令“saveenv”进行保存设置。4、验证是否挂载成功:若重启实验箱,没有出现卡死现象,按“enter”键进入后可以执行“ls”,“cd”等命令,证明挂载成功。3.6、远程控制程序测试准备阶段1、在超级终端下进入/dev,用命令“mknod gpios c 215 3”创建进行远程控制程序led所需的设备文件;2、进入/mnt/module,使用命令“insmod led_driver.ko”加载驱动程序3、进入/sbin,使用命令“./boa”启动boa服务器,若启动成功会出现版本号、监听端口等信息,如图3-6-1所示:图3-6-1 boa启动成功4、打开计算机的IE浏览器,输入“03”即可进行远程控制led。若成功,则实验箱上的四个led灯全部由亮变灭。当输入相应的序号及状态即可控制led的亮灭。第4章 程序测试报告4.1、正确运行结果1、在IE浏览器中输入“03”,IE浏览器弹出如图4-1-1所示的初始界面,实验箱立即出现如图4-1-2所示的初始状态:图4-1-1 初始界面图4-1-2 实验箱初始状态2、输入要点亮的LED为“0”,输入LED状态为“1”,则IE浏览器界面如图4-1-3所示,实验箱上的LED灯显示状态如图4-1-4所示:图4-1-3 控制LED0亮的IE浏览器界面图4-1-4 实验箱LED0亮3、在步骤2的基础上输入要熄灭的LED为“0”,输入LED状态为“0”,则IE浏览器界面如图4-1-5所示,实验箱上的

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论