<HTML><BODY><p>Hello everyone! <br>I need reserve 256-512 Mb of continuous physical memory and have access to this memory from the user space. <br>I decided to use CMA for memory reserving. <br>Here are the steps on my idea that must be performed:<br>1. Reservation required amount of memory by CMA during system booting.<br>2. Parsing of CMA patch output which looks like for example: "CMA: reserved 256 MiB at 27400000" and saving two parameters: size of CMA area = 256*1024*1024 bytes and phys address of CMA area = 0x27400000.<br>3. Mapping of CMA area at /dev/mem file with offset =&nbsp;0x27400000 using mmap(). (Of course,&nbsp;<span style="font-family: Arial, 'Liberation Sans', 'DejaVu Sans', sans-serif; font-size: 14px; line-height: 18px;" data-mce-style="font-family: Arial, 'Liberation Sans', 'DejaVu Sans', sans-serif; font-size: 14px; line-height: 18px;">CONFIG_STRICT_DEVMEM is disabled)</span><br>It would let me to read data directly from phys memory from user space.<br><br>But the next code make segmentation fault(there size = 1Mb):<br></p><p>int file;<br> void* start;</p><p>file=open("/dev/mem", O_RDWR | O_SYNC);<br></p><p>if ( (start = mmap(0, 1024*1024, PROT_READ | PROT_WRITE, MAP_SHARED, file, 0x27400000)) == MAP_FAILED ){<br>&nbsp; &nbsp; perror("mmap");<br>}<br></p><p>for (int offs = 0; offs&lt;50; offs++){<br>&nbsp; &nbsp; &nbsp;cout&lt;&lt;((char *)start)[offs];<br>}</p><p>Output of this code: "mmap: Invalid argument".</p><p>When I changed offset = 0x27400000 on 0, this code worked fine and program displayed trash. It also work for alot of offsets which I looked at /proc/iomem.<br>According to information from /proc/iomem, phys addr of CMA area (0x27400000 on my system) always situated in System RAM.</p><p>Does anyone have any ideas, how to mmap CMA area on /dev/mem? What am I doing wrong?<br>Thanks alot for any help!</p><p><br><br><br></p></BODY></HTML>