在设备驱动程序中使用kmalloc

时间:2014-04-11 03:11:23

标签: c struct kernel device-driver kmalloc

在作业中,我必须为一副牌创建设备驱动程序。但是我在结构数组上使用kmalloc时遇到了麻烦。甲板和大小为52的结构阵列。到目前为止我有以下内容(显然它不完整):

#include <linux/slab.h>         // kmalloc()
#include <linux/fs.h>           // everything
#include <linux/errno.h>        // error codes
#include <linux/types.h>        // ssize_t
#include <linux/fcntl.h>        // O_ACCMODE
#include <linux/miscdevice.h>
#include <asm/uaccess.h>        // copy_to_user copy_from_user

MODULE_LICENSE("GPL"); 

struct card{
   char num;
   char suit;
}; 

struct card deck[52];

static int __init_deck(void){
    int i;
    int returnValue;
    for(i = 0; i < 52; i++){
        deck[i] = kmalloc(sizeof(struct card), GFP_KERNEL); // error here
        if(!deck[i]){ // error here
            printk(KERN_ERR "Unable to allocate memory.");
        }
    }

    return returnValue;
}

当我尝试使用第一个error: incompatible types when assigning to type ‘struct card’ from type ‘void *’和第二个error: wrong type argument to unary exclamation mark的makefile进行编译时,它有错误。我假设第二个将在kmalloc固定后消失,但我不知道什么是错的以及如何解决它。

1 个答案:

答案 0 :(得分:2)

注意你的错误。您正在尝试将指针类型分配给struct card。你似乎想要一个card*数组。

struct card *deck[52];

否则你根本不需要动态分配;您已拥有52个有效card个对象。