Re: simple character device driver

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Friday 10 September 2010 19:02:09 John Mahoney wrote:
> On Fri, Sep 10, 2010 at 11:51 AM, fabio de francesco <fabio@xxxxxxxxxxx> 
wrote:
> > Hi all,
> > 
> > I have modified a simple character device driver as an exercise from the
> > Cooperstein's Linux Device Drivers book.
> > 
> > It seems to work fine except that when I "cat /dev/mycdrv" it provides
> > garbage.
> > 
> > This is a trimmed down version of the code:
> > 
> > #include <linux/module.h>       /* for modules */
> > #include <linux/fs.h>           /* file_operations */
> > #include <linux/uaccess.h>      /* copy_(to,from)_user */
> > #include <linux/init.h>         /* module_init, module_exit */
> > #include <linux/slab.h>         /* kmalloc */
> > #include <linux/cdev.h>         /* cdev utilities */
> > 
> > #define MYDEV_NAME "mycdrv"
> > #define KBUF_SIZE (size_t)( PAGE_SIZE )
> > 
> > static char *kbuf;
> > static dev_t first;
> > static unsigned int count = 1;
> > static int my_major = 700, my_minor = 0;
> > static struct cdev *my_cdev;
> > static int counter = 0;
> > 
> > static int mycdrv_open (struct inode *inode, struct file *file)
> > {
> >    printk( KERN_INFO " open #%d\n", ++counter );
> >    kbuf = kmalloc (KBUF_SIZE, GFP_KERNEL);
> >    memset( kbuf, '\0', KBUF_SIZE );
> 
> First this should be
> memset( kbuf, '0', KBUF_SIZE );

Ok. Please, why can't I pad the buffer with null bytes? Why '0' (zero 
character) and not '\0' (null byte)?

> 
> That  will print the char 0 instead of the null char.
> 
> Second try using "dd if=[dev] count=1" instead to read.

I just want the device to be read any means the user prefers, i.e. with "cat".

fabio

> 
> --
> John

--
To unsubscribe from this list: send an email with
"unsubscribe kernelnewbies" to ecartis@xxxxxxxxxxxx
Please read the FAQ at http://kernelnewbies.org/FAQ



[Index of Archives]     [Newbies FAQ]     [Linux Kernel Mentors]     [Linux Kernel Development]     [IETF Annouce]     [Git]     [Networking]     [Security]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux RAID]     [Linux SCSI]     [Linux ACPI]
  Powered by Linux