dm9000驱动中用到一些函数的解释
2014-03-25 16:49
232 查看
dm9000驱动中用到一些函数的解释
2008-11-10 17:53252人阅读 评论(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);。
相关文章推荐
- 矩阵练习3
- [个人记录]半月板撕裂及SLAP损伤
- 查询表达式理解
- 回调函数
- 机器学习知识列表
- c# hashTable的遍历【2种方法】与排序【3种方法】
- JavaScript在页面显示当前时间的几种方法
- 永不锁屏
- WinCE Network驱动开发简介
- built-in.o ?
- Android SDK Manager更新不了的解决方法
- 读文本显示在scrollview(BFDeclareVController)
- DialogFragment简单的使用方法
- Plus One
- 数据分析软件Excel,Origin, Matlab,Mathmatica和Maple
- Session与Cookie详解
- 电脑自动关机是什么原因
- ARM的虚拟化原理
- TCP连接的实质
- 一年之计在于春,一日之计在于晨, 一生之计在于勤,清晨起来修手机