601卜NCE&TEOll《】LI)3YINFO日MATION工业技术基于S3C2410ARM的12C总线驱动架构的设计(潍坊学院计算机系杨德芳山东潍坊2elO41)摘要:在嵌人式系统的开发中,编写设备驱动程序是必须要做的工作。本文以S3C2410ARM为例,介绍Linux下IZC驱动架构的设计。本文包括IZC总线驱动程序的体系结构、IZC适配器驱动程序等。关键词:尸CIZC总线通信传输算法IZC适配器器中图分类号:TP3文献标识码:A注册设备文章编号:1672一3791(2007)06(b卜0034一01电路)12总线是一种芯片与芯片之间的互连总线,以Inetr一nItergatedCi代lut,内置集成3s被广泛的应用于嵌人式设备中,本文将基于C2410ARM处理器对IZC总线驱动程序进行设计。11℃总线驱动体系结构IZC设备在Lulux下可以作为一个字符设备,根据需要写一个字符设备驱动程序,实现IZC通信。IZC是一个标准设备,Linux专门为IZC定义了驱动程序接口标准,按照这个标准编写口,方便挂载在IZC驱动程序,使驱动程序有统一的接IZC总线上的其他驱动程序和应用程序的移植。Llnux标淮的IZC驱动程序在内核源码的drivers/iZc目录下,最主要的文件是iZc代刀正.c,(它负责管理总线设备驱动接口,包括IZC适配器和IZC从设备实现)的注册、删IZC设备除、通信等。LintIX标准的IZC驱动程序也是一个字符设备驱动程序,它通过件管理,包括IZC总线字符设备的打开、关iZcdev.c文闭、读/写、oictl和lseek等。IZC驱动程序为IZC设备定义4种结构:1七adaPter一PC总线适配器,对应的硬件是从嵌人式处理器总线上扩展出的12C控制器。管理cziIZC一ia控制器,实现gortihin一IZCIZC总线通信传输算法,总线数据的发送、接收等操作。1弋‘cllent一挂载在PC总线上的设备驱动程序。czi一river一用于管理IZC的设备驱动程序,对应于12C的设备接点。IZC与IZC总线相关硬件的关系图1,IZC核心驱动程序可以管理多个IZC总线适配器和多个IZC从设备,驱动程序允许每一个rZC从设备驱动能找到与它相连的IZC总线适配器,IZC适配器通过IZC主控设备节点访问应用层,这是一套Linux标准的IZC设备接口,FC从设备在注册时创建对应的IZC从设备节点。1用户应用麟’.1,友刁.v‘1犯从设备驭动程序节点一一一一一一一一一口些叠线__图IPC总线驱动程序及硬件的对应关系2s3C2410上的1℃总线驱动程序设计53C2410处理器片上集成TIZC控制器,34科技资讯SCIENCE&TEOHNOLOGYfNFORMA要给这个根据图2的IZCLin控制器添加一个uxIZC驱动程序体系结构,FC适配器驱动需程序,ts需要填充rUcticz_ad1弋a_adpter{aPter,定义如下:charnameI32];un及gledilltid,tsructiZc一algortihln*algo.vold*a190_data,vokl(*inc_ues)(structiZceeadapter*).礼沮(*dec一esu)(tsructl艳eadapter,),tni(*cil白戒J侧葵ster)(峨陇ti艳e‘ilent*).tni(划即t-u-几咫间班又tsnjdl弋c-汕川t*):votd*data。tsructsemaPhorel叱k,unsi卯ledintfla罗,structiZc_client*clientsllZC_CLIENT_MAXI,加tcllellt一count.Inttlmeout。nitretnes,#ifdofCONFIGesPROC一5tniniode;#ifLinux_VERSION_CODE
=IZCDEV_ADAPS_MAX){prmt(k‘1汽一dev.0二AdaPtern山nbertoolar罗?!?(%d)\\n”,1)。return一ENODEV。}印找fi(!iZcdentf(nva_adame,“喊嗯记,iJ){,,1),护司曰一ada诚11二adap。#ifdefCONFIG_DEVFS_FSde诚51溉1]=de讨5-reg治etr(dev企匕ahlldle,nameIZC_MAJoR,DEVFS_FL_DEFAULT,1,5_IFCHRIS_IRUSRI,Sse1WUSR,&iZcdevesfo娜,NULL),并endifmU比oroprila/ntk(\\n‘,代一”,adadev少,0:Reg>name治,ter)1d,‘5/0’sael阳{/*T拍sisactualyadetacheeadaPteracl!./#迁defCONFIG_DEyFS_FSdevfsesunreglster(dev众匕ic【11)。#endif代dev-ada喊11二NULL。#lfdefDEBUG物准IfPR,,ad仆anl(少>n”代一山到ema卜.o:Ads以re切11匈51即de:#endit}retUn】0}3结语上面代码中主要包括对护C主控设备节点的创建,如果使用设备文件系统,这种创建过程是动态可见的,用1弋一ddesadapte即每添加一个r函数),就会在IZC/dev/i适配器cz(调目录下创建一个IZC主控设备结点。【参考文献]1刘峥嵘.嵌人式L扣nux应用开发详界解,机械工业出版社,0204,7,]21周立功.ARM嵌人式Linux系统构件与驱动开发范例.北京航天航空大学出版社,2006,1.3[』刘森.嵌入式系统接口设计与Linux驱动程序开发.北京航天航空大学出版社,2(X巧,5.