我在系统类的介绍中正在做一个涉及Yahtzee的项目,我不太明白设备驱动程序是如何工作的。我的Yahtzee程序完全正常运行,但我刚从一个随机的文件中读入。
我的大部分驱动程序都是使用给我们的“示例”驱动程序设置的。目标是将骰子卷返回给用户。我遇到了算法问题 - 我使用以下函数作为辅助函数来返回单个字节:
unsigned char get_random_byte(int max) {
unsigned char c;
get_random_bytes(&c, 1);
return c%max;
}
我知道我应该在执行mod 6 op总计之前将这些位组合起来并添加一个来写入文件指针。在伪代码中:
(TOTAL_OF_BITS % 6) + 1
但是,使用该功能的参数,我不知道该怎么做。它应该与read命令一起使用:
static ssize_t dice_read(struct file * file, char * buf, size_t count, loff_t *ppos)
我将它与read命令read(dice [i],sizeof(int),1,fp)进行比较,发现我应该将结果分配给文件,但除此之外我不知道如何继续。这将取决于buf变量以及大小对吗?
部分问题是我对设备驱动程序的了解非常不稳定。有人可以帮帮我吗?我很感激时间和精力。
答案 0 :(得分:0)
这是我使用的读取方法:
static ssize_t dice_read(struct file * file, char * buf,
size_t count, loff_t *ppos)
{
int i;
char* data;
if(count == 0){
return 0;
}
data = kmalloc(count, GFP_KERNEL);
for(i = 0; i < count; i++){
data[i] = get_random_byte(6) + 1;
}
if(copy_to_user(buf, data, count)){
kfree(data);
}
*ppos+=count;
return *ppos;
}
重申一下,我对随机数的方法是:
unsigned char get_random_byte(int max) {
unsigned char c;
get_random_bytes(&c, 1);
return c%max;
}