首页 基于嵌入式Linux2_4_18的CS8900A网卡驱动的实现

基于嵌入式Linux2_4_18的CS8900A网卡驱动的实现

举报
开通vip

基于嵌入式Linux2_4_18的CS8900A网卡驱动的实现基于嵌入式Linux2_4_18的CS8900A网卡驱动的实现 网卡驱动的实现 李会艳 胡荣强, 武汉 武汉理工大学 自动化学院湖北 ( , 430070) 摘 要 介 绍 了 基 于 嵌 入 式 的 网 卡 驱 动 的 实 现 方 法 通 过 将 以 太 网 器 件:Linux2.4.18 CS8900A 。 连接到嵌入式微处理器 的总线上扩展网络接口根据电路原理图设置寄存器CS8900A S3C2410X , , 和 使网卡工作在存储器模式编写中断函数及相关的驱动代码通过内核配 BWSCON BANKC...

基于嵌入式Linux2_4_18的CS8900A网卡驱动的实现
基于嵌入式Linux2_4_18的CS8900A网卡驱动的实现 网卡驱动的实现 李会艳 胡荣强, 武汉 武汉理工大学 自动化学院湖北 ( , 430070) 摘 要 介 绍 了 基 于 嵌 入 式 的 网 卡 驱 动 的 实 现 方 法 通 过 将 以 太 网 器 件:Linux2.4.18 CS8900A 。 连接到嵌入式微处理器 的总线上扩展网络接口根据电路原理图设置寄存器CS8900A S3C2410X , , 和 使网卡工作在存储器模式编写中断函数及相关的驱动代码通过内核配 BWSCON BANKCON3 ,。置将网卡驱动程序以静态的方式编译进内核 中生成映像文件并移植到开发板上网卡 Linux2.4.18 ,, 便驱动成功CS8900A . 词驱动虚拟地址关 键内核: CS8900A ; ; S3C2410X; ; 中图分类号文献标识码文章编号:TP316 : A : 1006- 6977(2007)12- 0058- 04 Realization of CS8900A dr ive based on embedded Linux2.4.18 LI Hui- yan, HU Rong- qiang (School of Automation, Wuhan University of Technology, Wuhan 430070, China) Abstr act : Realization of CS8900A netcard drive based on embedded Linux2.4.18 is introduced.Con- necting the internet chip CS8900A to the bus of the embedded microcomputer S3C2410X is to expand network interface.According to electric circuit principle diagram, netcard can be enable to work in memory mode by setting registers BWSCON and BANKCON3,interruption function and related drive code are programmed.The netcard drive programm is compiled to the kernel by the way of static state. The kernel was made to get an image file which can be transplanted to the development board.Netcard CS8900A can be drived successfully at last. Key wor ds: CS8900A; driver; S3C2410X; virtual address; kernel 方法实现第一种方法是采用带有以太网接口的嵌。 引言1 入式处理器这种方法要求嵌入式处理器有通用的 。 网络接口通常这种处理器是面向网络应用而设计 , 近年来获得了突飞猛进的发展, Internet , 而嵌的通过内部总线实现处理器和网络数据交换第 , ; 入式系统接入 后将使得远程监测远程维Internet 、 二种方法是采用嵌入式微处理器连接网卡的结构。 护变得非常容易因此嵌入式系统的网络也非常重 , 这种方法对嵌入式处理器没有特殊要求只要把以 , 要嵌入式系统实现 接入的前提条件是系 。Internet 太网器件挂接到嵌入式处理器的总线上即可后者 。统的软件中有 协议 离婚协议模板下载合伙人协议 下载渠道分销协议免费下载敬业协议下载授课协议下载 支持内核提供了 TCP/IP , Linux 通用性强不受处理器限制但是处理器和网络的 , , , 包括对 在内的多种协议的支持从而使得网 TCP/IP , 数据交换是由外部总线实现的。 络设备的驱动更加方便。 本 系 统 设 计 参 考 了 开 发 板 采 用SBC2410X , 网卡驱动的硬件实现2 微处理器由于该处理器没有通用的网络S3C2410X , 在嵌入式系统中增加以 太网接口通 常由两种 接口因此采用第二种方法增加以太网接口以太网,。 基于嵌入式 的 网卡驱动的实现Linux2.4.18 CS8900A - 59- 参考板 的硬件设计进行相应的内核代控 制 器 采 用 适 用 于 嵌 入 式 设 备 并 且 成 本 低 的(SBC- 2410X) 器件该器件使用灵活其物理层接口数 码修改这样内核就能在开发板上工作但是此时网 CS8900A 。,、,。 卡并不工作由于采用 需要添加相应地驱 据传输模式和工作模式等均可根据需要动态调整,CS8900A, 。 动程序下载针对 内核的网卡驱动程序 。Linux 2.4 通过设置内部寄存器来适应不同环境有 。CS8900A 将该程序放在 内核的 目 cs8900a.c,Linux drivers/net 两种工作模式存储器模式和 模式其中在存储: I/O 。 录下并修改 配置文件即就是运行 , Config.in , make 命 令 时 出 现 的 菜 单 为 了 支 持 网 卡 menuconfig 。 对任何寄存器都可直器模式下编程操作较为简单, 添加代码如下CS8900A,: 接操作但需要多条地址总线和网卡相连而 模,。I/O dep_tristate ‘CS8900A support ‘CONFIG_CS8900A $CON- 式较复杂在此模式下对任何寄存器的操作均要通, FIG_ISA 过 端口 的写入或读出而硬件实现比较方便I/O 0 , , 然后配置内核内核支持 种不同的配置方法 ,4 ,而且 模式也 是 器 件 的 默 认 模 式 本 系 统 采 用I/O 。 在字符终端下使用 打开配置界面make menuconfig , 的 存 储 器 工 作 模 式 以 太 网 控 制 器 与CS8900A , 将 选择 保存退出后 CS8900A_support y , autoconf.h 文件中就自动生成了一个宏定义:#define CONFIG_ 处理器硬件连接图如图 所示S3C2410X 1 。 文件用于组织内核 该目录下的 CS8900A, Makefile 的各模块记录各模块间的相互联系和依赖关系根 ,。网卡驱动的软件设计3 据内核的配置需要将 的驱动程序以静态 CS8900A 在 中整个网络接口驱动程序的框Linux2.4.18 , 方式编译进内核因此需添加代码如下,: 架分为 层从上到下分别为协议接口层网络设备4 ,、 $obj- (CONFIG_CS8900A) += cs8900a.o 接口层提供实际功能的设备驱动功能层以及网络 、在驱动程序开发的过程中由于驱动程序操作 , 设备和网络媒介层这个框架在内核网络设备模块 。的都是设备的虚拟地址要使驱动程序对虚拟地址 , 的操作反映到正确的设备上需通过内存管理单元 , 中已经搭建好了在移植网络设备驱动程序到 ,Linux 将设备的虚拟地址映射到正确的物理地址从 MMU , 内核时就是根据上层网络设备接口层的定义和底, 而保证驱动程序对设备的虚拟地址的操作也就是 , 对其相应的物理地址的操作内存管理单元把内存层具体的硬件特性进行相应的代码修改及添加从。 ,, 而完成网卡的驱动。 首先下载 内核和基于 Linux 2.4.18.tar.gz ARM 的内核补丁文件在内核中打好相应补丁后即可 。, 得到内核 然后根据开发板Linux 2.4.18- rmk7- swl8, 图 与处理器 的硬件连接图1 CS8900A S3C2410X 年第 期 年 月国外电子元器件《》2007 12 2007 12 - 60- 为 空间后地址信号 的保持时间选择 以页为单位进行处理操作系统为每个正在运行的01; BANK3 6]。 程序建立并维护一张进程内存映射表当程序存取 。为 个时钟周期即 为 模式下 在 4 , Tcah[5:4]11; Page 一块内存时它就会把相应的虚拟地址传送给 ,MMU, 访问周期为 个时 钟周期即 为 页模 6 , Tacp[3:2]11; 而 会在内存映射表中查找该内存的实际位置 MMU 式的配置为 寄存器 因此对 PMC[1:0]。BANKCON3 即其物理地址由 处理器与 网 。S3C2410X CS8900A 的设置为: 卡 的 接 线 可 知 AEN?nGCS3、nCHIPSEL?nGCS3 , 网卡采用的是 的 片选信号该信 S3C2410X nGCS3 , rBANKCON3 = BANKCON_Tacs0 | BANKCON_Tcos4 | 号 对 应 的 地 址 空 间 的 起 始 地 址 是 0x1800 0000, BANKCON_Tacc14 | 为高电平时网卡处于处理器工作模式因 LADDR24 ,BANKCON_Tcoh1|B ANKCON_Tcah4 | BANKCON_Tacp6 | 此 网 卡 实 际 的 物 理 地 址 为 0x1800 0000 +0x0100 BANKCON_PMC1; 由于其中一些变量无定义因此需添加头文件,。 进入 目录创建新文件 并 include/asm/arch bitfield.h, 即 经过映射后 其虚拟地址为0000 0x1900 0000, ,添加代码如下: 只要与其他设备不其虚拟地址不固定0xf000 0000。, #ifndef BITFIELD_H 冲 突 即 可 因 此 修 改 目 录 下 的。 include/asm/arch/ 文件如下s3c2410.h : #define BITFIELD_H #define IRQ_CS8900 IRQ_EINT18 #ifndef ASSEMBLY #define VA_CS8900A_BASE (VA_IO_BASE2 +0x1800 #define UData(Data) ((unsigned long) (Data)) 0000) #else #define PA_CS8900A_BASE (0x19000000) #define UData(Data) (Data) 修改驱动程序 的网卡虚拟地址是将cs8900a.c #endif 改为 vCS8900A_BASE+0x300 VA_CS8900A_BASE+ #define Fld(Size, Shft) (((Size) << 16) + (Shft)) 0x300。 在 函 数 中对 寄 存 器 cs89x0_probel (), BWSCON #define FSize(Field) ((Field) >> 16) 和 的设置和原理图有关在微处理器 BANKCON3 。#define FShft(Field) ((Field) & 0x0000FFFF) 中 寄存器控制系统地址空间内 S3C2410X BWSCON #define FMsk(Field) (((UData (1) << FSize (Field)) - 1) << 的总线数据宽度以及是否等待由于网卡采用的是。 FShft (Field)) #define FAlnMsk(Field) ((UData (1) << FSize (Field)) - 1) #define F1stBit(Field) (UData (1) << FShft (Field)) 的 片 选 信 号 该 信 号 对 应 的 是S3C2410X nGCS3 , #define FClrBit(Data, Bit) (Data = (Data & ~(Bit))) 地址空间由硬件连接图可知空间BANK3 。, BANK3 采用处理器的总线使能信号即 并对 nBE, BANK3 #define FClrFld(Data, Field) (Data = (Data & ~FMsk 使 用 等 待 状 态 采 用 位 的 总 线 数 据 宽 度 即 , 16 , (Field))) 寄存器的 位应 BWSCON ST3[15]WS3[14]DW3[13:12]#define FInsrt (Value, Field) (UData (Value) << FShft 为 寄存器的设置为因此对 1101。BWSCON : (Field)) rBWSCON =(rBWSCON & ~(BWSCON_ST3 | BWSCON_ #define FExtr(Data, Field) ((UData (Data) >> FShft (Field)) WS3 | BWSCON_DW3)) | (BWSCON_ST3 | BWSCON_WS3 | & FAlnMsk (Field)) BWSCON_DW(3, BWSCON_DW_16)); #endif 寄存器控制位于 空间的总 BANKCON3 BANK3 该目录下 文件中添加代码如下s3c2410ASM.h : 线地址信号生效的时钟周期片选信号的保 持时 、 间访问周期等根据硬件连接图和开发要求在 、。, #include "bitfield.h" 信号生效前总线的地址信号无 需时间即 nGCS3 , , #define fBWSCON_ST(Nb)Fld(1,((Nb)*4)+3) 为 输出使能前片选信号的建立时间 Tacs[14:13]00; #define fBWSCON_WS(Nb) Fld(1,((Nb)*4)+2) 为 个时钟周期即 为 总线的访问周 4 ,Tcos[12:11]11; 期为 个时钟周期即 为 输出使能 14 ,Tacc[10:8]111; #define fBWSCON_DW(Nb) Fld(2,(Nb)*4) 后片选信号的保持时间为 个时钟周期即 1 ,Tcoh[7: #define fBWSCON_DW0 Fld(2,1) #define BWSCON_ST3 FMsk(fBWSCON_ST(3)) FMsk(fBWSCON_WS(3)) #define BWSCON_WS3 基于嵌入式 的 网卡驱动的实现Linux2.4.18 CS8900A - 61- #define BWSCON_DW3 FMsk(fBWSCON_DW(3)) shift = 4 * (real_irq - 8 * reg_ofs); if (irq < IRQ_EINT4) { #define BWSCON_DW_160x1 #define BWSCON_DW(x,y) FInsrt((y), fBWSCON_DW(x)) shift_value = (irq % 8) * EXTINT_OFFSET; #define BANKCON_Tacs0 FInsrt(0x0, Fld(2,13)) rEXTINT0 &= ~(EXTINT_MASK << shift_value); rEXTINT0 |= (edge << shift_value); #define BANKCON_Tcos4F Insrt(0x3, Fld(2,11)) ClearPending(irq); #define BANKCON_Tacc14 FInsrt(0x7, Fld(3,8)) } else { #define BANKCON_Tcoh1FInsrt(0x1, Fld(2,6) ) if (irq < IRQ_EINT8) { #define BANKCON_Tcah4FInsrt(0x3, Fld(2,4)) #define BANKCON_Tacp6FInsrt(0x3, Fld(2,2)) rEXTINT0 &= ~(EXTINT_MASK << shift); #define BANKCON_PMC1FInsrt(0x0, Fld(2,0)) rEXTINT0 |= (edge << shift); rEINTPND = (1 << shift); 由网卡与处理器的连接图可知当 的 ,CS8900A 由低电平变为高电平即上升沿触发中断在 ClearPending(IRQ_EINT4_7); SBHE ,。 } else if (irq < IRQ_EINT16) { 驱动程序 中调用函数 cs8900a.c set_external_irq(int rEXTINT1 &= ~(EXTINT_MASK << shift); IRQ_CS8900A, int EXT_RISING_EDGE, int GPI- 产生外部中断 此函数的定O_PULLUP_DIS)EINT18。 rEXTINT1 |= (edge << shift); 义和声明及其用到的变量需在内核中添加修改。 rEINTPND = (1 << shift); 文件添加代码为hardware.h , : ClearPending(IRQ_EINT8_23); } else { #define EXT_RISING_EDGE 4 rEXTINT2 &= ~(EXTINT_MASK << shift); 修改 文件添加代码为irq.h , : rEXTINT2 |= (edge << shift); extern int set_external_irq(int irq, int edge, int pullup); 修改 文件添加代码如下s3c2410ASM.h ,: rEINTPND = (1 << shift); #define GPIO_PULLUP_SHIFT ClearPending(IRQ_EINT8_23); 16 } #define GPIO_PULLUP_MASK 0x00ff0000 #define GPIO_PULLUP_DIS(1<>GPIO_PULLUP_SHIFT) restore_flags(flags); 修改 目录下的 文件添加头 include/asm/ irq.h , return 0; 文件如下: } #include EXPORT_SYMBOL(set_external_irq); 修改 目录下的 文 arch/arm/mach-s 3c2410/ irq.c 修改当前目录下的 文件将 文件Makefile , irq.o 件添加 的定义如下,set_external_irq(): 添加到 的文件列表中即可“export - objs: ”。 Int set_external_irq(int irq, int edge, int pullup) { 网卡驱动的实现4 unsigned long flags; 通过 编译内核生成 文件make bzImage zImage , int real_irq, reg_ofs, shift, shift_value; 然后通过串口烧写该映象文件到开发板上完毕后, if (((irq < IRQ_EINT0) && (irq > IRQ_EINT23)) || 用交叉网线将宿主机和开发板相连通过 , minicom ((irq > IRQ_EINT3) && (irq < IRQ_EINT4))) 终端显示正确表明网卡驱动成功, 。 return - EINVAL; real_irq = fixup_irq_num(irq); 结束语5 set_gpios(real_irq,pullup); 添加网卡驱动到 内核具有很重要Linux2.4.18 local_irq_save(flags); 的价值网卡正常运行后可以通过网卡下载根文件, reg_ofs = (real_irq / 8); 系统等速度快可靠性高随着网络向嵌入式系统 , 、。 年第 期 年 月国外电子元器件2007 12 2007 12 《》 - 62- 主题论文 ? 的转以太网的设计基于 RTL8150LUSB 张 毅江 敏 , 重庆邮电学院通信学院重庆 ( , , 400065) 摘要是 公司的一款 转快速以太网控制器与 规范 编程规范下载gsp规范下载钢格栅规范下载警徽规范下载建设厅规范下载 相兼容给出了: RTL8150L Realtek USB , USB1.1 。 基于 的宽带终端 的 转以太网功能的软硬件设计并给出了调试结果OMAP1621 RTL8150L USB , 。 关 键词主机转以太网: USB ; USB ; RTL8150L; OHCI 中图分类号文献标识码文章编号:TP393.03 : A : 1006- 6977(2007)12- 0062- 03 Design of USB to Ether net based on RTL8150L JIANG Min, ZHANG Yi (Communication School,Chongqing University of posts and telectrmunications,ChongQing 400065,China) Abstr act:RTL8150L is a controlling chip developed by REALTEK,which can rapidly switch from USB to Ethernet, and is compatible with USB 1.1 specifications. This paper shows the implementation proce- dure based on an OMAP 1621 broad band terminal, as well as the debugging result. Key wor ds: USB host; USB to Ethernet; RTL8150L; OHCI 网控制器与 规范相兼容它由 串行接, USB1.1 , SIE( 引言1 口 引 擎 控 制 器 内 存 管 理 单 元 ) 、MMU ( ) 、MAC 、 2通用串行总线是一种计算机外围串行通USB( ) 接口物理层接口等单 SRAM、EPROM , 10/100 Mb/s 信接口标准与常用的计算机接口相比它具有热 元模块组成支持 个端点其中端点 , , 。RTL8150 4 , : 0 插拔即插即用数据传输可靠扩展方便成本低 、、、、用来接收 主机端发送的控制命令完成设备的 USB , 等优点基于这些优点已成为当前计算机必 。, USB 控制和状态反馈对通过端点 可实现 , 0 RTL8150L 备接口之一广泛地应用于嵌入式产品中例如数 , , : 寄存器的读写端点 端点用来接收以太 ; 1( Bulk IN ) 码相机手机宽带数据终端等、、。 网数据包支持最大包为 字节如果某个以太网 , 64 。 包大于 字节将该包分成几个 字节 64 , RTL8150 64 简介2 RTL8150L 包主机通过比较某个 包是否小于 字节或 , USB 64 是 公司的 转快速以太RTL8150L Realteak USB 包的大小为 判断一个以太网包是否传输完成端0 ; """"""""""""""""""""""""""""""""""""""""""""" 发展远程监控更加容易如智能家具的远程监控孙纪坤张小全嵌入式 系统开发技术详, , , , .Linux [4] 给人们的生产生活带来了极大方便解基于 北京人民邮电出版社。 - ARM[M].: , 2006. [5] 王海燕李芙蓉基于 的 通信参考文献,.MC9328MX1 Socket : 于 明范书瑞曾祥烨嵌入式系统设计与 设计与实现国外电子元器件 [1], , .ARM9 [J]., 2006( 11) : 25- 29.开发教程北京电子工业出版社[M].: ,2006. 孙 琼嵌入式 应用程序开发详解北京[2] .Linux [M].: 作者简介李会艳女河北衡水人硕士研: (1983- ), , , 人民邮电出版社, 2006. 究生研究方向为嵌入式系统与信息处理收稿日, 。 孙天泽袁文菊嵌入式设计及 驱动开发指 [3] , .Linux 期:2007- 08- 02 南北京电子工业出版社[M].: ,2007. 咨询编号 :071218
本文档为【基于嵌入式Linux2_4_18的CS8900A网卡驱动的实现】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_003124
暂无简介~
格式:doc
大小:39KB
软件:Word
页数:0
分类:生活休闲
上传时间:2017-10-13
浏览量:15