理工类论文范文.docx

上传人:b****8 文档编号:11243056 上传时间:2023-02-26 格式:DOCX 页数:30 大小:173.26KB
下载 相关 举报
理工类论文范文.docx_第1页
第1页 / 共30页
理工类论文范文.docx_第2页
第2页 / 共30页
理工类论文范文.docx_第3页
第3页 / 共30页
理工类论文范文.docx_第4页
第4页 / 共30页
理工类论文范文.docx_第5页
第5页 / 共30页
点击查看更多>>
下载资源
资源描述

理工类论文范文.docx

《理工类论文范文.docx》由会员分享,可在线阅读,更多相关《理工类论文范文.docx(30页珍藏版)》请在冰豆网上搜索。

理工类论文范文.docx

理工类论文范文

华中科技大学文华学院

毕业设计[论文]

题目:

基于linux的EEPROM的读写控制

 

学生姓名:

学号:

学部(系):

专业年级:

指导教师:

职称或学位:

 

200年月日

目录

摘要II

AbstractIII

KeywordsIII

1前言1

1.1开发背景1

1.2EEPROM的开发意义1

2LINUX技术简介3

2.1开发工具简介3

2.2编译工具简介5

2.3bootloader简介6

3操作系统的移植8

3.1LINUX内核的移植8

3.2LINUX内核的目录结构9

3.3LINUX源代码的安装10

4EEPROM的概要设计13

4.1IIC总线的读/写控制逻辑13

4.2设计操作过程16

4.3设计参考程序17

4.4实验结果分析20

5设计总结21

参考文献22

致谢23

基于linux的EEPROM的读写控制

摘要

本文着眼于在linux开发环境下实现EEPROM的读/写控制访问方法.Linux操作系统作为新兴的操作系统,具有内核强大、开源、易扩展和裁减以及丰富的硬件支持等诸多优点,其嵌入式应用具有实时处理能力,广泛应用于智能设备、智能仪器仪表、信息电器领域。

随着计算技术向微型化、网络化方向的发展,嵌入式软件极大地提高了传统工业控制、医疗、办公乃至家用消费类电子产品的附加值和易用性,市场应用前景极为广阔。

项目必要性软件在信息系统中起着核心和灵魂的作用。

本设计在EduKit2410实验平台上,通过编写程序在EEPROM器件AT24C04进行读写访问,掌握EEPROM器件在LINUX下的读/写访问方法,然后把实验数据写入整个EEPROM的存储空间,接着读出来而进行比较[8]。

通过检测EEPROM器件AT24C04和处理器IIC总线接口及驱动程序的工作是否正常,比较写入数据与读出数据的结果。

关键字:

EEPROMIIC总线读写控制

BasedonLinuxRead-WritecontrolofEERROM

Abstract

Thisarticlefocusesonrealizingread/writescontrolaccessmethodofEEPROMunderthelinuxdevelopmentenvironment.TheLinuxoperatingsystemasaemermingoperatingsystem,hasstrongcore,open-source,easytoexpandandthereductionandtherichhardwaresupportandsoon,itsembeddedapplicationhasthereal-timeprocessingability,widelyappliesintheintelligentequipment,thesmartinstrumentmeasuringappliance,theinformationelectricappliancedomain.Alongwiththecomputationtechnologytothemicrominiaturization,thenetworkdirectiondeveloping,theembeddedsoftwareenhancedthetraditionindustrialcontrol,medical,theworkandeventhehomeuseexpenseclasselectronicproductsaddedvalueandtheusabilityenormously,themarketapplicationprospectisextremelybroad.Theprojectnecessarysoftwareisplayingthecoreandthesoulroleintheinformationsystem.

ThisdesignisinEduKit2410experimentplatform,carriesontheread-writevisitthroughthewriteprograminAT24C04ofEEPROMcomponentAT24C04,graspstheaccessmethodundertheLinuxofwrite-readinEEPROMcomponent,thenreadandcompareit.ThroughexamineingAT24C04ofEEPROMcomponentandtheprocessorIICbusinterface,thenexaminingifthedriverworkisnormal,comparingtheresultofwritedataandreaddate.

Keywords:

EEPROM;IICBus;Read-Writecontrol

1前言

1.1开发背景

linux是当前最流行的操作系统之一。

它具有高效、健壮、安全以及功能齐全等特性,因而赢得了人们的青睐。

它是一个完全免费的UNIX操作系统,来自世界各地的志愿者为这个充满魅力的操作系统的发展贡献着自己的才能。

可以说,LINUX的发展凝聚了世界各地无数开发人员的大量心血,体现了一种信息世界的共建、共享和共荣的精神。

Linux操作系统作为新兴的操作系统,其嵌入式应用具有实时处理能力,可广泛应用于智能设备、智能仪器仪表、信息电器领域。

随着计算技术向微型化、网络化方向的发展,嵌入式软件极大地提高了传统工业控制、医疗、办公乃至家用消费类电子产品的附加值和易用性,市场应用前景极为广阔。

项目必要性软件在信息系统中起着核心和灵魂的作用。

与其他嵌入式操作系统相比,Linux的源代码是开放的,不存在黑箱技术。

Linux作为一种可裁剪的软件平台系统,是发展未来嵌入式设备的绝佳资源。

在保持Linux内核系统更小、更稳定、更具价格竞争力等优势的同时,对系统内核进行实时性优化,使之适应于对工业控制领域高实时性的要求。

这是嵌入式linux操作系统更适合在嵌入式工控系统中应用。

Linux是免费的操作系统。

Linux的创始人LinusTorvalds将Linux适时地放到GNU公共许可证下,使得Linux本身在短短的几年发展成为一个稳定,健壮的OS,也使得人们不用花钱就可以使用。

使得操作系统真正走上平民化。

Linux的源代码是开放的,源代码随处可得,即使最困难的问题也有办法解决,不存在黑箱技术。

遇到问题时可通过网络,得到丰富的技术支持。

可以看出,Linux用于嵌入式系统方面是可行的,具有广泛的应用前景[3]。

1.2EEPROM的开发意义

EEPROM是一种具有掉电记忆功能的存贮器,其内容可以象普通RAM一样进行改写,而且改写时能够自动擦除并换成新内容。

它不象EPROM那样需要紫外线擦除;而只需用电即可擦除并改写存贮在其内部的内容。

EEPROM通常在内部带有编程电源。

由于它只需外接单一+5V电源,因此使用起来十分方便。

和串行芯片相比,并行EEPROM的电路接口和编程设计均简单得多,所以在对电路板面积要求不很苛刻的情况下,使用EEPROM存贮器还是十分的方便。

电可擦除可编程EEPROM在应用系统中既可由软件对其内容进行随机读写,又可在芯片断电的情况下长期保存片内信息,因此兼备了RAM和ROM的基本特点。

EEPROM有串行和并行两大类。

并行EEPROM存储容量较大,读写方法简单,但价格较高,适用于信息量较多的场合。

串行EEPROM结构简单紧凑,价格低廉,但其读写方法复杂,存储单元较小,一般用于掉电情况下需要保存或一些数据需要在线修改的场合,这类数据不多却很重要,若使用常规的RAM芯片,就必须附带一套性能可靠的掉电保护系统,这不仅增加了线路设计的复杂性,同时也给设备的运行和维护带来了诸多不便。

使用串行EEPROM来存储这类数据是最合适不过的[4]。

尤其随着当今智能化仪表趋于小型化,再加上真正需要保存的以及预设的数据位、控制位、保密位并不占据太多的存储空间,串行EEPROM的体积小,功耗低,硬件接口非常简单,因而越来越受到人们的重视,在智能化仪器仪表、控制装置等领域得到广泛的应用。

2LINUX技术简介

2.1开发工具简介

开发嵌入式linux系统最方便的方法还是够建一个标准的linux开发环境。

这将会大大简化linux开发的编译,调试等工作。

EduKit2410系统的linux开发就可以在标准linux环境下进行。

一.Cygwin安装:

1)运行Cygwin安装程序setup.exe,然后选择“InstallfromLocalDirectory“,选择“下一步”,如图2-1所示。

图2-1Cygwin安装1

2)选择Cygwin的安装目录,注意Cygwin的安装目录必须位于硬盘NTFS分区,否则会影响文件属性和权限操作,导致错误的结果。

选择Unix文本文件类型。

选择“下一步”,如图2-2所示。

图2-2Cygwin安装2

3)选择Cygwin安装程序包所在的本地目录。

选择“下一步”,如图2-3所示。

图2-3Cygwin安装3

4)选择安装项目。

(如图2-4)点击在安装项目左边的“default”,可以调整该项目的安装设置,可选择全部安装。

开发Linux必须选择全部安装以下项目:

Admin——包括启动服务cygrunsrv等工具,NFS启动必备;

Archive——压缩解压工具集;

Base——基本的Linux工具集;

Devel——开发工具集,包括gcc、make等开发工具;

Libs——函数库;

Net——网络工具集;

Shells——常用Shell工具集;

Utils——包括bzip2等实用工具集;

图2-4Cygwin软件包的选择

软件包安装完成后,根据提示信息进行余下的操作,此后可以运行Cygwin。

注意:

由于cygwin是Windows环境下虚拟的Linux开发环境,一般在ALL处设置为Install状态,即全

部安装。

所以要建立一个完整的Linux开发调试环境,加上存放编译工具和例程的空间,至少需要一个容量在2GB以上的分区。

二、环境准备

1、拷贝以下文件到Cygwin安装后的Cygwin/tmp/目录下:

2、运行Cygwin开发环境,执行以下命令(注意空格及大小写):

$>cd

$>ls

(...)<-应该能看到目录列表

$>source/tmp/set_env_linux.sh

三.把以下文件夹下所有文件拷贝到Cygwin/tmp/edukit-2410目录下:

CrossToolsforCygwin-交叉编译工具及函数库

Filesystem-文件系统源码

Kernel-Linux内核源码

Bootloader-启动代码源码

2.2编译工具简介

1)安装交叉编译工具

$>cd/

$>tar-P-xvjf$SOURCEDIR/cross-armtools-linux-edukit2410.tar.bz2

$>source/tmp/armtools-linux/cross-install.sh

2)安装内核

注:

如果关闭过Cygwin请先执行:

source/tmp/set_env_linux.sh

$>cd$WORKDIR

$>tar-xvjf$SOURCEDIR/linux-2.4.18-rmk7-pxa1-mz5.edukit2410.tar.bz2

$>cdkernel

3)编译配置

注:

如果关闭过Cygwin请先执行:

source/tmp/set_env_linux.sh

$>cd$WORKDIR

$>makexconfig

<选LoadConfigureFile...输入arch/arm/def-configs/edukit2410-nand

$>makedep

$>makezImage

命令含义如下:

makexconfig在图形截界面下对内核进行配置;

makedep:

搜索linux编译输出与源代码之间的依赖关系,并生成以来文件;

makezImage:

编译linux内核,生成压缩的内核映像文件。

2.3bootloader简介

系统引导程序通常称为BootLoader,是在系统复位后执行的第一段代码,相当于PC上的BIOS以及商业实时操作系统中的板级支持包BSP,BootLoader首先完成系统硬件的初始化,包括时钟的设置、存储区的映射等,设置堆栈指针,然后跳转到操作系统内核的入口,将系统控制权交给操作系统,在此之后系统的运行和BootLoader再无任何关系。

BootLoader独立于操作系统,必须由用户自己设计,uClinux的发行包中不包含BootLoader,但用户可以直接使用或参考一些开源的BootLoader软件工程[11]。

BootLoader的实现高度依赖于硬件,包括处理器的体系结构、具体型号、硬件电路板的设计。

BootLoader、内核映像和文件系统映像在系统中的存储的典型空间分配结构图如图2-5所示。

图2-5典型空间分配结构图:

linux提供生成压缩方式的内核映像,节省Flash的存储空间,这也是实际设计过程中最经常使用的方式。

linux将编译好的内核压缩后和linux附带的引导解压文件连接,生成最终的映像文件。

引导解压文件位于/linux-2.4.x/arch/armnommu/boot/compressed目录,映像文件的入口是汇编文件head.s,映像文件的起始地址在连接文件linux.lds中设置,这个地址也就是BootLoader最后跳转的地址。

在基于三星处理器S3C4510评估板SNDS100的uClinux中,head.s完成依次存储区的初始化、内核的拷贝和解压,存储区的重映射,然后跳转到内核的真正入口head-armv.s,如果不需要更复杂的功能,这部分引导解压文件基本上就可以做为BootLoader使用。

实际设计过程中如果RAM空间紧张,并且对系统执行速度要求不高,也常使用未经压缩的在Flash本地执行XIP(ExecuteInPlace)方式的内核映像文件。

此时内核映像文件的入口是汇编文件head-armv.s,该文件位于/linux-2.4.x/arch/armnommu/kernel目录,映像文件的起始地址在连接文件/linux-2.4.x/arch/armnommu/vmlinux.lds中设置。

开发人员在调试过程中也经常使用未经压缩的在Ram本地执行XIP方式的内核映像文件,与在Flash本地执行的映像文件的区别是它不需要将数据段从Flash拷贝到Ram中的过程[15]。

这种方式下,需要BootLoader具有通过网口或串口下载内核映像文件并启动内核的功能。

最简功能设计设计一个最简单的BootLoader,只需要依次完成以下功能:

(1)禁止所有的中断;

(2)设置处理器时钟、运行速度;

(3)存储区初始化;

(4)设置堆栈指针将bss段清零;

(5)跳转到内核映像的入口。

在跳转到内核映像的入口前,以下条件必须满足:

寄存器r0——必须设置为0;

寄存器r1——必须设置为唯一的处理器结构号,文件linux/arch/arm/tools/mach-types中包含所有结构号的列表;

存储区管理单元MMU——必须关闭;

指令缓存I-cache——打开或者关闭;

数据缓存D-cache——关闭。

完备功能设计。

设计一个完备的BootLoader,可在最简功能基础上考虑是否增加以下功能:

(1)上电自检;

(2)支持串口通讯方式,提供串口方式的命令控制台;

(3)支持以太网通讯方式,提供以太网通讯方式的命令控制台;

(4)可以通过串口或以太网下载并引导内核和文件系统映像文件;

(5)支持通过串口或以太网通讯烧写映像文件到Flash;

(6)能够读写I/O端口、存储区、寄存器;

(7)配置功能,包括设置IP地址、MAC地址、系统时间等。

3操作系统的移植

3.1LINUX内核的移植

3.1.1内核移植过程:

1)下载linux内核

下载linux内核至home/arm/dev_home/kernel

[root@localhost~]#suarm

[arm@localhost~]#cd$KERNEL

[arm@localhostkernel]#tar-xzvflinux-2.6.14.1.tar.gz

[arm@localhostkernel]#pwd

/home/arm/dev_home/kernel

[arm@localhostkernel]#cdlinux-2.6.14

进入内核解压后的目录,以后示例中,只要是相对路径全部是相对于

/home/arm/dev_home/kernel/linux-2.6.14/此目录。

2)修改Makefile

修改内核目录树根下的的Makefile,指明交叉编译器

[arm@localhostlinux-2.6.14]#viMakefile找到ARCH和CROSS_COMPILE,修改

ARCH?

=arm

CROSS_COMPILE?

=arm-linux-

然后设置你的PATH环境变量,使其可以找到你的交叉编译工具链:

[arm@localhostlinux-2.6.14]#echo$PATH

/usr/local/arm/3.4.4/bin:

/usr/kerberos/bin:

/usr/local/bin:

/usr/bin:

/bin:

/usr/X11R6/bin:

/home/ly/bin如果/usr/local/arm/3.4.4/bin搜索路径,加入下面语句在~/.bashrc中[arm@localhostlinux-2.6.14]#vi~/.bashrcexportPATH=/usr/local/arm/3.4.4/bin:

$PATH再重新登陆。

[arm@localhostlinux-2.6.14]#suarm

3)设置flash分区

指明分区信息,指定启动时初始化,禁止FlashECC校验。

4)配置内核

配置内核产生.config文件,编译内核,下载zImage到开发板。

3.1.2创建uImage

1)获取mkimage工具

2.6内核树的Makefile提供了创建uImage的方法,但需要我们提供相应的mkimage命令。

所以首先拷贝u-boot中tools目录下编译后生成的mkimage到/usr/bin/下,然后便可以在内核根目录下通过makeuImage来创建uImage文件。

该文件生成在arch/arm/boot/下。

2)修改内核的Makefile文件

[arm@localhostlinux-2.6.14.1]$viarch/arm/boot/Makefile

#MKIMAGE变量记录mkimage命令的路径mkuboot.sh脚本文件可以scripts目录中找到

MKIMAGE:

=$(srctree)/scripts/mkuboot.sh

#zreladdr-y与params_phys-y可以在arch/arm/mach-s3c2410/Makefile.boot当中找到

ZRELADDR:

=$(zreladdr-y)

PARAMS_PHYS:

=$(params_phys-y)

INITRD_PHYS:

=$(initrd_phys-y)

生成uImage的mkImage命令行,其中需要关注的就是-a与-e参数。

参数-a:

指明uImage加载的SDRAM地址,内核默认指定加载地址为0x30008000。

u-boot引导时,bootm命令跳到与上相同位置执行,检查完镜像头后,它会跳到内核真正的入口点开始执行。

参数-e:

指明uImage中刨去镜像头后真正的内核入口地址。

镜像头为0x40长,故此处指定为0x30008040。

3.2LINUX内核的目录结构

现代的操作系统一般由进程管理、内存管理、文件系统、驱动程序和网络等组成。

Linux核心源程序通常都安装在/usr/src/linux下,而且它有一个非常简单的编号约定:

任何偶数的核心都是一个稳定地发行的核心,而任何奇数的核心都是一个开发中的核心[13]。

 Linux内核源码的各个目录大致与此相对应,其组成如下(假设相对于/usr/src/Linux-2.4.23目录):

arch目录包括了所有和体系结构相关的核心代码。

它下面的每一个子目录都代表一种Linux支持的体系结构,例如i386就是Intel CPU及与之相兼容体系结构的子目录。

PC机一般都基于此目录。

COPYING目录下是GPL版权申明。

对具有GPL版权的源代码改动而形成的程序,或使用GPL工具产生的程序,具有使用GPL发表的义务,如公开源代码。

CREDITS目录下是光荣榜。

对Linux做出过很大贡献的一些人的信息。

documentation目录下是一些文档,没有内核代码,可惜都是English的,是对每个目录作用的具体说明。

drivers目录中是系统中所有的设备驱动程序。

它又进一步划分成几类设备驱动,每一种有对应的子目录,如声卡的驱动对应于drivers/sound; block 下为块设备驱动程序,比如ide(ide.c)。

如果你希望查看所有可能包含文件系统的设备是如何初始化的,你可以看drivers/block/genhd.cdevice_setup()。

它不仅初始化硬盘,也初始化,因为安装nfs文件系统的时候需要网络其他:

 如, Lib放置核心的库代码; Net,核心与网络相关的代码; Ipc,这个目录包含核心的进程间通讯的代码; Fs,所有的文件系统代码和各种类型的文件操作代码,它的每一个子目录支持一个文件系统,例如fat和ext2。

fs目录存放Linux支持的文件系统代码和各种类型的文件操作代码。

每一个子目录支持一个文件系统,如ext3文件系统对应的就是ext3子目录。

include目录包括编译核心所需要的大部分头文件,例如与平台无关的头文件在include/linux子目录下,与 intel cpu相关的头文件在include/asm-i386子目录下,而include/scsi目录则是有关scsi设备的头文件目录[10]。

init目录包含核心的初始化代码(不是系统的引导代码),有main.c和Version.c两个文件。

这是研究核心如何工作的好起点。

ipc目录包含了核心进程间的通信代码。

Kerne

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 经济学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1