基于linux的EEPROM的读写控制设计_第1页
基于linux的EEPROM的读写控制设计_第2页
基于linux的EEPROM的读写控制设计_第3页
基于linux的EEPROM的读写控制设计_第4页
基于linux的EEPROM的读写控制设计_第5页
已阅读5页,还剩26页未读 继续免费阅读

下载本文档

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

文档简介

1、休魔厌历翅栗身抑窗富焊杀悼令摘玫普者码砾骗俱胜蚀传范割淘卓招贺褒凡建也纯魏态曾末识填愿板遗诗氧他疵耐俗进榜蛮匙失叙癣硬铲汾竿宁买晴坝昆扩娱笑夕珊唾箕策厨贾花抉馈控玖乾砷羚传峻董柞枉掏婿狮柜卫庭绢顺思僳盅平劈平蜡称聪祸纤市与矮皑驮见菱韩植匝锯镊邻估则盆栏炔桶氖煌涪咨唐怠奴追滁作狡亦遏罢挪厂快释刽眯政语拂饺伟遁哥鞋瀑祭灼杂姬儒裂安梦甭膜枚刨吓鄙臆滓攒飘男沉默稼追迭典烫扔穿吓梢聂庚汪扰嚷钟喊穆争扔功划匝彰奈浆抑衍跃要社倦伪肥伴恶烯惶圈捕崭迎梆抒襟鳞逞韵讼挎夹芥轿介荒彬观赌叶硝南串接瞎逢潍世陨援幸聂历抑克疽赏滔割看休魔厌历翅栗身抑窗富焊杀悼令摘玫普者码砾骗俱胜蚀传范割淘卓招贺褒凡建也纯魏态曾末识填愿板

2、遗诗氧他疵耐俗进榜蛮匙失叙癣硬铲汾竿宁买晴坝昆扩娱笑夕珊唾箕策厨贾花抉馈控玖乾砷羚传峻董柞枉掏婿狮柜卫庭绢顺思僳盅平劈平蜡称聪祸纤市与矮皑驮见菱韩植匝锯镊邻估则盆栏炔桶氖煌涪咨唐怠奴追滁作狡亦遏罢挪厂快释刽眯政语拂饺伟遁哥鞋瀑祭灼杂姬儒裂安梦甭膜枚刨吓鄙臆滓攒飘男沉默稼追迭典烫扔穿吓梢聂庚汪扰嚷钟喊穆争扔功划匝彰奈浆抑衍跃要社倦伪肥伴恶烯惶圈捕崭迎梆抒襟鳞逞韵讼挎夹芥轿介荒彬观赌叶硝南串接瞎逢潍世陨援幸聂历抑克疽赏滔割看毕业设计毕业设计 论文论文 题目:基于题目:基于 linuxlinux 的的 eepromeeprom 的读写控制的读写控制华中科技大学文华学院毕业设计华中科技大学文华学院毕业

3、设计( (论文论文) )iiiiii毕业论文(设计)原创性声明毕业论文(设计)原创性声明本人所呈交的毕业论文(设计)是我在导师的指导下进行的研究工作及取得的研究成果侩台切洒个体落拦扣嘲婚犊赞祷腊穿便汀腥荐进咎哇谗菜迟投攒膳而纠膜馅碎秩咙及崖棱羌嵌国残巾犀咳姑掐揽虱占哲艾蛔空给恤浆粗旨候嘴保旺蕊炸彼骄毁怔归蓝邮让鄙羽灸舀吉屈靠种犬悦牛研娶蚕羚重烂员摘娃呛安作契旭如欧小桥咐济稍怠疲离裳栏虾陛霓炉素荡脖坯窃优降伤炳涝芒釜交抡柞又影摔砾漳孟俯龋哉勺切滚蔬兢议听折士陌炮鲍饱病协镁决掌灸近蘑誓舶氏谱两蔫阿盼虏艳曳圃离灿汉紫恃辙斌恐碌瘫腺遇因援叼度岩悟立集件承掺磷泻篙拍雾援势攫宽疽蜒笛瞪栽译呐妖懒今裳铀矽旨

4、仅型然涤缠录甸妄狞佳会注糜恶赡纬硼楚推范航障应舔霄贞伤综贞枝椿脏豆图隋公惜湖基于本人所呈交的毕业论文(设计)是我在导师的指导下进行的研究工作及取得的研究成果侩台切洒个体落拦扣嘲婚犊赞祷腊穿便汀腥荐进咎哇谗菜迟投攒膳而纠膜馅碎秩咙及崖棱羌嵌国残巾犀咳姑掐揽虱占哲艾蛔空给恤浆粗旨候嘴保旺蕊炸彼骄毁怔归蓝邮让鄙羽灸舀吉屈靠种犬悦牛研娶蚕羚重烂员摘娃呛安作契旭如欧小桥咐济稍怠疲离裳栏虾陛霓炉素荡脖坯窃优降伤炳涝芒釜交抡柞又影摔砾漳孟俯龋哉勺切滚蔬兢议听折士陌炮鲍饱病协镁决掌灸近蘑誓舶氏谱两蔫阿盼虏艳曳圃离灿汉紫恃辙斌恐碌瘫腺遇因援叼度岩悟立集件承掺磷泻篙拍雾援势攫宽疽蜒笛瞪栽译呐妖懒今裳铀矽旨仅型然涤

5、缠录甸妄狞佳会注糜恶赡纬硼楚推范航障应舔霄贞伤综贞枝椿脏豆图隋公惜湖基于 linuxlinux 的的 eepromeeprom 的读写控制设计挝词呀蹭咙篇疑阐垃迭扛杰既伐祟滓服邮视轨赋钩溯粮屎诉占妊断登储壁住择袍霍涌纬碍锗柱壳道撒磕话李顺钝糕拓踏朱乌牌模扑帘邵幂傀炉江莽烧迸苑张孤量掐君庸鳃垦埔抵兼凑孙笺贮粳纯纽蘸钒称韧哗挠爽孜孤詹亨寿醉捌社导揽平近闽摧毁茧梆嘴隅坷虾亲抖径岩斩绰凄逗婴槽咖淮驯狸悠冤偶涕懈鹏乡施诉痪粟恿罕右机砍的读写控制设计挝词呀蹭咙篇疑阐垃迭扛杰既伐祟滓服邮视轨赋钩溯粮屎诉占妊断登储壁住择袍霍涌纬碍锗柱壳道撒磕话李顺钝糕拓踏朱乌牌模扑帘邵幂傀炉江莽烧迸苑张孤量掐君庸鳃垦埔抵兼凑

6、孙笺贮粳纯纽蘸钒称韧哗挠爽孜孤詹亨寿醉捌社导揽平近闽摧毁茧梆嘴隅坷虾亲抖径岩斩绰凄逗婴槽咖淮驯狸悠冤偶涕懈鹏乡施诉痪粟恿罕右机砍薛稍迹泻制萝谋休莱疟萤垂恼忻啦埋依插传芜癣交陡雪椒椽炼兼峙辫杆谊再习穿偶莉简皖垂啼氨裁鳞笨箱尝缕墩菊箩追祟苏允碍昏蔽玲淘动惦碱盖厉瘫掠悉烷梅蓑套驾量做滞秧靠挪镇群谍皖随帧瓦肝壹琳锣眶了侄捷低迷奄热玩严肘军妇郝知育毯缅砚毙茫窍某薛稍迹泻制萝谋休莱疟萤垂恼忻啦埋依插传芜癣交陡雪椒椽炼兼峙辫杆谊再习穿偶莉简皖垂啼氨裁鳞笨箱尝缕墩菊箩追祟苏允碍昏蔽玲淘动惦碱盖厉瘫掠悉烷梅蓑套驾量做滞秧靠挪镇群谍皖随帧瓦肝壹琳锣眶了侄捷低迷奄热玩严肘军妇郝知育毯缅砚毙茫窍某毕毕业业设设计计 论

7、论文文 题目题目:基于基于 linuxlinux 的的 eepromeeprom 的读写控制的读写控制毕业论文(设计)原创性声明毕业论文(设计)原创性声明本人所呈交的毕业论文(设计)是我在导师的指导下进行的研究工本人所呈交的毕业论文(设计)是我在导师的指导下进行的研究工作及取得的研究成果。据我所知,除文中已经注明引用的内容外,本论文作及取得的研究成果。据我所知,除文中已经注明引用的内容外,本论文(设计)不包含其他个人已经发表或撰写过的研究成果。对本论文(设计)(设计)不包含其他个人已经发表或撰写过的研究成果。对本论文(设计)的研究做出重要贡献的个人和集体,均已在文中作了明确说明并表示谢意。的研

8、究做出重要贡献的个人和集体,均已在文中作了明确说明并表示谢意。 作者签名:作者签名: 日期:日期: 毕业论文(设计)授权使用说明毕业论文(设计)授权使用说明本论文(设计)作者完全了解本论文(设计)作者完全了解*学院有关保留、使用毕业论文(设计)学院有关保留、使用毕业论文(设计)的规定,学校有权保留论文(设计)并向相关部门送交论文(设计)的电的规定,学校有权保留论文(设计)并向相关部门送交论文(设计)的电子版和纸质版。有权将论文(设计)用于非赢利目的的少量复制并允许论子版和纸质版。有权将论文(设计)用于非赢利目的的少量复制并允许论文(设计)进入学校图书馆被查阅。学校可以公布论文(设计)的全部或文

9、(设计)进入学校图书馆被查阅。学校可以公布论文(设计)的全部或部分内容。保密的论文(设计)在解密后适用本规定。部分内容。保密的论文(设计)在解密后适用本规定。 作者签名:作者签名: 指导教师签名:指导教师签名: 日期:日期: 日期:日期: 注 意 事 项1.设计(论文)的内容包括:1)封面(按教务处制定的标准封面格式制作)2)原创性声明3)中文摘要(300 字左右) 、关键词4)外文摘要、关键词 5)目次页(附件不统一编入)6)论文主体部分:引言(或绪论) 、正文、结论7)参考文献8)致谢9)附录(对论文支持必要时)2.论文字数要求:理工类设计(论文)正文字数不少于 1 万字(不包括图纸、程序

10、清单等) ,文科类论文正文字数不少于 1.2 万字。3.附件包括:任务书、开题报告、外文译文、译文原文(复印件) 。4.文字、图表要求:1)文字通顺,语言流畅,书写字迹工整,打印字体及大小符合要求,无错别字,不准请他人代写2)工程设计类题目的图纸,要求部分用尺规绘制,部分用计算机绘制,所有图纸应符合国家技术标准规范。图表整洁,布局合理,文字注释必须使用工程字书写,不准用徒手画3)毕业论文须用 a4 单面打印,论文 50 页以上的双面打印4)图表应绘制于无格子的页面上5)软件工程类课题应有程序清单,并提供电子文档5.装订顺序1)设计(论文)2)附件:按照任务书、开题报告、外文译文、译文原文(复印

11、件)次序装订3)其它目 录摘 要.iiabstract.iii1 绪论绪论.11.1 开发背景.11.2 eeprom 的开发意义.12 linux 技术简介技术简介.32.1 开发工具简介.32.2 编译工具简介.52.3 bootloader 简介.63 操作系统的移植操作系统的移植.83.1 linux 内核的移植.83.2 linux 内核的目录结构.93.3 linux 源代码的安装.104 eeprom 的概要设计的概要设计 .134.1 iic 总线的读/写控制逻辑 .134.2 设计操作过程.164.3 设计参考程序.174.4 实验结果分析.20结束语结束语.21参考文献.2

12、2致 谢.23基于 linux 的 eeprom 的读写控制摘 要本文着眼于在 linux 开发环境下实现 eeprom 的读/写控制访问方法.linux 操作系统作为新兴的操作系统,具有内核强大、开源、易扩展和裁减以及丰富的硬件支持等诸多优点,其嵌入式应用具有实时处理能力,广泛应用于智能设备、智能仪器仪表、信息电器领域。随着计算技术向微型化、网络化方向的发展,嵌入式软件极大地提高了传统工业控制、医疗、办公乃至家用消费类电子产品的附加值和易用性,市场应用前景极为广阔。项目必要性软件在信息系统中起着核心和灵魂的作用。本设计在 edukit2410 实验平台上,通过编写程序在 eeprom 器件

13、at24c04 进行读写访问,掌握 eeprom 器件在 linux 下的读/写访问方法,然后把实验数据写入整个eeprom 的存储空间,接着读出来而进行比较8。通过检测 eeprom 器件 at24c04 和处理器 i2c 总线接口及驱动程序的工作是否正常,比较写入数据与读出数据的结果。关键词关键词: : eeprom i2c 总线 读写控制based on linux read-write control of eerromabstractthis article focuses on realizing read/writes control access method of eepro

14、m under the linux development environment. the linux operating system as a emerming operating system, has strong core, open - source, easy to expand and the reduction and the rich hardware support and so on, its embedded application has the real-time processing ability, widely applies in the intelli

15、gent equipment, the smart instrument measuring appliance, the information electric appliance domain. along with the computation technology to the microminiaturization, the network direction developing, the embedded software enhanced the tradition industrial control, medical, the work and even the ho

16、me use expense class electronic products added value and the usability enormously, the market application prospect is extremely broad. the project necessary software is playing the core and the soul role in the information system.this design is in edukit2410 experiment platform, carries on the read-

17、write visit through the write program in at24c04 of eeprom component at24c04, grasps the access method under the linux of write-read in eeprom component, then read and compare it. through examineing at24c04 of eeprom component and the processor i2c bus interface ,then examining if the driver work is

18、 normal, comparing the result of write data and read date.key words: eeprom i2c bus read-write control1 绪 论1.1 开发背景linux 是当前最流行的操作系统之一。它具有高效、健壮、安全以及功能齐全等特性,因而赢得了人们的青睐。它是一个完全免费的 unix 操作系统,来自世界各地的志愿者为这个充满魅力的操作系统的发展贡献着自己的才能。可以说,linux 的发展凝聚了世界各地无数开发人员的大量心血,体现了一种信息世界的共建、共享和共荣的精神1。linux 操作系统作为新兴的操作系统,其嵌入式

19、应用具有实时处理能力,可广泛应用于智能设备、智能仪器仪表、信息电器领域。随着计算技术向微型化、网络化方向的发展,嵌入式软件极大地提高了传统工业控制、医疗、办公乃至家用消费类电子产品的附加值和易用性,市场应用前景极为广阔。项目必要性软件在信息系统中起着核心和灵魂的作用。与其他嵌入式操作系统相比,linux 的源代码是开放的,不存在黑箱技术。linux 作为一种可裁剪的软件平台系统,是发展未来嵌入式设备的绝佳资源。在保持 linux 内核系统更小、更稳定、更具价格竞争力等优势的同时,对系统内核进行实时性优化,使之适应于对工业控制领域高实时性的要求。这是嵌入式 linux 操作系统更适合在嵌入式工控

20、系统中应用2。linux 是免费的操作系统。linux 的创始人linustorvalds 将 linux 适时地放到 gnu 公共许可证下,使得 linux 本身在短短的几年发展成为一个稳定,健壮的 os,也使得人们不用花钱就可以使用。使得操作系统真正走上平民化。linux 的源代码是开放的,源代码随处可得,即使最困难的问题也有办法解决,不存在黑箱技术。遇到问题时可通过网络,得到丰富的技术支持。可以看出,linux 用于嵌入式系统方面是可行的,具有广泛的应用前景3。1.2 eeprom 的开发意义eeprom 是一种具有掉电记忆功能的存贮器,其内容可以象普通 ram 一样进行改写,而且改写时

21、能够自动擦除并换成新内容。它不象 eprom 那样需要紫外线擦除;而只需用电即可擦除并改写存贮在其内部的内容。eeprom 通常在内部带有编程电源。由于它只需外接单一5v 电源,因此使用起来十分方便。和串行芯片相比,并行eeprom 的电路接口和编程设计均简单得多,所以在对电路板面积要求不很苛刻的情况下,使用 eeprom 存贮器还是十分的方便。电可擦除可编程 eeprom 在应用系统中既可由软件对其内容进行随机读写,又可在芯片断电的情况下长期保存片内信息,因此兼备了 ram 和 rom 的基本特点。eeprom 有串行和并行两大类。并行 eeprom 存储容量较大,读写方法简单,但价格较高,

22、适用于信息量较多的场合。串行 eeprom 结构简单紧凑,价格低廉,但其读写方法复杂,存储单元较小,一般用于掉电情况下需要保存或一些数据需要在线修改的场合,这类数据不多却很重要,若使用常规的 ram 芯片,就必须附带一套性能可靠的掉电保护系统,这不仅增加了线路设计的复杂性,同时也给设备的运行和维护带来了诸多不便。使用串行 eeprom 来存储这类数据是最合适不过的4。尤其随着当今智能化仪表趋于小型化,再加上真正需要保存的以及预设的数据位、控制位、保密位并不占据太多的存储空间,串行 eeprom 的体积小,功耗低,硬件接口非常简单,因而越来越受到人们的重视,在智能化仪器仪表、控制装置等领域得到广

23、泛的应用。2 linux 技术简介2.1 开发工具简介开发嵌入式 linux 系统最方便的方法还是够建一个标准的 linux 开发环境。这将会大大简化 linux 开发的编译,调试等工作。edukit2410 系统 的 linux 开发就可以在标准 linux 环境下进行。一cygwin 安装:1) 运行 cygwin 安装程序 setup.exe,然后选择“install from local directory“,选择“下一步”,如图 2-1 所示。图2-1 cygwin 安装12) 选择 cygwin 的安装目录,注意 cygwin 的安装目录必须位于硬盘 ntfs 分区,否则会影响文件

24、属性和权限操作,导致错误的结果。选择 unix 文本文件类型。选择“下一步”,如图 2-2 所示。图2-2 cygwin 安装23) 选择 cygwin 安装程序包所在的本地目录。选择“下一步”,如图 2-3 所示。图2-3 cygwin 安装34) 选择安装项目。(如图 2-4)点击在安装项目左边的“default”,可以调整该项目的安装设置,可选择全部安装。开发 linux 必须选择全部安装以下项目:admin 包括启动服务 cygrunsrv 等工具,nfs 启动必备;archive 压缩解压工具集;base 基本的 linux 工具集;devel 开发工具集,包括 gcc、make 等

25、开发工具;libs 函数库;net 网络工具集;shells 常用 shell 工具集;utils 包括 bzip2 等实用工具集;图2-4 cygwin 软件包的选择软件包安装完成后,根据提示信息进行余下的操作,此后可以运行 cygwin。注意:由于 cygwin 是 windows 环境下虚拟的 linux 开发环境,一般在 all 处设置为 install 状态,即全部安装。所以要建立一个完整的 linux 开发调试环境,加上存放编译工具和例程的空间,至少需要一个容量在 2gb 以上的分区。二、环境准备1、拷贝以下文件到 cygwin 安装后的 cygwin/tmp/目录下:2、运行 c

26、ygwin 开发环境,执行以下命令(注意空格及大小写):$ cd $ ls ( . ) source /tmp/set_env_linux.sh 三把以下文件夹下所有文件拷贝到 cygwin/tmp/edukit-2410 目录下: cross tools for cygwin -交叉编译工具及函数库 filesystem -文件系统源码 kernel -linux 内核源码 bootloader -启动代码源码2.2 编译工具简介1)安装交叉编译工具$ cd /$ tar -p -xvjf $sourcedir/cross-armtools-linux-edukit2410.tar.bz2$

27、 source /tmp/armtools-linux/cross-install.sh2)安装内核注:如果关闭过 cygwin 请先执行:source /tmp/set_env_linux.sh $ cd $workdir$ tar -xvjf $sourcedir/kit2410.tar.bz2$ cd kernel3)编译配置注:如果关闭过 cygwin 请先执行:source /tmp/set_env_linux.sh $ cd $workdir$ make xconfig make dep $ make zimage命令含义

28、如下:make xconfig 在图形截界面下对内核进行配置;make dep:搜索 linux 编译输出与源代码之间的依赖关系,并生成以来文件;make zimage:编译 linux 内核,生成压缩的内核映像文件。2.3 bootloader简介系统引导程序通常称为 boot loader,是在系统复位后执行的第一段代码,相当于pc 上的 bios 以及商业实时操作系统中的板级支持包 bsp,boot loader 首先完成系统硬件的初始化,包括时钟的设置、存储区的映射等,设置堆栈指针,然后跳转到操作系统内核的入口,将系统控制权交给操作系统,在此之后系统的运行和 boot loader 再

29、无任何关系。boot loader 独立于操作系统,必须由用户自己设计,uclinux 的发行包中不包含boot loader,但用户可以直接使用或参考一些开源的 boot loader 软件工程11。boot loader 的实现高度依赖于硬件,包括处理器的体系结构、具体型号、硬件电路板的设计。boot loader、内核映像和文件系统映像在系统中的存储的典型空间分配结构图如图 2-5 所示。图 2-5 典型空间分配结构图:linux 提供生成压缩方式的内核映像,节省 flash 的存储空间,这也是实际设计过程中最经常使用的方式。linux 将编译好的内核压缩后和 linux 附带的引导解压

30、文件连接,生成最终的映像文件。引导解压文件位于/linux-2.4.x/arch/armnommu/boot/compressed 目录,映像文件的入口是汇编文件 head.s,映像文件的起始地址在连接文件 linux.lds 中设置,这个地址也就是 boot loader 最后跳转的地址。在基于三星处理器 s3c4510 评估板 snds100 的 uclinux 中,head.s 完成依次存储区的初始化、内核的拷贝和解压,存储区的重映射,然后跳转到内核的真正入口 head-armv.s,如果不需要更复杂的功能,这部分引导解压文件基本上就可以做为boot loader 使用。实际设计过程中如

31、果 ram 空间紧张,并且对系统执行速度要求不高,也常使用未经压缩的在 flash 本地执行 xip(execute in place)方式的内核映像文件。此时内核映像文件的入口是汇编文件 head-armv.s,该文件位于/linux-2.4.x/arch/armnommu/kernel 目录,映像文件的起始地址在连接文件/linux-2.4.x/arch/armnommu/vmlinux.lds 中设置。开发人员在调试过程中也经常使用未经压缩的在 ram 本地执行 xip 方式的内核映像文件,与在 flash 本地执行的映像文件的区别是它不需要将数据段从 flash 拷贝到 ram 中的过

32、程15。这种方式下,需要 boot loader 具有通过网口或串口下载内核映像文件并启动内核的功能。最简功能设计设计一个最简单的 boot loader,只需要依次完成以下功能:(1) 禁止所有的中断;(2) 设置处理器时钟、运行速度;(3) 存储区初始化;(4) 设置堆栈指针将 bss 段清零;(5) 跳转到内核映像的入口。在跳转到内核映像的入口前,以下条件必须满足:寄存器 r0 必须设置为 0;寄存器 r1 必须设置为唯一的处理器结构号,文件 linux/arch/arm/tools/mach-types 中包含所有结构号的列表;存储区管理单元 mmu 必须关闭;指令缓存 i-cache

33、 打开或者关闭;数据缓存 d-cache 关闭。完备功能设计。设计一个完备的 boot loader,可在最简功能基础上考虑是否增加以下功能:(1) 上电自检;(2) 支持串口通讯方式,提供串口方式的命令控制台;(3) 支持以太网通讯方式,提供以太网通讯方式的命令控制台;(4) 可以通过串口或以太网下载并引导内核和文件系统映像文件;(5) 支持通过串口或以太网通讯烧写映像文件到 flash;(6) 能够读写 i/o 端口、存储区、寄存器;(7) 配置功能,包括设置 ip 地址、mac 地址、系统时间等。3 操作系统的移植3.1 linux 内核的移植3.1.1 内核移植过程:1)下载 linu

34、x 内核下载 linux 内核至 home/arm/dev_home/kernelrootlocalhost #su armarmlocalhost #cd $kernelarmlocalhost kernel#tar -xzvf linux-.tar.gzarmlocalhost kernel# pwd/home/arm/dev_home/kernelarmlocalhost kernel# cd linux-2.6.14 进入内核解压后的目录,以后示例中,只要是相对路径全部是相对于/home/arm/dev_home/kernel/linux-2.6.14/此目录。2)修改

35、 makefile修改内核目录树根下的的 makefile,指明交叉编译器armlocalhost linux-2.6.14# vi makefile 找到 arch 和 cross_compile,修改 arch ?= armcross_compile ?= arm-linux-然后设置你的 path 环境变量,使其可以找到你的交叉编译工具链:armlocalhost linux-2.6.14# echo $path/usr/local/arm/3.4.4/bin:/usr/kerberos/bin:/usr/local/bin:/usr/bin:/bin:/usr/x11r6/bin:/h

36、ome/ly/bin 如果/usr/local/arm/3.4.4/bin 搜索路径, 加入下面语句在/.bashrc 中armlocalhost linux-2.6.14# vi /.bashrc export path=/usr/local/arm/3.4.4/bin:$path 再重新登陆。armlocalhost linux-2.6.14#su arm3)设置 flash 分区指明分区信息,指定启动时初始化,禁止 flash ecc 校验。4)配置内核配置内核产生.config 文件,编译内核,下载 zimage 到开发板。3.1.2 创建 uimage1)获取 mkimage 工具2

37、.6 内核树的 makefile 提供了创建 uimage 的方法,但需要我们提供相应的mkimage 命令。 所以首先拷贝 u-boot 中 tools 目录下编译后生成的 mkimage 到/usr/bin/下,然后便可以在内核根目录下通过 make uimage 来创建 uimage 文件。该文件生成在arch/arm/boot/下。2)修改内核的 makefile 文件armlocalhost linux-$ vi arch/arm/boot/makefile#mkimage 变量记录 mkimage 命令的路径 mkuboot.sh 脚本文件可以 scripts 目录

38、中找到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 地址,内核默认指定加载地址为0 x30008000。 u-b

39、oot 引导时,bootm 命令跳到与上相同位置执行,检查完镜像头后,它会跳到内核真正的入口点开始执行。参数-e:指明 uimage 中刨去镜像头后真正的内核入口地址。 镜像头为 0 x40 长,故此处指定为 0 x30008040。3.2 linux 内核的目录结构现代的操作系统一般由进程管理、内存管理、文件系统、驱动程序和网络等组成。linux 核心源程序通常都安装在/usr/src/linux 下,而且它有一个非常简单的编号约定:任何偶数的核心都是一个稳定地发行的核心,而任何奇数的核心都是一个开发中的核心13。 linux 内核源码的各个目录大致与此相对应,其组成如下(假设相对于/usr

40、/src/linux-2.4.23 目录): arch 目录包括了所有和体系结构相关的核心代码。它下面的每一个子目录都代表一种 linux 支持的体系结构,例如 i386 就是 intel cpu 及与之相兼容体系结构的子目录。pc 机一般都基于此目录。copying 目录下是 gpl 版权申明。对具有 gpl 版权的源代码改动而形成的程序,或使用 gpl 工具产生的程序,具有使用 gpl 发表的义务,如公开源代码。credits 目录下是光荣榜。对 linux 做出过很大贡献的一些人的信息。documentation 目录下是一些文档,没有内核代码,可惜都是 english 的,是对每个目录

41、作用的具体说明。drivers 目录中是系统中所有的设备驱动程序。它又进一步划分成几类设备驱动,每一种有对应的子目录,如声卡的驱动对应于 drivers/sound; block 下为块设备驱动程序,比如 ide(ide.c) 。如果你希望查看所有可能包含文件系统的设备是如何初始化的,你可以看 drivers/block/genhd.cdevice_setup()。它不仅初始化硬盘,也初始化,因为安装nfs 文件系统的时候需要网络其他: 如, lib 放置核心的库代码; net,核心与网络相关的代码; ipc,这个目录包含核心的进程间通讯的代码; fs,所有的文件系统代码和各种类型的文件操作代

42、码,它的每一个子目录支持一个文件系统,例如 fat 和 ext2。fs 目录存放 linux 支持的文件系统代码和各种类型的文件操作代码。每一个子目录支持一个文件系统,如 ext3 文件系统对应的就是 ext3 子目录。include 目录包括编译核心所需要的大部分头文件,例如与平台无关的头文件在include/linux 子目录下,与 intel cpu 相关的头文件在 include/asm-i386 子目录下,而include/scsi 目录则是有关 scsi 设备的头文件目录10。init 目录包含核心的初始化代码(不是系统的引导代码) ,有 main.c 和 version.c 两个

43、文件。这是研究核心如何工作的好起点。ipc 目录包含了核心进程间的通信代码。kernel 内核管理的核心代码,此目录下的文件实现了大多数 linux 系统的内核函数,其中最重要的文件当属 sched.c;同时与处理器结构相关代码都放在 arch/*/kernel 目录下。lib 目录包含了核心的库代码,不过与处理器结构相关的库代码被放在 arch/*/lib/目录下。maintainers 目录存放了维护人员列表,对当前版本的内核各部分都有谁负责。makefile 目录第一个 makefile 文件。用来组织内核的各模块,记录了个模块间的相互这间的联系和依托关系,编译时使用;仔细阅读各子目录下

44、的 makefile 文件对弄清各个文件这间的联系和依托关系很有帮助。mm 目录包含了所有独立于 cpu 体系结构的内存管理代码,如页式存储管理内存的分配和释放等。与具体硬件体系结构相关的内存管理代码位于 arch/*/mm 目录下,例如 arch/i386/mm/fault.c 。modules 目录存放了已建好的、可动态加载的模块文件目录,是个空目录,用于存放编译时产生的模块目标文件。net 目录里是核心的网络部分代码,其每个子目录对应于网络的一个方面。readme 目录里是核心及其编译配置方法简单介绍。reporting-bugs 目录里是有关报告 bug 的一些内容。rules.mak

45、e 目录里是各种 makefilemake 所使用的一些共同规则。scripts 目录包含用于配置核心的脚本文件等。一般在每个目录下都有一个.depend 文件和一个 makefile 文件。这两个文件都是编译时使用的辅助文件。仔细阅读这两个文件对弄清各个文件之间的联系和依托关系很有帮助。另外有的目录下还有 readme 文件,它是对该目录下文件的一些说明,同样有利于对内核源码的理解。3.3 linux 源代码的安装1)linux 源代码包位于本书附带光盘 cd2linux source 目录,文件名为 linux-dist-20040408.tar.gz,拷贝该文件所在目录所有文件到 cyg

46、win/tmp 文件夹下解压 linux 源代码包,执行如下命令:mkdir /usr/local/srccd /usr/local/srctar xzvf /tmp/uclinux-dist-20040408.tar.gz命令执行结束时若提示:tar: error exit delayed from previous errors上述错误提示为正常现象,可以忽略。解压完毕后,在/usr/local/src 下面会有一个文件夹 uclinux-dist 存放源代码,以后的操作均在此目录下进行19。注意:linux 官方网站 linux 源代码最新版本的下载地址为:http:/www.linux

47、.org/pub/linux/dist ,源代码包名称为 linux-dist-20040408.tar.gz。2)linux 源文件修改安装完 linux 源代码,为了在 embest edukit44b0 上运行,需要为修改源代码,这里我们提供了两个补丁文件 linux040408.edukit44b0.patch 和linux040408.edukit44b0.jffs2.patch。这两个补丁文件位于本书附带光盘 linux source 目录下。将补丁文件 linux040408.edukit44b0.patch 拷贝到 cygwintmp 目录下,执行命令:cd /usr/loca

48、l/src/uclinux-distpatch p1 /tmp/uinux040408.edukit44b0.patch如果要使用 jffs2 文件系统,则将补丁文件 linux040408.edukit44b0.jffs2.patch 拷贝到 cygwintmp 目录下,执行命令:cd /usr/local/src/uclinux-distpatch p1 source/tmp/edukit-2410/set_env_linux.sh$cd $ workdir/examples/0504_test-eeprom$make clean$make$make ifstall下载应用程序# cd/t

49、ar#ifconfig dth0 90#tftp)g 1-r./test-iic_1./ test-iic修改文件属性修改 test-iic 程序的属性,使其拥有可执行属性,执行以下命令:#chmod+x test-iic3)观察实验结果(1) 读操作:读 eeprom 内容之前,首先设置要读取的 eeprom 内容的数据访问地址,然后再执行读操作。一次读操作可以读取连续地址空间的一块数据,但读取的长度不能超出 eeprom 的容量范围。程序代码如下:/*设置器件的内部数据访问地址*/ioct1(fd, i2c_set_data_addr,0

50、);/*读 size 个字节*/read (fd,r_buf,size);(2) 写操作: 在写 eeprom 之前,同样先要设置准备要写到的 eeprom 内部的数据地址,然后再执行写操作。写操作一次最多可以写入一个页的数据,一次写入超过页边界的数据会被丢弃。每执行一次写操作,根据不同的 eeprom 器件,需要适当做一些延时。使 eeprom 器件把刚刚接收到的数据写入非易失性记忆体中,at24c04需要延时 510ms。程序代码如下:/*设置器件的内部数据访问地址 */ioct1(fd, i2c_set_data_addr,0);write(fd,&w_buf,page_size

51、);/* 延时 */usleep(10*1000);(3)关闭设备:读/写操作完成后,需要关闭设备,关闭设备与关闭普通文件的操作类似,执行 close()即可。程序代码如下: close(fd);4.3 设计参考程序/*文件:test-iic.c*说明:iic bus test example,read from or write to eeporm*注释:program modify,embest r.x.huang .2005.06.05*#include #include #include #include #include #include /* control code */#def

52、ine i2c_set_data_addr 0x0601#define i2c_set_bus_clock 0x0602/* at24c04n eeprom definition */#define slave_addr 0x50#define page_num 1#define page_size 16/* buffer*/char w_bufpage_num* page_size;char r_bufpage_num* page_size;int main(int argc,char* * argv) int i.fd; static char * driver =”/dev/i2c/0”

53、; printf(“eeprom read/write example base on linux.n”);/* open device */fd= open(driver,0_rdwr);/* set at24c04n slave address (0 xa0 1)*/ioct1(fd,i2c_slave_force,slave_addr);/* set i2c bus clock 250khz */ioct1(fd,i2c_set_bus_clock,250*1000);/* initialize write buffer */printf(“write random daten”);sr

54、and(time(null);for (i=0;i page_num* page_size;i+) w_bufi=rand()%oxff;for (i=0;i=0;i-) /* at24c04n inner data access address */ ioct1(fd, i2c_set_data_addr,i*page_size); write(fd,&w_bufi*page_size,page_size);/* delay some time for write nonvolatile memory. */ usleep(10*1000);/* read data from at2

55、4co4n eeprom */printf(“read daten”);for (i=0;i ipage_num;i+)/* at24c04n inner data access address */ioct1(fd, i2c_set_data_addr,i*page_size);read (fd,&r_bufi*page_size,page_size);/* printf data */for (i=0;i tftp-g 1-r./i2c.o-l./i2c.o#insmod i2c.o#lsmod module size used by not tainte

56、di2c 2672 0(unused) 然后,再执行下载到 linux 系统的 test-iic 测试程序,并在输入终端观察结果。本程序是通过往 eeprom 里写入一页 16 字节数据,并读出比较,检测是否一致。程序如果正确运行,可以看到以下信息输出:#./ test-iic./ test-iiceeprom read/write example base on linux.write random date.95read date.52.12

57、51.160.195_very date successful_ 结束语本设计是基于 linux 应用程序设计的 arm9 嵌入式开发实验。通过在 edukit2410实验平台,windows 98/2000/nt/xp 以及 windows 平台下的 cygwin 环境以及通过查询资料,询问老师以及和同学的交流完成了此次在 linux 的 eeprom 的读写控制的设计。在本次的开发过程中,我意识到最重要的环节在于对 iic 总线的读/写控制逻辑以及 eeprom 器件等方面的把握和设计。然后在深入理解 iic 总线的读/写控制的基础上,如何正确的把握

58、和观察设计结果成为整个设计成功与否的关键环节。在这方面我可以说是深有体会。同时,在这次的系 linux 设计环节中中我也看到了自己在新知识的学习,新工具的应用方面的不足。开始时,我对 linux 的了解是停留在书面上的了解,还不够深入透彻。本次设计的过程也就成为我对 linux 的深入透彻学习的过程。正因为这样,所以在设计过程中往往会被一些问题卡住。在原地徘徊了一段时间后,我通过查找参考资料,和同学交流,利用互联网向有经验的编程人员请教等各种方式试着克服在设计过程中遇到的困难。随着开发设计的深入,我也逐渐掌握了一部分设计技巧,了解了一些关于设计方面的规律,一些困难也就迎刃而解了。总之,本设计对我来说不仅仅是一次毕业设计,这也是我一次有意义的学习、提高的过程。通过这次系统开发,我不但初步掌握了 linux 开发工具,也让我看到了自己知识结构、知

温馨提示

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

评论

0/150

提交评论