Results 1 to 1 of 1
hi there,
I am writing a simple char device that generates pseudo-random numbers, the problem is when I try to read from that char device, i.e when I write this ...
- 06-17-2009 #1Just Joined!
- Join Date
- May 2009
- Posts
- 35
writing a simple char device, help needed
hi there,
I am writing a simple char device that generates pseudo-random numbers, the problem is when I try to read from that char device, i.e when I write this command "cat (device's dictionary)" it reads 3 times which is really weird. anyone can help me out please.
here is some of my code
here is the printk messages i wrote to test my read deviceCode:unsigned int random_seed; char msg[256]; int msg_len; unsigned char rg_hw() { random_seed = random_seed * 1103515245 + 12345; return (unsigned char)((unsigned int)(random_seed / 65536) % 256); } ssize_t read(struct file *file, char __user *buf, size_t len, loff_t *offset) { printk(KERN_ALERT "reading a char device, seed = %d\n", random_seed); sprintf (msg, "%d", rg_hw()); msg_len = strlen(msg); if (*offset >= msg_len) { return 0; } if (*offset + len >= msg_len) { len = msg_len - *offset; } if(copy_to_user(buf, msg + *offset , len)) { printk(KERN_EMERG "loool\n"); return -EFAULT; } *offset += len; return len; }
thanks in advanceCode:Starting char device allocated a new major, 248 opend the char device, with minor 0 reading a char device, seed = 0 reading a char device, seed = 12345 reading a char device, seed = -740551042 releasing the char device.
EDIT: upon further testing, i think i found out what is the problem, i made a tester from user space and used the functions open and read, now the problem is that reads only one random number then stops, is there a way to make it read as many times as the buffer's size?


Reply With Quote
