访问skb时出错(skb->数据)

时间:2016-01-07 18:48:17

标签: linux-device-driver embedded-linux openwrt

我正在尝试在代码中分配一个sk_buff,然后访问其skb->数据区。
我得到一个NULL指针参考。

OpenWRT:障碍破坏者

代码:

( void(foo(args)) , ...);

转储:

我得到以下堆栈跟踪:

struct sk_buff *skb = NULL;
skb = __dev_alloc_skb(2400,GFP_ATOMIC);
if (skb) {
    printk("head= %p \n data= %p \n tail= %p\n end= %p\n len= %d\n", skb->head,skb->data,skb->tail,skb->end,skb->len);
    memset(skb->data,0,2400);
    }

我尝试过使用alloc_skb,dev_alloc_skb。

ath5k使用__dev_alloc_skb()并成功使用目标平台上返回的skb->数据。

skb-> data(data = 00000b20)的值似乎也是相对的。它是否与skb-> head相关。

请帮忙。

由于

1 个答案:

答案 0 :(得分:0)

您不需要使用私有方法(从__开始),使用alloc_skbdev_alloc_skb(对于设备驱动程序,它将自动释放)。

此外,最好将提供的API用于sk_buff结构的实例,而不是访问私有字段。有关示例,请参阅现有用法:http://lxr.free-electrons.com/ident?i=dev_alloc_skb