我正在尝试使用kmalloc在Linux内核中分配内存。我的结构设计如下:
struct st_fetch_point {
struct sk_buff *end_pkt ;
struct sk_buff *start_pkt ;
struct sk_buff *current_pkt ;
struct st_fetch_point *next_fortp ;
struct st_fetch_point *next_consec ;
};
我创建了一个类型为st_fetch_point的新结构,并尝试以以下方式分配内存并为成员指针分配值:
struct st_fetch_point *first_fetch_point;
first_fetch_point = kmalloc((sizeof(struct st_fetch_point)), GFP_ATOMIC);
if (!first_fetch_point)
return -ENOMEM;
skb = tcp_send_head(meta_sk);
first_fetch_point->start_pkt = skb;
first_fetch_point->current_pkt = skb;
first_fetch_point->end_pkt = NULL;
first_fetch_point->next_fortp = NULL;
first_fetch_point->next_consec = NULL;
但是,每次进入kmalloc()执行行时,内核似乎都冻结了。我正在研究ubuntu 14.04,确实可以解决。我检查了syslog和kernlog文件,但未发现与冻结有关的任何异常消息。 kmalloc()分配方法有什么问题吗?