您的位置:首页 > 其它

dm9000驱动中用到一些函数的解释

2014-03-25 16:49 232 查看

dm9000驱动中用到一些函数的解释

2008-11-10 17:53
252人阅读 评论(0)收藏
举报

dm9000驱动中用到一些函数的解释

1。skb_reserve()

skb_reserve可以在缓冲区的头部预留一定的空间,它通常被用来在缓冲区中给协议头预留空间或者在某个边界上对齐。这个函数改变data和tail指针,而data和tail指针分别指向负载的开头和结尾。这个函数通常在分配缓冲区之后就调用,此时的data和tail指针还是指向同一个地方。

/usr/src/linux-2.6.19/include/linux/skbuff.h

static inline void skb_reserve(struct sk_buff *skb, int len)

{

skb->data += len;

skb->tail += len;

}

2. skb_put() -- 扩展数据缓冲区大小 skb_put() -- 扩展缓冲区中数据区域的大小;增加len个字节

/usr/src/linux-2.6.19/include/linux/skbuff.h

static inline unsigned char *skb_put(struct sk_buff *skb, unsigned int len)

{

unsigned char *tmp = skb->tail;

SKB_LINEAR_ASSERT(skb);

skb->tail += len;

skb->len += len;

if (unlikely(skb->tail>skb->end))

skb_over_panic(skb, len, current_text_addr());

return tmp;

}

3. linux内核定时器的用法

总的来说,timer的用法还是很简单的主要需要定义一个timer_list变量timer

先初始化timer

init_timer(&timer);

then 对timer的相关参数赋值:

timer.function = fun;

timer.expires = jiffies + TIMER_DELAY;

add_timer(&timer);

在定时器时间到的时候,会执行fun,如果继续定时,可以通过

在fun中执行

mod_timer(&timer, jiffies + TIMER_DELAY);

在不需要的时候通过调用

del_timer(&timer);

删除定时器

4. 载波信号检测

网络设备默认具备载波信号存在,驱动程序可通过动作函数来显式地改变状态。比如:

void netif_carrier_on (struct net_device *dev);如果驱动程序没有侦测到设备上的载波信号,那么将执行

netif_carrier_off(struct net_device *dev);动作,并告诉内核,一旦侦测到载波信号,那么将执行

void netif_carrier_on动作函数,也可用int netif_carrier_ok(struct net_device *dev);。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: