红联Linux门户
Linux帮助

内核链表问题求助

发布时间:2013-04-12 12:58:58来源:红联作者:li84006800
按照自己的想法编的一个内核链表创建、遍历以及删除的内裤模块,创建链表的时候采用的是动态的方式,用arm-linux-编译通过没问题,但是下载到开发板上加载内核模块就出来一大堆错误,求大神知道哪里错了。不说了,上程序。#include
#include
#include
#include
#include

MODULE_LICENSE("GPL");
MODULE_AUTHOR("Li HongYu");
MODULE_DESCRIPTION("List Module");
MODULE_ALIAS("List module");

#define list_length 10

struct node
{
char name[100];
unsigned int num;
struct list_head entry;
};

struct node *new_node; //新申请的节点
struct node *tmp_node; //缓存节点
struct list_head *list; //头结点指针
struct list_head *pos; //遍历游标
struct list_head tmp_pos; //游标内容缓存

int mylist_init(void)
{
int i;

INIT_LIST_HEAD(list); //初始化头结点

for(i=0;i {
new_node=kmalloc(sizeof(struct node),GFP_KERNEL);
memset(new_node,0,sizeof(struct node));
sprintf(new_node->name,"第%d节点",i+1);
new_node->num=i+1;
list_add(&(new_node->entry),list);
}



list_for_each(pos,list)
{
tmp_node = list_entry(pos,struct node,entry);
printk("<0> %d :%s\n",tmp_node->num,tmp_node->name);
}

return 0;
}

void mylist_exit(void)
{
list_for_each(pos,list)
{
tmp_pos = *pos;
tmp_node=list_entry(pos,struct node,entry);
list_del(pos);

kfree(tmp_node);

*pos = tmp_pos;
}
printk("<0> 链表删除成功");
}

module_init(mylist_init);
module_exit(mylist_exit);
文章评论

共有 1 条评论

  1. haohu137 于 2013-05-09 19:05:07发表:

    路过,看看。