Chinaunix首页 | 论坛 | 博客
  • 博客访问: 541917
  • 博文数量: 83
  • 博客积分: 4136
  • 博客等级: 中校
  • 技术积分: 886
  • 用 户 组: 普通用户
  • 注册时间: 2010-11-19 21:14
文章分类

全部博文(83)

文章存档

2013年(1)

2011年(25)

2010年(57)

分类: LINUX

2010-12-07 20:03:22

 贴出一个linux2.6.29的内核链表的程序

#include <linux/kernel.h>
#include <linux/module.h>
#include <linux/init.h>
#include <linux/slab.h>
#include <linux/list.h>

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

struct student
{
    char name[100];
    int num;
    struct list_head list;
};

struct student *pstudent;
struct student *tmp_student;
struct list_head student_list;
struct list_head *pos;

int mylist_init(void)
{
    int i = 0;
    
    INIT_LIST_HEAD(&student_list);
    
    pstudent = kmalloc(sizeof(struct student)*5,GFP_KERNEL);
    memset(pstudent,0,sizeof(struct student)*5);
    
    for(i=0;i<5;i++)
    {
     sprintf(pstudent[i].name,"Student%d",i+1);
        pstudent[i].num = i+1;
        list_add( &(pstudent[i].list), &student_list);
    }
    
    
    list_for_each(pos,&student_list)
    {
        tmp_student = list_entry(pos,struct student,list);
        printk("<0>student %d name: %s\n",tmp_student->num,tmp_student->name);
    }
    
    return 0;
}


void mylist_exit(void)
{    
    int i ;
    for(i=0;i<5;i++)
    {
        list_del(&(pstudent[i].list));
    }
    
    kfree(pstudent);
}

module_init(mylist_init);
module_exit(mylist_exit);


下面是Makefile

ifneq ($(KERNELRELEASE),)

obj-m := mylist.o

else
    
KDIR := /home/project/linux_prj/gq_prj/code_2/kernel-mini-4-3-1/linux-2.6.29
all:
    make -C $(KDIR) M=$(PWD) modules ARCH=arm CROSS_COMPILE=arm-linux-
clean:
    rm -f *.ko *.o *.mod.o *.mod.c *.symvers modul*

endif


makefile中KDIR是你的linux内核目录。
阅读(983) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~