you should somehow call the kernel module from user space program ... may be using ioctl .. so that you are in same process context --- as the one you are sending address from .
write char dev driver with ioctl method defined then call ioctl from user space ioctl(fd,<IOCTL_CMD>,addrees you want to send) Now in kernel module get_user(kernel data variable, <user space address>); Nidhi On Wed, Apr 28, 2010 at 11:55 AM, Yang Fangkai <wolfgang.y...@gmail.com>wrote: > Hi, Nidhi, > > Thanks for your reply! Yes, you are right. I pass the address > to the module from bash command echo, therefore when the address is > referred, the current pid is bash's pid, instead of the simple program > I wrote. > > But how can I fix this problem? > > Thank you! > > Fangkai > > On Wed, Apr 28, 2010 at 1:01 AM, nidhi mittal hada > <nidhimitta...@gmail.com> wrote: > > > > in your kernel module try to print current->pid > > is it same as the user space process id ? > > i think when in kernel module you are not in the same process context > whihc > > you want to refer ... > > > > > > Nidhi > > > > On Wed, Apr 28, 2010 at 10:38 AM, Yang Fangkai <wolfgang.y...@gmail.com> > > wrote: > >> > >> Hi, all, > >> > >> I have a problem with get_user() macro. What I did is as follows: > >> > >> I run the following program > >> > >> int main() > >> { > >> int a = 20; > >> printf("address of a: %p", &a); > >> sleep(200); > >> return 0; > >> } > >> > >> When the program runs, it outputs the address of a, say, 0xbff91914. > >> > >> Then I pass this address to a module running in Kernel Mode that > >> retrieves the contents at this address (at the time when I did this, I > >> also made sure the process didn't terminate, because I put it to sleep > >> for 200 seconds... ): > >> > >> The address is firstly sent as a string, and I cast them into pointer > >> type. > >> > >> int * ptr = (int*)simple_strtol(buffer, NULL,16); > >> printk("address: %p",ptr); // I use this line to make sure the cast is > >> correct. When running, it does output bff91914 > >> int val = 0; > >> int res; > >> res= get_user(val, (int*) ptr); > >> > >> However, res is always not 0, meaning that get_user returns error. I > >> am wondering what is the problem.... > >> > >> Thank you!! > >> > >> -- > >> To unsubscribe from this list: send an email with > >> "unsubscribe kernelnewbies" to ecar...@nl.linux.org > >> Please read the FAQ at http://kernelnewbies.org/FAQ > >> > > > > > > > > -- > > Thanks & Regards > > Nidhi Mittal Hada > > Scientific officer D > > Computer Division > > Bhabha Atomic Research Center > > Mumbai > > > > > > > -- Thanks & Regards Nidhi Mittal Hada Scientific officer D Computer Division Bhabha Atomic Research Center Mumbai