基于cortex-a8安防监控的设计毕业设计

上传人:无*** 文档编号:201502416 上传时间:2023-04-20 格式:DOC 页数:31 大小:788KB
收藏 版权申诉 举报 下载
基于cortex-a8安防监控的设计毕业设计_第1页
第1页 / 共31页
基于cortex-a8安防监控的设计毕业设计_第2页
第2页 / 共31页
基于cortex-a8安防监控的设计毕业设计_第3页
第3页 / 共31页
资源描述:

《基于cortex-a8安防监控的设计毕业设计》由会员分享,可在线阅读,更多相关《基于cortex-a8安防监控的设计毕业设计(31页珍藏版)》请在装配图网上搜索。

1、保密类别 编 号 本 科 毕 业 论 文基于cortex-a8的安防监控的设计-Linux内核移植和GPRS设计院(系)别 传媒技术学院专 业 电子信息工程I摘 要在21世纪,各项行业的快速发展和人们对安全的需求越来越高,这就使得我们不得不去研究建立一个高效完善的安防监控系统。本篇文章完整的阐述了用嵌入式系统和GPRS模块来模仿安防监控,构建智能安防监控系统,防盗、防火灾系统是利用红外传感器对现场实时进行监控,在有异常情况的时候启动GPRS系统发送短信到指定的号码或发送到给119火警。火警系统采用温度传感器通过A/D转换来采集温度,本文利用开发板adc设备模拟火警,当现场温度高于预设定的温度值

2、时,系统启动报警铃并发送短信到指定号码。防盗系统则是利用按键模块来模拟小偷,达到完美监控。用户在使用该系统时可以通过Internet网络登录到该监控机,点击网页中的控制按钮来打开/关闭监控机的防盗系统和火警系统,可以查看监控现场的实时情况并且能将现场的情况手动经行拍照,也可以浏览在有意外发生地时候监控机自动保存的照片,可以为用户做有力的证据。犹豫设备缘故,视频设备就没有在本文得以体现,以下文章不会再赘述采集图片这一片段。用户即使在无网络的情况下,也可以放心监控现场的情况,用户可以将短信号码设定为自己的手机号码,这样一旦现场有情况发送,监控机就会把现场的情发送给用户。关键词:安防监控;linux

3、内核;GPRSIABSTRACTIn twenty-first Century, the rapid development of the industry and the demand for security is more and more high, so we have to study the establishment of a high efficient and perfect security monitoring system. In this article, this embedded system and GPRS module to simulate the se

4、curity monitoring, intelligent security monitoring system, anti-theft, fire system is to monitor real-time infrared sensor, start the GPRS system to send text messages to the specified number or send to give 119 fire alarm when abnormal situations.The fire alarm system using temperature sensors to c

5、ollect the temperature through the A/D conversion, the ADC device simulation fire use development board, when the temperature is higher than the preset temperature value, system start alarm bell and send messages to the specified number. Anti-theft system is to simulate the thief by key module, to a

6、chieve the perfect monitoring. Users can go to the monitoring computer through the Internet network to log in using the system, the control button is clicked in the webpage to open / close the monitor alarm system and fire alarm system, real-time situation can view monitoring site and can be the sce

7、ne manual by taking pictures, you can also browse in the accident when monitoring machine automatically save pictures, can be powerful evidence for the user. Hesitate equipment sake, video equipment is not reflected in the paper, this article will not repeat collection picture of this fragment. Even

8、 if the user in the absence of network, but also can rest assured that monitoring the situation, the user can SMS number is set to your mobile phone number, so that once the situation is sent to the scene, the monitor will send to the user site. Keywords: security monitoring; Linux kernel; GPRS中国传媒大

9、学南广学院本科毕业论文目 录摘 要IABSTRACTII绪 论1(一)课题的背景及意义1(二)课题的基本内容及方案设计1一、嵌入式Linux概述2(一)嵌入式系统开发环境简介2(二)开发环境交叉工具链的安装2(三)u-boot移植2(一)第一阶段的功能2(二)第二阶段的功能3(四)Linux-2.6.35内核移植3(一)Linux内核在操作系统中的位置及体系结构3(二)Linux内核移植配置3二、GPRS设计6(一)GPRS 模块说明6(二)基于GPRS 模块收发短信AT命令介绍6(三)GPRS 模块设计与实现7三、驱动模块的设计与实现13(一)驱动的结构与原理分析13(二)GPIO、PWM的

10、驱动设计与实现14(三)ADC的驱动设计与实现16四、文件系统设计17(一)yaffs2文件系统移植17(二)ramdisk映象文件系统移植18结 语20参考文献21附 录22后 记26绪 论(一)课题的背景及意义在和平年代,人口激增的泱泱大国,家用电器和燃气的运用,导致了许多不安全事故的发生,这严重危及居民的生命和财产安全。所以各单位小区采用保安轮番执行检查、人工夜巡、对讲机形式检查等普通手段进行安保管理。这已经难以满足住户的要求,迫使嵌入式技术为大家带来智能住宅小区,拥有一个多层次、全方位、科学的智能监控系统,在各大商场进入智能阶段,小区的安防业得以发展,门禁监控、室内温度调节、防火防盗,

11、创建一个智能安防监控系统是值得推广的,也是大家所期待的。目前而言,监控系统发展到第三代,前端一体化、视频十字化、监控网络化、系统集成化成为监控系统公认的发展方向,它以网络为依托,以GPRS模块为辅助,并为报警系统完美的整合到一个使用平台上,伴随着数字化和网络化的进程,智能化的浪潮席冲击着世界的每一个角落,成为一种势不可挡的趋势。这一切的最终目的为人们提供一个以人为本的舒适、智能、高效、安全的生活环境。如何建立一个高效率、低成本的智能家居系统已成为当今世界的一个热点问题。信息化程度的不断提高,人们对智能家居的功能也提出了更高层次的要求。本课题研究的是基于GPRS的远程监控设计,利用市场上比较通用

12、的GPRS模块收发信息,利用cortex-a8开发板,并在Linux系统中搭建文件系统来实现远程监控的目的。此类远程监控系统对于电子消费各个领域都有着重要的意义。(二)课题的基本内容及方案设计本系统设计主要分为四个大的模块,分别是:嵌入式系统开发平台搭建模块;GPRS远程通讯模块;框架搭建;驱动编写。嵌入式系统开发平台搭建模块主要是实现交叉编译工具的安装,u-boot的具体移植,文件系统的制作,内核的移植。GPRS远程通讯模块主要实现远程信息的接收与发送。实现远程报警的功能。系统设计初期,本人与项目组成员主要对系统功能需求进行调研分析,了解最新的功能需求。在项目组的分配下,本人主要负责对框架的

13、编写,gprs远程通信模块及驱动代码的编写工作。系统实施期间,本人参与了系统开发环境的搭建与设计,GPRS模块详细设计与具体实现。并担任相关框架的整合工作,协助解决疑难问题。完成相关工作。系统设计后期,主要针对系统的测试与bug修复工作。本人主要负责对系统整体框架进行测试与分析。并对相关文档进行修正和整理。一、嵌入式Linux概述(一)嵌入式系统开发环境简介嵌入式系统是有区别于 PC 系统的,有计算机的功能但又跟计算机有很大的差别。对于它的概念不是固定的,可以说它是以应用为中心,软硬件可裁减的,适应应用系统对功能、可靠性、成本、体积、功耗等综合性的各项器件可使用的一门系统。嵌入式系统的硬件部分

14、,包括cpu处理器/微处理器、外设器件和 I/O端口、nand flash、nor flash等。嵌入式系统有别于一般的计算机处理系统,它没有像硬盘那样大容量的存储介质,而nand flash、nor flash作为存储介质来使用的。软件部分包括linux操作系统和在应用方面的编程。应用程序控制着系统的运作和行为;而操作系统控制着应用程序编程与硬件的交互作用。其的核心是嵌入式微处理器。 Linux操作系统是可以运行很多个的计算机上的一种操作系统的“内核”。在所有操作系统中,Linux的发展还是相对最广泛的。它为广大的程序员提供命令行或者程序与计算机硬件之间接口的软件的核心部分。给程序员带来了很

15、大的方便。 (二)开发环境交叉工具链的安装在ubuntu系统下,我们使用的是gcc编译器,cortex-a8开发板则无法运行gcc编译的二进制文件,所以我们要在ubuntu系统下安装交叉编译工具,我们修改文件/etc/bash.bashrc添加如下内容 export PATH=$PATH:/home/jari/linux_2.6.35/bin。重启配置文件$ source /etc/bash.bashrc。(三)u-boot移植U-boot来源于Bootloader,并且每种不同的CPU体系结构都会有不同Bootloader也支持多种类似于linux内核CPU,比像u-boot就可以支持ARM

16、体系结构以cortex-a8体系结构,当然对于依赖于CPU的体系结构外,同时也依赖嵌入式开发板上的设备,通常对于程序员来说,芯片手册则是他们必不可少的资料,即使不同类型的开发板,即使它们是用同一种同一种CPU而构建的,比如s5pc100,要想让运行在一块板子上u-boot程序也可以启动另一块开发板,这些都必须要修改u-boot的源代码。U-Boot启动的目的是为了引导内核,跟pc机bios很相似,其过程可以分为两个阶段,以下2个小段为此解释。(一)第一阶段的功能 1.对硬件mmu,wdt,中断设备的初始化。2.加载U-Boot第二阶段代码到cortex-a8的内存中。3.设置内核中的栈。4.通

17、过pc指针跳转到第二阶段main函数代码入口。(二)第二阶段的功能 1.初始化内核启动需要的设备,比如i2c,adc;2.同时还需要检查系统内存是否有映射镜像zImage;3.将内核从Flash读取前16kb的内容考到内存中执行。4.为内核配置启动参数,通过nfs,还是nand flash运行,5.调用内核,启动内核。(四)Linux-2.6.35内核移植(一) Linux内核在操作系统中的位置及体系结构Linux是发展比较成熟的一个的操作系统,目前我们使用的linux系统是ubuntu下的系统,ubuntu系统每年更新2次,当然它的开发起始于一位牛人Linux Torvalds,他一个人制作

18、出这个系统,但随着时间的推移,很多的程序员的人加入了Linux的开发这个团队以及对它的不断完善。所以我们需要去学习linux内核,首先需要从整体上把握Linux内核的体系结构,对它有个充分的认识,才能更好的去使用它。一个完整可用的操作系统主要由4部分组成:硬件、操作系统内核、操作系统服务、用户应用程序,Linux内核主要由五个模块子系统组成:进程调度、内存管理、虚拟文件系统、进程间通一讯和网络接口组成关系图如图1-4-1下。图1-4-1 内核调度(二)Linux内核移植配置首先得配置顶层目录的下的makefile:$ vim Makefile修改:ARCH?= $(SUBARCH)CROSS_

19、COMPILE ?=CROSS_COMPILE ?= $(CONFIG_CROSS_COMPILE:%=%)为:ARCH?= armCROSS_COMPILE?= arm-cortex_a8-linux-gnueabi-拷贝标准板配置文件$cp arch/arm/configs/s5pc100_defconfig .config 配置内核$ make menuconfig该命令执行时会弹出一个菜单,我们可以对内核进行详细的配置。这里我们先查看一下,内核都提供了那些功能!编译内核 $ make zImage,通过上述操作我们能够在arch/arm/boot目录下生成一个zImage文件,这就是经

20、过压缩的内核镜像。配置网卡驱动,目的是让开发板能使用网卡,以便与pc机相连,具体代码如下:平台代码修改vim arch/arm/mach-s5pc100/mach-smdkc100.c 添加需要的头文件#if defined (CONFIG_DM9000)#include #include #endif 平台设备的添加/* DM9000 Support */#if defined(CONFIG_DM9000)static struct resource dm9000_resources = 0 = .start= 0x88000000,.end = 0x88000000 + 0x3,.flag

21、s= IORESOURCE_MEM,1 = .start= 0x88000000 + 0x4,.end= 0x88000000 + 0x4 +0x3,.flags= IORESOURCE_MEM,2 = .start = IRQ_EINT(10), .end = IRQ_EINT(10),.flags= IORESOURCE_IRQ | IRQ_TYPE_LEVEL_HIGH,;static struct dm9000_plat_data s5pc100_dm9000_platdata = .flags= DM9000_PLATF_16BITONLY,.dev_addr0 = 0x00,.de

22、v_addr1 = 0x00,.dev_addr2 = 0x3e,.dev_addr3 = 0x26,.dev_addr4 = 0x0a,.dev_addr5 = 0x00,;static struct platform_device s5pc100_device_dm9000 = .name= dm9000,.id= -1,.num_resources= ARRAY_SIZE(dm9000_resources),.resource= dm9000_resources,.dev = .platform_data = & s5pc100_dm9000_platdata,;#endif编译内核,并

23、拷贝到tftpboot目录下$ make zImage$ cp arch/arm/boot/zImage /tftpboot启动开发板,修改内核启动参数,通过NFS方式挂载根文件系统。Nand flash 是嵌入式系统最常用的外部存储设备,这里介绍Nand flash驱动移植的过程。配置内核 $ make menuconfigDevice Drivers - Memory Technology Device (MTD) support -* MTD partitioning support Caching block device access to MTD devices NAND Devi

24、ce Support - NAND Flash support for S3C SoC* S3C NAND Hardware ECCFile Systems - Partition Types - * Advanced partition selection * PC BIOS (MSDOS partition tables) support * BSD disklabel (FreeBSD partition tables) support编译内核并拷贝到tftpboot下$ make zImage$ cp arch/arm/boot/zImage /tftpboot二、GPRS设计(一)G

25、PRS 模块说明GSM模块,是将GSM射频芯片、基带处理芯片、存储器、功放器件等集成在一块线路板上,具有独立的操作系统、GSM射频处理、基带处理并提供标准接口的功能模块。GSM模块根据其提供的数据传输速率又可以分为GPRS模块、EDGE模块和纯短信模块。短信模块只支持语音和短信服务。GPRS,可说是GSM的延续。它经常被描述成“2.5G”,也就是说这项技术位于第二代(2G)和第三代(3G)移动通讯技术之间。GPRS的传输速率从56K到114Kbps不等,理论速度最高达171k。相对于GSM的9.6kbps的访问速度而言,GPRS拥有更快的访问数据通信速度,GPRS技术还具有在任何时间、任何地点

26、都能实现连接,永远在线、按流量计费等特点。EDGE技术进一步提升了数据传输的速率到384K-473K,被称为2.75G,数据传输速率更2倍于GPRS。目前,国内的GSM网络普遍具有GPRS通讯功能,移动和联通的网络都支持GPRS,EDGE在部分省市实现了网络覆盖。 (二)基于GPRS 模块收发短信AT命令介绍一般情况下通过gprs模块发送短消息分为两种方式:1 以文本方式发送短信;2 以PDU模式发送短信。其中文本方式发送短信操作比较简单易于上手,但是缺点是只能发送英文信息。以pdu模式发送短信则相对比较麻烦(其实麻烦的是对于数据的处理,操作本身不麻烦)。下面我就两种方式做简单陈述。在putt

27、y终端输入: At OK返回OK则说明你的模块可以正常工作,否则出现故障。(一)文本模式下发送短信流程文本模式下发送信息基本分三步骤:1. 设置发送模式AT+CMGF=1 / CMGF为0是以PDU模式发送,为1则是以文本方式发送。2.接收方电话号码AT+CMGS=138XXXXxxxx /默认的发送方号码3.输入内容 hello world !注意:每敲完一条指令都要按回车,直到返回“”后开始输入信息,但是在输入完短信内容后不能敲回车而应该按组合键“ctrl+z”作为结束符。回车键在ascii码中的数值是“r”,“ctrl+z”在ascii码中的数值是“0x1a”,所以在编程时可以直接在信息

28、内容后进行字符串拼接。(二)PDU模式下发送短信流程Pdu模式发送信息仍然是三步搞定,只不过我们在前期得做一些稍微麻烦的数据转换工作。1.AT+CMGF=0 设置为PDU模式发送中文编码短信 2.AT+CMGS=信息长度3.发送短信 OK AT+CMGF=0 OK AT+CMGS=25 0891683108200505F011000D91688102159960F90008000A534E6E058FDC89C1FF01“AT+CMGF=0”将发送模式置为PDU模式;“AT+CMGS=25”这样就可以实现发送中文短信了。(三)GPRS 模块设计与实现本系统采用GSM MODEM模块,通过串口与

29、s5pc100 开发平台的串口3相连接。驱动使用串口驱动程序,主要工作就是编写串口的应用程序,来进行短信息的接受和发送并存储短信息的功能。GPRS 发送短信息程序说明:内核系统执行后,相应驱动模块开始运行,当thief进程或fire进程开始运行后,GPRS模块开始运行,并向原设定好的手机号码发送消息,实现报警功能。首先程序会先打开GPRS的串口设备,并调用void *gprs_sys(void *arg)函数发送短消息,第一次发送消息会先设定发送消息的格式及要发送方的号码。发送完后,关闭相应设备。发送消息模块结束。程序执行下一步操作。首先得对GPRS模块进行初始化:void serial_in

30、it(int fd)struct termios options;tcgetattr(fd,&options);options.c_cflag |=(CLOCAL | CREAD);options.c_cflag &= CSIZE;options.c_cflag &= CRTSCTS;options.c_cflag |= CS8;options.c_cflag &= CSTOPB;options.c_iflag |= IGNPAR;options.c_oflag = 0;options.c_lflag = 0;cfsetispeed(&options,B9600);cfsetospeed(&o

31、ptions,B9600);tcsetattr(fd,TCSANOW,&options);GPRS 发送短信息程序流程图如图2-3-1所示:图2-3-1 GPRS模块发送短信文件名称:gprs.c程序名称:void *gprs_sys(void *arg)被调用程序:fire_sys(void)、thief_sys(void)输入数据:msg,num send_msg 输出数据:send_over调用程序:send_gprs(char *,char *)void *gprs_sys(void *arg)if(init_fire()=0)printf(fail to init_firen);pt

32、hread_exit(NULL);while(1)while(send_msg=0);/判断是否开启发送短信if(send_gprs(msg,num) = 0)continue;send_over = 1;send_msg = 0;sleep(5);printf(send %s to %s overn,msg,num);内核模块发送一条英文短信代码int send_en_message(int fd,struct message_info info)getchar();char cmgf=1;int counter = 0;char cmgs16 = 0;printf(enter receiv

33、er phnumber :n);scanf(%s,info.phnu);while(strlen(info.phnu) != 11)if (counter = 3)printf(conter out !n);return -1;printf(number shuld be -11- bits!enter agin:n);scanf(%s,info.phnu);counter +;printf(enter you message!n);scanf(%s,info.message);strcat(info.message,x1a);strcat(cmgs,info.phnu);send(fd,cm

34、gf,cmgs,info.message);int send(int fd,char *cmgf,char *cmgs,char *message)代码为英文发送最关键部分,它是将at命令转换成代码,通过代码来实现发送短信int send(int fd,char *cmgf,char *cmgs,char *message)int nread,nwrite;char buff128;char reply128;memset(buff,0,sizeof(buff);strcpy(buff,atr);nwrite = write(fd,buff,strlen(buff);printf(nwrite

35、=%d,%sn,nwrite,buff); /3,atmemset(reply,0,sizeof(reply);sleep(1);nread = read(fd,reply,sizeof(reply); /reply里面存的是at + okprintf(nread = %d,%sn,nread,reply);memset(buff,0,sizeof(buff);strcpy(buff,AT+CMGF=); strcat(buff,cmgf);strcat(buff,r);nwrite = write(fd,buff,strlen(buff); /写AT+CMGFprintf(nwrite=%d

36、,%sn,nwrite,buff);memset(reply,0,sizeof(reply);sleep(1);nread = read(fd,reply,sizeof(reply);printf(nread=%d,%sn,nread,reply);memset(buff,0,sizeof(buff);strcpy(buff,AT+CMGS=);strcat(buff,cmgs);strcat(buff,r);nwrite = write(fd,buff,strlen(buff);printf(nwrite = %d,%sn,nwrite,buff);memset(reply,0,sizeof

37、(reply);sleep(1);nread = read(fd,reply,sizeof(reply);printf(nread=%d,%sn,nread,reply);memset(buff,0,sizeof(buff);strcpy(buff,message);nwrite=write(fd,buff,strlen(buff);printf(nwrite=%d,%sn,nwrite,buff);memset(reply,0,sizeof(reply);sleep(1);nread = read(fd,reply,sizeof(reply);printf(nread=%d,%sn,nrea

38、d,reply);三、驱动模块的设计与实现(一)驱动的结构与原理分析在linux内核中,系统调用是操作系统内核和应用程序之间的接口,设备驱动程序是操作系统内核和机器硬件之间的接口。设备驱动程序为应用程序屏蔽了硬件的细节说白了,设备就是文件,我们只需要对文件进行操作即可。设备驱动程序是内核的一部分,它完成以下的功能:1、首先是设备初始化,_init(),此类的函数等等;2、在ubuntu下利用交叉编译器生成xx.ko模块,从内核传送到硬件;3、读取测试程序传送给设备文件的数据和回送应用程序请求的数据;4、系统检测报错功能。驱动大体框架如下,我们以led为例:struct file_operati

39、ons led_fops = .owner = THIS_MODULE,.ioctl = led_ioctl,;static int _init s5pc100_led_init(void)int result;dev = MKDEV(led_major,led_minor);result = register_chrdev_region(dev,number_of_devices,led);if (result 0)printk(KERN_WARNING led:cant get major number n);return result;cdev_init(&cdev,&led_fops)

40、;cdev.owner = THIS_MODULE;result = cdev_add(&cdev,dev,1);if (result 0)printk(KERN_WARNING Errorn);return 0;static void _exit s5pc100_led_exit(void)dev = MKDEV(led_major,led_minor);cdev_del(&cdev);unregister_chrdev_region(dev,number_of_devices);module_init(s5pc100_led_init);module_exit(s5pc100_led_ex

41、it); 在我所学的在Linux操作系统下有二类设备文件类型:字符设备、块设备。前者和后者的主要区别是:在对字符设备发出读/写请求时,实际的硬件I/O一般就发生了,后者就有自己的方式,本设计因不涉及到块设备,所以就不对块设备进行过多的陈述了,它利用一块系统内存作缓冲区,当用户进程对设备请求能满足用户的要求,就返回请求的数据,如果不能,就调用请求函数来进行实际的I/O操作。块设备是主要针对磁盘等慢速设备设计的,以免浪费太多的cpu时间。已经提到,用户进程是通过设备文件来与实际的硬件打交道。每个设备文件都都有其文件属性,c表示是字符设备,b表是块设备。另外每个文件都有两个设备号,第一个是主设备号,

42、标识驱动程序,第二个是次设备号,标识使用同一个设备驱动程序的不同的硬件设备,设备文件的主设备号必须与设备驱动程序在登记时申请的主设备号一致,否则用户进程将无法访问到驱动程序。 最后必须提到的是,在用户进程调用驱动程序时,系统进入核心态,这时不再是抢先式调度。也就是说,系统必须在你的驱动程序的子函数返回后才能进行其他的工作。否则会造成系统崩溃。(二)GPIO、PWM的驱动设计与实现1.在这次项目中,我们利用开发板上的led作为报警灯,开发板上0xe03001c0为led控制寄存器地址,0xe03001c4为数据寄存器地址,相关驱动代码具体如下:struct file_operations led

43、_fops = .owner = THIS_MODULE,.ioctl = led_ioctl,;static int ledinit(void)GPGCON = ioremap(GPG3CON,4);writel(readl(GPGCON)&(0xffff)|0x1111),GPGCON);return 0;int led_on(unsigned long argg)GPGDAT = ioremap(GPG3DAT,4);writel(readl(GPGDAT)&(0xffff)|argg),GPGDAT);return 0;往led数据寄存器的地址写入0x1111则led灯亮。2.利用pw

44、m时钟定时器实现beep声响来模仿报警器,因为对pwm设置需要了解pwm的原理,所以我通过芯片手册对pwm有了一定的了解,要的设置的寄存器有:首先设置beep的控制寄存器为0x11,设置为定时器启动,再去设置pwm,需要设置的有分频,预分频,占空比。具体代码如下:int s5pc100_pwm_on(unsigned long num)unsigned int *TCFG0L;unsigned int *TCFG1L;unsigned int *TCNTB1L;unsigned int *TCMPB1L;unsigned int *TCONL;TCFG0L = ioremap(TCFG0,4)

45、;TCFG1L = ioremap(TCFG1,4);TCNTB1L = ioremap(TCNTB1,4);TCMPB1L = ioremap(TCMPB1,4);TCONL = ioremap(TCON,4);writel( 65,TCFG0L);writel(0,TCFG1L);writel( 5000,TCNTB1L);writel( 2500,TCMPB1L);writel(readl(TCONL)|(0x19),TCONL);writel(readl(TCONL)&(0xf8)|(0x18)|0x1dev;int ret = -EINVAL;printk(function = %s

46、n, _func_);devno = MKDEV(adc_major, adc_minor);ret = register_chrdev_region(devno, number_of_devices, adc_convert);if( ret )dev_err(dev, failed to register device numbern);goto err_register_chrdev_region;cdev_init(&cdev, &adc_convert_fops);cdev.owner = THIS_MODULE;ret = cdev_add(&cdev, devno, number

47、_of_devices);if( ret )dev_err(dev, failed to add devicen);goto err_cdev_add;client = s3c_adc_register (pdev, NULL, NULL, 0);if(IS_ERR( client )dev_err(dev, failed to register adc clientn);goto err_s3c_adc_register;return 0;err_s3c_adc_register:cdev_del( &cdev );err_cdev_add:unregister_chrdev_region(

48、devno, number_of_devices);err_register_chrdev_region:return ret; static struct platform_driver adc_convert_driver = .driver = .name = adc_convert,.owner = THIS_MODULE,.probe= adc_convert_probe,.remove = _devexit_p(adc_convert_remove);static int _init adc_convert_init (void)return platform_driver_reg

49、ister( &adc_convert_driver );static void _exit adc_convert_exit (void) platform_driver_unregister( &adc_convert_driver );module_init (adc_convert_init);module_exit (adc_convert_exit);四、文件系统设计(一)yaffs2文件系统移植这一章主要对文件系统做一个描述,首先得在ubuntu系统下安装2个文件,nfs和tftp,在做项目的时候所有的代码都是在ubuntu下完成,并且通过nfs挂载的方式将编译好的内核传到开发板

50、上运行,tftp则是传送内核镜像的,具体代码:tftp 20008000 zImage。其次yaffs2文件系统是嵌入式系统中常用到的一种文件系统,并且在主要用在nand flash上,这里我们在内核里添加yaffs2的支持,代码及操作如下:配置内核$ cd /home/jari/linux-2.6.35$ make menuconfigFile systems - * Miscellaneous filesystems - YAFFS2 file system support -*- 512 byte / page devices-*- 2048 byte (or larger) / pag

51、e devices* Autoselect yaffs2format* Cache short names in RAM重新编译内核。$ make zImage拷贝内核到开发板上。$ cp arch/arm/boot/zImage /tftpboot这样就可以实现在nandflash使用yaffs2文件系统了。(二)ramdisk映象文件系统移植熟悉Linux文件系统目录结构,创建自己的文件系统,通过NFS方式测试;用文件系统工具生成ramdisk文件系统映象文件。首先NFS测试:1、删除原先的/source/rootfs $ sudo rm -rf /source/rootfs 2、将我们新

52、建的根文件系统拷贝到/source/rootfs目录下。 $sudo mkdir /source/rootfs$ sudo cp _install/* /source/rootfs a3、设置uboot环境变量。# setenv bootcmd tftp 20008000 zImage; go 20008000#setenv bootargs root=nfs nfsroot=192.168.1.100:/source/rootfs init=/linuxrc console=ttySAC0,115200 ip=192.168.1.200# saveenv重新启动开发板,查看是否能够正常挂载,

53、功能是否正常。通过NFS测试以后,就可以制作ramdisk文件系统了,具体如下:1、制作一个大小为8M的镜像文件。 $ cd $ dd if=/dev/zero of=initrd.img bs=1k count=8192 (initrd.img为8M)2、格式化这个镜像文件为ext2。$ mkfs.ext2 -F initrd.img3、在mount下面创建initrd目录作为挂载点。$ sudo mkdir /mnt/initrd4、将这个磁盘镜像文件挂载到/mnt/initrd下。注意这里的initrd.img不要和ubuntu根目录下的initrd.img弄混了,同时initrd.im

54、g不能存放在rootfs目录中。$ sudo mount -t ext2 -o loop initrd.img /mnt/initrd5、将我们的文件系统复制到initrd.img中将测试好的文件系统里的内容全部拷贝到 /mnt/initrd目录下面。$ sudo cp /source/rootfs/* /mnt/initrd a6、卸载initrd$ sudo umount /mnt/initrd7、压缩initrd.img为initrd.img.gz并拷贝到/tftpboot下$ gzip -best -c initrd.img initrd.img.gz$ cp initrd.img.g

55、z /tftpboot8、配置内核支持RAMDISK,制作完 initrd.img.gz后,需要配置内核支持RAMDISK作为启动文件系统。Device DriversSCSI device support - SCSI disk supportBlock devices -RAM block device support (1)Default number of RAM disks (8192) Default RAM disk size (kbytes) (修改为8M) General setup -* Initial RAM filesystem and RAM disk (initra

56、mfs/initrd) support重新编译内核,复制到/tftpboot。结 语现代化的生活离不开火电的安全使用,各小区也出现很多的危险,包括入室盗窃,家用电器发生火灾,等等,所以智能安防监控系统的出现很好的帮助了人们对自己财产的保护,对家庭安全的保护。我这次毕业设计的系统以s5pc100芯片为核心,cortex-a8开发板为基础模拟家庭安防的一个毕业设计,使用了ubuntu系统,交叉编译器,用beep来模拟报警器,led模拟报警灯,adc模拟室内温度的变化,gprs模块为收发短信终端,在这一套的基础上,我主要负责u-boot移植,内核移植,文件系统移植,gprs模块代码,led驱动代码,

57、beep驱动代码,adc驱动代码以及整体测试代码的编写,最终实现监控机的两个部分:防盗系统和火警系统。防盗系统是利用红外传感器实时检测现场的安全情况,在异常情况下启动报警器和灯、启动GPRS系统发送短信到指定的号码。火警系统采用温度传感器通过A/D转换来采集温度,当现场温度高于预设定的温度值时,系统会自动响铃并发送短信到指定号码。通过本次毕业设计,我学到了许多课本上学不到的知识,将自己学到的理论知识与实际相结合。但由于是对嵌入式系统的研究,在整个过程中也存不少问题,尤其是代码优化、解决bug,但解决bug之后那种成功的喜悦感也是我所期待的。参考文献1 韦东山.嵌入式开发应用手册.人民邮电出版社,2008:8-42 田泽. 嵌入式系统开发与应用教程. 北京航空航天大学出版社,2007:22-353 林晓飞. 嵌入式Linux应用开发与实例教程.清华大学出版社,2007.11-14 曾宏安.嵌入式linuxC编程.电子工业出版

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

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!