[国嵌攻略][136][DM9000网卡驱动深度分析]
网卡初始化
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网卡驱动深度分析]的更多相关文章
- [国嵌攻略][137][DM9000网卡驱动编程]
DM9000数据发送 DM9000数据发送函数是在/drivers/net/dm9000.c中的dm9000_start_xmit函数 static int dm9000_start_xmit(str ...
- [国嵌攻略][065][DM9000驱动程序设计]
移植代码:通过已有的可用的代码修改到新环境下运行. 代码编写: 初始化网卡 1.选中网卡 nLAN_CS BWSCON(0x48000000) DW4:01 16bit BANKCON4(0x4800 ...
- DM9000网卡驱动深度分析
一.dm9000_porbe函数分析 不同于u-boot代码,tq2440中的DM9000更加复杂,需要分析的点也很多: /* * Search DM9000 board, allocate spac ...
- [国嵌攻略][153][I2C裸机驱动设计]
eeprom简介 eeprom电可擦除可编程只读存储器,是一种类似于flash的固态存储器,但是与flash相比又存在一些区别: 1.eeprom可以按位擦写,而flash只能大片擦除. 2.eepr ...
- [国嵌攻略][158][SPI裸机驱动设计]
SPI控制器工作流程 SPI控制器提供2个SPI接口.每个SPI接口有两个通道,分别为TX通道和RX通道.CPU要写数据到FIFO中,先写数据到SPI_TX_DATA寄存器中,这样此寄存器中的内容就会 ...
- [国嵌攻略][163][linux-usb软件系统架构]
软件系统架构 1.主机端软件架构 USB设备驱动->USB核心->USB主控制器驱动->USB主控制器 2.设备端软件架构 Gadget驱动->Gadget API->U ...
- [国嵌攻略][165][usb下载线驱动设计]
查看USB设备的生产商ID和设备ID 示例: lsusb Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub 生产商ID是1d ...
- [国嵌攻略][164][USB驱动程序设计]
USB驱动模型 1.USB host controller driver(主控器驱动):为USB主控制器提供驱动程序 2.USB core(USB核心):连接USB主控制器驱动和USB设备驱动 3.U ...
- [国嵌攻略][160][SPI驱动程序设计]
SPI Flash驱动 1.打开/drivers/mtd/devices/m25p80.c驱动文件.找到初始化m25p80_init函数,其中通过spi_register_driver来注册spi设备 ...
随机推荐
- 点击盒子选中里面的单选框,并给盒子添加相应样式,美化单选框、复选框样式css用法,响应式滴
pc效果图: 移动端效果图: 代码直接上: <!DOCTYPE html> <html> <head> <meta http-equiv="Cont ...
- VS2010安装OpenGL
以下涉及到的所有资源都在这里: 链接:https://pan.baidu.com/s/1eSctT5K 密码:174s *我的VS2010的安装位置:D:\Program Files (x86)\M ...
- asp.net 未能加载文件或程序集“WebApi”或它的某一个依赖项。试图加载格式不正确的程序。
http://blog.csdn.net/lingxyd_0/article/details/43155039 一般情况下出现这样的问题是因为.dll文件不存在或者路径不正确.但今天我遇到的情况都不在 ...
- S2 深入.NET和C#编程 三:使用集合组织相关数据
三:使用集合组织相关数据 集合概念: ArrayList:非常类似于数组,也有人称他为数组的列表.ArrayList可以动态维护,数组的容量是固定的 和数组类似,ArrayList中存储的是数据成为元 ...
- Benchmark Test On Android Devices
一.Android设备上的Benckmark测试概述 同PC相比,在Android设备上的性能测试还没有一个公认的标准.也没有PC上那么多的测试程序集.但我们可以通过一些工具所得到的信息更好的了解设备 ...
- robotframework学习笔记(七)------筛选执行用例
第一种:手动勾选用例 可勾选用户,然后点击运行,这样就只运行到勾选的用例.如果不勾选的点击运行就会运行所有用例. 第二种 菜单中去筛选 可在菜单中去筛选勾用例,然后点击运行 Select All Te ...
- 解决ios手机上传竖拍照片旋转90度问题
html5+canvas进行移动端手机照片上传时,发现ios手机上传竖拍照片会逆时针旋转90度,横拍照片无此问题:Android手机没这个问题. 因此解决这个问题的思路是:获取到照片拍摄的方向角,对非 ...
- 使用linux perf工具生成java程序火焰图
pre.cjk { font-family: "Nimbus Mono L", monospace } p { margin-bottom: 0.1in; line-height: ...
- 【读书笔记】【深入理解ES6】#3-函数
函数形参的默认值 ES6中的默认参数值 function makeRequest(url, timeout = 2000, callback = function() {}) { } 可以为任意参数指 ...
- python基础之实现sql增删改查
# encoding:utf-8 # Author:"richie" # Date:2017/8/2 import re key_l = ['id', 'name', 'age', ...