/*分析DM9000收到一个数据包后,应该做何处理?...*/ /*当收到一个数据包后,DM9000就会触发一次发送中断,跳到中断处理函数处理*/ static irqreturn_t dm9000_interrupt(int irq, void *dev_id...dev_dbg(db->dev, "length error\n"); dev->stats.rx_length_errors++; } } /* Move data from DM9000
/*分析DM9000发生数据函数**/ /* * Hardware start transmission....->tx_pkt_cnt > 1) return NETDEV_TX_BUSY; spin_lock_irqsave(&db->lock, flags); /* Move data to DM9000...TX RAM */ //写数据到DM9000 Tx RAM中, 写地址自动增加 writeb(DM9000_MWCMD, db->io_addr); /*将skb中的数据写入寄存器,然后发送字节改变...io_addr); //存储以前的地址 /* Disable all interrupts */ //屏蔽所有中断 iow(db, DM9000_IMR, IMR_PAR); /* Got DM9000
裸奔程序和uCOS读取DM9000 ID的方法 在程序中调用下面这段代码可以读到DM9000的ID号: #define DM9000_BASE 0x20000300...) { U16 id; id = dm9000_ior(0x28) | (dm9000_ior(0x29)<<8); printf(“read dm9000...vid = 0x%x\n”, id); id = dm9000_ior(0x2a) | (dm9000_ior(0x2b)<<8); printf(“read dm9000...pid = 0x%x\n”, id); id = dm9000_ior(0x8) | (dm9000_ior(0x9)<<8); printf(“read dm9000...reg(0x09,0x08) = 0x%x\n”, id); printf(“dm9000 isr = 0x%x\n”, dm9000_ior(0xfe)); } 转载于:https
/*分析DM9000网卡驱动之初始化*/ /*找到DM9000.c 文件路径: linux/drivers/net下 找到模块的入口函数处 */ static int __init dm9000...获得DM9000的资源。包括DM9000的内存和中断资源 * 4. 地址映射 * 5. 初始化net_device的基地址和中断号 * 6. 重启DM9000设备 * 7....获取DM9000的版本 * 8....获得DM9000的资源。包括DM9000的内存和中断资源 * 4. 地址映射 * 5. 初始化net_device的基地址和中断号 * 6. 重启DM9000设备 * 7....获取DM9000的版本 * 8. 注册net_device结构 * 9. 硬件相关的初始化 * 10. 注册Dm9000中断 * 11. 启动发送队列 */
我这里用`Linux4.8.5源码自带的dm9000网卡为例来分析设备树的使用和移植。...dm9000驱动中就是使用下面这个函数通过设备节点中的"compatible"属性提取相应的信息,所以二者的字符串需要严格匹配。...在下面的这个dm9000的例子中,我们在相应的板级dts中找到了这样的代码块: 然后我们取内核源码中找到dm9000的网卡驱动,从中可以发现这个驱动是使用的设备树描述的设备信息(这不废话么,显然用设备树好处多多...0x2>" 最终的配置结果是: 勾选相应的选项将dm9000的驱动编译进内核。...ARM设备树专题 设备树(上) Linux ARM设备树专题 设备树(下)
我这里用Linux4.8.5源码自带的dm9000网卡为例来分析设备树的使用和移植。...dm9000驱动中就是使用下面这个函数通过设备节点中的"compatible"属性提取相应的信息,所以二者的字符串需要严格匹配。...在下面的这个dm9000的例子中,我们在相应的板级dts中找到了这样的代码块: 然后我们取内核源码中找到dm9000的网卡驱动,从中可以发现这个驱动是使用的设备树描述的设备信息(这不废话么,显然用设备树好处多多...比如dm9000网卡,就需要首先将示例信息挂接到我们的板级设备树上,并根据芯片手册和电路原理图将相应的属性进行配置,再配置相应的驱动。...最终的配置结果是: 勾选相应的选项将dm9000的驱动编译进内核。
以及更改函数名等 所以移植驱动的过程如下: 1)编译 2)解决错误 ->2.1)头文件不对:去掉或改名 ->2.2)宏不对:改名使用新宏 ->2.3)有些函数没有了:改名使用新函数 2.移植内核自带的DM9000...网卡驱动 machid=16a(mach-smdk2440.c)的内核下输入ifconfig,发现该板卡的内核不支持DM9000,如下图所示: ?...而在machid= 7cf(mach-mini2440.c)的内核下输入ifconfig,却能支持DM9000,如下图所示: ?..."平台驱动,而再注册个"dm9000"平台设备时,内核便会调用上面的probe函数来注册dm9000驱动. 2)然后再来看看mach-mini2440.c单板文件,是如何支持dm9000的,代码如下:...网卡驱动) 1)添加头文件 #include linux/dm9000.h> 2)添加全局变量: #define MACH_SMDK2440_DM9K_BASE (S3C2410_CS4 +
s3c2410_deconfig 命令在默认的配置上进行自动修改.config文件 (3)使用厂家提供的配置config_ok文件覆盖.config文件 所以,所有的配置结果都是配置.config文件 1 在linux...CONFIG_DM9000” -nwR (grep指令详细介绍入口链接http://www.cnblogs.com/lifexy/p/7009706.html) 可以看到4个地方在使用它 (1) include/linux.../autoconf.h中定义宏DM9000 include/linux/autoconf.h:129:#define CONFIG_DM9000 1 然后通过vi include/linux/autoconf.h...(2)在C源码里通过判断autoconf.h的宏DM9000 arch/arm/plat-s3c24xx/common-smdk.c:46:#if defined(CONFIG_DM9000) || defined.../drivers/net/ 子目录Makefile中添加DM9000文件到obj-$(CONFIG_DM9000)中,其中CONFIG_DM9000=y,所以编译进内核中. drivers/net/Makefile
Linux 网络设备驱动架构 驱动架构自上而下分为4层: 协议接口层 设备接口层 设备驱动功能层 网络设备与媒介层 协议接口层 协议接口层主要功能是给上层协议提供接收和发送的接口。...传递的数据被描述为套接字缓冲区,用struct sk_buff结构描述,该结构体定义位于include/linux/skbuff.h中,用于在Linux网络子系统中的各层之间传输数据,该结构在整个网络收发过程中贯穿始终...源码分析 笔者基于的是 S5PV210 的 DM9000 驱动,会大体上对 DM9000 的驱动源码进行分析, 分析源码位于DM9000 源码 platform 框架分析 DM9000 的驱动是基于 platform...dm9000_set_io 函数用于设置 DM9000 的读写函数。...重启完 DM9000 后,开始读取 DM9000 的寄存器 /* try multiple times, DM9000 sometimes gets the read wrong */ for (i =
在smdk2440.h中修改文件支持DM9000 #if 0 #define CONFIG_CS8900 /* we have a CS8900 on-board */ #define CONFIG_CS8900..._BASE 0x19000300 #define CONFIG_CS8900_BUS16 /* the Linux driver does accesses as shorts */ #else #define...CONFIG_DRIVER_DM9000 /*DM9000*/ #endif 编译报错 ?...have a CS8900 on-board */ #define CONFIG_CS8900_BASE 0x19000300 #define CONFIG_CS8900_BUS16 /* the Linux...是放在2440的bank4(0X20000000)的片选上面,而DM9000的CMD引脚接在bank4的LADDR2上面。
原文出自:http://blog.csdn.net/ghostyu/article/details/6908805 一个现实的linux设备和驱动通常要挂接在一种总线上,像pci,usb,iic,spi...基于这个背景,linux发明了一种虚拟总线:platform总线,相应的设备称为platform_device,而驱动成为platform_driver。...注意,platform_device并不是与自负设备,块设备等平行的概念,而是linux提供的一种附加手段,例如s3c2440处理器中,把内部集成的iic,rtc,spi,lcd,watchdog,等控制器归纳为...例如dm9000的resource部分: [cpp] view plain copy print ?...mach-s3c2440.c中,但关键的驱动源码在 drvier/mtd/nand/文件夹下 这样的结构就是linux驱动的分层思想,设备驱动的核心层与例化。
seek=1 启动时按下空格键 二、从Nand启动 三、从USB启动,资源下载https://download.csdn.net/download/jerrygou/10475100 3.1、加载模块到Linux...There is no valid bmp file at the given address In: serial Out: serial Err: serial Net: dm9000...OK Louis210 # tftpboot 20000000 u-boot-a.bin //下载uboot(包括BL1和BL2)至nand dm9000 i/o: 0x88000000, id:...0x90000a46 DM9000: running in 16 bit mode MAC: 1a:2a:3a:4a:5a:6a operating at 100M full duplex mode...OK dm9000 i/o: 0x88000000, id: 0x90000a46 DM9000: running in 16 bit mode MAC: 1a:2a:3a:4a:5a:6a operating
make zImage以此为依据 配置内核的过程: cd linux-2.6.30.4(进入Linux根目录) cp arch/arm/configs/s3c2410_defconfig /linux-...启动之后,输入:printenv 查看 serverip是不是你的虚拟机的ip(终端ifconfig即可查看) ipaddr要和serverip在同一个网段,即ip的前三段必须相同 ethaddr:开发板dm9000...下载到nand的话,会提示attempt to write error length data的错误 [MY2440] # tftp 0x30008000 root-2.6.30.4.bin dm9000...i/o: 0x20000300, id: 0x90000a46 DM9000: running in 16 bit mode MAC: 08:00:3e:26:0a:5b operating at...unknown: 0 mode Using dm9000 device TFTP from server 169.254.209.223; our IP address is 169.254.209.113
一旦DM9000的驱动也被注册,由于platform总线已经关联了设备,驱动自然可以根据已经存在的DM9000设备信息,获知如下的内存基地址、中断等信息了: static struct resource...但是,这个VxBus,可以说和Linux的总线、设备、驱动模型是极大地雷同的。但是,请问,你为什么要叫VxBus呢,它非常地Vx吗?...这些代码的存在,简直是对Linux内核的污染和对Linus Torvalds的无情藐视,因为,太木有技术含量了!...比如arch/arm/boot/dts/ imx1-apf9328.dts下面的DM9000就是这样的脚本,基地址、中断号都成为了DM9000设备节点的一个属性: eth: eth@4...Linux的车轮滚滚向前,无情碾压一切。人类的千年轨迹,沧海桑田,斗转星移,重复地进行着历史的归于历史,未来还是归于历史的过程。这是现实的悲怆,也是历史的豪迈。
在上一章,使uboot能够支持nor、nand 本节继续修改让uboot支持DM9000C网卡,便可以通过网络来传输文件 ---- 首先uboot已带有dm9000网卡的驱动,位于drivers/net.../下的dm9000x.h、dm9000x.c 1.DM9000C介绍 参考之前写的移植DM9000C驱动章节, 我们的DM9000是放在2440的bank4(0X20000000)的片选上面 而DM9000...CS8900 on-board */ #define CONFIG_CS8900_BASE 0x19000300 #define CONFIG_CS8900_BUS16 /* the Linux...driver does accesses as shorts */ 改为: #define CONFIG_DRIVER_DM9000 /*DM9000*/ #define
Linux内核对网络驱动程序使用统一的接口,并且对于网络设备采用面向对象的思想设计。 Linux内核采用分层结构处理网络数据包。...Linux内核有一个dev_base的全局指针,指向一个设备链表,包括了系统内的所有网络设备。该设备链表每个节点是一个网络设备。 ...图片 以DM9000网卡为例,当网卡收到数据包以后,调用中断处理函数 dm9000_interrupt(),该函数检查中断处理类型,如果是接收数据包中断,则调用 dm9000_rx()函数接收数据包到内核空间...五、数据包发送流程 以UDP数据包发送流程为例,在DM9000网卡上如何发送一个数据包。...链路层的 dev_queue_xmit()函数处理发送队列,调用 DM9000网卡的发送数据包函数 dm9000_xmit()发送数据包,发送完毕后,调用 dm9000_xmit_done函数处理发送结果
为了将DM9000驱动做稳定花了很多时间去研究,专门制作了一个符合CMSIS-Driver驱动规范文件。 2、网络性能。...H7双网口性能: (1)DM9000速度99.7Mbps (2)DM9162速度99.8Mbps F429双网口性能: (1)DM9162速度99.9Mbps (2)DM9000速度75Mbps...V7-4000_RL-TCPnet V7.X的双网口应用模板(DM9000和DM9162).7z (5.89MB) V6开发板教程 ?...V6-4000_RL-TCPnet V7.X的双网口应用模板(DM9000和DM9162).7z (1.30MB) V5开发板教程 ?...V5-4000_RL-TCPnet V7.X的双网口应用模板(DM9000和DM9162).7z (1.46MB) 目录: ? ? DM9000速度GIF: ?
PHY 2.1 DP83848(电流型PHY) 2.2 BCM5333(包含电压型PHY) 2.3 88E1111(电流型PHY) 2.4 DM9000(电流型PHY) ---- 0.几个结论 1)电流驱动型的...2.4 DM9000(电流型PHY) 图2.6 DM9000与网络变压器连接示意图 可以看出,DM9000是电流型PHY,下图来自于DM9000开发板电路。...图2.7 DM9000与网络变压器连接电路图 上图的E_TX和E_RX连接至DM9000,可以看出,网络变压器的2线共模电感连接线缆侧。
DM9000 有多种型号,有 100 引脚和 48 引脚的, 开发板选择的是 48 引脚的 DM9000,型号为 DM9000CEP。...2.2 DM9000 中断引脚电平设置 DM9000的34(INT)引脚为中断输出引脚,默认情况下该引脚高电平有效。...2.3 DM9000 数据位宽设置 前面我们提了一下 DM9000 支持 8 位和 16 位两种数据位宽,可以通过 DM9000 的 21(EECS)引脚设置其数据位宽,当 EECS 上拉的时候 DM9000...2.6 DM9000 直接内存访问控制(DMAC) DM9000 直接内存访问控制(DMAC) DM9000 支持 DMA 方式简化对内部存储器的访问。...DM9000 数据包发送 DM9000 有两个发送数据包: index1 和 index2,同时存储在 TX SRAM 中。
领取专属 10元无门槛券
手把手带您无忧上云