public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
* parameters passing problem in driver module
@ 2001-02-20 10:37 Srinivas Surabhi
  2001-02-20 11:19 ` Erik Mouw
  0 siblings, 1 reply; 2+ messages in thread
From: Srinivas Surabhi @ 2001-02-20 10:37 UTC (permalink / raw)
  To: linux-kernel

In application program ,code for call to write system call is given
below...
      #include<fcntl.h>
    main()
	 { 
	  int count,fd;
	 fd=open("/dev/pseudo",O_RDWR);
	  write(fd,buff,5);
	  }
	  
In driver module code for getting the buffer and count 

    #include<all related header files...>
     
    int psuedo_write(struct inode*in,struct file*fp,char *buf,int count)
    {
      kprintf("<1>pseudo_write routine called \n");
      kprintf("<1>count=%d \n",count);
      kprintf("<1>buffer=%s \n",buff);
      return 0;
    } 
/******so here after inserting the module into the kernel using insmod 
pseudo.o and executing the application cc -c pseudo_app.c, the o/p on
console is *****/

"pseudo_write routine called" 
"count=9988345352" /*garbage*/
"buffer=@#%h" .   /*garbage*/
 
/*** but neither the  buffer is carried from user space to kernel space nor
the count, why?***/Please help me
out.



^ permalink raw reply	[flat|nested] 2+ messages in thread

* Re: parameters passing problem in driver module
  2001-02-20 10:37 parameters passing problem in driver module Srinivas Surabhi
@ 2001-02-20 11:19 ` Erik Mouw
  0 siblings, 0 replies; 2+ messages in thread
From: Erik Mouw @ 2001-02-20 11:19 UTC (permalink / raw)
  To: Srinivas Surabhi; +Cc: linux-kernel

On Tue, Feb 20, 2001 at 04:07:55PM +0530, Srinivas Surabhi wrote:
> In application program ,code for call to write system call is given
> below...
>       #include<fcntl.h>
>     main()
> 	 { 
> 	  int count,fd;
> 	 fd=open("/dev/pseudo",O_RDWR);
> 	  write(fd,buff,5);
> 	  }
> 	  
> In driver module code for getting the buffer and count 
> 
>     #include<all related header files...>
>      
>     int psuedo_write(struct inode*in,struct file*fp,char *buf,int count)

This should read:

static ssize_t pseudo_write(struct file* file, 
                            const char *buf, 
                            size_t count,
                            loff_t* ppos);

>     {
>       kprintf("<1>pseudo_write routine called \n");
>       kprintf("<1>count=%d \n",count);
>       kprintf("<1>buffer=%s \n",buff);
>       return 0;
>     } 
> /******so here after inserting the module into the kernel using insmod 
> pseudo.o and executing the application cc -c pseudo_app.c, the o/p on
> console is *****/
> 
> "pseudo_write routine called" 
> "count=9988345352" /*garbage*/
> "buffer=@#%h" .   /*garbage*/
> 
> /*** but neither the  buffer is carried from user space to kernel space nor
> the count, why?***/Please help me
> out.

Not strange at all, you're using the wrong parameters so you get what
you asked for: garbage in, garbage out.

You get the source for all other drivers for free. Use it.


Erik

-- 
J.A.K. (Erik) Mouw, Information and Communication Theory Group, Department
of Electrical Engineering, Faculty of Information Technology and Systems,
Delft University of Technology, PO BOX 5031,  2600 GA Delft, The Netherlands
Phone: +31-15-2783635  Fax: +31-15-2781843  Email: J.A.K.Mouw@its.tudelft.nl
WWW: http://www-ict.its.tudelft.nl/~erik/

^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2001-02-20 11:21 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2001-02-20 10:37 parameters passing problem in driver module Srinivas Surabhi
2001-02-20 11:19 ` Erik Mouw

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox