Android内核 netdevices.txt文档说明
2014-09-23 10:10
267 查看
最近在做can总线驱动开发,趁有时间把英文文档翻译成中文,方便阅读。本文使用的是fsl imx536开发板,英文文档地址:myandroid/kernel_imx/Documentation/networking/netdevices.txt
由于本人刚接触CAN等网络驱动以及英语水平有限,肯定有很多地方翻译的不是很恰当,望高手不吝赐教。
网络设备、内核
介绍
下文是随机收集的关于网络设备的文档。
net_device结构体分配规则
即使卸载模块后也是继续需要网络设备结构体,而且使用kmalloc函数分配。如果设备注册成功,最后会使用free_netdev释放。还需要利索地解决出错情况(例如:mmod mydriver </sys/class/net/myeth/mtu)。
Net_init.c中有处理alloc_etherdev,alloc_netdev常见情况的程序。当网络设备被释放时,需为被释放的驱动私有数据预留额外的地址空间。如果单独分配的数据与网络设备连接(netdev_priv(dev)),则由模块退出处理程序(module exit handler)来释放。
MTU
每个网络设备都有一个最大传输单元(MTU),MTU不包含任一链路层协议开销。上层协议不能传递给设备超过MTU的socket缓存数据。MTU不包含链路层头信息开销,因此,例如在以太网上,如果标准的MTU值是1500字节,由于以太网报文头,实际socket缓存将包含高达1514字节。设备应该也考虑到4字节的VLAN报文头。
分段卸载(GSO,TSO)是一个例外。上层协议可向设备发送程序传输一个大的socket缓存,然后设备给予当前的MTU把缓存数据打包成单独的数据包。
MTU是对称的,同时适用于接收和发送。设备必须能够接收至少由MTU允许的最大的数据包。网络设备可以使用MTU作为接收缓存区大小的机制,但该设备应允许VLAN报头的数据包。与1500字节的标准以太网MTU一样,该设备应允许最多1518字节数据包(1500+14报文头+4标签)。设备可以:drop、truncate或拒绝过大的数据包,但丢弃的过大数据包优先。
net_device结构体同步规则
dev->open:
Synchronization:rtnl_lock() semaphore.
Context:process
dev->stop:
Synchronization:rtnl_lock() semaphore.
Context:process
Note1:netif_running() is guaranteed false
Note2:dev->poll() is guaranteed to be stopped
dev->do_ioctl:
Synchronization:rtnl_lock() semaphore.
Context:process
dev->get_stats:
Synchronization:dev_base_lock rwlock.
Context:nominally process, but don't sleep inside an rwlock
dev->hard_start_xmit:
Synchronization:netif_tx_lock spinlock.
当驱动对dev->features设置为NETIF_F_LLTX,这就是所谓的无固定netif_tx_lock。在此情况下,驱动在需要时必须具备自锁功能。建议在此使用try锁,当自旋锁失败就返回NETDEV_TX_LOCKED。锁定也应该正确地免受set_multicast_list影响。注意:NETIF_F_LLTX的用法被弃用,请勿将其用于新驱动。
设备上下文:与主干通讯点相关的进程禁用或BH(定时器),
将调用netconsole禁用的中断。
返回代码:
NETDEV_TX_OK:一切ok;
NETDEV_TX_BUSY:不能传输数据包,尝试后通常是一个bug,是指队列启动/停止流控制在驱动程序中损坏。注意:驱动程序必须不把socket缓存放在DMA环中。
NETDEV_TX_LOCKED:锁失败,请重试。只有设置了NETIF_F_LLTX,才有效。
dev->tx_timeout:
Synchronization:netif_tx_lock spinlock.
Context: BHsdisabled
Notes:netif_queue_stopped() is guaranteed true
dev->set_multicast_list:
Synchronization:netif_tx_lock spinlock.
Context: BHsdisabled
napi_struct结构体同步规则
napi->poll:
Synchronization:NAPI_STATE_SCHED bit in napi->state. Device
driver'sdev->close method will invoke napi_disable() on
all NAPIinstances which will do a sleeping poll on the
NAPI_STATE_SCHEDnapi->state bit, waiting for all pending
NAPI activityto cease.
Context: 软中断
将调用netconsole禁用的中断。
由于本人刚接触CAN等网络驱动以及英语水平有限,肯定有很多地方翻译的不是很恰当,望高手不吝赐教。
网络设备、内核
介绍
下文是随机收集的关于网络设备的文档。
net_device结构体分配规则
即使卸载模块后也是继续需要网络设备结构体,而且使用kmalloc函数分配。如果设备注册成功,最后会使用free_netdev释放。还需要利索地解决出错情况(例如:mmod mydriver </sys/class/net/myeth/mtu)。
Net_init.c中有处理alloc_etherdev,alloc_netdev常见情况的程序。当网络设备被释放时,需为被释放的驱动私有数据预留额外的地址空间。如果单独分配的数据与网络设备连接(netdev_priv(dev)),则由模块退出处理程序(module exit handler)来释放。
MTU
每个网络设备都有一个最大传输单元(MTU),MTU不包含任一链路层协议开销。上层协议不能传递给设备超过MTU的socket缓存数据。MTU不包含链路层头信息开销,因此,例如在以太网上,如果标准的MTU值是1500字节,由于以太网报文头,实际socket缓存将包含高达1514字节。设备应该也考虑到4字节的VLAN报文头。
分段卸载(GSO,TSO)是一个例外。上层协议可向设备发送程序传输一个大的socket缓存,然后设备给予当前的MTU把缓存数据打包成单独的数据包。
MTU是对称的,同时适用于接收和发送。设备必须能够接收至少由MTU允许的最大的数据包。网络设备可以使用MTU作为接收缓存区大小的机制,但该设备应允许VLAN报头的数据包。与1500字节的标准以太网MTU一样,该设备应允许最多1518字节数据包(1500+14报文头+4标签)。设备可以:drop、truncate或拒绝过大的数据包,但丢弃的过大数据包优先。
net_device结构体同步规则
dev->open:
Synchronization:rtnl_lock() semaphore.
Context:process
dev->stop:
Synchronization:rtnl_lock() semaphore.
Context:process
Note1:netif_running() is guaranteed false
Note2:dev->poll() is guaranteed to be stopped
dev->do_ioctl:
Synchronization:rtnl_lock() semaphore.
Context:process
dev->get_stats:
Synchronization:dev_base_lock rwlock.
Context:nominally process, but don't sleep inside an rwlock
dev->hard_start_xmit:
Synchronization:netif_tx_lock spinlock.
当驱动对dev->features设置为NETIF_F_LLTX,这就是所谓的无固定netif_tx_lock。在此情况下,驱动在需要时必须具备自锁功能。建议在此使用try锁,当自旋锁失败就返回NETDEV_TX_LOCKED。锁定也应该正确地免受set_multicast_list影响。注意:NETIF_F_LLTX的用法被弃用,请勿将其用于新驱动。
设备上下文:与主干通讯点相关的进程禁用或BH(定时器),
将调用netconsole禁用的中断。
返回代码:
NETDEV_TX_OK:一切ok;
NETDEV_TX_BUSY:不能传输数据包,尝试后通常是一个bug,是指队列启动/停止流控制在驱动程序中损坏。注意:驱动程序必须不把socket缓存放在DMA环中。
NETDEV_TX_LOCKED:锁失败,请重试。只有设置了NETIF_F_LLTX,才有效。
dev->tx_timeout:
Synchronization:netif_tx_lock spinlock.
Context: BHsdisabled
Notes:netif_queue_stopped() is guaranteed true
dev->set_multicast_list:
Synchronization:netif_tx_lock spinlock.
Context: BHsdisabled
napi_struct结构体同步规则
napi->poll:
Synchronization:NAPI_STATE_SCHED bit in napi->state. Device
driver'sdev->close method will invoke napi_disable() on
all NAPIinstances which will do a sleeping poll on the
NAPI_STATE_SCHEDnapi->state bit, waiting for all pending
NAPI activityto cease.
Context: 软中断
将调用netconsole禁用的中断。
相关文章推荐
- 彻底解决android读取中文txt的乱码(自动判断文档类型并转码
- 彻底解决android读取中文txt,lrc的乱码(自动判断文档类型并转码)
- Android大TXT文本文档读取
- 开源项目Universal Image Loader for Android 说明文档 (3)
- 开源项目Universal Image Loader for Android 说明文档 (2)
- 2.6.14 内核移植说明文档
- 360浏览器内核控制Meta标签说明文档
- Linux内核文档之rbtree.txt
- android读取中文txt,lrc的乱码(自动判断文档类型并转码)
- 彻底解决android读取中文txt,lrc的乱码(自动判断文档类型并转码)
- linux内核文档翻译之——V4L2-framework.txt
- 2.6.14 内核移植说明文档
- 关于Android RenderScript 的详细说明和一些实用文档
- 2.6.14 内核移植说明文档
- 最近做的Android项目,和同事分开做的,所以需要写一些文档注释,说明自己的工作内容
- 2.6.14 内核移植说明文档
- Android 和内核社区 —— Greg Kroah-Hartman 关于 Android Code 被移除的说明(转)
- android 编译 英文说明文档
- 2.6.14 内核移植说明文档
- MTK android多端口下载工具和说明文档