我必須做一個設備驅動程序,返回一個介於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