On Wed, Nov 9, 2011 at 7:22 PM, Alexandru Juncu <alex.juncu@rosedu.org>wrote:
On Wed, Nov 9, 2011 at 3:41 PM, Daniel Hilst Selli <danielhilst@gmail.com> wrote:
I'm trying to create a example char device. The example compiles fine, but when I try to "cat" I got "No such device or address". I have reviewed the code thousend times and can't see what I'm missing
Here is the code -> http://pastebin.com/Td03U0fK
The read method is not good, I know, but is never called.
I use my own running kenrel to test, I know that is danger. I'm building a qemu enviroment to test this better.
Here is uname -a: Linux archlinux 3.0-ARCH #1 SMP PREEMPT Fri Oct 7 11:35:34 CEST 2011 x86_64 Intel(R) Core(TM) i3 CPU M 370 @ 2.40GHz GenuineIntel GNU/Linux
Any idea?
Thanks
You tried to 'cat' a /dev/my_device file, right? Was that device file created with the mknod command?
-- Alexandru Juncu
ROSEdu http://rosedu.org
_______________________________________________ Kernelnewbies mailing list Kernelnewbies@kernelnewbies.org http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies
Hello Daniel, I had the look at the code. The issue is with the cdev_add() call in init_gcdev() function. int cdev_add(struct cdev *p, dev_t dev, unsigned count) is the prototype Now the problem was *instead of passing second argument of type dev_t you were passing minor number macro. *Fix : - Do following additions : - 1. static int major; // Declare a global major no var. 2. In init_gcdev() after call to alloc_chrdev_region() get major no and store in major var. major = MAJOR(gcdev->dev); 3. Replace cdev_add() call like this : - cdev_add(&gcdev->cdev, MKDEV(major, FIRST_MINOR), 1); Now its running and your read methos is getting called. Hello Alexandru, That error was due to improper args passed to cdev_add(). If device file is not present (no mknod done) error would be "No such file or dir" Regards, Rohan Puri