网卡初始化

1.分配描述结构,alloc_etherdev

2.获取平台资源,platform_get_resource

2.1.在s3c_dm9k_resource中有相关的资源

2.2.add地址由CS4和ADD2决定,是20000000

2.3.dat地址由CS4和ADD2决定,是20000004

2.4.中断资源是EINT7

3.虚拟地址映射,ioremap

4.读取芯片类型

5.设置操作函数集

6.读取MAC地址

7.注册网卡驱动,register_netdev

8.启动发送队列,netif_start_queue

网卡打开操作

在使用ifconfig eth 192.168.1.100配置网卡IP,或者使用ifconfig eth up打开网卡时会调用网卡驱动操作集合里的open函数。在open函数中做网卡硬件初始化化相关工作。

1.注册网卡中断处理函数,request_irq

2.初始化相关寄存器

3.使能发送和接收中断,来开启DM9000

网卡发送过程

1.通知协议栈暂停向驱动传送数据,netif_stop_queue

2.写入发送数据长度

3.写入发送数据

4.通知协议栈开始向驱动传输数据,netif_wake_queue

5.释放skb,dev_kfree_skb

网卡接收过程

接收在中断中完成,使用dm9000_rx函数处理

1.空读数据

2.读取接收状态

3.读取状态和长度

4.分配skb,使用dev_alloc_skb函数。分配长度是读取长度时获取的长度加4。4表示空读一个字节,状态一个字节,长度2个字节,剩下的部分才是真正读到的数据。

5.向后移动skb的data指针2个字节,使IP包满足4字节对齐。因为以太网包中的源地址6个字节,目的地址6个字节,类型2个字节,在头部移动2个字节,使IP包从16字节开始4字节对齐开始存放。使用skb_reserve(skb, 2)函数。

6.向前移动skb的tail指针4个字节,减去4个字节的CFS检验码,剩下的才是有效数据。使用skb_put(skb, RxLen - 4)。

7.读取数据到skb包中,注意读取时还是包含了4字节的CFS校验码。

8.提交数据到协议栈,使用netif_rx(skb)。

[国嵌攻略][136][DM9000网卡驱动深度分析]的更多相关文章

  1. [国嵌攻略][137][DM9000网卡驱动编程]

    DM9000数据发送 DM9000数据发送函数是在/drivers/net/dm9000.c中的dm9000_start_xmit函数 static int dm9000_start_xmit(str ...

  2. [国嵌攻略][065][DM9000驱动程序设计]

    移植代码:通过已有的可用的代码修改到新环境下运行. 代码编写: 初始化网卡 1.选中网卡 nLAN_CS BWSCON(0x48000000) DW4:01 16bit BANKCON4(0x4800 ...

  3. DM9000网卡驱动深度分析

    一.dm9000_porbe函数分析 不同于u-boot代码,tq2440中的DM9000更加复杂,需要分析的点也很多: /* * Search DM9000 board, allocate spac ...

  4. [国嵌攻略][153][I2C裸机驱动设计]

    eeprom简介 eeprom电可擦除可编程只读存储器,是一种类似于flash的固态存储器,但是与flash相比又存在一些区别: 1.eeprom可以按位擦写,而flash只能大片擦除. 2.eepr ...

  5. [国嵌攻略][158][SPI裸机驱动设计]

    SPI控制器工作流程 SPI控制器提供2个SPI接口.每个SPI接口有两个通道,分别为TX通道和RX通道.CPU要写数据到FIFO中,先写数据到SPI_TX_DATA寄存器中,这样此寄存器中的内容就会 ...

  6. [国嵌攻略][163][linux-usb软件系统架构]

    软件系统架构 1.主机端软件架构 USB设备驱动->USB核心->USB主控制器驱动->USB主控制器 2.设备端软件架构 Gadget驱动->Gadget API->U ...

  7. [国嵌攻略][165][usb下载线驱动设计]

    查看USB设备的生产商ID和设备ID 示例: lsusb Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub 生产商ID是1d ...

  8. [国嵌攻略][164][USB驱动程序设计]

    USB驱动模型 1.USB host controller driver(主控器驱动):为USB主控制器提供驱动程序 2.USB core(USB核心):连接USB主控制器驱动和USB设备驱动 3.U ...

  9. [国嵌攻略][160][SPI驱动程序设计]

    SPI Flash驱动 1.打开/drivers/mtd/devices/m25p80.c驱动文件.找到初始化m25p80_init函数,其中通过spi_register_driver来注册spi设备 ...

随机推荐

  1. inode 详解

    1.inode 解析: 存储文件元信息(文件创建者,创建日期,大小等)的区域叫做inode即 索引节点. 2.inode 内容: 文件字节数.拥有者UserID,GroupID,读写执行权限,时间戳, ...

  2. 从底层角度看ASP.NET-A low-level Look at the ASP.NET...

    从更低的角度 这篇文章在一个底层的角度来关注一个web请求怎样到达asp.net框架,从web服务器,通过ISAPI.看看这些后面发生了什么,让我们停止对asp.net的黑箱猜想.ASP.NET是一个 ...

  3. NIO中的易筋经

    匠心零度 转载请注明原创出处,谢谢! 前言 <易筋经>.天下武功出少林,而易筋经是少林寺的镇寺之宝.学好了易筋经就可以轻易地学好其它武功,只不过很少人学到了它的全部精髓.游坦之只是碰巧学了 ...

  4. 关于recycleview 滑动item变长(item变形)问题

    昨天在做项目的时候出现了bug,表现是在滑动的时候,整个item会被拉长了,松手后就回归正常大小了, 出现这个的主要原因是因为你的item布局中最大的那个根布局是 match_parent状态,因此导 ...

  5. DBCC page 数据页 堆 底层数据分布大小计算

    1.行的总大小: Row_Size = Fixed_Data_Size + Variable_Data_Size + Null_Bitmap + 4(4是指行标题开销) 开销定义: Fixed_Dat ...

  6. 简单搭建ES6的环境

    一.兼容情况 说到ECMAScript6,顺便提一下ECMAScript5,先看一下ES5的兼容情况.ES5浏览器支持情况: Opera 11.60:Internet Explorer 9*:Fire ...

  7. Linux系统使用-CentOS7 for Redis

    Redis系列(一):CentOS系统安装与环境配置 1.为什么使用虚拟机和CentOS 最近Redis比较 热门而且易于使用 而 Redisd对window支持并不好. 引用官方说明:http:// ...

  8. px-rem自适应转换

    当前团队开发过程,存在2种度量单位(px.rem)各有说辞px:各个终端统一大小,简单明了,未尝不可!rem:大屏幕显示大字体,小屏幕显示小字体,渐进增强视觉感.业界各种写法都有,不逐一讨论.团队呼声 ...

  9. ghost.py在代用JavaScript时的超时问题

    在写爬虫的时候,关于JavaScript的解析问题,我在网上找到的一个解决方案是使用ghost.py这个模块,他是一个基于webkit封装的一个客户端,可以用来解析动态页面.它的使用非常简单,它从2. ...

  10. HtmlWebpackPlugin实现资源的自定义插入

    目前碰到的问题 我们用html-webpack-plugin的inject属性去自动插入打包后的js, css到页面中,但是如果想给script标签添加一个crossorigin属性呢, 例如: &l ...