I've never actually done any kernel programming, so I probably won't be of much help (actually probably won't be of any help, i'm just shooting in the dark),
but...

I am trying to write a kernel module that shares a global variable between
a userland application and the module.  In the kernel module, I use this:

        mode = ...; /* read/write for all... */
        entry = create_proc_entry("jimen", mode, NULL);
        entry->proc_fops = my_fops;

My guess is that you probably need to set entry->read_proc and entry->write_proc also. (I don't know if you've seen linux/Documentation/DocBook/procfs_example.c
or not, but it seems like a pretty easy example to follow).

Where my_fops contains an mmap entry like so...

        int var __attribute__ ((aligned (PAGE_SIZE)));

        int
        my_mmap(struct file *filp, struct vm_area_struct *vma)
        {
                vma->vm_flags |= VM_RESERVED;
                if (remap_page_range(vma->vm_start, (unsigned long)&var,

offtopic, but that cast doesn't sit well with me (because whose to say
sizeof(int *) == sizeof(long) ?)
For instance on sparc i think that long is 32-bit and pointers are 64-bit, so
a cast like that would cut off half the address's bits.

That said... I think it must be right because the kernel developers are a lot
smarter than me :-) and they've prototyped the function that way.

        int fd = open("/proc/jimen", O_RDWR);
        int *ptr = mmap(NULL, 4, PROT_READ|PROT_WRITE, MAP_SHARED, fd, 0);


The mmap system call seems to work without error.
So /proc/jimen exists?  What happens if you cat /proc/jimen ?

If I add in MAP_ANONYMOUS to the flags, I am getting valid values and able to
modify '*ptr'.  But if the module modifies 'var', '*ptr' does not reflect
the change.  This kind of makes sense since MAP_ANONYMOUS means there is
no underlying file.

right.

 But without it, I'm not even getting a valid pointer.

You mean you are getting a valid pointer, but the value the pointer points to
doesn't change?

If you sent me your code, I wouldn't mind playing around with it. I've always
kinda wanted to learn kernel programming.

--Ray

Reply via email to