Re: parameters passing problem in driver module

Erik Mouw (J.A.K.Mouw@ITS.TUDelft.NL)
Tue, 20 Feb 2001 12:19:09 +0100


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/
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/