我必须做一个设备驱动程序,返回一个介于1 - 50之间的随机数,并且困惑于我的设备驱动程序的缓冲区如何工作,以及如何去让它表现得像/ dev/random一样。使我自己的/ dev /随机,缓冲区不工作,c
我做了一个测试程序,看看如何的/ dev /随机作品:
int test_read = open("/dev/random", O_RDONLY);
int get_random_num(void) {
unsigned int random_num;
read(test_read, &random_num, sizeof(random_num));
return (random_num % 50) + 1;
}
,然后这是我的设备驱动程序的读取功能(concised版):
my_random_read(struct file* file, char* buf,
size_t count, loff_t* ppos)
{
unsigned int random_num;
get_random_bytes(&random_num, 1);
int my_num = 1 + (random_num % 50)
int* my_num_pointer = &my_num;
copy_to_user(buf, my_num_pointer, count);
}
当我运行我的QEMU上的测试仪我得到-1074311964:/
我该怎么做才能让我所要做的就是用/ dev/my_random替换/ dev/random?
这是如何我从/ dev/my_random阅读:
read(test_read, &random_number, sizeof(random_number), 0);
我不明白这个问题。你已经发布了一个代码片段,然后你问如何模拟'/ dev/random',但你的问题标题暗示有一个错误。 – 2012-04-01 01:36:49
@OliCharlesworth编译并加载我的设备驱动程序(其中的代码段来自),我从/ dev/my_random读取,返回的是-1074311964。 – Tim 2012-04-01 01:40:34