Re: [Xenomai] mmap when using in conjunction with mapper to retrieve memory mapped IO space

2018-05-01 Thread Pham, Phong

Hi Philippe,

Below are the snippets compiled with -fPIC in the DSO.  If I don't compile with 
-fPIC, I get this error:

# bin/vxapp
bin/vxapp: error while loading shared libraries: /usr/xenomai/lib/libscs750.so: 
R_PPC_REL24 relocation at 0x0ffacec4 for symbol `munmap' out of range

If I do compile with -fPIC for my DSO, this is the snippet on the executable 
(ie. from your example, that would be "vxapp" executable.)

...
...
int fd_eeprom = open("/dev/rtdm/eeprom,mapper0", O_RDWR);
uint32_t baseAddr_eeprom = (volatile uint32_t)mmap(NULL, 
SCS_EEPROM_PHYSICAL_SIZE, PROT_READ | PROT_WRITE, MAP_SHARED, fd_eeprom, 0);
printf("%s():  baseAddr_eeprom = 0x%08x\n", __func__, baseAddr_eeprom);
...
...

Below is the snippet from my DSO:

...
...
int fdm = open("/dev/rtdm/eeprom,mapper0", O_RDWR);
uint32_t baseAddr = -2;

printf("%s(): baseAddr = 0x%08x, errno = %d\n", __func__, baseAddr, errno);
baseAddr = (volatile uint32_t)mmap(NULL, SCS_EEPROM_PHYSICAL_SIZE, PROT_READ | 
PROT_WRITE, MAP_SHARED, fdm, 0);

if (baseAddr = -1)
{
printf("%s(): baseAddr = 0x%08x, errno = %d\n", __func__, baseAddr, errno);
}


For my DSO, LDFLAGS := $(shell $(XENO_CONFIG) --no-auto-init --posix --vxworks 
--ldflags) is in the makefile.  For my "vxapp", LDFLAGS := $(shell 
$(XENO_CONFIG) --posix --vxworks --ldflags)

Output:
scsEepromTest():  baseAddr_eeprom = 0x366ee000
sysEepromSet(): baseAddr = 0xfffe, errno = 0
sysEepromSet(): baseAddr = 0x, errno = 0

scsEepromTest() resides in the "vxapp" executable and sysEepromSet() resides in 
the DSO.

Phong.

-Original Message-
From: Philippe Gerum [mailto:r...@xenomai.org]
Sent: Thursday, April 19, 2018 12:26 AM
To: Pham, Phong; xenomai@xenomai.org
Cc: Hillman, Robert
Subject: Re: [Xenomai] mmap when using in conjunction with mapper to retrieve 
memory mapped IO space

On 04/19/2018 01:02 AM, Pham, Phong wrote:
> “This is likely happening because the default auto-init glue module for
> a final executable is mentioned in the flags, you either want to pass
> --auto-init-solib if you do need auto-init for bootstrapping a DSO, or
> --no-auto-init if you don't care about auto-bootstrap, along with
> --ldflags to xeno-config.
>
>
>
> http://www.xenomai.org/documentation/xenomai-3/html/man1/xeno-config/index.html“
>
>
>
>
>
> I see.  After adding either --auto-init-solib or --no-auto-init when
> compiling for library, along with compiler option -fPIC, mmap() still
> returns -1; (W/out -fPIC, munmap() cannot be relocated (similar types of
> error like before).

xeno-config --ldflags will return the Xenomai-related flags for linking,
which -fPIC is not. If you plan for building a DSO, you need to apply
the common rules stated in the ld documentation, which include
mentioning  -fPIC / -fpic for shared libs. This is not a Xenomai issue.

  However, errno is 0.  How come errno returns “no
> error” when mmap() returns failure?
>

Please post a test code snippet illustrating the problem.

--
Philippe.
Notice: This e-mail and any files transmitted with it may contain Data Device 
Corporation's privileged and proprietary information. It is intended solely for 
the use of the individual or entity to whom it is addressed. If you are not the 
named recipient of this transmission, any disclosure, copying, distribution or 
reliance on the contents of this message is prohibited. If you received this 
e-mail in error, please destroy it and any attached files and notify me 
immediately.
___
Xenomai mailing list
Xenomai@xenomai.org
https://xenomai.org/mailman/listinfo/xenomai


Re: [Xenomai] mmap when using in conjunction with mapper to retrieve memory mapped IO space

2018-04-19 Thread Philippe Gerum
On 04/19/2018 01:02 AM, Pham, Phong wrote:
> “This is likely happening because the default auto-init glue module for
> a final executable is mentioned in the flags, you either want to pass
> --auto-init-solib if you do need auto-init for bootstrapping a DSO, or
> --no-auto-init if you don't care about auto-bootstrap, along with
> --ldflags to xeno-config.
> 
>  
> 
> http://www.xenomai.org/documentation/xenomai-3/html/man1/xeno-config/index.html“
> 
>  
> 
>  
> 
> I see.  After adding either --auto-init-solib or --no-auto-init when
> compiling for library, along with compiler option -fPIC, mmap() still
> returns -1; (W/out -fPIC, munmap() cannot be relocated (similar types of
> error like before).

xeno-config --ldflags will return the Xenomai-related flags for linking,
which -fPIC is not. If you plan for building a DSO, you need to apply
the common rules stated in the ld documentation, which include
mentioning  -fPIC / -fpic for shared libs. This is not a Xenomai issue.

  However, errno is 0.  How come errno returns “no
> error” when mmap() returns failure?
> 

Please post a test code snippet illustrating the problem.

-- 
Philippe.

___
Xenomai mailing list
Xenomai@xenomai.org
https://xenomai.org/mailman/listinfo/xenomai


Re: [Xenomai] mmap when using in conjunction with mapper to retrieve memory mapped IO space

2018-04-18 Thread Pham, Phong
“This is likely happening because the default auto-init glue module for a final 
executable is mentioned in the flags, you either want to pass --auto-init-solib 
if you do need auto-init for bootstrapping a DSO, or --no-auto-init if you 
don't care about auto-bootstrap, along with --ldflags to xeno-config.



http://www.xenomai.org/documentation/xenomai-3/html/man1/xeno-config/index.html“





I see.  After adding either --auto-init-solib or --no-auto-init when compiling 
for library, along with compiler option -fPIC, mmap() still returns -1; (W/out 
-fPIC, munmap() cannot be relocated (similar types of error like before).  
However, errno is 0.  How come errno returns “no error” when mmap() returns 
failure?



Phong.



-Original Message-
From: Philippe Gerum [mailto:r...@xenomai.org]
Sent: Wednesday, April 18, 2018 12:58 PM
To: Pham, Phong; xenomai@xenomai.org
Cc: Hillman, Robert
Subject: Re: [Xenomai] mmap when using in conjunction with mapper to retrieve 
memory mapped IO space



On 04/18/2018 09:33 PM, Pham, Phong wrote:

>

> Hi,

>

> Instead of  symbol `mmap' out of range, I now have symbol `malloc' out of 
> range.  I removed  all the -fPIC in my environment.  I have to recompile 
> libc???  I never compiled libc and wants to avoid it.



Of course not.



>

> Any suggestion on

> R_PPC_REL24 relocation at 0x0ffacd3c for symbol `mmap/malloc' out of

> range

>



This is likely happening because the default auto-init glue module for a final 
executable is mentioned in the flags, you either want to pass --auto-init-solib 
if you do need auto-init for bootstrapping a DSO, or --no-auto-init if you 
don't care about auto-bootstrap, along with --ldflags to xeno-config.



http://www.xenomai.org/documentation/xenomai-3/html/man1/xeno-config/index.html



>

> I suggest you add the missing --posix in the LDFLAGS as well.  After all, I 
> copied my app from this very snippet and that's why I get the error.

>



As mentioned in the doc you are referring to, this example is about building a 
trivial VxWorks app, not a POSIX one.



--

Philippe.

Notice: This e-mail and any files transmitted with it may contain Data Device 
Corporation's privileged and proprietary information. It is intended solely for 
the use of the individual or entity to whom it is addressed. If you are not the 
named recipient of this transmission, any disclosure, copying, distribution or 
reliance on the contents of this message is prohibited. If you received this 
e-mail in error, please destroy it and any attached files and notify me 
immediately.
___
Xenomai mailing list
Xenomai@xenomai.org
https://xenomai.org/mailman/listinfo/xenomai


Re: [Xenomai] mmap when using in conjunction with mapper to retrieve memory mapped IO space

2018-04-18 Thread Philippe Gerum
On 04/18/2018 09:33 PM, Pham, Phong wrote:
> 
> Hi,
> 
> Instead of  symbol `mmap' out of range, I now have symbol `malloc' out of 
> range.  I removed  all the -fPIC in my environment.  I have to recompile 
> libc???  I never compiled libc and wants to avoid it.

Of course not.

> 
> Any suggestion on
> R_PPC_REL24 relocation at 0x0ffacd3c for symbol `mmap/malloc' out of range
> 

This is likely happening because the default auto-init glue module for a
final executable is mentioned in the flags, you either want to pass
--auto-init-solib if you do need auto-init for bootstrapping a DSO, or
--no-auto-init if you don't care about auto-bootstrap, along with
--ldflags to xeno-config.

http://www.xenomai.org/documentation/xenomai-3/html/man1/xeno-config/index.html

> 
> I suggest you add the missing --posix in the LDFLAGS as well.  After all, I 
> copied my app from this very snippet and that's why I get the error.
> 

As mentioned in the doc you are referring to, this example is about
building a trivial VxWorks app, not a POSIX one.

-- 
Philippe.

___
Xenomai mailing list
Xenomai@xenomai.org
https://xenomai.org/mailman/listinfo/xenomai


Re: [Xenomai] mmap when using in conjunction with mapper to retrieve memory mapped IO space

2018-04-18 Thread Pham, Phong

Hi,

Instead of  symbol `mmap' out of range, I now have symbol `malloc' out of 
range.  I removed  all the -fPIC in my environment.  I have to recompile 
libc???  I never compiled libc and wants to avoid it.

Any suggestion on
R_PPC_REL24 relocation at 0x0ffacd3c for symbol `mmap/malloc' out of range

is appreciated.

This is after I add LDFLAGS (from xeno-config) during the process of creating a 
shared library.

Phong.

-Original Message-
From: Pham, Phong
Sent: Tuesday, April 17, 2018 7:22 PM
To: 'Philippe Gerum'; xenomai@xenomai.org
Cc: Hillman, Robert
Subject: RE: [Xenomai] mmap when using in conjunction with mapper to retrieve 
memory mapped IO space


Hi Philippe and all,

Regarding "Your app may be missing symbol wrapping. Please check out this doc:

https://xenomai.org/documentation/xenomai-3/html/xeno3prm/group__cobalt__api.html;

Thanks for the tip.  In the Makefile fragment from this link:
https://xenomai.org/building-applications-with-xenomai-3-x/

I suggest you add the missing --posix in the LDFLAGS as well.  After all, I 
copied my app from this very snippet and that's why I get the error.

On the same idea (using LDFLAGS from xeno-config), I would like to create a 
dynamically linked library (.so).  Without the LDFLAGS from xeno-config, my 
library loads fine (but will fail when mmap is called); with the LDFLAGS that 
has --posix, I get this error when loading:

R_PPC_REL24 relocation at 0x0ffacd3c for symbol `mmap' out of range

Does this mean I have to recompile all of the Xenomai library with -fPIC?  I 
didn't see anything regarding that choice during "configure" but peeking into 
the configure script, there are a few -fPIC occurrences.  Currently, I am using 
"Building the PPC32 libraries" instruction and also I didn't need to perform 
./script/bootstrap b/c I am building it from the release tarball.

$xenomai_root/configure --host=powerpc-linux --with-core=cobalt 
--enable-debug=symbols

Suggestion on the error above and/or compiling Xenomai library w/ -fPIC is 
appreciated.

Just fyi w/ regard to your updated "comment fix" on how to mmap(), I don't know 
if you need to update udd.h (right above struct udd_memregion) as well.  i.e. 
the same comment exists there but don't know if the comment there is retrieved 
from the location where you made the "comment fix".

Phong.

-Original Message-
From: Philippe Gerum [mailto:r...@xenomai.org]
Sent: Thursday, April 12, 2018 1:58 AM
To: Pham, Phong; xenomai@xenomai.org
Cc: Hillman, Robert
Subject: Re: [Xenomai] mmap when using in conjunction with mapper to retrieve 
memory mapped IO space

On 04/10/2018 09:03 PM, Pham, Phong wrote:
>
> Hi,
>
> According to page 651
> https://xenomai.org/documentation/xenomai-3/pdf/xeno3prm.pdf
>
>
> This will make such region accessible via the mapper device using the
> following sequence of code, via the default ->mmap() handler from the UDD 
> core:
> int fd, fdm;
> void *p;
> fd = open("/dev/foocard", O_RDWR);
> fdm = open("/dev/foocard,mapper@2", O_RDWR); p = mmap(NULL, 4096,
> PROT_READ|PROT_WRITE, 0, fdm, 0);
>
>
> I have several questions:
>
> 1)  It looks like the 4th argument of mmap (the one to the left of "fdm") 
> needs to be either MAP_SHARED or MAP_PRIVATE
>
> 2)  The "@" character right after "mapper" is not valid (ie. there should 
> be no "@" character at all)
>
> 3)  /dev/foocard should be /dev/rtdm/foocard


Fixed, thanks.

https://xenomai.org/documentation/xenomai-3/html/xeno3prm/structudd__memregion.html#udd_memory_region

>
> here's my real question:
>
> Assuming all 3 of the above is valid from user space, and on the
> kernel space, I followed the ex. to create memory region, etc. such
> that I do see my device
>
> # ls -l dev/rtdm
> crw---1 root root  252,   0 Jan  1 00:00 autotune
> crw---1 root root  247,   0 Jan  1 00:00 eeprom
> crw---1 root root  246,   0 Jan  1 00:00 eeprom,mapper0
> crw---1 root root  254,   0 Jan  1 00:00 memdev-private
> crw---1 root root  254,   1 Jan  1 00:00 memdev-shared
> crw---1 root root  253,   0 Jan  1 00:00 memdev-sys
> crw---1 root root  249,   0 Jan  1 00:00 mmio
> crw---1 root root  248,   0 Jan  1 00:00 mmio,mapper0
> crw---1 root root  248,   1 Jan  1 00:00 mmio,mapper1
> crw---1 root root  248,   2 Jan  1 00:00 mmio,mapper2
> crw---1 root root  248,   3 Jan  1 00:00 mmio,mapper3
> crw---1 root root  248,   4 Jan  1 00:00 mmio,mapper4
> crw---1 root root  250,   0 Jan  1 00:00 switchtest
> crw---1 root root  251,   0 Jan  1 00:00 timerbench
>
>
> like /dev/rtdm/eeprom and /dev/rtdm/eeprom,mapper0  etc. I don't see
> my kernel hook ever gets called
>
>
> static struct udd_device eeprom = {
>   .device_flags = RTDM_NAMED_DEVICE,
>   .device_name = "eeprom",
>   

Re: [Xenomai] mmap when using in conjunction with mapper to retrieve memory mapped IO space

2018-04-17 Thread Pham, Phong

Hi Philippe and all,

Regarding "Your app may be missing symbol wrapping. Please check out this doc:

https://xenomai.org/documentation/xenomai-3/html/xeno3prm/group__cobalt__api.html;

Thanks for the tip.  In the Makefile fragment from this link:
https://xenomai.org/building-applications-with-xenomai-3-x/

I suggest you add the missing --posix in the LDFLAGS as well.  After all, I 
copied my app from this very snippet and that's why I get the error.

On the same idea (using LDFLAGS from xeno-config), I would like to create a 
dynamically linked library (.so).  Without the LDFLAGS from xeno-config, my 
library loads fine (but will fail when mmap is called); with the LDFLAGS that 
has --posix, I get this error when loading:

R_PPC_REL24 relocation at 0x0ffacd3c for symbol `mmap' out of range

Does this mean I have to recompile all of the Xenomai library with -fPIC?  I 
didn't see anything regarding that choice during "configure" but peeking into 
the configure script, there are a few -fPIC occurrences.  Currently, I am using 
"Building the PPC32 libraries" instruction and also I didn't need to perform 
./script/bootstrap b/c I am building it from the release tarball.

$xenomai_root/configure --host=powerpc-linux --with-core=cobalt 
--enable-debug=symbols

Suggestion on the error above and/or compiling Xenomai library w/ -fPIC is 
appreciated.

Just fyi w/ regard to your updated "comment fix" on how to mmap(), I don't know 
if you need to update udd.h (right above struct udd_memregion) as well.  i.e. 
the same comment exists there but don't know if the comment there is retrieved 
from the location where you made the "comment fix".

Phong.

-Original Message-
From: Philippe Gerum [mailto:r...@xenomai.org]
Sent: Thursday, April 12, 2018 1:58 AM
To: Pham, Phong; xenomai@xenomai.org
Cc: Hillman, Robert
Subject: Re: [Xenomai] mmap when using in conjunction with mapper to retrieve 
memory mapped IO space

On 04/10/2018 09:03 PM, Pham, Phong wrote:
>
> Hi,
>
> According to page 651
> https://xenomai.org/documentation/xenomai-3/pdf/xeno3prm.pdf
>
>
> This will make such region accessible via the mapper device using the
> following sequence of code, via the default ->mmap() handler from the UDD 
> core:
> int fd, fdm;
> void *p;
> fd = open("/dev/foocard", O_RDWR);
> fdm = open("/dev/foocard,mapper@2", O_RDWR); p = mmap(NULL, 4096,
> PROT_READ|PROT_WRITE, 0, fdm, 0);
>
>
> I have several questions:
>
> 1)  It looks like the 4th argument of mmap (the one to the left of "fdm") 
> needs to be either MAP_SHARED or MAP_PRIVATE
>
> 2)  The "@" character right after "mapper" is not valid (ie. there should 
> be no "@" character at all)
>
> 3)  /dev/foocard should be /dev/rtdm/foocard


Fixed, thanks.

https://xenomai.org/documentation/xenomai-3/html/xeno3prm/structudd__memregion.html#udd_memory_region

>
> here's my real question:
>
> Assuming all 3 of the above is valid from user space, and on the
> kernel space, I followed the ex. to create memory region, etc. such
> that I do see my device
>
> # ls -l dev/rtdm
> crw---1 root root  252,   0 Jan  1 00:00 autotune
> crw---1 root root  247,   0 Jan  1 00:00 eeprom
> crw---1 root root  246,   0 Jan  1 00:00 eeprom,mapper0
> crw---1 root root  254,   0 Jan  1 00:00 memdev-private
> crw---1 root root  254,   1 Jan  1 00:00 memdev-shared
> crw---1 root root  253,   0 Jan  1 00:00 memdev-sys
> crw---1 root root  249,   0 Jan  1 00:00 mmio
> crw---1 root root  248,   0 Jan  1 00:00 mmio,mapper0
> crw---1 root root  248,   1 Jan  1 00:00 mmio,mapper1
> crw---1 root root  248,   2 Jan  1 00:00 mmio,mapper2
> crw---1 root root  248,   3 Jan  1 00:00 mmio,mapper3
> crw---1 root root  248,   4 Jan  1 00:00 mmio,mapper4
> crw---1 root root  250,   0 Jan  1 00:00 switchtest
> crw---1 root root  251,   0 Jan  1 00:00 timerbench
>
>
> like /dev/rtdm/eeprom and /dev/rtdm/eeprom,mapper0  etc. I don't see
> my kernel hook ever gets called
>
>
> static struct udd_device eeprom = {
>   .device_flags = RTDM_NAMED_DEVICE,
>   .device_name = "eeprom",
>   .ops = {
>  .close = phong_scs750_close,
>  .open = phong_scs750_open,
>  .mmap = phong_scs750_mmap,
>   }
>
> By that, I mean phong_scs750_open, phong_scs750_mmap never gets invoked.  
> mmap() from user space returns -1 with errno value of 19 (ENODEV).  Any 
> advise?

Your app may be missing symbol wrapping. Please check out this doc:

https://xenomai.org/documentation/xenomai-3/html/xeno3prm/group__cobalt__api.html


--
Philippe.
Notice: This e-mail and any files transmitted with it may contain Data Device 
Corporation's privileged and proprietary information. It is 

Re: [Xenomai] mmap when using in conjunction with mapper to retrieve memory mapped IO space

2018-04-12 Thread Philippe Gerum
On 04/10/2018 09:03 PM, Pham, Phong wrote:
> 
> Hi,
> 
> According to page 651
> https://xenomai.org/documentation/xenomai-3/pdf/xeno3prm.pdf
> 
> 
> This will make such region accessible via the mapper device using the 
> following sequence of code, via
> the default ->mmap() handler from the UDD core:
> int fd, fdm;
> void *p;
> fd = open("/dev/foocard", O_RDWR);
> fdm = open("/dev/foocard,mapper@2", O_RDWR);
> p = mmap(NULL, 4096, PROT_READ|PROT_WRITE, 0, fdm, 0);
> 
> 
> I have several questions:
> 
> 1)  It looks like the 4th argument of mmap (the one to the left of "fdm") 
> needs to be either MAP_SHARED or MAP_PRIVATE
> 
> 2)  The "@" character right after "mapper" is not valid (ie. there should 
> be no "@" character at all)
> 
> 3)  /dev/foocard should be /dev/rtdm/foocard


Fixed, thanks.

https://xenomai.org/documentation/xenomai-3/html/xeno3prm/structudd__memregion.html#udd_memory_region

> 
> here's my real question:
> 
> Assuming all 3 of the above is valid from user space, and on the kernel 
> space, I followed the ex. to create memory region, etc. such that I do see my 
> device
> 
> # ls -l dev/rtdm
> crw---1 root root  252,   0 Jan  1 00:00 autotune
> crw---1 root root  247,   0 Jan  1 00:00 eeprom
> crw---1 root root  246,   0 Jan  1 00:00 eeprom,mapper0
> crw---1 root root  254,   0 Jan  1 00:00 memdev-private
> crw---1 root root  254,   1 Jan  1 00:00 memdev-shared
> crw---1 root root  253,   0 Jan  1 00:00 memdev-sys
> crw---1 root root  249,   0 Jan  1 00:00 mmio
> crw---1 root root  248,   0 Jan  1 00:00 mmio,mapper0
> crw---1 root root  248,   1 Jan  1 00:00 mmio,mapper1
> crw---1 root root  248,   2 Jan  1 00:00 mmio,mapper2
> crw---1 root root  248,   3 Jan  1 00:00 mmio,mapper3
> crw---1 root root  248,   4 Jan  1 00:00 mmio,mapper4
> crw---1 root root  250,   0 Jan  1 00:00 switchtest
> crw---1 root root  251,   0 Jan  1 00:00 timerbench
> 
> 
> like /dev/rtdm/eeprom and /dev/rtdm/eeprom,mapper0  etc. I don't see my 
> kernel hook ever gets called
> 
> 
> static struct udd_device eeprom = {
>   .device_flags = RTDM_NAMED_DEVICE,
>   .device_name = "eeprom",
>   .ops = {
>  .close = phong_scs750_close,
>  .open = phong_scs750_open,
>  .mmap = phong_scs750_mmap,
>   }
> 
> By that, I mean phong_scs750_open, phong_scs750_mmap never gets invoked.  
> mmap() from user space returns -1 with errno value of 19 (ENODEV).  Any 
> advise?

Your app may be missing symbol wrapping. Please check out this doc:

https://xenomai.org/documentation/xenomai-3/html/xeno3prm/group__cobalt__api.html

-- 
Philippe.

___
Xenomai mailing list
Xenomai@xenomai.org
https://xenomai.org/mailman/listinfo/xenomai