<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML><HEAD>
<META content="text/html; charset=windows-1252" http-equiv=Content-Type><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<META content="MSHTML 5.00.2314.1000" name=GENERATOR></HEAD>
<BODY bgColor=#ffffff>
<DIV>Hello everybody,</DIV>
<DIV>&nbsp;</DIV>
<DIV>i am just learning programming in linux. i&nbsp;was just working with 
character</DIV>
<DIV>device files. i tried the following program on redhat 6.2&nbsp;with kernel 
2.2.14</DIV>
<DIV>i am getting this error</DIV>
<DIV>unresolved symbol __put_user_X<BR>did i miss any #includes or #defines 
??</DIV>
<DIV>&nbsp;</DIV>
<DIV>&nbsp;</DIV>
<DIV>#include&lt;linux/kernel.h&gt;<BR>#include&lt;linux/module.h&gt;<BR>#include&lt;linux/fs.h&gt;<BR>#include&lt;linux/wrapper.h&gt;<BR>#include&lt;asm/uaccess.h&gt;</DIV>
<DIV>&nbsp;</DIV>
<DIV>static char message[60];<BR>static char *messptr;<BR>static int 
dev_open_cnt=0;</DIV>
<DIV>&nbsp;</DIV>
<DIV>static int dev_open(struct inode *inode, struct file *file)<BR>{</DIV>
<DIV>&nbsp;</DIV>
<DIV>&nbsp;dev_open_cnt++; <BR>&nbsp;sprintf(message,"Youve opened it the %dxx 
time",dev_open_cnt);<BR>&nbsp;messptr=message;<BR>&nbsp;<BR>&nbsp;return 
0;<BR>}</DIV>
<DIV>&nbsp;</DIV>
<DIV>static void dev_release(struct inode *inode, struct file 
*file)<BR>{<BR>&nbsp;dev_open_cnt--;<BR>}</DIV>
<DIV>&nbsp;</DIV>
<DIV>static ssize_t dev_read(struct file *file, char *buffer, size_t 
length,<BR>&nbsp;loff_t *offset)<BR>{<BR>&nbsp;int bytes_read=0;</DIV>
<DIV>&nbsp;</DIV>
<DIV>&nbsp;if(*messptr==0) return 0;</DIV>
<DIV>&nbsp;</DIV>
<DIV>&nbsp;while(length &amp;&amp; *messptr)<BR>&nbsp;{<BR>&nbsp; 
put_user(*messptr++,buffer++);&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; /* is this 
the error zone ???*/<BR>&nbsp; bytes_read++;<BR>&nbsp; 
length--;<BR>&nbsp;}<BR>&nbsp;return bytes_read;<BR>}</DIV>
<DIV>&nbsp;</DIV>
<DIV>static ssize_t dev_write(struct inode *inode, struct file *file, const char 
*buffer,<BR>&nbsp;int length)<BR>{<BR>&nbsp;return 
-EINVAL;<BR>}<BR>&nbsp;<BR>static int major;<BR>struct file_operations 
fops=<BR>{<BR>&nbsp;NULL,<BR>&nbsp;dev_read,<BR>&nbsp;dev_write,<BR>&nbsp;NULL,<BR>&nbsp;NULL,<BR>&nbsp;NULL,<BR>&nbsp;NULL,<BR>&nbsp;dev_open,<BR>&nbsp;NULL,<BR>&nbsp;dev_release<BR>};</DIV>
<DIV>&nbsp;</DIV>
<DIV>int 
init_module()<BR>{<BR>&nbsp;major=module_register_chrdev(0,"chrdev",&amp;fops);<BR>&nbsp;printk("major 
%d \n",major); <BR>&nbsp;return 0;<BR>}</DIV>
<DIV>&nbsp;</DIV>
<DIV>void 
cleanup_module()<BR>{<BR>&nbsp;module_unregister_chrdev(major,"chrdev");<BR>}</DIV></BODY></HTML>