在作业中,我必须为一副牌创建设备驱动程序。但是我在结构数组上使用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固定后消失,但我不知道什么是错的以及如何解决它。
答案 0 :(得分:2)
注意你的错误。您正在尝试将指针类型分配给struct card
。你似乎想要一个card*
数组。
struct card *deck[52];
否则你根本不需要动态分配;您已拥有52
个有效card
个对象。