[uClinux-dev] Re: uClinux-dist-test-20050808 released for testing

Greg Ungerer gerg at snapgear.com
Tue Oct 11 21:42:17 EDT 2005


Hi Robin,

Robin Getz wrote:
> According to Matt Waddel, Greg Ungerer wrote:
> 
>>  > Has anybody tried loadable modules in the 20050906
>>  > 2.6.x release?
>>
>> The underlying mmap implementation for uClinux changed
>> a couple of 2.6 kernels back. I suspect this stems from
>> those changes. But I'll need to dig deeper.
> 
> 
> We ran into this as well. And Sonic dug into it, and got a temporary
> solution.
> 
> According to the description in file Documentation/nommu-mmap.txt, the mmap
> infrastructure for shared memory map in NOMMU architecture was changed in
> kernel 2.6.12.
> 
> To provide shareable character device support, a driver must provide a
> file->f_op->get_unmapped_area() operation. It should also provide backing
> device information with capabilities set to indicate the permitted types
> of mapping on such devices.
> 
> But most of the filesystem drivers don't implement the necessary callback
> function and configuration in kernel 2.6.12. System call to mmap with
> MAP_SHARED flag will fail for most uClinux architectures (including 
> blackfin).

I can't imagine many filesystems ever will actually do this...


> So, Sonic worked around this issue in our cvs by changing flag
> MAP_SHARED to MAP_PRIVATE. Then, modules work just as they were in older
> kernels.
> 
> Quick and dirty hack:

Or a cleaner way to do this is just change the call to mmap
in busybox/modutils/insmod.c to:

diff -u -r1.7 insmod.c
--- insmod.c    5 Aug 2005 01:08:49 -0000       1.7
+++ insmod.c    12 Oct 2005 01:32:14 -0000
@@ -4095,7 +4095,7 @@

         fstat(fd, &st);
         len = st.st_size;
-       map = mmap(NULL, len, PROT_READ, MAP_SHARED, fd, 0);
+       map = mmap(NULL, len, PROT_READ, MAP_PRIVATE, fd, 0);
         if (map == MAP_FAILED) {
                 bb_perror_msg_and_die("cannot mmap `%s'", filename);
         }

At least you are only effecting the mmap call that we know is
a problem currently :-)

David (Howells) is it the case that the busybox/insmod should
be using MAP_PRIVATE here?

Regards
Greg


------------------------------------------------------------------------
Greg Ungerer  --  Chief Software Dude       EMAIL:     gerg at snapgear.com
SnapGear -- a CyberGuard Company            PHONE:       +61 7 3435 2888
825 Stanley St,                             FAX:         +61 7 3891 3630
Woolloongabba, QLD, 4102, Australia         WEB: http://www.SnapGear.com



More information about the uClinux-dev mailing list