Feed for discussion OSTech in project QNX Operating System.
http://community.qnx.com/sf/discussion/do/listTopics/projects.core_os/discussion.newcode
Posts for OSTechpost122515: QXN 7.0 Screen Does Not Working on R-Car
http://community.qnx.com/sf/go/post122515
Hello,
I have Renesas R-Car M3W board. I installed screen graphics from QNX Software Center for SDP 7.0 and I used default graphics build file. The board working but screen does not work. I saw this error on slog2info:
```
Jan 01 00:00:02.090 screen.77843 slog* 300 screen: starting up...
Jan 01 00:00:02.090 screen.77843 slog 300 screen: Configuration file: /usr/lib/graphics/rcarm3/graphics.conf
Jan 01 00:00:02.094 screen.77843 slog 200 [rcardu]ERR : Did not detect a supported revision of chip: 5220
```
My chip revision is:
```
NOTICE: PPR is R-Car M3 Ver.3.0
```
How can I resolve this issue?
Best Regards,
FarukFaruk Kilavuz2024-04-01T11:50:18Zpost122514: Read from and write to I/O registers and memory
http://community.qnx.com/sf/go/post122514
Hello all,
BACKGROUND:
--------------------------------
I am working on a project that is using QNX 7.1.0 2023/07/14-18:28:39EDT NXP_i.MX8QXP_CPU_Board aarch64le
I am currently working on features related to IFS authentication, and will eventually want to program the OTP memory with public keys to allow authentication to proceed with correctly signed IFSs. Before burning the OTP fuses, I would like to test that my pki/signing/authentication are functioning correctly. For this reason, I'd like to leverage the i.MX8QXP shadow registers to simulate writing/reading the OTP memory. As per page 194, section 7.1.2 of the reference manual, this should be possible:
"If not locked then it can be read sensed and programmed and the shadow registers can be overwritten (to allow emulation of programming without actually blowing fuses)."
QUESTION:
----------------
I am unable to use QNX utilities like `io` or even `dd` to read from these shadow registers. For example, I have tried to read the default (unprogrammed) UNIQUE_ID value from shadow register 0x0900 with the following commands as root user:
# io b 0x0900
# dd if=/dev/mem skip=$((0x0900)) bs=16 count=1
Both commands fail. I have attached the error output for both commands to this forum post. Any ideas about what I might be misunderstanding/overlooking would be greatly appreciated!Ibrahim Youssef2024-03-28T19:44:08Zpost122512: Re: How to get performance metrics from API
http://community.qnx.com/sf/go/post122512
You're right, there isn't a universally portable C API for monitoring process memory and CPU utilization. However, for Linux you can definitely leverage the /proc filesystem.
Here's how to monitor your process's memory utilization and CPU utilization on Linux using /proc:
1. Memory Utilization:
a. Read the contents of the virtual memory statistic file /proc/self/statm. This file contains information about the memory usage of the process.
2. CPU Utilization:
a. You can't access your process's specific CPU utilization from /proc. However, you can get system-wide CPU usage statistics by reading files like /proc/stat or /proc/loadavg.
Monitor Linux Process Memory Usage Using C/C++: https://stackoverflow.com/questions/669438/how-to-get-memory-usage-at-runtime-using-c
For a more comprehensive approach that might involve fetching data from various sources and platforms, consider using B2B data providers and their APIs. B2B data providers offer business data that can be integrated into your application using APIs (Application Programming Interfaces). This data can include business contact information, firmography data, and even industry trends, depending on the provider. By leveraging B2B data APIs, you can enrich your application with valuable business insights and potentially improve your application's functionality. See this article for more details on using B2B data integration APIs: B2B Data Integration APIs for Your App: https://www.globaldatabase.com/why-use-b2b-data-providers-apis-when-building-your-appEvan Dellani2024-03-20T12:35:20Zpost122508: Re: QNX 6.5 setrlimit not working and allocating more than 2Gig seems impossible
http://community.qnx.com/sf/go/post122508
The available user address space on a 32bit system on qnx depends on the architecture.
see http://www.qnx.com/developers/docs/6.6.0_anm11_wf10/#com.qnx.doc.neutrino.user_guide/topic/limits_PlatformSpecific.html
so having 2/3.5g available user address space doesn't mean you are able to do a contiguous virtual address space allocation of that size.
There is space also used for the stack, heap, executable, libs, etc...
you can use something like pidin mem to see the memory layout in the process.
http://www.qnx.com/developers/docs/7.0.0/#com.qnx.doc.neutrino.utilities/topic/p/pidin.htmlJohn Kearney2024-03-12T08:16:12Zpost122507: Re: QNX 6.5 setrlimit not working and allocating more than 2Gig seems impossible
http://community.qnx.com/sf/go/post122507
> I've been working with a client who has some 16Gig 6.6 machines and they want
6.5 or 6.6? (confusion between Subject and text here)
> to use all of the memory and be able to allocate the maximum amount for the
> address space. Somewhere I read that this is 3.5Gig.
>
> We are using -x on startup-* and we see the memory.
> We start test programs with "on -P". This works. We can allocate all the
> memory, just not more than 2Gig per process.
>
> We've try to use setrlimit(RLIMIT_AS, ...) and it doesn't work. We read after
> writing the limit and it doesn't change.
can you describe in detail how you're testing this? From what you write, it seems you're assuming that this will change the size of the process's address space right away ... is that the case?
> Mysteriously "ulimit -a" show that memory is unlimited.
>
> We've tried allocating using malloc() which will only handle 2Gig at a time
> and mmap() with the same results.Michael Schuster2024-03-12T06:16:49Zpost122506: QNX 6.5 setrlimit not working and allocating more than 2Gig seems impossible
http://community.qnx.com/sf/go/post122506
I've been working with a client who has some 16Gig 6.6 machines and they want to use all of the memory and be able to allocate the maximum amount for the address space. Somewhere I read that this is 3.5Gig.
We are using -x on startup-* and we see the memory.
We start test programs with "on -P". This works. We can allocate all the memory, just not more than 2Gig per process.
We've try to use setrlimit(RLIMIT_AS, ...) and it doesn't work. We read after writing the limit and it doesn't change.
Mysteriously "ulimit -a" show that memory is unlimited.
We've tried allocating using malloc() which will only handle 2Gig at a time and mmap() with the same results.Mitchell Schoenbrun2024-03-12T02:14:53Zpost122505: Re: PSelect Getting Blocked For A Long Time
http://community.qnx.com/sf/go/post122505
>
> Hi Michael Schuster ,
>
> I have provided the details. Is this sufficient for you to narrow down the
> issue.
no, you provided code snippets.
Code that compiles and runs and demonstrates what you claim to see is something different.
In addition to actual runnable code, show how to run it to reproduce the behaviour.
regards
> Please let us know .
>
> Thanks
> Sayooj Mandodi
>Michael Schuster2024-03-04T10:11:59Zpost122504: Re: PSelect Getting Blocked For A Long Time
http://community.qnx.com/sf/go/post122504
Hi Michael Schuster ,
I have provided the details. Is this sufficient for you to narrow down the issue.
Please let us know .
Thanks
Sayooj MandodiSayooj M(deleted)2024-03-04T09:49:34Zpost122503: Re: Video decode on RPi4
http://community.qnx.com/sf/go/post122503
No luck so far. Seems like video decoding plugins exist for x86 and i.MX8, but have not been successful seeing how to do this on the pi. If anyone has gstreamer libs working, that would be awesome. The kmscube example running on Raspian works well for video decode and it uses the gstreamer pipeline (which I realize is quite involved).David Sheinberg2024-03-03T18:38:26Zpost122501: Re: PSelect Getting Blocked For A Long Time
http://community.qnx.com/sf/go/post122501
> we had printed FD value... in case of issue, FD was less than 255.
I mean, FD was coming random value , which was always less than 255 .Sayooj M(deleted)2024-02-29T12:39:55Zpost122500: Re: PSelect Getting Blocked For A Long Time
http://community.qnx.com/sf/go/post122500
we had printed FD value... in case of issue, FD was less than 255.Sayooj M(deleted)2024-02-29T12:33:32Zpost122499: Virtio shmem
http://community.qnx.com/sf/go/post122499
Hello everyone , I am having a difficulty to implement the virito shmem between guest and host.
I have done the configuraiton part in the VM qvmconf file and issued the commands guest-shmem with same address and interrupt number that are in the configuration file.
The problem is in the host i can see the share area created under /dev/shmem/SHMEM_GUEST but when i try to cd or do any operation i can`t do it.
How can i write to that area from either host or guest and read it back ?Muhammed Alaaeddin(deleted)2024-02-27T15:15:06Zpost122498: Re: sdmmc driver on rpi4 version
http://community.qnx.com/sf/go/post122498
> Do you specify the file system type when mounting?
> QNX6FS is the default, other file systems must be specified at the mount
> command, e.g. "-t dos"
Ok, I think I was mislead by the documentation. The utility reference of mount says:
If you don't specify the filesystem, mount tries to determine which to use. If it can't figure out which to use, it uses qnx6.
Mounting with -t dos makes the partition accessible I can see the files.
Many thanks guys, fantastic support (both info and speed)!Zsolt Nagy2024-02-27T14:30:18Zpost122497: Re: Video decode on RPi4
http://community.qnx.com/sf/go/post122497
Did you get anywhere with that? My naive assumption is that if both screen and mm-renderer work on the platform, then there is no reason why video wouldn't.
--EladElad Lahav2024-02-27T14:23:03Zpost122496: Re: sdmmc driver on rpi4 version
http://community.qnx.com/sf/go/post122496
Silly question - are you sure your mount command is correct for a FAT partition? Can you share it?
--EladElad Lahav2024-02-27T14:20:01Zpost122495: Re: sdmmc driver on rpi4 version
http://community.qnx.com/sf/go/post122495
Do you specify the file system type when mounting?
QNX6FS is the default, other file systems must be specified at the mount command, e.g. "-t dos"Gerd Wetzel2024-02-27T14:19:27Zpost122494: Re: sdmmc driver on rpi4 version
http://community.qnx.com/sf/go/post122494
If you got this far then the SD card clearly works properly. The second problem I mentioned results in not being able to mount any partition.
There's a chkdosfs utility in the SDP. Perhaps it can shed some light on what's wrong with the FAT partition.
--EladElad Lahav2024-02-27T14:17:40Zpost122493: Re: sdmmc driver on rpi4 version
http://community.qnx.com/sf/go/post122493
> There are two known issues with the SD card driver:
>
> 1. Newer revision boards (silently) changed the DMA range for the hardware.
> You probably have the C0 version. We have recently fixed that so that the
> driver now detects things automatically. For now just dropping that option
> from the command line should be fine (unless you are building an image that
> needs to support both hardware versions).
> 2. Not all SD cards work properly. I have no idea why, but then again I'm not
> a hardware/driver guy. I have had no issues with SanDisk cards, but many
> people have had issues with some other brands.
>
> Finally, you may want to use a more robust file system than FAT.
>
> I love Raspberry Pi - it's a technological marvel in terms of price/
> performance. But the foundation does a really lousy job at publishing
> information about the hardware.
>
> --Elad
Thanks Elad for the quick follow-up.
I am just dropping the option for now, I do not need to support other HW, so that works.
About file systems: I've tried to create two additional partitions, one FAT32 (type 14) and one qnx6fs (type 179).
Here are my observations:
- both partitions created via the QNX host and persist in the partition table after a reboot
- both partitions formatted with their respective formatting tool (mkdosfs and mkqnx6fs)
- both partitions mount
- the qnx6 one can be accessed fine after mounting
- the fat32 says "Corrupted file system detected"
I am also checking the card with GParted on my Ubuntu PC, I can see all three partitions (the FAT32 with the IFS, and the two created by the QNX host). The second one shows up with "unknown" file system, as expected, and the third one is recognized as FAT32.
It seems like everything is working fine except actually reading the file system.
The preference towards FAT32 is motivated by a need: I would like to be able to copy files to this "data" partitions using a Windows machine...
Should I just buy more SD cards and hope for the best? I would really like to understand at least what's wrong. The HW should be ok as the partitions are created as expected, it is really only just accessing them after mounting...Zsolt Nagy2024-02-27T14:13:30Zpost122492: Re: sdmmc driver on rpi4 version
http://community.qnx.com/sf/go/post122492
There are two known issues with the SD card driver:
1. Newer revision boards (silently) changed the DMA range for the hardware. You probably have the C0 version. We have recently fixed that so that the driver now detects things automatically. For now just dropping that option from the command line should be fine (unless you are building an image that needs to support both hardware versions).
2. Not all SD cards work properly. I have no idea why, but then again I'm not a hardware/driver guy. I have had no issues with SanDisk cards, but many people have had issues with some other brands.
Finally, you may want to use a more robust file system than FAT.
I love Raspberry Pi - it's a technological marvel in terms of price/performance. But the foundation does a really lousy job at publishing information about the hardware.
--EladElad Lahav2024-02-27T00:38:29Zpost122491: Re: sdmmc driver on rpi4 version
http://community.qnx.com/sf/go/post122491
I am attaching the slog for the build without the "bs=bmstr_base=0xc0000000 "
I can immediately see a difference under the SD SW CAPS portion:
Not working, bmstr_base present:
slog 1800 SD SW CAPS:
slog 1800 bus mode 0x0, cmd sys 0x0
slog 1800 drv type 0x0, curr limit 0x0
slog 1800 dtr 0
slog 1800 CFG: Timing LS, DTR 25000000, Bus Width 1 bit
Somewhat working, bmstr_base removed:
slog 1800 SD SW CAPS:
slog 1800 bus mode 0x3, cmd sys 0x1
slog 1800 drv type 0x1, curr limit 0x1
slog 1800 dtr 50000000
slog 1800 CFG: Timing HS, DTR 50000000, Bus Width 4 bitZsolt Nagy2024-02-26T22:38:12Zpost122490: Re: sdmmc driver on rpi4 version
http://community.qnx.com/sf/go/post122490
Hi guys, new to the forum,
I am having the same issue with the RPi4 BSP.
The driver is started with:
devb-sdmmc-bcm2711 cam pnp,verbose mem name=below1G sdio addr=0xfe340000,irq=158,bs=bmstr_base=0xc0000000, verbose=4 sdmmc verbose=4 disk name=sd
sd0 shows up in /dev but no partitions, fdisk confirms.
Interestingly, if I remove the busmaster base option, I can see the partitionts (sd0t11 and sd0t12 as expected, two FAT32 partitions) but upon mounting and accessing them, it still complains about corrupted file system.
I am attaching the slog. Any help would be greatly appreciated.
RPi4 8GB, SD card is a 64GB Samsung. First partition ~650MB (contains the IFS), second partition 1GB.Zsolt Nagy2024-02-26T21:54:17Zpost122479: Video decode on RPi4
http://community.qnx.com/sf/go/post122479
I've got mm-renderer working on the Pi (QNX 7.1) and can playback audio from various media (including video files). Works well. But as of now it seems there is no video playback supported on the Pi - is that right? (The system reports no decoder found, and I see the hardware decoder plugins for some platforms, but not the VideoCore that's on the Pi.)
Thanks!David Sheinberg2024-02-11T00:56:02Zpost122478: Re: PCI/PCIe interrupts don't work as expected
http://community.qnx.com/sf/go/post122478
HI, I tried the InterruptQuery() function and it showed that the source was masked more than once sometimes.
However, it shows the same for PCI and PCIe devices and PCIe devices do work.
I made a mistake in saying that one of the Optilex's worked. I tested it again today and it didn't. However I found a
computer in which all devices (PCI/PCIe) seem to work correctly even when interrupts are shared. Maybe it's an
issue with the hardware (DELL Optiplex 9010, Intel(R) 7 Series/C216 Chipset) or the BSP is not fully configured.
For now this works for me. Thanks for your help.Alexander Minor2024-02-05T13:19:16Zpost122477: Re: PCI/PCIe interrupts don't work as expected
http://community.qnx.com/sf/go/post122477
I am not a PCI expert, but one thing to watch out for when sharing interrupts is that the source will remain masked as long as at least one attached handler has it masked.
You can use the new InterruptQuery() call to see if the source is masked while your driver is waiting for it.
--EladElad Lahav2024-02-02T13:05:17Zpost122476: PCI/PCIe interrupts don't work as expected
http://community.qnx.com/sf/go/post122476
Hi,
I am currently porting a device driver from QNX7.1 to QNX8.0 and am observing
weird behavior (maybe a bug?) when it comes to PCI/PCIe interrupts.
When I only use PCIe devices, the interrupt handling using InterruptAttachThread()
or InterruptAttachEvent() and InterruptWait() works like expected.
When I add a PCI device to this combination, this device will stay inside
InterruptWait() and not return anymore.
I am using the x86_64 BSP and I tried it on two DELL Optiplex 9010.
Using only a single PCI device (no PCIe) in those PC's also shows different
results. In one of them it worked as expected, in the other it also stayed inside
InterruptWait().
Flags used for InterruptAttachThread/Event: _NTO_INTR_FLAGS_NO_UNMASK | _NTO_INTR_FLAGS_END.
Flags used for InterruptWait: _NTO_INTR_WAIT_FLAGS_UNMASK | _NTO_INTR_WAIT_FLAGS_FAST.
The devices use legacy interrupts, not MSI.
I attached the output of pci-tool for the working (pcie_only) and failing (pcie_and_pci)
environment. The only thing I see is, that they share an interrupt. The devices
have the vid 15cf and use IRQ 16 & 18. There is also an Intel USB Controller
that uses IRQ 16.
Are there any known PCI/PCIe issues for specific CPU/chipsets?
Does somebody know a way I could debug/resolve this issue?Alexander Minor2024-02-02T12:52:35Zpost122475: Re: PSelect Getting Blocked For A Long Time
http://community.qnx.com/sf/go/post122475
That's not what I asked. What is the numerical value of the fd? select() has an upper limit of 255.Elad Lahav2024-02-01T12:57:53Zpost122474: Re: PSelect Getting Blocked For A Long Time
http://community.qnx.com/sf/go/post122474
We have verified that during issue scenario correct FD is being passed to pselect.
Same doubt was raised and when pselect was getting blocked we printed the FD and made sure its valid one .Sayooj M(deleted)2024-02-01T12:54:56Zpost122473: Re: PSelect Getting Blocked For A Long Time
http://community.qnx.com/sf/go/post122473
What is the highest fd in this case? Note that select() uses a fixed value for the fd set, and is generally considered as a bad interface as a result. If the highest fd is greater than 255 then you need to re-define FD_SETSIZE. Better yet, switch to poll().
--EladElad Lahav2024-02-01T12:04:06Zpost122472: Re: PSelect Getting Blocked For A Long Time
http://community.qnx.com/sf/go/post122472
we have a use case where multiple clients are writing data to same socket which is receiver end.
Socket type used is SOCK_DGRAM
Operating System: QNX 7
Platform: Qualcomm 6145
setsockopt BUFFER_SIZE: 246000
We encountered no buffer exception in our code. Below is the syntax for pselect system call.. and we are using send/recv apis to send and received the data.
pselect((maxFd + 1), &mFdSet, NULL, NULL, NULL, NULL)
send(mFd,buffer,uiSize, MSG_WAITALL);
recv(fd, buffer,uiSize,MSG_WAITALL);
when multiple clients were trying to write the data, send api was returning "no buffer" exception.
when we checked in detail and added log before and after pselect system call, we observed that initially when we were pushing data before and after pselect prints were coming
and then suddenly "after pselect" print stopped coming although data was being pushed from client side, after some time when socket buffer becomes full, clinets started getting "no buffer".Sayooj M(deleted)2024-02-01T11:56:59Zpost122471: Re: PSelect Getting Blocked For A Long Time
http://community.qnx.com/sf/go/post122471
Hi,
side note: one message would have been quite enough :-)
> Facing one issue where PSELECT system call is getting blocked.. although data
> is being pushed continuously from one end , However PSELECT is not getting
> unblocked. After some time we see socket buffer gets completely filled and it
> starts throwing no buffer exception.
>
> As a recovery , we added timeout,
> We would like to know if there is any such known issue with PSELECT.
I'd suggest you try to create a minimal reproduction case that clearly demonstrates the behaviour you're describing. Also make sure to add information about version of QNX and the platform you're using.
HTH
MichaelMichael Schuster2024-02-01T06:47:51Zpost122470: Re: PSELECT System Call Getting Blocked Forever
http://community.qnx.com/sf/go/post122470
Facing one issue where PSELECT system call is getting blocked.. although data is being pushed continuously from one end , However PSELECT is not getting unblocked. After some time we see socket buffer gets completely filled and it starts throwing no buffer exception.
As a recovery , we added timeout,
We would like to know if there is any such known issue with PSELECT.Sayooj M(deleted)2024-02-01T06:16:14Zpost122469: PSelect Getting Blocked For A Long Time
http://community.qnx.com/sf/go/post122469
Facing one issue where PSELECT system call is getting blocked.. although data is being pushed continuously from one end , However PSELECT is not getting unblocked. After some time we see socket buffer gets completely filled and it starts throwing no buffer exception.
As a recovery , we added timeout,
We would like to know if there is any such known issue with PSELECT.Sayooj M(deleted)2024-02-01T06:13:07Zpost122467: RPi4+screen with two displays
http://community.qnx.com/sf/go/post122467
I see in the release notes that the driver seems to support two outputs and I see the firmware loaded (the gradient colored square) if I plug two in. Any pointers for setting up the config file to support two pipelines? I'm just trying to see gles2-gears appear on the second display (using the -display= option).
And if anyone could verify if the eglSwapBuffers() actually waits for the vertical sync (or if screen_wait_vsync() works on the RPi), I'd be most appreciative. Trying to get good timing on display refreshes, but can't quite get that working.
Thanks!David Sheinberg2024-01-27T18:31:25Zpost122447: Re: to get cpu percentage for each threads, not process
http://community.qnx.com/sf/go/post122447
Hi,there
I'm encountering an issue: at time t1, let t1_cpu = debug_thread_t.sutime, and at time t2, t2_cpu = debug_thread_t.sutime, with t2 - t1 = 1 being a constant value. Simultaneously, Δt_cpu is also a stable value. However, when I invoke settimeofday() to modify the system time, Δt_cpu immediately becomes a relatively small value. Could you please help me with the following questions: 1) What is the relationship between debug_thread_t.sutime and the system time, and why is it influenced by changes in the system time? 2) Are there any methods to obtain thread execution time that remains unaffected by changes in the system time?zhao weikun(deleted)2024-01-08T10:28:48Zpost122442: Production System protection - QNX 7.1
http://community.qnx.com/sf/go/post122442
Hello,
We are now getting to the stage where we need to consider what protection mechanisms we want (or need) to employ with our system that will within the next few months (hopefully) enter production phase. I am very aware of the unique features provided by QNX to lock down the system (such as encrypted IFS, read-only IFS, procmgr abilities, etc). In our case we have an additional "security" mechanism and that is on our Xilinx (ARM64le) system the SD card is read-only. Despite our attempts to rectify it using guidance provided in the ZCU-104 release notes (another story). FYI, only the ZCU-102 allows us to write to SDMMC. Also, we are intending to use an Enclustra XU1 Mercury MP-SoC which is basically identical to the Xilinx products. (We need to use these expensive products because we have rather hefty FPGA requirements).
I am actually not too upset about this as ordinarily I would be happy for no writable mass storage device to be employed (by the production system). Except for one case scenario.
What is a generally accepted approach taken to lock down modern QNX systems that ordinarily require no write to non-volatile storage capability except when updating "firmware"?
While (as I said) I would ordinarily be content with a read-only SD based file system, for this purpose I think we really need it to be writable in certain but controlled circumstances (such as system updates). But the intent would be for it to be normally read-only. As a result we need to get these SD cards writable and we're working on that. But I am concerned that by doing so we open up a possible "back door".
We have tried to get eMMC working but like the SDMMC we can't write to it. We ran into all sorts of problems actually so we dropped that idea.
Should we be looking at employing QSPI (FLASH)? If so, how easy is it to provide a procedure for customers to use in order to update system firmware/software (whatever)? I'm not sure if providing JTAG capability and instructions would be a good idea. I haven't tried using QSPI before and am not sure how the IPL gets to find it and run the IFS from it. As I understand things there is no need to copy the IFS into memory - just the startup code.
So what is the recommended approach in this situation? If necessary, if QSPI is deemed to be the way forward we can look at that (it has certain attractions as at least it can't be removed for nefarious purposes)! The IPL provided in the BSP makes it easy to boot from SDMMC but I'm not sure what would need to be done to run from QSPI.
Thanks, and Cheers,
Geoff.Geoffrey Roberts2023-11-29T04:33:44Zpost122441: Re: Video Play Error
http://community.qnx.com/sf/go/post122441
You have various errors in the log, the first, AFAICT, being a SCSI I/O error, which usually points to trouble with HW.
-- MichaelMichael Schuster2023-11-27T11:10:31Zpost122440: Video Play Error
http://community.qnx.com/sf/go/post122440
Hello,
I have Salvator-XS board(m3n processor) and I try play .mp4 video on this board. I installed below package on qnxsoftware:
- QNX SDP 7.1 Multimedia - Encode and Casting
- QNX SDP 7.1 Multimedia - Media Renderer API
- QNX SDP 7.1 Multimedia - MP4 Container Support
- QNX SDP 7.1 Multimedia - MP4 Muxer Support
- QNX SDP 7.1 Multimedia - Playback
- QNX SDP 7.1 Multimedia - Resource Arbiter
- QNX SDP 7.1 Multimedia - RTP Input Support
- QNX SDP 7.1 Multimedia - RTP Output Support
- QNX SDP 7.1 Multimedia - RTSP Input Support
- QNX SDP 7.1 Multimedia - Screen Output Support
- QNX SDP 7.1 Multimedia - Stream Buffering Support
- QNX SDP 7.1 Multimedia - Stream Reading Support
- QNX SDP 7.1 Multimedia - Stream and Casting Server
- QNX SDP 7.1 Multimedia - Video Thumbnail Output Support
And I added .scripts on this site to my .build file
https://www.qnx.com/developers/docs/7.1/index.html#com.qnx.doc.mm.target_images/topic/script.html
Also I added code lines on this site to my .build file:
https://www.qnx.com/developers/docs/7.1/index.html#com.qnx.doc.mm.target_images/topic/contents.html
After I copied test.mp4 file to USB-Flash and and I mounted flash this command:
'mount -t dos /dev/hd0t11 /tmp/'
And go to /tmp folder. Run this command:
'mmrplay -a "" -v screen: /tmp/test.mp4'
Board return this:
'/tmp/test.mp4: error 5 "MMR_ERROR_UNSUPPORTED_MEDIA_TYPE" (mmf#4047,"Can't build graph")'
Any suggestion?
Best Regards,
Serhatserhat doganay2023-11-27T06:09:09Zpost122431: Re: Binding QNET to ip using QNX7.1
http://community.qnx.com/sf/go/post122431
Hi Mario,
I got diverted away from my IP binding problem for a few days. A couple of hours at it yesterday did not bear fruit so I have raised a ticket with the support folks.
Thanks for your input!
Geoff.Geoffrey Roberts2023-11-07T22:15:14Zpost122422: Re: Legacy MSI without Per Vector Masking (PVM) support
http://community.qnx.com/sf/go/post122422
Tried on real hardware PCM-26D2CA PCIe CAN device, Advantech iDoor Module: 2-Ports Isolated CANBus mPCIe, DB9
Same result, the PCI 0x05 capability functions report Per Vector Masking (PVM) is not supported.
With such hardware, what is the usual practice? Do you just ignore masking/unmasking the MSI interrupts? Or is there some other way to mask/unmask?Deniz Eren2023-11-03T03:36:58Zpost122420: Re: Legacy MSI without Per Vector Masking (PVM) support
http://community.qnx.com/sf/go/post122420
Re: https://github.com/Deniz-Eren/dev-can-linux/blob/main/src/pci-capability.c#L264Deniz Eren2023-11-01T06:20:17Zpost122419: Re: Legacy MSI without Per Vector Masking (PVM) support
http://community.qnx.com/sf/go/post122419
For clarrity, to test MSI even though error PCI_ERR_ENOTSUP is reported, I have commented out our check for PVM support. As said, from a send/receive perspective, in QEmu VM, it seems to be working. I just need validation this is a valid way forwards, or do we need an alternative mask/unmask besides the MSI API?
if (capid == CAPID_MSI) {
cap_msi_mask_t mask;
r = cap_msi_get_irq_mask(dev->hdl, dev->msi_cap, &mask);
if (r == PCI_ERR_ENOTSUP) {
log_err("capability 0x%02x (MSI) Per Vector Masking (PVM) not "
"supported\n", capid);
//msix_uninit(dev);
//return r;
}
else if (r != PCI_ERR_OK) {
log_err("cap_msi_get_irq_mask error; %s\n", pci_strerror(r));
msix_uninit(dev);
return r;
}
}Deniz Eren2023-11-01T06:17:50Zpost122418: Legacy MSI without Per Vector Masking (PVM) support
http://community.qnx.com/sf/go/post122418
I have a public open-source project that aims to porting of Linux CAN-bus drivers to QNX.
Repository: https://github.com/Deniz-Eren/dev-can-linux
I have a question regarding PCI capability 0x05 (MSI) usage when Per Vector Masking (PVM) isn't supported by legacy devices.
Calling function cap_msi_get_irq_mask() returns PCI_ERR_ENOTSUP as per the MSI API documentation: https://www.qnx.com/developers/docs/7.1/#com.qnx.doc.pci_server/topic/module_msi.html
Quote: "The following APIs retrieve the interrupt pending/mask values, respectively, if Per Vector Masking (PVM) is supported"
This fine, however the question that comes next, if I'm dealing with a legacy PCI device, which has MSI support, however does NOT support Per Vector Masking (PVM), then how do I mask and unmask MSI vectors? Is it OK to just not mask at all?
I haven't tested with real hardware yet, this pending, however, I have tested with QEmu, by implementing support for such a device (https://github.com/Deniz-Eren/qemu/tree/feature/can-sja100-pci-msi-support). This test is effectively done without masking and unmasking; the driver seems to work correctly. Well to elaborate more, the driver is still calling the masking API functions and printing error messages "error: Requested Operation Is Not Supported [(PCI_ERR_ENOTSUP)]" from pci_strerror().
So summarize, do you recommend doing any other type of masking than the MSI API functions when using this type of legacy device that has MSI but does NOT support Per Vector Masking (PVM)?Deniz Eren2023-11-01T06:10:54Zpost122417: Re: Binding QNET to ip using QNX7.1
http://community.qnx.com/sf/go/post122417
Hi, Geoffrey, standard support is Ok, they will support You well.
BTW I suspect the trouble is in the dns option: probably the name of the target is not
registered or You do not have a dns in touch....
maybe You can try just with the ip ecapslulation:
mount -T io-pkt -o bind=genet0,bind=ip lsm-qnet.so
good work
Mariomario sangalli2023-10-31T07:37:45Zpost122416: Re: Binding QNET to ip using QNX7.1
http://community.qnx.com/sf/go/post122416
Hi Mario,
Following your instructions I'm not having much luck. As you will see I'm employing your 2nd mount option (no "mount:-").
The scenario is as follows:
Two RP4's connected to each other via a network switch.
One has the hostname "rpi4-teg" with the IP address 192.168.15.213 and the other "rpi4-ndldev" with the IP address 192.168.15.209. /etc/hosts file below.
When QNET is started as follows both (and a couple of other QNX machines) become visible in /net and everything works fine:
mount -T io-pkt -o bind=genet0 lsm-qnet.so
However, when QNET is started, attempting to bind to IP, as follows only the hostname shows in /net.
mount -T io-pkt -o bind=genet0,bind=ip,resolve=dns lsm-qnet.so
I don't expect the other two QNX7.1 machines on the network to remain visible as they are "pure" QNET - no IP encapsulation. But I would have expected the two that are intended to have IP encapsulation to appear in each ones /net directory. For example:
ls /net
/rpi4-teg /rpi4-ndldev
But only one appears - the name of the RPi4 issuing the command.
I have tried changing various timeout and retry options to no avail. Certainly, my lsm-qnet.so setup in QNX6.5 doesn't work! :-)
The intent is to not have a switch but instead for each to be connected point-to-point using Ubiquiti NanoStation M5's that of course can route only IP. These are both configured with IP addresses on the same network as 192.168.15.20 and 192.168.15.21 respectively.
With rpi4-ndldev physically connected ONLY to the Ubiquiti (no switch connection) I am able to ping rpi4-teg (using the serial terminal). Likewise from an SSH terminal on rpi4-teg I can ping rpi4-ndldev. This proves that the wireless system and IP is working.
The syslog entries start showing "bad layer 2" messages (as shown below). I don't know what these mean or why they occur. Any help with this much appreciated! (BTW, we do have a standard support agreement but I thought I'd try the forum first as I figure - and am hoping - that this will be real easy to resolve)!
Anyway, following is how I am configuring both Pi's :
Thanks for your attention! :-)
Geoff.
--------------------------------------------------------------------------
// The network driver is started in ifs-rpi4.bin (IFS)
#######################################################################
## Network driver
#######################################################################
display_msg Starting Network driver...
io-pkt-v6-hc
mount -T io-pkt /lib/dll/devnp-genet.so
if_up -p genet0
/lib/dll/lsm-qnet.so=lsm-qnet.so
--------------------------------------------------------------------------
// output of slog2info - filtered to include io-pkt related entries. Note that the RTC is not read until after the mount -T io-pkt -o bind=genet,bind=ip... call
Jan 01 12:00:00.372 iopkt.65549 main_buffer* 0 tcpip starting
Jan 01 12:00:00.372 iopkt.65549 main_buffer 0 smmu support is disabled
Jan 01 12:00:00.374 iopkt.65549 main_buffer 0 initializing IPsec...
Jan 01 12:00:00.374 iopkt.65549 main_buffer 0 done
Jan 01 12:00:00.374 iopkt.65549 main_buffer 0 IPsec: Initialized Security Association Processing.
// this is presumably from the following in the IFS
io-pkt-v6-hc
mount -T io-pkt /lib/dll/devnp-genet.so
Jan 01 12:00:00.376 iopkt.65549 main_buffer 0 /lib/dll/devnp-genet.so (null)
Jan 01 12:00:00.376 iopkt.65549 main_buffer 0 genet0
Jan 01 12:00:00.478 io_pkt_v6_hc.65549 slog* 0 genet:genet_ext_phy_init():309: Detected PHY vendor OUI:0x180361.
Jan 01 12:00:00.488 io_pkt_v6_hc.65549 slog 0 genet:genet_init():621: MAC: e4:5f:01:fd:eb:c4
Jan 01 12:00:00.488 io_pkt_v6_hc.65549 slog 0 genet:genet_init():630: Attaching interrupt(189).
Jan 01 12:00:00.699 io_pkt_v6_hc.65549 slog 0 genet:genet_init():621: MAC: e4:5f:01:fd:eb:c4
--------------------------------------------------------------------------
// /etc/rc.d/rc.local then executes the following :
ifconfig genet0 192.168.15.213 netmask 255.255.255.0 up
mount -T io-pkt -o bind=genet0,bind=ip,resolve=dns lsm-qnet.so
--------------------------------------------------------------------------
// this resulting from the mount -T io-pkt -o bind=genet0,bind=ip,...
Jan 01 12:00:01.248 iopkt.65549 main_buffer 0 lsm-qnet.so bind=genet0,bind=ip,resolve=dns
Jan 01 12:00:01.248 io_pkt_v6_hc.65549 slog 0 qnet(L4): qnet_birth(): qnet_init() - calling
Jan 01 12:00:01.248 io_pkt_v6_hc.65549 slog 0 qnet(kif): mac_load(): security policy not being used
Jan 01 12:00:01.249 io_pkt_v6_hc.65549 slog 0 qnet(L4): try_ifp(): new interface: genet0: index 0 mac addr E4:5F:01:FD:EB:C4
Jan 01 12:00:01.249 io_pkt_v6_hc.65549 slog 0 qnet(QOS): nd_change_notify(): Node Up: nd 0 rpi4-teg.rtts
Jan 01 12:00:01.250 io_pkt_v6_hc.65549 slog 0 qnet(L4): qnet_birth(): qnet_init() - complete
// RTC has now been read [from within rc.local] so we have "real" time set
Oct 31 13:29:39.513 io_pkt_v6_hc.65549 slog 0 genet:genet_mdi_callback():233: if=genet0: Link up (100 BaseT Full Duplex)
// What do these "bad layer" entries mean?
Oct 31 13:29:54.277 io_pkt_v6_hc.65549 slog 0 qnet(QOS): rx_user_data(): bad layer 2 rxd from nd 0
Oct 31 13:29:57.301 io_pkt_v6_hc.65549 slog 0 qnet(QOS): rx_user_data(): bad layer 2 rxd from nd 0
Oct 31 13:30:24.274 io_pkt_v6_hc.65549 slog 0 qnet(QOS): rx_user_data(): bad layer 2 rxd from nd 0
Oct 31 13:30:27.299 io_pkt_v6_hc.65549 slog 0 qnet(QOS): rx_user_data(): bad layer 2 rxd from nd 0
Oct 31 13:30:54.271 io_pkt_v6_hc.65549 slog 0 qnet(QOS): rx_user_data(): bad layer 2 rxd from nd 0
Oct 31 13:30:57.296 io_pkt_v6_hc.65549 slog 0 qnet(QOS): rx_user_data(): bad layer 2 rxd from nd 0
Oct 31 13:31:24.268 io_pkt_v6_hc.65549 slog 0 qnet(QOS): rx_user_data(): bad layer 2 rxd from nd 0
Oct 31 13:31:27.293 io_pkt_v6_hc.65549 slog 0 qnet(QOS): rx_user_data(): bad layer 2 rxd from nd 0
Oct 31 13:31:54.266 io_pkt_v6_hc.65549 slog 0 qnet(QOS): rx_user_data(): bad layer 2 rxd from nd 0
Oct 31 13:31:57.291 io_pkt_v6_hc.65549 slog 0 qnet(QOS): rx_user_data(): bad layer 2 rxd from nd 0
Oct 31 13:32:24.263 io_pkt_v6_hc.65549 slog 0 qnet(QOS): rx_user_data(): bad layer 2 rxd from nd 0
Oct 31 13:32:27.288 io_pkt_v6_hc.65549 slog 0 qnet(QOS): rx_user_data(): bad layer 2 rxd from nd 0
--------------------------------------------------------------------------
/etc/hosts on both RPi4 units are the same:
#
# Host Database
#
127.1 localhost.localdomain localhost
::1 localhost.localdomain localhost
192.168.15.20 ub_teg
192.168.15.21 ub_ndldev
192.168.15.213 rpi4-teg
192.168.15.209 rpi4-ndldevGeoffrey Roberts2023-10-31T02:39:57Zpost122415: Re: pci-server RPi4 [solved]
http://community.qnx.com/sf/go/post122415
So some searching through qnx software manager made led me to the newer version of pci_hw-bcm2711-rpi4.so.3.0 in the PCI HW Module, which I had installed. The problem was that I had a pci folder in my BSP working directory that was being used to pull in 2.0. This is not in the newer release of the BSP from what I can tell, but I still had the folder around. Once I got rid of it, the version from the target/qnx7/aarch64/lib/dll/pci was used.
Sorry for wasted bandwidth!
-DavidDavid Sheinberg2023-10-28T19:07:19Zpost122414: Re: pci-server RPi4
http://community.qnx.com/sf/go/post122414
Of course I should have looked in slog, which clearly indicates the pci_hw-bcm2711-rpi4.so is incompatible:
Dec 31 19:14:21.262 pci_server.372761 pci_log 0 ERROR,0,-2,5 [372761:1]: Module /lib/dll/pci/pci_hw-bcm2711-rpi4.so, v2.0 failed to load, err: Module Is Incompatible With Current PCI Server or Library Version [(PCI_ERR_MOD_COMPAT)]
Dec 31 19:14:21.262 pci_server.372761..0 pci_dbg 0 DEBUG,1,2,5 [372761:1]: probe for B0:D0:F0 failed, vid = 0x2035, Module Does Not Exist Or Could Not Be Loaded [(PCI_ERR_NO_MODULE)]
Dec 31 19:14:21.262 pci_server.372761 pci_log 0 ERROR,0,0,5 [372761:1]: ** Enumeration Aborted, Module Does Not Exist Or Could Not Be Loaded [(PCI_ERR_NO_MODULE)]
Dec 31 19:14:21.262 pci_server.372761 pci_log 0 INFO ,1,0,5 [372761:1]: pci_max_bus = -1
Dec 31 19:14:21.262 pci_server.372761 pci_log 0 INFO ,1,1,5 [372761:1]: enumerate_bus_hierarchy(), Module Does Not Exist Or Could Not Be Loaded [(PCI_ERR_NO_MODULE)]
Dec 31 19:14:21.262 pci_server.372761 pci_log 0 INFO ,1,0,5 [372761:1]: ++ enumeration only complete, status Module Does Not Exist Or Could Not Be Loaded [(PCI_ERR_NO_MODULE)] ++
Dec 31 19:14:21.262 pci_server.372761 pci_log 0 INFO ,1,-10,5 [372761:1]: + PCI Server v3.0 init complete, Module Does Not Exist Or Could Not Be Loaded [(PCI_ERR_NO_MODULE)] +
Dec 31 19:14:21.262 pci_server.372761 pci_log 0 INFO ,1,-10,5 [372761:1]:
Is there a newer version of this available that I might have missed?David Sheinberg2023-10-28T01:46:46Zpost122413: pci-server RPi4
http://community.qnx.com/sf/go/post122413
I have rebuilt our OS image for RPi4 using updated qnxsoftware components, but version 3.0 of pci-server doesn't seem to work with my RPi4 BSP (no /dev/pci is found).
I see the Release History which says:
"This component is incompatible with all pre v3.x PCI components"
My new image has libpci.so linked to libpci.so.3.0 but perhaps there is something I should change in the build file for the OS image?
Any suggestions welcome!
David SheinbergDavid Sheinberg2023-10-28T01:33:41Zpost122411: Re: Binding QNET to ip using QNX7.1
http://community.qnx.com/sf/go/post122411
Hi Geoffrey, qnet is documented in many places, but You can get some usefull info
about the dll options using this command:
use lsm-qnet.so
Try to use this command:
mount -Tio-pkt -o"mount=:",bind=fec0,bind=ip,resolve=dns lsm-qnet.so &
or:
mount -Tio-pkt -o bind=fec0,bind=ip,resolve=dns lsm-qnet.so &
Mount options is this one:
mount=directory[:[.]domain]*
A network directory. Default directory is "/net".
Default domain is either the hostname domain if
it has one, or the directory with the slashes changed
to dots and reversed. i.e. "/net/outside/canada" would
have a domain of "canada.outside.net".
The first mount is the default directory and domain
that the local hostname will resolve through.
I have specified the default options, so You can also omit the mount (it's just a my preference)
You have to specify two bind options, one for interface (fec0 or en0 or any other You have)
and one to bind the ip : it is not indented to be a OR option :-)
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
Oct 27 08:44:43.600 iopkt.274462 main_buffer 0 lsm-qnet.so mount=:,bind=fec0,bind=ip,resolve=dns
Oct 27 08:44:43.601 io_pkt_v6_hc.274462 slog 0 qnet(L4): qnet_birth(): qnet_init() - calling
Oct 27 08:44:43.602 io_pkt_v6_hc.274462 slog 0 qnet(kif): mac_load(): security policy not being used
Oct 27 08:44:43.604 io_pkt_v6_hc.274462 slog 0 qnet(L4): try_ifp(): new interface: fec0: index 0 mac addr 20:0A:0D:70:1C:46
Oct 27 08:44:43.604 io_pkt_v6_hc.274462 slog 0 qnet(QOS): nd_change_notify(): Node Up: nd 0 tec-cpucoms.net.intra
Oct 27 08:44:43.605 io_pkt_v6_hc.274462 slog 0 qnet(L4): qnet_birth(): qnet_init() - complete
Oct 27 08:44:43.804 io_pkt_v6_hc.274462 slog 0 qnet(L4): lr_verify_my_name_and_domain(): set _CS_DOMAIN
Oct 27 08:44:44.003 io_pkt_v6_hc.274462 slog 0 qnet(L4): lr_verify_my_name_and_domain(): starting resolution of our hostname tec-cpucoms.net.intra
to ensure unique
Oct 27 08:44:44.329 iopkt.274462 main_buffer 0 mx6q_mii_callback(): link up lan 0 idx 0 (1000 BaseT Full Duplex)
Oct 27 08:44:44.403 io_pkt_v6_hc.274462 slog 0 qnet(L4): lr_verify_my_name_and_domain(): qnet going online
Oct 27 08:44:44.604 io_pkt_v6_hc.274462 slog 0 qnet(L4): lr_inbound(): rxd pkt type 2 with duplicate name/domain, staying online
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>mario sangalli2023-10-27T06:58:49Zpost122410: Re: Binding QNET to ip using QNX7.1
http://community.qnx.com/sf/go/post122410
Hi Mario,
Thanks for responding.
Where is all this documented? I have never seen the -o "mount=:" notation and can't find any other reference to it.Can you explain it a bit please?
QNET works fine for all nodes that DON'T attempt to encapsulate the QNET packets inside IP. In other words, when I add the following mount command:
mount -T io-pkt -o bind=ip0,resolve=dns lsm-qnet.so /net becomes empty.
I figure the that "ip0" means use teh IP encapsulation on the network interface "0" - for example en0 or genet0, or even fec0. But I might be wrong as the documentation for lsm-qnet.so simply quotes "bind=ip" with no numerical indicator. But in the past (with QNX6.5) it was always ip0 -> en0 or ip1 -> en1. I am assuming that on the RPi4 bind=ip0 will/should use genet0.
The documentation is quite clear in stating that when binding to ip, the resolver MUST be dns. I presume that means the IP addresses need to be in /etc/host mapping to the node name (hostname)
I won't be back in my office until Tuesday (Eastern Australia time) so I won't be able to play much until then.
Cheers,
Geoff.
> Hi Geoffrey , i've try on my board (QNX7.1/ARM) to run qnet with the following
> options:
> mount -Tio-pkt -o"mount=:" lsm-qnet.so &
> (autoresolve)
> mount -Tio-pkt -o"mount=:",bind=fec0 lsm-qnet.so &
> mount -Tio-pkt -o"mount=:",bind=fec0,resolve=dns lsm-qnet.so &
>
> All works ok and I've the /net directoty populated.
> Have You verified that network is up and running?
> You can try to specify the mount point explicitly in the arguments (mount=:)
>
> Mario
>
>Geoffrey Roberts2023-10-27T02:35:56Zpost122408: Re: Binding QNET to ip using QNX7.1
http://community.qnx.com/sf/go/post122408
Hi Geoffrey , i've try on my board (QNX7.1/ARM) to run qnet with the following options:
mount -Tio-pkt -o"mount=:" lsm-qnet.so & (autoresolve)
mount -Tio-pkt -o"mount=:",bind=fec0 lsm-qnet.so &
mount -Tio-pkt -o"mount=:",bind=fec0,resolve=dns lsm-qnet.so &
All works ok and I've the /net directoty populated.
Have You verified that network is up and running?
You can try to specify the mount point explicitly in the arguments (mount=:)
Mariomario sangalli2023-10-26T07:26:26Zpost122407: Binding QNET to ip using QNX7.1
http://community.qnx.com/sf/go/post122407
Hello,
With QNX 6.5 on an x86 platform I was able to bind QNET to IP using mount as follows:
mount -T io-pkt -o bind=ip0,resolve=dns /lib/dll/lsm-qnet.so
The interface was en0 (or en1). I had a few extra arguments to do with timing and retries but they don't seem to help me here.
I am trying to do the same thing with QNX 7.1 on Raspberry Pi4's.
The command above creates /net but it remains empty. Note that I'm doing this with both Pi's and there is a pair of Ubiquiti Nanostation 5M wifi modems between them.
I modified the genet shared object to set up the interfaces as en0 instead of genet0 but this doesn't help. Fine with IP but not QNET.
The node names are in /etc/host.
Is there something I'm missing? Is this facility available in 7.1? (the documentation describes how to use lsm-qnet.so so I presume it's available in 7.1). There are no examples.
Could it be something to do with gns? (the global name server) Each is started as follows:
gns -s <hostname>
Any hints/ideas welcome and appreciated!
Geoff.Geoffrey Roberts2023-10-26T05:54:59Zpost122404: Re: Concerns with offset parameter of pci_device_cfg_rd*() and pci_device_cfg_wr*() series of functions
http://community.qnx.com/sf/go/post122404
Thank you Elad.
At least this gives us the confidence our implementation has done the correct thing.Deniz Eren2023-10-18T22:35:17Zpost122403: Re: Concerns with offset parameter of pci_device_cfg_rd*() and pci_device_cfg_wr*() series of functions
http://community.qnx.com/sf/go/post122403
The offset is absolute and starts at 0. These functions will return an
error if the offset is below 0x40.
I agree the comment can be made clearer.
--Elad
On Tue, 2023-10-17 at 02:07 -0400, Deniz Eren wrote:
> I have a public open-source project that aims to porting of Linux
> CAN-bus drivers to QNX.
> Repository: https://github.com/Deniz-Eren/dev-can-linux
>
> I have question regarding the offset input parameter of
> pci_device_cfg_rd*() and pci_device_cfg_wr*() series of functions.
>
> Looking at QNX library file: qnx710/target/qnx7/usr/include/pci/pci.h
> We see comment: "The following functions provide read access to the
> device dependent portion of the 256/4096 byte PCI/PCIe configuration
> space from 0x40 to 0xFF/0xFFF."
>
> This sounds like the offset input parameter of pci_device_cfg_rd*()
> and pci_device_cfg_wr*() series of functions means offset=0x00 refers
> to the first byte of the configuration space that starts at 0x40 and
> goes through to to 0xFF/0xFFF. However, in practice one of our
> community members found that when they were testing with the
> peak_pci.c driver, that these pci_device_cfg_rd*() and
> pci_device_cfg_wr*() series of functions do not start at 0x40 but
> start at 0x00. So to access the configuration space at 0x40 to
> 0xFF/0xFFF we had to add 0x40 to the address offset to get equivalent
> behaviour as that of the same code running on Linux.
>
> This peak_pci.c, is one of the drivers we have ported from Linux and
> it's the Peak driver:
> https://github.com/Deniz-Eren/dev-can-linux/blob/main/src/kernel/drivers/net/can/sja1000/peak_pci.c
>
> At line 590 you see:
> err = pci_read_config_word(pdev, 0x2e, &sub_sys_id);
> if (err)
> goto failure_release_regions;
>
> At line 597 you see:
> err = pci_write_config_word(pdev, 0x44, 0);
> if (err)
> goto failure_release_regions;
>
> This peak_pci.c have been taken from the Linux kernel source code as-
> is (https://github.com/torvalds/linux). To interface to QNX we have
> implemented the Linux functions pci_write_config_word() and
> pci_read_config_word() as
> https://github.com/Deniz-Eren/dev-can-linux/blob/main/src/pci.c
>
> As you can see, in our implementation we had to call
> pci_device_cfg_rd*() and pci_device_cfg_wr*() with a +0x40 for the
> peak_pci.c driver to work properly.
>
> This means, either the comment block for pci_device_cfg_rd*() and
> pci_device_cfg_wr*() series of functions in file
> qnx710/target/qnx7/usr/include/pci/pci.h is misleading or incorrect
> and it should say 0x00 to 0xFF/0xFFF. Otherwise, the implementation
> of these functions are incorrect and they need to be updated to
> actually give access to 0x40 to 0xFF/0xFFF.
>
> Any comments?
>
>
>
> _______________________________________________
>
> OSTech
> http://community.qnx.com/sf/go/post122397
> To cancel your subscription to this discussion, please e-mail
> ostech-core_os-unsubscribe@community.qnx.comElad Lahav2023-10-18T14:28:00Zpost122397: Concerns with offset parameter of pci_device_cfg_rd*() and pci_device_cfg_wr*() series of functions
http://community.qnx.com/sf/go/post122397
I have a public open-source project that aims to porting of Linux CAN-bus drivers to QNX.
Repository: https://github.com/Deniz-Eren/dev-can-linux
I have question regarding the offset input parameter of pci_device_cfg_rd*() and pci_device_cfg_wr*() series of functions.
Looking at QNX library file: qnx710/target/qnx7/usr/include/pci/pci.h
We see comment: "The following functions provide read access to the device dependent portion of the 256/4096 byte PCI/PCIe configuration space from 0x40 to 0xFF/0xFFF."
This sounds like the offset input parameter of pci_device_cfg_rd*() and pci_device_cfg_wr*() series of functions means offset=0x00 refers to the first byte of the configuration space that starts at 0x40 and goes through to to 0xFF/0xFFF. However, in practice one of our community members found that when they were testing with the peak_pci.c driver, that these pci_device_cfg_rd*() and pci_device_cfg_wr*() series of functions do not start at 0x40 but start at 0x00. So to access the configuration space at 0x40 to 0xFF/0xFFF we had to add 0x40 to the address offset to get equivalent behaviour as that of the same code running on Linux.
This peak_pci.c, is one of the drivers we have ported from Linux and it's the Peak driver: https://github.com/Deniz-Eren/dev-can-linux/blob/main/src/kernel/drivers/net/can/sja1000/peak_pci.c
At line 590 you see:
err = pci_read_config_word(pdev, 0x2e, &sub_sys_id);
if (err)
goto failure_release_regions;
At line 597 you see:
err = pci_write_config_word(pdev, 0x44, 0);
if (err)
goto failure_release_regions;
This peak_pci.c have been taken from the Linux kernel source code as-is (https://github.com/torvalds/linux). To interface to QNX we have implemented the Linux functions pci_write_config_word() and pci_read_config_word() as https://github.com/Deniz-Eren/dev-can-linux/blob/main/src/pci.c
As you can see, in our implementation we had to call pci_device_cfg_rd*() and pci_device_cfg_wr*() with a +0x40 for the peak_pci.c driver to work properly.
This means, either the comment block for pci_device_cfg_rd*() and pci_device_cfg_wr*() series of functions in file qnx710/target/qnx7/usr/include/pci/pci.h is misleading or incorrect and it should say 0x00 to 0xFF/0xFFF. Otherwise, the implementation of these functions are incorrect and they need to be updated to actually give access to 0x40 to 0xFF/0xFFF.
Any comments?Deniz Eren2023-10-17T06:07:35Zpost122371: Re: emulate linux kernel api
http://community.qnx.com/sf/go/post122371
> seems already have an similar project: https://os.inf.tu-dresden.de/ddekit/
Seems to be very old and was used to run Linux UIO-drivers only, if I understand that approach right.Michael Tasche2023-09-11T15:45:00Zpost122370: Re: emulate linux kernel api
http://community.qnx.com/sf/go/post122370
> It's possible and an good idea to emulate linux kernel api, that will make
> port linux driver to qnx more easy.
Linux kernel API? I have never seen one.
Or do you mean the sum of all functions and macros, a special Linux Kernel configuration provides?
Well, since hardware is not documented any more and chip makers patch their stuff in the Linux Kernel only, driver developers need to be creative.
To answer your question, using unchanged Linux Kernel driver code is already done under QNX.
Actually Intel Graphics needs the drm-intel resource manager, emulating half of the Linux-Kernel, to use a million of unchanged lines of Linux Driver Code from Intel.
# drm-intel -v
i915/DRM Linux kernel 4.14.14
#
If you like to use that emulation code, simply ask Blackberry for the source of drm-intel.
From my point of view this approach is very ugly, but indeed a cool demonstration of the QNX mircokernel architecture, allowing to hide a Linux Kernel in one resource manager process and for example a NetBSD Kernel in an other process to realize a TCP/IP stack.
> freebsd and netbsd have an linux emulator, but that seems mainly for run linux
> application directly.
freebsd and netbsd utilize a Linux binary compatible trap-Interface. Yes, this is for using Linux userland stuff.
So you can bootstrap a GNU/Linux OS, like debian, normally using a Linux-Kernel, without a Linux Kernel.Michael Tasche2023-09-11T15:40:05Zpost122369: Re: emulate linux kernel api
http://community.qnx.com/sf/go/post122369
seems already have an similar project: https://os.inf.tu-dresden.de/ddekit/lin xiang(deleted)2023-09-09T03:39:58Zpost122368: Re: emulate linux kernel api
http://community.qnx.com/sf/go/post122368
opposite, because qnx is microkernel, all device is on userspace that make it possible to emulate core linux kernel program api(lkpi) and linux device driver module api, and maximum extent, reuse linux device driver
this maybe an reusable device driver framework for all microkernel.lin xiang(deleted)2023-09-08T01:32:26Zpost122367: Re: emulate linux kernel api
http://community.qnx.com/sf/go/post122367
Since QNX system architecture (microkernel) is quite different from Linux (monolith), I wonder how far that would get you ...
-- Michael
________________________________
From: lin xiang <community-noreply@qnx.com>
Sent: Thursday, September 7, 2023 05:53
To: ostech-core_os
Subject: emulate linux kernel api
It's possible and an good idea to emulate linux kernel api, that will make port linux driver to qnx more easy.
freebsd and netbsd have an linux emulator, but that seems mainly for run linux application directly.
_______________________________________________
OSTech
http://community.qnx.com/sf/go/post122366
To cancel your subscription to this discussion, please e-mail ostech-core_os-unsubscribe@community.qnx.comMichael Schuster2023-09-07T05:49:02Zpost122366: emulate linux kernel api
http://community.qnx.com/sf/go/post122366
It's possible and an good idea to emulate linux kernel api, that will make port linux driver to qnx more easy.
freebsd and netbsd have an linux emulator, but that seems mainly for run linux application directly.lin xiang(deleted)2023-09-07T03:53:09Zpost122354: Re: Unable to launch QNX at Vbox
http://community.qnx.com/sf/go/post122354
Thank you so much! Now it is working fine after those changes.Victor Fernandez2023-08-02T08:38:26Zpost122353: Re: Unable to launch QNX at Vbox
http://community.qnx.com/sf/go/post122353
Hi Roger Thank You very much for the help!
I've just place these libraries in the hos/common/mkqnximage/snippets/if_files.buildin
lib/libpci.so.2.0
lib/libpci.so.2.3
lib/libpci.so.3.0
Rebuilding a new vm and now all works well.
I've changed the template instate of the /local/snippets as You suggested in order to
create new machine from scratch with these library (maybe it not the rigth place, but
it works for me)
For Victor:
I've build also a VM for virtual box (Ver 7.0.6 r155176) and now it works like the vmware image
(Ver 17.0.2 build-21581411)
I works with 7.1 release updated with PCI v3 libraries and all other stuffs using Software Center.
Thank again for support,
Mariomario sangalli2023-08-02T08:26:39Zpost122352: Re: Unable to launch QNX at Vbox
http://community.qnx.com/sf/go/post122352
Hello Roger,
I've been trying this way but still don't work. The error at screen is the same as it was.
Thank you so much for your support.Victor Fernandez2023-08-02T05:14:39Zpost122351: Re: Unable to launch QNX at Vbox
http://community.qnx.com/sf/go/post122351
Actually I was mistaken about the setfacl command. It might be important but only if you're using the --secpol option.
My guess is that the issue is that the PCIv3 update has changed the soversion of libpci to libpci.so.3.0 but all the existing PCI clients expect libpci.so.2.0
I believe there is a variant of libpci.so.2.0 that supports older clients with the newer version of PCI (in a PCI shim library package).
So, quite possibly if you update the file local/snippets/ifs_files.custom and add:
lib/libpci.so.2.0
and rebuild your VM then it might work.Roger Maclean2023-08-01T16:18:06Zpost122350: Re: Unable to launch QNX at Vbox
http://community.qnx.com/sf/go/post122350
Hi, Roget, I've search in my qnx710 instalation and I've not found any reference to /dev/shmem/pci_* in any files...
however, it's a good suggestion, there might be some template file hiding the pci setting somewhere...
Thanks,
Mariomario sangalli2023-08-01T15:27:00Zpost122349: Re: Unable to launch QNX at Vbox
http://community.qnx.com/sf/go/post122349
Regarding the PCI issue when using mkqnximage if the problem is networking it might be due to the location of the PCI database changing with the PCIv3 release.
You could try changing host/common/mkqnximage/inputs/startup.sh
There's a invocation of setfacl to change ACLs for /dev/shmem/pci_*. The path should be changed to /dev/shmem/pci/pci_*.Roger Maclean2023-08-01T14:45:58Zpost122348: Re: Unable to launch QNX at Vbox
http://community.qnx.com/sf/go/post122348
Hi, I've the same problem on a vmware machine.
For me it is related to the new PCIv3 Experimental Update : after the update all virtual machines
have stopped to works, also after they where rebuilded from scratch.
I' ve dig into host/common/mkqnximage files but I've not found anything that justify this error:
maybe some missing/wrong library?
Return back to previous PCI release will fix the problem.
Any idea how to fix this with PCIv3 ?
And is this update working on a true target ?
Regards,
Mariomario sangalli2023-08-01T07:52:23Zpost122346: Re: Unable to launch QNX at Vbox
http://community.qnx.com/sf/go/post122346
Thank you so much for your answer.
I've been testing the 6.x version of Vbox but still not working.
It seems that the image lost some dependencies, and symbol _ITM_registerTMCloneTable is missed.
Regards,
VíctorVictor Fernandez2023-07-25T06:32:39Zpost122345: Re: Unable to launch QNX at Vbox
http://community.qnx.com/sf/go/post122345
You could try the latest VirtualBox from the 6.x stream rather than 7.x.
VirtualBox appear to break things every so often, the e1000 interface was broken for months and was subsequently fixed. I know there are issues running QNX with 7.x though I don't recall what they are.Roger Maclean2023-07-24T21:44:13Zpost122341: Memory Partition 2023
http://community.qnx.com/sf/go/post122341
Hello!
Is the APM reliased now.
http://community.qnx.com/sf/wiki/do/viewPage/projects.core_os/wiki/Memory_Partitioning_Technologyyunting li(deleted)2023-07-18T06:24:12Zpost122340: Unable to launch QNX at Vbox
http://community.qnx.com/sf/go/post122340
Hi all,
I am unable to launch QNX 7.1 on Vbox as x86_64 emulator. I am using Windows 10, QNX 7.10 on evaluation license with momentics 7.1.2.v202203081633, and Vbox Versión 7.0.8 r156879 (Qt5.15.2).
My issue is as follows:
I can create properly the Virtual machine, but when it is started the network cannot be configured and following message is shown: ifconfig: getifaddrs: address family not supported by protocol family.
I was trying to deal with this issue using the QNX documentation (https://www.qnx.com/developers/docs/7.1/#com.qnx.doc.neutrino.utilities/topic/m/mkqnximage.html) but I can not get a solution.
Thanks in advance.Victor Fernandez2023-07-17T12:26:14Zpost122338: Re: Post pandemic Raspberry Pi4's don't seem to work.
http://community.qnx.com/sf/go/post122338
We have managed to figure out how to write to the SD card in teh post-pandemic RPi4's by starting the SDMMC driver as follows:
devb-sdmmc-bcm2711 mem name=below1G sdio addr=0xfe340000,irq=158 disk name=sd blk mntperms=755
We notice a small loss of read/write performance but it's acceptable. It works for us!
Geoff.Geoffrey Roberts2023-07-06T08:12:11Zpost122337: Re: Post pandemic Raspberry Pi4's don't seem to work.
http://community.qnx.com/sf/go/post122337
In regards to our inability to write to the SD card using post-pandemic RPi4's, my colleague here has managed to resolve it. We can now write to any partition type (in our case 12 and 177). The following works for us with only a slight loss of read/write performance.
devb-sdmmc-bcm2711 mem name=below1G sdio addr=0xfe340000,irq=158 disk name=sd blk mntperms=755
Basically, he removed everything to do with the bus master.
Geoff.Geoffrey Roberts2023-07-06T02:52:59Zpost122330: Re: access() not behaving as expected
http://community.qnx.com/sf/go/post122330
Thanks for the detailed explanation!
Indeed, after denying the ability everything works as expected.
We also tried another solution: temporarily dropping privileges to open the file. That works always as expected. And in fact that's the more secure solution anyway (no race condition between permission check/using file), so we should have done that first.Renaat Debaene2023-06-21T06:26:18Zpost122329: Re: access() not behaving as expected
http://community.qnx.com/sf/go/post122329
You will find that if you check W_OK instead if R_OK it will behave as you expect (and the same as Linux).
The reason that R_OK behaves differently is due to procmgr abilities. There is an ability iofunc/read that allows read access to files denied by POSIX permissions. Testing of this ability is always based on effective user ID. By default root has this ability so when you call access(R_OK) with the setuid root executable, it fails the POSIX access checks but gets overridden by the ability.
If you deny the ability in the shell:
ability deny,all,inherit,able=iofunc/read
you will now find it behaves as you expect.
This could be considered a bug, probably everything in the call to access() should be based on real ID. The workaround is to deny the ability. There are few legitimate uses for the ability irrespective of this issue we'd recommend denying the ability since it tends to mask file system permission issues. I will however log it as a bug.Roger Maclean2023-06-20T22:04:16Zpost122327: access() not behaving as expected
http://community.qnx.com/sf/go/post122327
The POSIX call access() seems to behave not as expected on QNX. According to the doc, access() uses the *real* user ID to check if a file can be accessed. The Linux call effectively does this. But on QNX, it seems to use the *effective* user ID.
Test environment: QNX 7.1.0
Setup (a file only readable by root, 2 versions of the tool readable, one suid, one not) (the tool readable is the example from the access() documentation with some printf() statements for the different IDs):
$ ls -al
total 55
drwxr-xr-x 2 root root 4096 Jun 12 01:36 .
drwxr-xr-x 6 root root 4096 Jun 12 01:36 ..
-rw------- 1 root root 74 Jun 12 01:36 data
-rwxr-xr-x 1 root root 9696 Jun 12 01:31 readable
-rwsr-xr-x 1 root root 9696 Jun 12 01:35 readable_suid
Test output:
$ ./readable data
geteuid(): 1000 - effective user ID
getegid(): 4004 - effective group ID
getuid(): 1000 - user ID
getgid(): 4004 - group ID
data: Permission denied
=> as expected
$ ./readable_suid data
geteuid(): 0 - effective user ID
getegid(): 4004 - effective group ID
getuid(): 1000 - user ID
getgid(): 4004 - group ID
ok to read data
=> The last response ("ok to read data") is unexpected because the code is running with real user ID 1000. When doing a similar test on Linux, I get "permission denied".
Is my understanding of access() wrong, or is this a bug in QNX or my configuration?Renaat Debaene2023-06-20T09:26:09Zpost122247: Controlling the CPU Frequency in a QNX 7.1 system
http://community.qnx.com/sf/go/post122247
Hello.
I am trying to control the CPU frequency of a system and want to know the best way to do it. I have looked online on my own and found 3 ways of doing the same. I want to set it to a specific number and avoid Intel Speed stepping taking it beyond this limit.
1) Using the Startup BIOS command. (I don't have access to test it out currently) (https://www.qnx.com/developers/docs/6.5.0SP1.update/com.qnx.doc.neutrino_utilities/s/startup-bios.html)
2) Using DVFS drivers (If you could please give me an example of how to use this)(http://www.qnx.com/developers/docs/6.6.0_anm11_wf10/#com.qnx.doc.neutrino.technotes/topic/set_cpu_freq.html)
3) Using the "cpufreq" command.(For some reason this is not working on my system. Any help on this would also be great)(http://www.qnx.com/developers/docs/7.1/#com.qnx.doc.neutrino.utilities/topic/c/cpufreq.html)
Apart from this if there is any other easier way to do the same would also help a ton.
Thanks In AdvanceAshish Gautam(deleted)2023-05-03T08:57:10Zpost122246: QNX 7.1.0 x86_64 lpd, lpr, etc
http://community.qnx.com/sf/go/post122246
Does QNX 7.1.0 intel 64 bits platform provide BSD printing mechanism? (lpd, lpc, lpq, lpr, lprm, etc) Have anybody ported it to QNX 7.1.0 x86_64?
Regards,
JanuszJanusz Ruszel2023-05-03T03:22:47Zpost122234: QNX 7.1 on BeaglePlay (TI AM625)
http://community.qnx.com/sf/go/post122234
We've had great success using the RPi4 to control experiments in our research lab, but given the shortage, I've been eyeing the TI products, which seem to be in healthy supply. I know there's a BSP for the AM62X, but would be particularly interested in success folks have with the new BeaglePlay - of course with the general stuff (ethernet, USB, etc.) but also with interrupt driven GPIO (and A/D support, if possible, as I haven't seen an SPI driver?).
Any info appreciated!
DavidDavid Sheinberg2023-04-26T22:52:05Zpost122229: Qnx 7.0 crashes on x86_64 platforn
http://community.qnx.com/sf/go/post122229
Hi,
The Qnx 7.0 is crashing while trying to boot on x86_64 bit platform. My build file starts with
[virtual=x86_64,bios +compress] boot = {
startup-x86 -v
PATH=/proc/boot:/bin:/usr/bin LD_LIBRARY_PATH=/proc/boot:/lib:/usr/lib:/lib/dll procnto-smp-instr -v
}
can you please let me know what is the issue.Manoj Chandran R2023-04-21T11:43:17Zpost122214: Raspberry Pi4 PL011 UARTs
http://community.qnx.com/sf/go/post122214
Hello,
Has anyone been able to squeeze out any extra serial ports on a Pi4? If so, what's the trick?
I have /dev/ser3 working fine at address 0xfe201600 using IRQ 153. But I can't get any of the others that reside at addresses 0xfe201000, 0xfe201400, 0xfe201800, or 0xfe201a00. It seems they all want to share IRQ 153 but if I do this for any address other than 0xfe201600 the call to InterruptAttach() (in devc/serpl011/intr.c) results in the kernel gong into ga ga land and a subsequent reboot (presumably the watchdog kicks in).
Am I missing something? I feel like I'm so close after pouring over as many of the RPi4B docs that I can find.
Is it true that all the UART's need to attach to IRQ 153?
Thanks,
Geoff.Geoffrey Roberts2023-04-18T02:09:34Zpost122213: Re: shared memeory objects
http://community.qnx.com/sf/go/post122213
I do this quite a lot. Works for me! This is on 7.1.
Geoff.Geoffrey Roberts2023-04-18T02:01:00Zpost122211: Zero copy issue regarding camera data
http://community.qnx.com/sf/go/post122211
Hello,I am currently running the QNX system on Qualcomm's chip and have obtained camera data. My goal is to transfer this data to OPENGL in zero-copy format, but I have encountered an error.
To illustrate, I have created a new screen_buffer_t and pointed it to the memory address of the camera data. However, when attempting to display it on the screen, I keep receiving an "invalid parameter" error.
The code is as follows:
qcarcam_ret = qcarcam_get_frame(qcarcam_context, &frame_info, 1000000 * 1000, 0);
screen_buffer_t screenbuf;
screen_create_buffer(&screenbuf);
int err = screen_set_buffer_property_iv(screenbuf, SCREEN_PROPERTY_FORMAT, (const int[]) { SCREEN_FORMAT_UYVY });
int rect[4] = { 0, 0, 1600, 1300 };
int dims[2] = { 1600, 1300 };
err = screen_set_buffer_property_iv(screenbuf, SCREEN_PROPERTY_BUFFER_SIZE, rect);
screen_set_buffer_property_iv(screenbuf, SCREEN_PROPERTY_SIZE, dims);
int stride = 1600 * 1300;
screen_set_buffer_property_iv(screenbuf, SCREEN_PROPERTY_STRIDE, &stride);
err = screen_set_buffer_property_pv(screenbuf, SCREEN_PROPERTY_POINTER, &vir_buffer[frame_info.idx]);
err = screen_blit(screen_context, screen_buf, screenbuf, NULL);
What is the issue with the code above, and where can I find examples or information about zero-copy?Li Chen(deleted)2023-04-14T03:27:24Zpost122209: shared memeory objects
http://community.qnx.com/sf/go/post122209
the use of shared memory objects - created by mmap - between processes is not working!!
Is this created by design or is it a faulty implementation ?Armin Steinhoff2023-04-13T15:38:34Zpost122194: Re: <Query> [RUST compilation for QNX]
http://community.qnx.com/sf/go/post122194
Dear Stephen,
is there any way for us to recompile GCC to newer versions and backends for QNX? This might enable gccrs (the Gnu implementation).Jason Curl2023-04-03T09:22:35Zpost122180: python2.7 on QNX6.5 armv7
http://community.qnx.com/sf/go/post122180
How can I get python2.7 pre-built binary package or compile it self on QNX6.5 armv7?jun chen2023-03-31T07:40:11Zpost122179: Re: devc-serusb and supported USB/Serial devices
http://community.qnx.com/sf/go/post122179
Thanks David,
We have ordered 12 of these to see me through while we're sorting out "real" serial ports that emulate 16550 UART's within the FPGA fabric of a Xilinx MP-SoC.
I'll have to shorten the cables however (6 feet is a bit long) but that's OK. At least I'll be able to get six or so working serial ports to play with.
Geoff.
> These have worked for us:
>
> https://www.amazon.com/gp/product/B0759HSLP1/ref=ppx_yo_dt_b_search_asin_title
> ?ie=UTF8&psc=1
>
> I use them to drive an external midi synthesizer for sound without any issue.
> Had been using a UART to RS232 but realized this was even simpler!Geoffrey Roberts2023-03-30T02:05:35Zpost122177: Re: devc-serusb and supported USB/Serial devices
http://community.qnx.com/sf/go/post122177
These have worked for us:
https://www.amazon.com/gp/product/B0759HSLP1/ref=ppx_yo_dt_b_search_asin_title?ie=UTF8&psc=1
I use them to drive an external midi synthesizer for sound without any issue. Had been using a UART to RS232 but realized this was even simpler!David Sheinberg2023-03-22T21:49:52Zpost122176: devc-serusb and supported USB/Serial devices
http://community.qnx.com/sf/go/post122176
Hello,
I want to experiment with devc-serusb and intend to purchase the appropriate USB/Serial hardware (RS232). Does anyone here have any recommendations on which ones (brand/model) work with this driver?
Thanks,
Geoff.Geoffrey Roberts2023-03-21T21:35:30Zpost122175: usblauncher_otg
http://community.qnx.com/sf/go/post122175
Hello,
I'm trying to get auto-mounting of USB devices (mainly umass) working on the RPi4 and Xilinx MP-SOC's (both aarch64le). With the help of the QNX support guy I managed to start pps and provide the correct arguments to usblauncher_otg and have it create entries in /dev. It started devb-umass and when I insert a simple thumbdrive (either with a t12 or t177 partition) it simply cretes /dev/umass0, /dev/umass1, and /dev/umass2. Using fdisk, only the umass2 shows a valid (support) filesystem partition (12 and 177 respectively). I start usblauncher_otg as follows:
usblauncher_otg -vvv -E -e -0 -m /pps
I am not seeing anything in the output log indicating anything wrong. It sees the thumbdrives being inserted and removed - it simply won't mount any partition (under /fs or anywhere else).
I'm using the supplied rules.lua and rules.mnt files but it simply won;t mount either of these partition types to produce /fs/usb0, /fs/usb1, etx.
I am wondering is this is because there are no /dev/umass2t12 or /dev/umasst177 entries?
If so, who/what actually does this. Is it devb-umass that looks into the umass device to see what partitions are there and create/mount them so that a later mount will work? The arguments provided to devb-umass are quite numerous and are based (I think) on what is in the rules.lua file.
Apparently I should see in the usblauncher_otg output log entries referring to do_mount_fsys. But I don't. And I can't find out why - this stuff doesn't seem to be documented much - or if it is it's hard to find.
The other mystery with this is why I see /dev/umass0 and /dev/umass2 - neither of which relate it seems to any supported partition type. I don't see this when I manually and mionimally start devb-umass cam pnp name=umass.
Can someone provide some enlightenment please? I'm struggling a bit with this one! :-)
Thanks,
Geoff.Geoffrey Roberts2023-03-21T21:31:16Zpost122174: Re: Post pandemic Raspberry Pi4's don't seem to work.
http://community.qnx.com/sf/go/post122174
Hi David,
I might be interested in how you do this but right now I am grappling with usblauncher_otg on the RPi4 and I'm hoping you can help as you indicated earlier on that you had this working. I will create a new thread for this however.
Geoff.
> One update is that I used the Raspberry Pi Imager to burn a new boot loader
> for the Pi4 that allows it to boot from USB (and then try the SD). This works
> well so with the formatted USB stick I put the EFI partition followed by my
> qnx6 partitions and works like a charm - no need for the SD card.
>
> Also intrigued by the network boot possibilities :-)Geoffrey Roberts2023-03-21T21:14:45Zpost122172: Re: Post pandemic Raspberry Pi4's don't seem to work.
http://community.qnx.com/sf/go/post122172
One update is that I used the Raspberry Pi Imager to burn a new boot loader for the Pi4 that allows it to boot from USB (and then try the SD). This works well so with the formatted USB stick I put the EFI partition followed by my qnx6 partitions and works like a charm - no need for the SD card.
Also intrigued by the network boot possibilities :-)David Sheinberg2023-03-17T16:09:22Zpost122168: Re: Resource Busy
http://community.qnx.com/sf/go/post122168
Thanks John. It sort of makes sense now!
Geoff.
> In these cases you will normally see that the procnto still had a fd open to
> the file in questions for the mappings.
>
> even after the process has been exited the procnto will keep the mapping
> references around for a short period of time.
> Or for up to 60 seconds if you have the sticky bit set on the file. This is to
> facilitate quicker reloading of the binary should you decode to restart it.
> http://www.qnx.com/developers/docs/7.0.0/#com.qnx.doc.neutrino.user_guide/
> topic/files_Sticky.html
>
> The correct approach to replacing a binary in place it to unlink/rm the old
> one and then copy the new one to the same location.Geoffrey Roberts2023-03-16T01:00:50Zpost122167: Re: Resource Busy
http://community.qnx.com/sf/go/post122167
In these cases you will normally see that the procnto still had a fd open to the file in questions for the mappings.
even after the process has been exited the procnto will keep the mapping references around for a short period of time.
Or for up to 60 seconds if you have the sticky bit set on the file. This is to facilitate quicker reloading of the binary should you decode to restart it.
http://www.qnx.com/developers/docs/7.0.0/#com.qnx.doc.neutrino.user_guide/topic/files_Sticky.html
The correct approach to replacing a binary in place it to unlink/rm the old one and then copy the new one to the same location.John Kearney2023-03-14T22:44:41Zpost122166: Resource Busy
http://community.qnx.com/sf/go/post122166
Hello,
For some years I have encountered the message "Resource Busy" when I try to copy an executable file to a name of one that's currently running. This is often the case when I have modified a program and simply want to replace the one that's running. It hasn't really been a problem - more of a nuisance but one that I could live with.
But recently, I have been getting this message when the file simply exists - regardless of whether it is running or not. I have to remove the file (rm) before I can copy a new one over it. Although sometimes this doesn't occur more often than not it does and I am somewhat confused by what is actually happening. I'm using the most recent release of 7.1 but this message was apparent back in the 6.x days.
So my question is: what is the criteria that governs when this "Resource Busy" is issued requiring either the running process to be stopped or the destination file to be removed?
I guess to date I have considered it to be simply one of life's little mystery's.
Geoff.Geoffrey Roberts2023-03-14T20:54:43Zpost122162: Re: Post pandemic Raspberry Pi4's don't seem to work.
http://community.qnx.com/sf/go/post122162
Got it, thanks! Without the sync=ignore option I was unable to mount the qnx6 partitions. I also continue to be puzzled about the below1G name?! I substituted devb-ustor in place of devb-umass because it seems like that might manage high speed flash?
Regardless, at least we have an approach that will let us work around the sdmmc issues!
Thanks again for the help.
-DavidDavid Sheinberg2023-03-12T15:56:31Zpost122161: Re: Post pandemic Raspberry Pi4's don't seem to work.
http://community.qnx.com/sf/go/post122161
The following works for me. In the build file (of the BSP) and assuming the usb_start.sh routine has successfully started io-usb-otg:
devb-umass cam pnp mem name=below1G disk name=usb
waitfor /dev/usb0t177 5
mount -t qnx6 -o sync=ignore /dev/usb0t177 /
waitfor /
I put this between the qconn and [+session] ksh & commands (in the section called "Remote Debug".
I actually comment out the [+session ] ksh & command and instead run /etc/rc.d/rc.local so that some other stuff gets started from outside of the IFS. Eventually, if I want it, the shell gets started on /dev/ser1. I generally ssh in via the network and rarely use the serial port terminal connection.
I hope this helps!
Geoff.
> Figured I would try to just mount the USB stick instead of the sd cards on the
> newer pis, but I'm not sure I have the options right for the io-usb-otg /
> devb-mass (or ustor?) drivers. Any pointers for making sure I load these
> correctly?
>
> In some cases, I can enumerate the partitions, and can mount my efi (dos)
> partition. I can't mount qnx6 partitions though. And should fdisk /dev/hd0
> actually work for a USB drive?
>
> Thanks!Geoffrey Roberts2023-03-11T23:49:08Zpost122160: Re: Post pandemic Raspberry Pi4's don't seem to work.
http://community.qnx.com/sf/go/post122160
Figured I would try to just mount the USB stick instead of the sd cards on the newer pis, but I'm not sure I have the options right for the io-usb-otg / devb-mass (or ustor?) drivers. Any pointers for making sure I load these correctly?
In some cases, I can enumerate the partitions, and can mount my efi (dos) partition. I can't mount qnx6 partitions though. And should fdisk /dev/hd0 actually work for a USB drive?
Thanks!David Sheinberg2023-03-11T22:26:04Zpost122154: Re: Post pandemic Raspberry Pi4's don't seem to work.
http://community.qnx.com/sf/go/post122154
Hi Elad,
I tried it. Instead of complaining with the error message "xpt_configure: No sdmmc interfaces found" it returns "xpt_configure: sdmmc SIM attach failure"
I haven't had a chance to delve further into this myself. Beside I don't know anything about SDMMC drivers so I'll leave this to experts!
Geoff.
> Geoff, David ,
>
> You can try this one little trick SD device drivers really hate: comment out
> lines 607-609 in src/hardware/devb/sdmmc/sdiodi/sd.c and rebuild devb-sdmmc.
> These are the lines in question:
>
> if( ( status = sd_switch( dev, SD_SF_MODE_SET, SD_SF_GRP_BUS_SPD,
> 1, sw_status ) ) == EOK ) {
> // if( ( sw_status[16] & 0xF ) != 0x1 ) {
> // status = EIO;
> // }
> }
>
> Let me know if it fixes the problem (though if it does it would be a hack and
> not a real solution).
>
> --EladGeoffrey Roberts2023-02-28T23:03:00Zpost122153: Re: Post pandemic Raspberry Pi4's don't seem to work.
http://community.qnx.com/sf/go/post122153
Geoff, David ,
You can try this one little trick SD device drivers really hate: comment out lines 607-609 in src/hardware/devb/sdmmc/sdiodi/sd.c and rebuild devb-sdmmc. These are the lines in question:
if( ( status = sd_switch( dev, SD_SF_MODE_SET, SD_SF_GRP_BUS_SPD,
1, sw_status ) ) == EOK ) {
// if( ( sw_status[16] & 0xF ) != 0x1 ) {
// status = EIO;
// }
}
Let me know if it fixes the problem (though if it does it would be a hack and not a real solution).
--EladElad Lahav2023-02-28T11:24:52Zpost122152: Re: Post pandemic Raspberry Pi4's don't seem to work.
http://community.qnx.com/sf/go/post122152
> We too have been struggling with this. It's hit or miss with the sd driver,
> which is frustrating to be sure. If there were cards that (nearly?) always
> worked, it would be great to know which ones! In our case, we are actually
> mounting NFS drives for some shared data, and makes me think it would be
> safest to just mount root filesystem specifically for each Pi across the
> network (sort of like our QNX4 nodes did to their host)?
This is pretty much what I do. QNET is an absolute secret weapon that saves me so much time that it's not funny! But sadly the intention is for QNET to be removed from QNX after close to 40 years of use across QNX2/3, 4, 6, and 7. I have four Raspberry Pi's - along with a couple of Xilinx and x86_64 - all networked so that I can quickly and easily copy files around across all of them (if need be). When I get back to my Linux environment it's often "bugger"! Back to SCP that doesn't seem to deal with things like soft links and file modes very well.
>
> To answer a question earlier in the thread - these machines all seem to work
> find with raspian/linux installs from the SD cards.
I think we're very lucky to have QNX 7.1 working on the RPi4. I don't know who put the BSP together but I sure do appreciate it! Sure, some things don't seem to work quite right but being able to develop ARM code on a cheap platform instead of the very expensive Xilinx board has been a godsend for me personally. Being able to simply mount a QNX6 USB and adopt/mount it as root has saved my bacon this week. Along with QNET. I guess one day the SD card issues will be resolved.
Geoff.Geoffrey Roberts2023-02-28T05:50:55Zpost122151: Proper way to wait for DHCP assignment?
http://community.qnx.com/sf/go/post122151
I have some drivers that I'd like to start on boot which depend on the network address being assigned by DHCP (actually ntpdate is one of these, too). Is there a "waitfor" command I can use that will wait until the socket interface is configured? If I insert a sleep with a sufficiently long pause, this will work, but I was hoping for a cleaner solution...
Thanks!
DavidDavid Sheinberg2023-02-27T23:56:34Zpost122150: Re: Post pandemic Raspberry Pi4's don't seem to work.
http://community.qnx.com/sf/go/post122150
We too have been struggling with this. It's hit or miss with the sd driver, which is frustrating to be sure. If there were cards that (nearly?) always worked, it would be great to know which ones! In our case, we are actually mounting NFS drives for some shared data, and makes me think it would be safest to just mount root filesystem specifically for each Pi across the network (sort of like our QNX4 nodes did to their host)?
To answer a question earlier in the thread - these machines all seem to work find with raspian/linux installs from the SD cards.David Sheinberg2023-02-27T23:52:49Zpost122149: Re: Post pandemic Raspberry Pi4's don't seem to work.
http://community.qnx.com/sf/go/post122149
Hi Elad,
I generally use SanDisk's as that's what the local shop mainly stocks. I haven't to date had any problems with them.
Anyway, I have managed to get a viable workaround going by formatting up a mini USB "thumbdrive", shoving some relevant files onto it, and after configuring the USB system in the IFS to find it, simply mount it as root. From thereonin the SD card is effectively bypassed and the USB drive become the primary. Not the way I'd run an airline but it lets me keep going.
The production target system (not a Pi) will eventually not have any writable filesystem on it at all.
BTW, the Pi's cost us about US$200 just for the boards. These had 8Gb memory installed. They used to cost us about US$80
Many thanks Roger! Without you pointing me in the right direction I would have hit a brick wall today!
Cheers,
Geoff.
> You may want to try a few different SD card brands, if you have any around. We
> found that some work and some don't.
>
> --EladGeoffrey Roberts2023-02-24T05:10:11Zpost122148: Re: Post pandemic Raspberry Pi4's don't seem to work.
http://community.qnx.com/sf/go/post122148
You may want to try a few different SD card brands, if you have any around. We found that some work and some don't.
--EladElad Lahav2023-02-24T00:01:35Zpost122147: Re: Post pandemic Raspberry Pi4's don't seem to work.
http://community.qnx.com/sf/go/post122147
I am not sure what prompted me to compare the checksums of the ifs-bin files but I did. And discovered they were different! Somehow the copy (using cp on the FAT32 partition) didn't do the job properly.
So I repeated the process and now ifs-qnx is loading. But I have the problem Elad mentioned where the sdmmc driver can't find the hardware. I have seen this before with the Compute Module 4.
I may be able to find a workaround for this using a USB thumbdrive that hopefully I can mount as / like I do with the Xilinx boards I have. For which the SD cards are read-only.
Geoff.
> Hi Elad, Roger,
>
> Thanks for your responses.
>
> I brought a suitable USB/serial cable into work today and using the firmware
> files Roger pointed me to was able to see the RPi trying to get started. I
> have attached a screenshot of the terminal output.
>
> From startup where the first line is "MMU: 16-bit ASID..." it gets to the
> final line where it says"All ClockCycles offsets within tolerance", pauses for
> a couple of seconds, and then repeats from the MMU: line. Just keeps going
> around and around.
>
> I don't think it's getting to where it wants to load the IFS file. I looked
> into the BSP for "All ClockCycles" and couldn't find anything like that.
>
> I am not sure if I'm using the very latest BSP (as the one I'm using has up
> until now been very stable) so when I can I'll check that out and see what
> happens. But as I said, I don't think it's getting to load the IPL.
>
> Geoff.Geoffrey Roberts2023-02-23T23:15:58Zpost122146: Re: Post pandemic Raspberry Pi4's don't seem to work.
http://community.qnx.com/sf/go/post122146
Hi Elad, Roger,
Thanks for your responses.
I brought a suitable USB/serial cable into work today and using the firmware files Roger pointed me to was able to see the RPi trying to get started. I have attached a screenshot of the terminal output.
From startup where the first line is "MMU: 16-bit ASID..." it gets to the final line where it says"All ClockCycles offsets within tolerance", pauses for a couple of seconds, and then repeats from the MMU: line. Just keeps going around and around.
I don't think it's getting to where it wants to load the IFS file. I looked into the BSP for "All ClockCycles" and couldn't find anything like that.
I am not sure if I'm using the very latest BSP (as the one I'm using has up until now been very stable) so when I can I'll check that out and see what happens. But as I said, I don't think it's getting to load the IPL.
Geoff.Geoffrey Roberts2023-02-23T22:55:34Zpost122145: Re: Post pandemic Raspberry Pi4's don't seem to work.
http://community.qnx.com/sf/go/post122145
You may want to make sure you get up to date firmware. I've seen cases where older Pi's will boot but newer ones wouldn't until the firmware was updated.
The latest can be obtained from https://github.com/raspberrypi/firmware.
Currently only three files are required. These can be obtained using:
wget https://github.com/raspberrypi/firmware/raw/master/boot/bcm2711-rpi-4-b.dtb
wget https://github.com/raspberrypi/firmware/raw/master/boot/start4.elf
wget https://github.com/raspberrypi/firmware/raw/master/boot/fixup4.datRoger Maclean2023-02-23T13:10:18Zpost122144: Re: When do you actually responds
http://community.qnx.com/sf/go/post122144
This is a community forum. No one is under any obligation to respond. Very few people from QNX monitor this forum, let alone reply.
As you seem to be working for a QNX customer, please use the proper support channels.
--EladElad Lahav2023-02-23T12:38:52Zpost122143: Re: Post pandemic Raspberry Pi4's don't seem to work.
http://community.qnx.com/sf/go/post122143
> We managed to get our hands on three RPi4 model B's from Amazon
I feel your pain. They are not cheap on Amazon. Somebody is getting rich off these.
> To our dismay they won't start when the pre pandemic SD cards are inserted
Can you be more specific about what doesn't work? I know that the SD card is not recognized in some variant of RPi4. We haven't managed to figure out what is different on this variant and why. That said, it only prevents the file system on the card from being mounted by devb-sdmmc but the board does boot and the IFS works.
Does raspbian boot on these?
--EladElad Lahav2023-02-23T12:31:58Zpost122142: When do you actually responds
http://community.qnx.com/sf/go/post122142
CAUTION - This email is from an external source. Please be cautious with links and attachments. (go/taginfo)
Hi!
If I post a topic for discussion, about when will you answer?
I also have a question, which tool can you use from QNX that can show the dynamic allocation of the heap memory?
showmem is not supported .. I cant run that tool atleast on qnx7
--------------------------------------------------------------------------------
Best regards/Med vänliga hälsningar
Hung Nguyen
email: hnyugyen@volvocars.com
phone: +46(0)709326784
adress: Serenadgatan 16, 21572 Malmö
team: SWECS-IHung Nguyen2023-02-23T12:31:53Zpost122141: Post pandemic Raspberry Pi4's don't seem to work.
http://community.qnx.com/sf/go/post122141
Hi,
We managed to get our hands on three RPi4 model B's from Amazon. To our dismay they won't start when the pre pandemic SD cards are inserted (that we know work fine).
Has anyone else found this?
I'm going to bring the 5V/3.3V USB/serial cable into work tomorrow and see if I can see anything meaningful on the terminal. I imagine that something has changed slightly in the architecture preventing them from starting.
Hopefully we can get these things working without too much bother. Maybe a tweak of the config.txt file? I've still got about four pre pandemic Pi's that I will be extra careful with!
Geoff.Geoffrey Roberts2023-02-23T05:17:20Zpost122140: make sense of Pidin, Hogs, Top
http://community.qnx.com/sf/go/post122140
Hi
I am trying to analyse the memory usage of each processes with the utlities provided by QNX, somehow the showmem util is gone.
Anyway when I run pidin mem, hogs, or top, the memory data I see makes no sense these doesnt sum up.
Probably because I dont understand what I am looking at.
Can you guys explain a bit how I can best use these tools for following purposes.
I want to list all processes, see a snapshot every 10 seconds, how much heap (dynamic allocation) and stack allocation they have used
Then all the shared libs/mems, how much of that is part of the memory a specific process is used. Which is the pdin -m option you get all these memory but shall sum everything and add that to get the total memory a process uses?
I still do not know how to analyse the dynamic heap usage yet by each process.
I tried to get some inspiration from your own memory analysis tool. But those data should be part of the data you get from pidin... except the heap part.
Or do you have any other strategy, I basically would like to gather these snapshots and save them as a file and parse them later on another tool. Since I cant directly use your graphical memory analysis tool. I need to automate this.Hung Nguyen2023-02-22T16:18:38Zpost122139: Monitor the memory usage of each process with pidin
http://community.qnx.com/sf/go/post122139
Hi I have a couple of questions related to pidin. Also some general question about calculating the total memory usage of a process
1. when I run "pdin mem" and "pidin pmem" it gives me different values of code memory and data memory. What is the differences here?
Here is the result for each command for a specific process with 8 threads, that is why we see 8 lines for that process
with pidin pmem
7372K 6788K 512K(516K)*
7372K 6788K 512K(516K)
7372K 6788K 512K(516K)
7372K 6788K 512K(516K)
7372K 6788K 512K(516K)
7372K 6788K 512K(516K)
7372K 6788K 512K(516K)
7372K 6788K 512K(516K)
With pidin mem
0 6612K 512K(516K)*
0 6612K 512K(516K)
0 6612K 512K(516K)
0 6612K 512K(516K)
0 6612K 512K(516K)
0 6612K 512K(516K)
0 6612K 512K(516K)
0 6612K 512K(516K)
2. I would like to use pidin utility to monitor a process memory usage over time is that possible with pidin mem or pidin pmem?
3. In the list from pidin mem I also see text as following:
10r CONDVAR 0 6612K 512K(516K)*
0r SIGWAITINFO 0 6612K 512K(516K)
10r CONDVAR 0 6612K 512K(516K)
10r REPLY 0 6612K 512K(516K)
10r RECEIVE 0 6612K 512K(516K)
10r RECEIVE 0 6612K 512K(516K)
19r RECEIVE 0 6612K 512K(516K)
10r RECEIVE 0 6612K 512K(516K)
some_lib @ 100c8000 268K 12K
some_lib @ 1000000 620K 24K
some_lib @ 78000000 92K 4096
some_lib @ 78029000 132K 4096
some_lib @ 7805c000 140K 4096
some_lib @ 78092000 104K 4096
some_lib @ 780be000 132K 4096
some_lib @ 780f8000 1076K 4096
some_lib @ 78226000 300K 4096
some_lib @ 78285000 200K 4096
some_lib @ 782ca000 80K 4096
some_lib @ 782f0000 252K 4096
some_lib @ 78342000 412K 4096
:
:
All these some_lib are libs that the process uses but are thes memory already included in the code and data memory or should I also need to sum all these sizes to have the whole picture of the total memory the process uses?Hung Nguyen2023-02-22T11:08:12Zpost122138: QNX 7.1 / Resource manager corrupt OS by reading actuel parameters
http://community.qnx.com/sf/go/post122138
A start of an Interbus resource manager using actual parameters corrupts the operation of QNX 7.1.
This doesn't happen by a start on a shell command line!
This problem dosn't exist not in QNX 7.0 ...
Greetings
ArminArmin Steinhoff2023-02-21T11:19:12Zpost122136: Re: Cross-compile protobuf3-19.4 on qnx-sdp710 failed
http://community.qnx.com/sf/go/post122136
iI solved this problem by adding CPPFLAGS='- D_ XOPEN_ SOURCE=700 'Compilation optionsQicheng Ma(deleted)2023-02-15T08:37:48Zpost122135: Cross-compile protobuf3-19.4 on qnx-sdp710 failed
http://community.qnx.com/sf/go/post122135
i want to Cross-compile protobuf3-19.4 on qnx-sdp710, But there are some problems to build it,
The same environment can be compiled successfully with version qnx-sdp700。
The compilation process is as follows:
1、source ${MY_SDP710}/qnxsdp-env.sh
2、cd protobuf-3.19.4
3、./configure --prefix=xxx --host=arm CC=aarch64-unknown-nto-qnx7.1.0-gcc CXX=aarch64-unknown-nto-qnx7.1.0-g++ CPPFLAGS='-D_XOPEN_SOURCE=500'
4、make -j8 & make install
Please see the attachment for the log of compilation failureQicheng Ma(deleted)2023-02-15T03:55:28Zpost122130: Re: Programmatically read CPU load and RAM usage
http://community.qnx.com/sf/go/post122130
Thank You all for the quick response and simple solution.
I think that's all I need to know (and Albrecht also got an answer to his question).
Regards,
Michael.Michael Kurt2023-02-03T06:23:53Zpost122128: Re: Programmatically read CPU load and RAM usage
http://community.qnx.com/sf/go/post122128
There are various ways to query total and used memory. The cleanest in my opinion is to use the _MEM_INFO message, e.g.:
mem_info_t msg = { .i.type = _MEM_INFO, .i.fd = -1 };
if (MsgSend(MEMMGR_COID, &msg.i, sizeof(msg.i), &msg.o, sizeof(msg.o))
== -1) {
perror("MsgSend");
return 1;
}
printf("Total memory=%lu Free memory=%lu\n",
msg.o.info.__posix_tmi_total, msg.o.info.posix_tmi_length);
To track CPU usage you do the opposite and look at idle time. This can be done using the runtime clock of the idle threads. For example, for core 1:
uint64_t idle_1_time;
clock_t idle_1_clock_id = ClockId(1, 1);
ClockTime(idle_1_clock_id, NULL, &idle_1_time);
The value in idle_1_time is the total run time of the idle thread on core 1. By sampling this value periodically you can calculate the percentage of idle time and, from that, the percentage of CPU usage.
--EladElad Lahav2023-02-02T14:59:55Zpost122127: Re: Programmatically read CPU load and RAM usage
http://community.qnx.com/sf/go/post122127
here's one way of reading free mem of the system (or at least a start):
http://www.qnx.com/developers/docs/7.1/#com.qnx.doc.neutrino.lib_ref/topic/p/procmgr_value_notify_add.html
you can also follow this guide to get mapping information and then sum it up:
http://www.qnx.com/developers/docs/7.1/index.html#com.qnx.doc.neutrino.cookbook/topic/s3_procfs_DCMD_PROC_MAPINFO.html
Note though that esp DCMD_PROC_PAGEDATA is *very* expensive, you don't want to run that often.
regards
-- Michael
________________________________
From: Albrecht Uhlmann <community-noreply@qnx.com>
Sent: Thursday, February 2, 2023 15:08
To: ostech-core_os
Subject: Re: Programmatically read CPU load and RAM usage
Hi Michael,
for total RAM usage, there is a simple command, I think you need to do a stat on /proc and read the filesize member. The knowledge base contains sample code: https://www.qnx.com/support/knowledgebase.html?id=50130000000nbHX
As to CPU load, I am very much interested myself but I do not know a solution. My idea was to open process #1 and use the devctl's to query its individual threads. Threads #1...through to #cpus are the idle threads (one per core), so getting their time must be "Idle time per core". The CPU time of all other threads in procnto I guess is what would be called "Kernel Time". And the remaining time (per core) is user time.
What I do not know is interrupt time.
Any of the QNX gurus comment on this?
Regards,
-Al
_______________________________________________
OSTech
http://community.qnx.com/sf/go/post122126
To cancel your subscription to this discussion, please e-mail ostech-core_os-unsubscribe@community.qnx.comMichael Schuster2023-02-02T14:13:19Zpost122126: Re: Programmatically read CPU load and RAM usage
http://community.qnx.com/sf/go/post122126
Hi Michael,
for total RAM usage, there is a simple command, I think you need to do a stat on /proc and read the filesize member. The knowledge base contains sample code: https://www.qnx.com/support/knowledgebase.html?id=50130000000nbHX
As to CPU load, I am very much interested myself but I do not know a solution. My idea was to open process #1 and use the devctl's to query its individual threads. Threads #1...through to #cpus are the idle threads (one per core), so getting their time must be "Idle time per core". The CPU time of all other threads in procnto I guess is what would be called "Kernel Time". And the remaining time (per core) is user time.
What I do not know is interrupt time.
Any of the QNX gurus comment on this?
Regards,
-AlAlbrecht Uhlmann2023-02-02T14:08:22Zpost122125: Programmatically read CPU load and RAM usage
http://community.qnx.com/sf/go/post122125
Dear community,
tools like 'top', 'sac' or 'pidin' can be used to display CPU load and RAM usage, so there must be a way to program this.
Could somebody please tell me, how this can be done in a C(++) program (QNX7)?
Thanks in advance,
Michael.Michael Kurt2023-02-02T13:36:02Zpost122118: Re: QNX 7.x bsdtar broken
http://community.qnx.com/sf/go/post122118
No,
I have tested all filesystems.
bsdtar uses statvfs() and pathconf(). The QNX procnto and/or filesystem returns incorrect errors.
!!! e.g. pathconf(_PC_REC_XFER_ALIGN) returns -1 and does not set errno!!!
-Michael
> Is it possible you're running the command from within /tmp while it's linked
> to /dev/shmem?
>
>
> If so, try running it anywhere else but there.
>
>
> -Eric
>
> ________________________________
> From: Michael Tasche <community-noreply@qnx.com>
> Sent: Thursday, January 12, 2023 3:10:52 PM
> To: ostech-core_os
> Subject: QNX 7.x bsdtar broken
>
> Hi all,
>
> # use -i tar
> QNX_BUILDID=(GNU)e6eae59479764ad68539563a3d0e0f09
> NAME=bsdtar
> DESCRIPTION=libarchive tar
> DATE=2020/06/13-19:36:42-EDT
> STATE=lookup
> HOST=sdp710-node1
> USER=builder
> VERSION=7.1.0
> TAGID=710-SDP-472
>
> # ls -l
> total 0
> drwxr-xr-x 2 root root 0 Jan 12 21:57 m1
> # tar -cf m1.tar.gz m1
> tar: statvfs failed
> tar: Error exit delayed from previous errors.
> #
>
> Is this a know problem?
>
> I have the same problem under 7.0 !
> gnutar, delivered first for 7.0, works.
>
> Any ideas?
>
> -Michael
>
>
>
> _______________________________________________
>
> OSTech
> http://community.qnx.com/sf/go/post122115
> To cancel your subscription to this discussion, please e-mail ostech-core_os-
> unsubscribe@community.qnx.comMichael Tasche2023-01-13T15:35:05Zpost122116: Re: QNX 7.x bsdtar broken
http://community.qnx.com/sf/go/post122116
Is it possible you're running the command from within /tmp while it's linked to /dev/shmem?
If so, try running it anywhere else but there.
-Eric
________________________________
From: Michael Tasche <community-noreply@qnx.com>
Sent: Thursday, January 12, 2023 3:10:52 PM
To: ostech-core_os
Subject: QNX 7.x bsdtar broken
Hi all,
# use -i tar
QNX_BUILDID=(GNU)e6eae59479764ad68539563a3d0e0f09
NAME=bsdtar
DESCRIPTION=libarchive tar
DATE=2020/06/13-19:36:42-EDT
STATE=lookup
HOST=sdp710-node1
USER=builder
VERSION=7.1.0
TAGID=710-SDP-472
# ls -l
total 0
drwxr-xr-x 2 root root 0 Jan 12 21:57 m1
# tar -cf m1.tar.gz m1
tar: statvfs failed
tar: Error exit delayed from previous errors.
#
Is this a know problem?
I have the same problem under 7.0 !
gnutar, delivered first for 7.0, works.
Any ideas?
-Michael
_______________________________________________
OSTech
http://community.qnx.com/sf/go/post122115
To cancel your subscription to this discussion, please e-mail ostech-core_os-unsubscribe@community.qnx.comEric Naud2023-01-12T20:52:47Zpost122115: QNX 7.x bsdtar broken
http://community.qnx.com/sf/go/post122115
Hi all,
# use -i tar
QNX_BUILDID=(GNU)e6eae59479764ad68539563a3d0e0f09
NAME=bsdtar
DESCRIPTION=libarchive tar
DATE=2020/06/13-19:36:42-EDT
STATE=lookup
HOST=sdp710-node1
USER=builder
VERSION=7.1.0
TAGID=710-SDP-472
# ls -l
total 0
drwxr-xr-x 2 root root 0 Jan 12 21:57 m1
# tar -cf m1.tar.gz m1
tar: statvfs failed
tar: Error exit delayed from previous errors.
#
Is this a know problem?
I have the same problem under 7.0 !
gnutar, delivered first for 7.0, works.
Any ideas?
-MichaelMichael Tasche2023-01-12T20:10:52Zpost122106: Re: Network driver for the Enclustra Mercury XU1 SOM
http://community.qnx.com/sf/go/post122106
Hi Al,
By chance, late yesterday, I discovered in the Renesas Car H3 BSP devnp-ravd.so that appears to be based on this NIC. We will investigate this next week.
I have never had need to delve into the way QNX deals with network devices so your comments are of considerable help to me and appreciated. I have mainly dealt with serial devices - UART's seem to be much less complicated!
Cheers,
Geoff.
> KSZ9031RNX is just a PHY. The "drivers" for the PHYs are compiled into the
> devnp-* drivers, usually in mii.c. The "driver" is usually just an
> initialization routine as a C function. The main network driver init routines
> scan the MII bus and select the correct PHY init routine based on PHY vendor/
> device id. If none is found, a generic PHY init is done, which is often, but
> not always, sufficient.
>
> I remember that I have seen some Micrel KS9031 code in the i.MX6 ENET driver.
> Maybe that helps.
>
> Regards,
> -AlGeoffrey Roberts2023-01-06T22:09:36Zpost122105: Re: Network driver for the Enclustra Mercury XU1 SOM
http://community.qnx.com/sf/go/post122105
Hi Elad,
The decision to use the Mercury XU1 was I think driven by the hefty FPGA requirements of our application and its relative compatibility with the ZCU10x boards we have been using to date. Based on how the QNX software performed on the 4-core A53 moving to a 2-core A53 was considered viable - so long as I could get QNX 7.1 working on it. Which I was able to do with the exceptions of the QSPI and network.
As for price, well, we'd be of course interested in anything (SoC) that's cheaper that can handle our FPGA requirements and also works with QNX and its devices (like serial, USB, SDMMC, and network). The production unit would not require SDMMC or USB. We also have some environmental requirements that I think drove us to the Exclustra board. I am not sure if the board could be considered "non modern"! :-)
Geoff.
> Did you check if either NetBSD (for io-pkt) or FreeBSD (for io-sock) have a
> driver for this card?
>
> Out of curiosity - what's the use case for these boards? These are 10-20 times
> more expensive than modern single-board computers, and quite a bit less
> powerful (I think?).
>
> --EladGeoffrey Roberts2023-01-06T22:01:54Zpost122104: Re: Network driver for the Enclustra Mercury XU1 SOM
http://community.qnx.com/sf/go/post122104
KSZ9031RNX is just a PHY. The "drivers" for the PHYs are compiled into the devnp-* drivers, usually in mii.c. The "driver" is usually just an initialization routine as a C function. The main network driver init routines scan the MII bus and select the correct PHY init routine based on PHY vendor/device id. If none is found, a generic PHY init is done, which is often, but not always, sufficient.
I remember that I have seen some Micrel KS9031 code in the i.MX6 ENET driver. Maybe that helps.
Regards,
-AlAlbrecht Uhlmann2023-01-06T11:52:38Zpost122103: Re: Network driver for the Enclustra Mercury XU1 SOM
http://community.qnx.com/sf/go/post122103
Did you check if either NetBSD (for io-pkt) or FreeBSD (for io-sock) have a driver for this card?
Out of curiosity - what's the use case for these boards? These are 10-20 times more expensive than modern single-board computers, and quite a bit less powerful (I think?).
--EladElad Lahav2023-01-06T10:49:52Zpost122101: Re: Network driver for the Enclustra Mercury XU1 SOM
http://community.qnx.com/sf/go/post122101
BTW, the NIC is a Micrel KSZ9031RNX. I can't find any QNX 7.1 driver for it for any platform (aarch64le or x86_64).
Does anyone know if we have a driver for it and what it might be called?
Geoff.
> Hello,
>
> This is actually a board modeled on the Xilinx MPSoC's (ZCU10x). I have been
> able to get QNX 7.1 up and running on it and for the most part everything
> works just like they did on the ZCU111 and ZCU102 before it. However,
> Enclustra use a different NIC chip so the xzynq-ultrascale network driver
> (devnp-xzynq-ultrascale.so) won't work. Here is a link to this particular
> board.
>
> https://www.enclustra.com/en/products/system-on-chip-modules/mercury-xu1/
>
> Has anyone reading this forum found the same problem and formulated a solution
> , or can help us with a solution? This would probably entail writing a new
> network driver if someone else hasn't already done so. Or has and is prepared
> to share it. (I use the word "share" loosely)!
>
> The QSPI driver that comes with ZCU10x BSP's doesn't work either but that can
> be dealt with later. Getting the network working is my immediate priority.
>
> Any ideas and/or help with this would be appreciated!
>
> Regards,
>
> Geoff.Geoffrey Roberts2023-01-06T01:25:34Zpost122098: Network driver for the Enclustra Mercury XU1 SOM
http://community.qnx.com/sf/go/post122098
Hello,
This is actually a board modeled on the Xilinx MPSoC's (ZCU10x). I have been able to get QNX 7.1 up and running on it and for the most part everything works just like they did on the ZCU111 and ZCU102 before it. However, Enclustra use a different NIC chip so the xzynq-ultrascale network driver (devnp-xzynq-ultrascale.so) won't work. Here is a link to this particular board.
https://www.enclustra.com/en/products/system-on-chip-modules/mercury-xu1/
Has anyone reading this forum found the same problem and formulated a solution, or can help us with a solution? This would probably entail writing a new network driver if someone else hasn't already done so. Or has and is prepared to share it. (I use the word "share" loosely)!
The QSPI driver that comes with ZCU10x BSP's doesn't work either but that can be dealt with later. Getting the network working is my immediate priority.
Any ideas and/or help with this would be appreciated!
Regards,
Geoff.Geoffrey Roberts2023-01-03T22:52:01Zpost122027: Re: devb-sdmmc with x86_64 generic kernel for LattePanda Delta (Celeron N4100)
http://community.qnx.com/sf/go/post122027
Hi David,
Did you find a solution? If not, can you try running the driver with extra verbosity and post the slog2info results?
That board certainly seems expensive for what you get :-( I think it's sole purpose is as a Windows development board. There are claims that RaspberryPi is building more units, but I haven't seen these materialize yet.
--EladElad Lahav2022-12-18T12:24:31Zpost122017: Re: su: System error (?)
http://community.qnx.com/sf/go/post122017
The thing I learnt hardly is that we have to satisfy
ls -ld / to be root:root with permission 755(no write for group and others).
In our BSP sample build file, we did not explicitly set dperms=0755 to root directory(/) as we do to others, for example:
[uid=0 gid=0 type=dir dperms=0755] /usr
[uid=0 gid=0 type=dir dperms=0755] /usr/lib
[uid=0 gid=0 type=dir dperms=0755] /etc
On my target, I mount disk drive to / as follows:
mount -t qnx6 /dev/sata0t179 /
and that break the rule for /
Once change the mounting with -o mntperms=755, the su - root works.
mount -t qnx6 -o mntperms=755 /dev/sata0t179 /Yuxi Zhang2022-12-07T17:22:59Zpost122014: devb-sdmmc with x86_64 generic kernel for LattePanda Delta (Celeron N4100)
http://community.qnx.com/sf/go/post122014
With the shortage of RPi4's, I've been exploring the use of relatively cheap (but not as cheap!) x86 alternatives. I have a LattePanda board that I can boot up fine from USB and can use the nvme driver to access external storage, but I'd like to take advantage of the sdmmc/emmc that's on board. Problem is I can't seem to get the devb-sdmmc to recognize either the SD reader or the eMMC.
pci-tools -v show what I think are the controllers?
B000:D28:F00 @ idx 18
vid/did: 8086/31cc
Intel Corporation, <device id - unknown>
class/subclass/reg: 08/05/01
SD Host Controller Base Systems Peripheral
B000:D30:F00 @ idx 19
vid/did: 8086/31d0
Intel Corporation, <device id - unknown>
class/subclass/reg: 08/05/01
SD Host Controller Base Systems Peripheral
But my attempts to form the correct devb-sdmmc command line have not succeeded. Any suggestions?
Thanks!
DavidDavid Sheinberg2022-12-01T03:12:26Zpost122003: Re: Having trouble starting QDB
http://community.qnx.com/sf/go/post122003
Hi, You do not have the qdb executable in Your image or it is not in the search path.
Be sure to have it in the image or in the disk, and that is reachable and executable.
If it is not in the disk/image, just copy it or add it to image build.
if it is not in the PATH, add its directory to the PATH.
Bye
Mariomario sangalli2022-11-21T09:01:49Zpost122001: Having trouble starting QDB
http://community.qnx.com/sf/go/post122001
Hi there, I'm a student working with QNX for a project and I'm having trouble starting QDB. I looked through the "Starting the QDB Server" page and followed the instructions (started PPS, created the directory structure) but when I try and run the qdb command in terminal I get the error:
sh: qdb: cannot execute - No such file or directory
Also, when I run "which qdb" I get:
which: no qdb in /proc/boot:/system/xbin
I'm not sure where to go from here so any help would be appreciated, thanks.AJ Ricketts(deleted)2022-11-19T21:51:38Zpost121997: Replace the original hard drive
http://community.qnx.com/sf/go/post121997
Is there any way to replace the original hard drive? Replace with SSD hard disk, need help from boss, thank youhang zhang2022-11-18T08:17:46Zpost121989: Re: microsecond sleep on QNX 7.1
http://community.qnx.com/sf/go/post121989
The minimum resolution for HRTs is 10us anyway.Benjamin Walsh2022-10-31T16:58:49Zpost121988: Re: microsecond sleep on QNX 7.1
http://community.qnx.com/sf/go/post121988
QNX 7 has high-resolution timers. You can use these, but depending on how many microseconds we are talking about setting up the timer, blocking and waiting for it to fire may not justify the cost.
--EladElad Lahav2022-10-28T18:00:35Zpost121978: Re: microsecond sleep on QNX 7.1
http://community.qnx.com/sf/go/post121978
Hi,
if you need really shorts delay you could use a "busy loop" using ClockCycles() call.
Of course you'll need a thread and it is CPU consuming.
Otherwise, I agree with Mario. You should also consider the interrupt dispatch time as a minimal delay.
ByeAlexandre REBEKO2022-10-28T10:09:19Zpost121977: Re: microsecond sleep on QNX 7.1
http://community.qnx.com/sf/go/post121977
It is the tick time of your CPU, change it to a lower value (For instance 100us)
See:
https://www.qnx.com/developers/docs/7.1/#com.qnx.doc.neutrino.prog/topic/timing.html
If You requires an exact us delay, You cau use one of hardware timers of the CPU.
Byemario sangalli2022-10-28T06:25:54Zpost121976: microsecond sleep on QNX 7.1
http://community.qnx.com/sf/go/post121976
I am using QNX 7.1 on QualcommSA8540P and find that the least sleep time is 1 ms when using usleep(). Is there any way to achieve microsecond sleep?ge zhang(deleted)2022-10-28T05:50:52Zpost121951: Re: Programming Interface to eMMC in QNX
http://community.qnx.com/sf/go/post121951
Hi Manoj,
You are right, I forgot to tell about the DCMD_SDMMC_DEVICE_INFO command.
Anyhow, the information you get with that is basically a mapping and some calculation based on data from the device registers.
Good to hear that DCMD_SDMMC_ERASE is working for you.
Just keep in mind to not use it on partitions with mounted file systems ;-)
Regards,
GerdGerd Wetzel2022-10-10T11:40:46Zpost121950: Re: Programming Interface to eMMC in QNX
http://community.qnx.com/sf/go/post121950
Hi Gred,
I guess DCMD_SDMMC_CARD_REGISTER which you mentioned is the wrong one to use for sector size. Instead, I tried DCMD_SDMMC_DEVICE_INFO, and it is working as SDMMC_DEVICE_INFO is having required members (sectors, sector_size & erase_size).
To erase sectors with DCMD_SDMMC_ERASE is working.
Thanks
ManojManoj Palhade(deleted)2022-10-07T20:43:20Zpost121949: Re: Programming Interface to eMMC in QNX
http://community.qnx.com/sf/go/post121949
Hi Manoj,
Only what you can find in our online documentation. Anything else would typically require a support contract.
If you are working on a project with an existing support contract, please contact you QNX PM.
Best Regards,
GerdGerd Wetzel2022-10-06T07:55:34Zpost121948: Re: Programming Interface to eMMC in QNX
http://community.qnx.com/sf/go/post121948
Hi Gerd,
Thanks for sharing the information about devctl()
Do you have any example code to refer about DCMD_SDMMC_CARD_REGISTER & DCMD_SDMMC_ERASE
Thanks
ManojManoj Palhade(deleted)2022-10-05T16:41:27Zpost121947: Re: Programming Interface to eMMC in QNX
http://community.qnx.com/sf/go/post121947
Hi Gerd,
Thanks for your quick reply and help by sharing this useful information.
Best regards,
ManojManoj Palhade(deleted)2022-09-29T13:26:57Zpost121946: Re: Programming Interface to eMMC in QNX
http://community.qnx.com/sf/go/post121946
The physical sector size will be in the card register data, that you get with DCMD_SDMMC_CARD_REGISTER.
You can erase sectors with DCMD_SDMMC_ERASE.
Directly writing a block, bypassing the block device layer, is not supported, but you can write raw data to the block device or partition.Gerd Wetzel2022-09-29T13:21:20Zpost121945: Re: Programming Interface to eMMC in QNX
http://community.qnx.com/sf/go/post121945
The QNX sdmmc driver has a devctl() api. You can find a list of supported commands in the online documentation.
E.g. if you are using QNX 7.1:
http://www.qnx.com/developers/docs/7.1/index.html#com.qnx.doc.neutrino.devctl/topic/sdmmc.htmlGerd Wetzel2022-09-29T12:43:34Zpost121944: Programming Interface to eMMC in QNX
http://community.qnx.com/sf/go/post121944
Hello QNX Expert,
I am very new to the QNX and NXP S32G board.
I am trying to access eMMC Card through C Code on NXP S32G board. Earlier, we managed to access eMMC Card on Linux using the following sample code. But in QNX, it faced an issue using ioctl() calls.
Do you have any information and/or documents discussing accessing eMMC in QNX through programming?
I want to know how to read (ex. a device's physical sector size), write, and erase (number of blocks) in eMMC.
This API's like open() close(), lssek(), write() works.
Sample code for Linux
int fd = open("/dev/mmcblk0", O_RDWR);
struct stat sb;
fstat(fd, &sb)
int secsize = 0;
ret = ioctl(fd, BLKSSZGET, &secsize); //a device's physical sector size
if (ret < 0)
{
// set the erase block size
uint64_t range[2];
range[0] = offset; // input address
range[1] = len; // input block size
if (ioctl(fd, BLKDISCARD, &range)
{
}
}
close(fd)
Best Regards,
ManojManoj Palhade(deleted)2022-09-29T12:22:35Zpost121940: Re: QNX 7.0 Backtrace bt_get_backtrace returns -1
http://community.qnx.com/sf/go/post121940
this is excellent. thank you for sharing the link!Alex Martir2022-09-22T20:42:11Zpost121939: Re: QNX 7.0 Backtrace bt_get_backtrace returns -1
http://community.qnx.com/sf/go/post121939
Upstream libunwind development has moved to https://github.com/libunwind/libunwind if you're looking for something newer than 2013.Stephen Webb2022-09-22T18:14:39Zpost121938: Re: QNX 7.0 Backtrace bt_get_backtrace returns -1
http://community.qnx.com/sf/go/post121938
Hey Stephen thanks so much for confirming! I found this article: https://lists.nongnu.org/archive/html/libunwind-devel/2013-04/msg00006.html
Seems like some people are trying to get libunwind ported to QNX as well. I'll follow through and see if I can use any of it on my project. Thank you again for your replies!
AlexAlex Martir2022-09-22T18:01:26Zpost121937: Re: QNX 7.0 Backtrace bt_get_backtrace returns -1
http://community.qnx.com/sf/go/post121937
Unfortunately the implementation of backtrace for that architecture consists of a single line setting errno to ENOTSUP.
Until either an implementation is provided or a port of an alternative library like libunwind is made available, 64-bit ARM backtraces on QNX can only be done using gdb, either remotely or on a core file.Stephen Webb2022-09-22T10:59:23Zpost121936: Re: QNX 7.0 Backtrace bt_get_backtrace returns -1
http://community.qnx.com/sf/go/post121936
Hey Stephen, it's a 64-bit Arm Cortex A53Alex Martir2022-09-22T02:41:56Zpost121935: Re: QNX 7.0 Backtrace bt_get_backtrace returns -1
http://community.qnx.com/sf/go/post121935
What CPU architecture?Stephen Webb2022-09-21T23:13:45Zpost121934: Re: QNX 7.0 Backtrace bt_get_backtrace returns -1
http://community.qnx.com/sf/go/post121934
sorry, small correction. returned value from bt_get_backtrace(...) is actually -1, which i was type-casting to unsigned (size_t)Alex Martir2022-09-21T21:25:57Zpost121933: Re: Call stack using bt_get_backtrace( )
http://community.qnx.com/sf/go/post121933
Hi, did you ever get help in getting backtrace to work properly? I am also having some issues where bt_get_backtraceAlex Martir2022-09-21T21:16:21Zpost121932: QNX 7.0 Backtrace bt_get_backtrace returns 0xFFFFFFFF
http://community.qnx.com/sf/go/post121932
Hi all, I'm trying to get a backtrace on my application (running on QNX7.0), but calls to bt_get_backtrace() keep returning 0xFFFFFFFF for some reason. The following code is how I'm initiating a backtrace
bt_accessor_t bt_accessor;
bt_memmap_t memmap;
uintptr_t addr_buff[32];
char out_buff[1024];
bt_init_accessor(&bt_accessor, BT_SELF);
bt_load_memmap(&bt_accessor, &memmap);
bt_sprn_memmap(&memmap, out_buff, sizeof(out_buff));
int depth = bt_get_backtrace(&bt_accessor, addr_buff, max_depth);
// At this point depth = 0xFFFFFFFF.
For additional context, I am compiling with gcc O2 flag. Can you point me in the right direction? Am I missing something?Alex Martir2022-09-21T21:04:34Zpost121931: Re: <Query> [RUST compilation for QNX]
http://community.qnx.com/sf/go/post121931
It is unlikely to be supported in the next SDP release.
Rust is still in constant flux with new and incompatible releases that arrive at a much faster cadence than the QNX SDP release cycle. We could choose to fix on an older release of Rust but that would not serve those who prefer the "move fast and break things" model, which is not completely appropriate to the embedded world. Since the upstream Rust developers do not support older versions of their product this would pose a considerable problem for QNX support.
Additionally, the Rust development ecosystem is a centralized one in which crates.io itself would need to serve binaries for QNX. Alternatively, developers could break with the cargo tool. There are very large problems with either of those approaches.
That said, there is nothing to stop an enterprising individual from making a Rust and Cargo development environment available for QNX. It just won't be coming from BlackBerry in the next SDP release.Stephen Webb2022-09-21T11:24:27Zpost121930: Re: <Query> [RUST compilation for QNX]
http://community.qnx.com/sf/go/post121930
CAUTION - This email is from an external source. Please be cautious with links and attachments. (go/taginfo)
Hello,
Thanks for the response. Is there any plan to support in the near future?
Regards,
Manoj
On Tue, Sep 20, 2022 at 4:24 PM Stephen Webb <community-noreply@qnx.com>
wrote:
> BlackBerry does not supply or support any LLVM-based toolchains at the
> moment.
>
>
>
> _______________________________________________
>
> OSTech
> http://community.qnx.com/sf/go/post121924
> To cancel your subscription to this discussion, please e-mail
> ostech-core_os-unsubscribe@community.qnx.com
>
> ----------------------------------------------------------------------
> This transmission (including any attachments) may contain confidential
> information, privileged material (including material protected by the
> solicitor-client or other applicable privileges), or constitute non-public
> information. Any use of this information by anyone other than the intended
> recipient is prohibited. If you have received this transmission in error,
> please immediately reply to the sender and delete this information from
> your system. Use, dissemination, distribution, or reproduction of this
> transmission by unintended recipients is not authorized and may be unlawful.
>
--
***
This communication is confidential, may be privileged and is meant only
for the intended recipient and purpose. No part of this email or any files
transmitted with it can be shared, copied, forwarded or published online or
offline, without prior written consent of the sender. If you are not the
intended recipient, please preserve the confidentiality, delete the e-mail
and attachments, if any from your system and inform the sender immediately.
***Manoj Ashokkumar(deleted)2022-09-21T10:53:41Zpost121929: Re: Regarding the login profiles not invoked
http://community.qnx.com/sf/go/post121929
I am using QNX 7.1HARI KRISHNAN G(deleted)2022-09-21T05:17:30Zpost121925: Regarding the login profiles not invoked
http://community.qnx.com/sf/go/post121925
Hi, I am using the QNX for our project. Actually I downloaded the QNX from QNX Software Center and Flashing the OS into memory card. In the profile generation build file, I did some additions
in /etc/profile file, I added one echo statement and changed the PATH variables depending on the target.
in /root/.profile file I added the ENV for setting the path of .kshrc file with echo statement and also executing the script.
After flashing this configuration, I put the SD card into target and turn on. While it is booting, It actually goes the "Non-login shell (sh)".So only /etc/profle executes and that acho prints on terminal [ according to the non login shell this is correct ]
When I try to root login, that time also etc/profile executes and that echo printed. After this, according the "login shell policy" it automatically calls the /root/.profile and .kshrc file. But /root/.prifile not executed automatically and only /etc/profile executed.
Can you help me for how to solve this this issue? or Is there any other modifications are needed for that automatic call?HARI KRISHNAN G(deleted)2022-09-20T12:46:30Zpost121924: Re: <Query> [RUST compilation for QNX]
http://community.qnx.com/sf/go/post121924
BlackBerry does not supply or support any LLVM-based toolchains at the moment.Stephen Webb2022-09-20T10:54:52Zpost121923: RUST programming language support in QNX
http://community.qnx.com/sf/go/post121923
Is it possible to compile RUST code for QNX?Manoj Ashokkumar(deleted)2022-09-20T06:55:50Zpost121922: <Query> [RUST compilation for QNX]
http://community.qnx.com/sf/go/post121922
CAUTION - This email is from an external source. Please be cautious with links and attachments. (go/taginfo)
Hello,
Is it possible to compile RUST code for QNX?
Regards,
Manoj
--
***
This communication is confidential, may be privileged and is meant only
for the intended recipient and purpose. No part of this email or any files
transmitted with it can be shared, copied, forwarded or published online or
offline, without prior written consent of the sender. If you are not the
intended recipient, please preserve the confidentiality, delete the e-mail
and attachments, if any from your system and inform the sender immediately.
***Manoj Ashokkumar(deleted)2022-09-20T06:54:37Zpost121914: Re: io-audio use on Raspberry Pi4
http://community.qnx.com/sf/go/post121914
Hi Elad,
Thanks for that! I managed to get to this late yesterday and had some success.
I downloaded a beep-beep WAV file from off the internet and that worked but was very scratchy to listen to. I'll grab something else today and see how that goes.
I could only run the wave utility a couple of times. After that it would do nothing other than to output some stuff to the terminal. A reboot gets it going again but again only for a couple of tries.
I am totally unfamiliar with the terminology used with this stuff - specifically the arguments/options for both io-audio and wave. The documentation for both state what they are but not what they do or mean.Some obviously don't have relevance to what I am doing but others I suspect do. Is there anywhere I can go to find out more about how these audio systems/drivers work?
I'll try to play more today - it's difficult as I am surrounded by those who I'm hoping to surprise if I can get this working! :-)
Regards,
Geoff.
> Hi Geoff,
>
> Not an audio expert, but this use case can be handled easily.
>
> 1. Add deva-ctrl-bcm2711_pwm.so to the build file (if it's not already there)
> 2. Start io-audio:
>
> # io-audio -m pool_name=below1G,pool_size=260 -vd bcm2711_pwm
>
> 3. Use the 'wave' utility to play any WAV file.
>
> Not an audiophile's experience, but good enough to fool a hungry coyote ;-)
>
> --Elad
>
> On Sun, 2022-09-04 at 19:09 -0400, Geoff Roberts wrote:
> > Hello,
> >
> > I am involved in a project with some young scientists. The project is called
> "Road Runner". We are looking to do the first test run of the hardware and
> software this coming Friday. All the software being used is under QNX 7.1.
> >
> > It turned out that we need to temporarily use a Raspberry Pi4 for something.
> It occurred to me that with its audio capabilities it would be a good morale
> booster to be able to issue in some way a "beep-beep" and/or similar sounds
> when significant events occur.
> >
> > However, I have never used the audio stuff (io-audio) before and don't know
> where to start - or even if this is possible on the RPi. I assume it is though
> .
> >
> > I have looked at the RPi4 BSP documentation and found the bit about io-audio
> of little use. At least to a novice in this area like me! it looks like other
> stuff is required.
> >
> > Could someone help me by pointing me in the direction of any resources that
> might get me started with this - with examples if possible? I think all I'd
> want to do is play a short MP3 file or something like that. A double "chirp"
> would probably do if "beep" wasn't possible.
> >
> > Any help with this would be much appreciated! :-)
> >
> > Thanks,
> >
> > Geoff.
> >
> >
> >
> >
> >
> >
> > _______________________________________________
> >
> > OSTech
> > http://community.qnx.com/sf/go/post121909
> > To cancel your subscription to this discussion, please e-mail ostech-core_os
> -unsubscribe@community.qnx.comGeoff Roberts2022-09-06T22:38:24Zpost121911: Re: io-audio use on Raspberry Pi4
http://community.qnx.com/sf/go/post121911
Hi Geoff,
Not an audio expert, but this use case can be handled easily.
1. Add deva-ctrl-bcm2711_pwm.so to the build file (if it's not already there)
2. Start io-audio:
# io-audio -m pool_name=below1G,pool_size=260 -vd bcm2711_pwm
3. Use the 'wave' utility to play any WAV file.
Not an audiophile's experience, but good enough to fool a hungry coyote ;-)
--Elad
On Sun, 2022-09-04 at 19:09 -0400, Geoff Roberts wrote:
> Hello,
>
> I am involved in a project with some young scientists. The project is called "Road Runner". We are looking to do the first test run of the hardware and software this coming Friday. All the software being used is under QNX 7.1.
>
> It turned out that we need to temporarily use a Raspberry Pi4 for something. It occurred to me that with its audio capabilities it would be a good morale booster to be able to issue in some way a "beep-beep" and/or similar sounds when significant events occur.
>
> However, I have never used the audio stuff (io-audio) before and don't know where to start - or even if this is possible on the RPi. I assume it is though.
>
> I have looked at the RPi4 BSP documentation and found the bit about io-audio of little use. At least to a novice in this area like me! it looks like other stuff is required.
>
> Could someone help me by pointing me in the direction of any resources that might get me started with this - with examples if possible? I think all I'd want to do is play a short MP3 file or something like that. A double "chirp" would probably do if "beep" wasn't possible.
>
> Any help with this would be much appreciated! :-)
>
> Thanks,
>
> Geoff.
>
>
>
>
>
>
> _______________________________________________
>
> OSTech
> http://community.qnx.com/sf/go/post121909
> To cancel your subscription to this discussion, please e-mail ostech-core_os-unsubscribe@community.qnx.comElad Lahav2022-09-05T10:44:18Zpost121909: io-audio use on Raspberry Pi4
http://community.qnx.com/sf/go/post121909
Hello,
I am involved in a project with some young scientists. The project is called "Road Runner". We are looking to do the first test run of the hardware and software this coming Friday. All the software being used is under QNX 7.1.
It turned out that we need to temporarily use a Raspberry Pi4 for something. It occurred to me that with its audio capabilities it would be a good morale booster to be able to issue in some way a "beep-beep" and/or similar sounds when significant events occur.
However, I have never used the audio stuff (io-audio) before and don't know where to start - or even if this is possible on the RPi. I assume it is though.
I have looked at the RPi4 BSP documentation and found the bit about io-audio of little use. At least to a novice in this area like me! it looks like other stuff is required.
Could someone help me by pointing me in the direction of any resources that might get me started with this - with examples if possible? I think all I'd want to do is play a short MP3 file or something like that. A double "chirp" would probably do if "beep" wasn't possible.
Any help with this would be much appreciated! :-)
Thanks,
Geoff.Geoff Roberts2022-09-04T23:09:25Zpost121908: Re: Does QNX supports CLang
http://community.qnx.com/sf/go/post121908
No. Only qcc is supported.
--
smw
On 2022-09-01 00:45, Darshan B wrote:
> We are using SDP710, do we support Clang on this toolchain?
>
>
>
> _______________________________________________
>
> OSTech
> http://community.qnx.com/sf/go/post121907
> To cancel your subscription to this discussion, please e-mail ostech-core_os-unsubscribe@community.qnx.com
>Stephen Webb2022-09-01T11:22:22Zpost121907: Does QNX supports CLang
http://community.qnx.com/sf/go/post121907
We are using SDP710, do we support Clang on this toolchain?Darshan B(deleted)2022-09-01T04:46:10Zpost121904: Re: QNX 7.1 Neutrino screen output RGB value range is limited to [0x10~0xEB]
http://community.qnx.com/sf/go/post121904
It seems that QNX intel drm output through HDMI is RGB limited (0x10~0xEB) but not RGB full (0x00~0xFF). So how can I set RGB full for intel drm driver?SHENGFA ZHANG2022-08-26T15:42:27Zpost121901: Re: QNET Bad Address problem
http://community.qnx.com/sf/go/post121901
There was a change in a 7.1 update that may have caused the issue you are seeing. It was since fixed, but I'm not sure whether the fix is generally available. You should contact support to see if you can get it. If not. try downgrading to the original 7.1.0 kernel.
--EladElad Lahav2022-08-24T10:34:15Zpost121900: QNET Bad Address problem
http://community.qnx.com/sf/go/post121900
Hi,
I am currently trying to set up qnet on a small network of two Raspberry Pi boards (node1 and node2), connected via a router.
On each of the nodes I start qnet with io-pkt and it seems to start correctly.
io-pkt-v6-hc -p qnet host=node1
After bootup I can see the following in /proc/qnetstats (here executed on node1):
kif net_server : 0,0
kif waiting : 1,1
kif net_client : 0,0
kif buffer : 0,0
kif outbound_msgs : 0,0
kif vtid : 0,0
kif server_msgs : 0,0
kif nd_down : 0
kif nd_up : 2
kif nd_changed : 1
kif send_acks : 0
kif client_kercalls : 0
kif server_msgs : 0
kif server_unblock : 0
qos tx_begin_errors : 0
qos tx_done_errors : 0
qos tx_throttled : 0
qos tx_failed : 0
qos pkts_rxd_noL4 : 0
qos tx_conn_created : 0
qos tx_conn_deleted : 0
qos rx_conn_created : 0
qos rx_conn_deleted : 0
qos rx_seq_order : 0
**** Qnet compiled on Jun 13 2020 at 19:52:17 running on node1
**** Tx Connections:
**** Rx Connections:
**** L4 Status:
slot 0 genet0 mtu 1496 ack 1 crc 0
txd ok 4
txd bad 0
txd descr 0
txd still 0
tx timeouts 0
tx slow 0
rxd ok 4
rxd bad dr 0
rxd bad L4 0
rxd dropped 0
rxd duplic 0
rxd nacks 0
slot 1 is unused
**** Last 8192 bytes of circular qnet_error() log:
00000000:: mac_load(): security policy not being used
00000000: qnet_birth(): qnet_init() - complete
00000000: lr_verify_my_name_and_domain(): set _CS_DOMAIN
00000000: lr_verify_my_name_and_domain(): starting resolution of our hostname node1.net.intra to ensure unique
00000000: lr_verify_my_name_and_domain(): qnet going online
00000001: try_ifp(): new interface: genet0: index 0 mac addr DC:A6:32:BB:EC:05
00000001:: nd_change_notify(): Node Up: nd 0 node1.net.intra
00000031: lr_add_ndb(): adding L4 0 addr to ndb for nd 1 node2.net.intra
00000031:: nd_change_notify(): Node Up: nd 1 node2.net.intra
It seems both nodes can discover each other on the network fine.
According to the guide on using qnet (https://www.qnx.com/developers/docs/7.1/index.html#com.qnx.doc.neutrino.user_guide/topic/qnet_UsingQnet.html) I try to see the neighbourhood via
#pidin net
which returns the following:
ND Node CPU Release FreeMem BootTime
0 node1 4 AARCH64 7.1.0 3803MB/4032MB ------------------------
Processes: 25, Threads: 88
CPU 1: 1091555459 Cortex-A72 1500MHz FPU
CPU 2: 1091555459 Cortex-A72 1500MHz FPU
CPU 3: 1091555459 Cortex-A72 1500MHz FPU
CPU 4: 1091555459 Cortex-A72 1500MHz FPU
1 node2 Bad address
The same on the other node gives the same results.
I have also tried to execute execute processes on the different nodes that communicate with each other but the results are the same.
Is there anything I am doing wrong when setting up qnet?Matthias Becker(deleted)2022-08-23T11:19:21Zpost121896: Re: Malloc Check Failed: lib/c/alloc/dlist.c:748
http://community.qnx.com/sf/go/post121896
Thank you Elad.
Hardware(QDrive): QualCOMM Snapdragon ride platform
QNX: SDK 11.1
Is it possible to run valgrind without using Momentics IDE? Basically our application is crashing in initialization itself if we run through Momentics[We are talking to the appropriate team to fix this. Even simple programs is not working]. So for now, What we basically do is copy our executable to the QDrive through WinSCP and execute through command prompt using telnet to that QDrive IP. We've QNX SDK 11.1 on our QDrive. If we enter valgrind command, its not able to find.
# valgrind
sh: valgrind: cannot execute - No such file or directory
What is the correct way of using Valgrind tool without using Momentics IDE? Do we need to re-build QNX SDK with certain option when configure/build to include valgrind? If so, Can you please specify.
We download QNX SDK from https://chipcode.qti.qualcomm.com/
Currently using sa8540p-qx-1-0_hlos_dev_qnx/tree/r00011.1a.502856.3 SDK.
Note:
Please let me know if it is not the right forum to ask questions about valgrind and point me to the appropriate forum.Preethi Selvaraju2022-08-17T05:19:40Zpost121895: Re: Malloc Check Failed: lib/c/alloc/dlist.c:748
http://community.qnx.com/sf/go/post121895
The most likely explanation is that somewhere in your code you are writing outside the bounds of the array (or some other way in which the heap meta-data gets overwritten). The QNX heap code checks for such corruption, other systems may not.
The best way to find out what is going on is to use a memory analysis tool such as Valgrind.
--EladElad Lahav2022-08-16T12:58:58Zpost121894: Malloc Check Failed: lib/c/alloc/dlist.c:748
http://community.qnx.com/sf/go/post121894
We are allocating memory as follows in our CPP application:
ptr = new T[numElements];
if(ptr == NULL)
//assert.
Where T is a typename template, numElements is > 0 and also NULL check for ptr after allocation is properly handled.
Deallocation:
if(ptr != NULL)
{
delete[] ptr;
ptr = NULL;
}
We have a structure with more than 15 members of different types. During allocation total of 10793022 bytes were allocated. When de-allocating the members one by one in the same order which were allocated, our application is crashing with the below error:
Malloc Check Failed: :/builds/workspace/QOS221-SDP/build_aarch64/lib/c/alloc/dlist.c:748
Abort (core dumped)
Core dump is not useful.
Double-checked that we are not deallocating any memory that is not allocated and also the ptr also valid The same application working without any issues in Windows platform as well as another Embedded platform. Only in QNX its crashing. We would like to know exactly in which scenarios "Malloc check Failed" message will be thrown by dlist.c. It would be more helpful if you share this information, so that we could check the possible causes in our application.
Please let me know if any other additional information is needed,Preethi Selvaraju2022-08-16T12:52:32Zpost121892: QNX 7.1 Neutrino screen output RGB value range is limited to [0x10~0xEB]
http://community.qnx.com/sf/go/post121892
I connected QNX 7.1 HDMI output to an Xilinx video capture device and found that the pixel RGB value range is limited to [0x10~0xEB] but not [0x00~0xFF]. For example, when I display red (0xFF0000) color on QNX, we got color (0xEB1010) on video capture device, and when we display black (0x000000) color, we got color (0x101010).
---------------------------------------
Some pixels value mapping
Pixel on QNX Pixel on video capture
------------ ----------------------
00 10
01 10
02 11
03 12
04 13
05 14
06 15
07 16
08 16
09 17
0A 18
0B 19
0C 1A
0D 1B
0E 1C
FD E9
FE EA
FF EB
However, when we connected ubuntu/Window10 HDMI output to the same video capture device, everything works fine.
When I used screenshot utility to capture the display on QNX 7.1, we got the correct color(the RGB range is [0x00~0xFF]).
-----------------------------------------
The graphics.conf is:
begin khronos
begin egl display 1
egl-dlls = libglapi-mesa.so libEGL-mesa.so
glesv1-dlls = libglapi-mesa.so libGLESv1_CM-mesa.so
glesv2-dlls = libglapi-mesa.so libGLESv2-mesa.so
gpu-dlls = gpu_drm.so
end egl display
begin wfd device 1
wfd-dlls = libwfdcfg-intel-generic.so libWFDintel-drm.so
# Run "drm-probe-displays" to list the available displays and pipelines,
# and "use $GRAPHICS_ROOT/libWFDintel-drm.so" for more information on
# these driver-specific settings.
# Here is displays map for DH370:
# display 1: DisplayPort (DP-1)
# display 2: DisplayPort (DP-2)
# display 3: HDMI-A (HDMI-A-1)
# display 4: DisplayPort (DP-3), default
# display 5: HDMI-A (HDMI-A-2)
# display 6: DisplayPort (DP-4)
# display 7: HDMI-A (HDMI-A-3)
# Pipeline IDs 1 to 9 are used for DRM CRTCs. One should be assigned
# to each display that will be used.
pipeline1-display = 1
pipeline2-display = 2
pipeline3-display = 4 # this is the display id which identified by drm-probe-display, the only hdmi output on DH370
end wfd device
end khronos
begin winmgr
begin globals
default-display = 4 # the default display id, 4 is the only one hdmi output on DH370
# Adjust the stack size of Screen's resmgr threads. The default size
# is insufficient for blitters/compositors using Mesa (e.g., gles2blt).
stack-size = 65536 # in units of bytes
blit-config = inteldrm
alloc-config = inteldrm
requests-logsize = 65536
blits-logsize = 4096
end globals
begin display 1
video-mode = 1920 x 1080 @ 60
# Adjust the stack size of Screen's composition thread; required when the
# display's framebuffer uses Mesa (e.g., "usage = gles2"), as noted above.
stack-size = 65536 # in units of bytes
end display
begin display 2
video-mode = 1920 x 1080 @ 60
# Adjust the stack size of Screen's composition thread; required when the
# display's framebuffer uses Mesa (e.g., "usage = gles2"), as noted above.
stack-size = 65536 # in units of bytes
end display
begin display 4
video-mode = 1920 x 1080 @ 60
# Adjust the stack size of Screen's composition thread; required when the
# display's framebuffer uses Mesa (e.g., "usage = gles2"), as noted above.
stack-size = 65536 # in units of bytes
end display
begin class framebuffer-1
display = 1
pipeline = 1
format = rgba8888
usage = inteldrm
end class
begin class framebuffer-2
display = 2
pipeline = 2
format = rgba8888
usage = inteldrm
end class
begin class framebuffer-3
display = 4
pipeline = 3
format = rgba8888
usage = inteldrm
end class
end winmgr
--------------------------------------------
/root# cat /dev/screen/0/win-0
win-0/ctx-0/0(screen)
=================================================
id = __scrn-win-0-00000001-5195d97ae2ecf94a03fd3cd49586efca
id string = framebuffer-3
permissions = rwxrwx--x--x--x--x--x---
acl = (empty)
locks = (none)
display = dpy-4
status = CREATED
type = SCREEN_ROOT_WINDOW
autonomous = 1
references = 1
window manager = (none)
window manager string =
pipeline id = 3
pipeline bound = false
parent = (none)
children = (none)
window above = (none)
window below = (none)
alternate window = (none)
root window = (none)
reclip = 0
updates = 0
valid = BUFFER_SIZE PIPELINE
class = framebuffer-3
flags = WIN_FLAG_VISIBLE WIN_FLAG_FLOATING WIN_FLAG_FRAMEBUFFER
buffer size = 1920x1080
format = SCREEN_FORMAT_RGBA8888
color space = SCREEN_COLOR_SPACE_UNCORRECTED
usage = SCREEN_USAGE_DISPLAY SCREEN_USAGE_NATIVE
order = 0
swap interval = 1
default = (none)
sessions = (none)
streams = (none)
holes = (none)
regions = (none)
flip = 0
mirror = 0
scale mode = (default)
source viewport = (0,0 1920x1080)
source clip rectangle = (0,0;1920,1080)
clipped source viewport = (0,0;1920,1080 1920x1080)
destination rectangle = (0,0 1920x1080)
destination clip rectangle = (0,0;1920,1080)
clipped destination rectangle = (0,0;1920,1080 1920x1080)
rotation = 0
clipped rotation = 0
transform = [[1 0 0],[0 1 0],[0 0 1]]
transparency = SCREEN_TRANSPARENCY_SOURCE_OVER
color = 0xffcfcfcf
global alpha = 255 -> 255
brightness = 0 -> 0
contrast = 1 -> 1
hue = 0 -> 0
saturation = 0 -> 0
scale quality = 0
idle mode = normal
protection requested = (none)
protection enabled = (none)
cbabc mode = SCREEN_CBABC_MODE_NONE
metrics.dropped = 0
metrics.visible.partial = 0
metrics.visible.full = 0
metrics.updates.count = 0
metrics.updates.pixels = 0 pixels
metrics.updates.reads = 0 bytes
How can I solve the problem? Thanks.SHENGFA ZHANG2022-08-11T08:00:35Zpost121872: Re: Build failed on QNX7.1 x86_64 with -Vgcc/8.3.0,gcc_ntox86_64 -Y_gpp
http://community.qnx.com/sf/go/post121872
Thanks! I found #define _C2 1 in yvals.h line 418 and don't know whoelse use the macro _C2. So I replace _C2 with __C2 in bits/stl_multimap.h and bits/stl_map.h to solve the problem.SHENGFA ZHANG2022-07-14T01:51:55Zpost121871: Re: Build failed on QNX7.1 x86_64 with -Vgcc/8.3.0,gcc_ntox86_64 -Y_gpp
http://community.qnx.com/sf/go/post121871
That's not a bug in libc - a system header can declare a symbol that starts in an underscore and a capital letter. The fact that it collides with a symbol defined in a GNU header is not really our problem.
Nevertheless it is something we can solve by removing a symbol that's no longer used.
--EladElad Lahav2022-07-13T15:04:49Zpost121870: Re: Build failed on QNX7.1 x86_64 with -Vgcc/8.3.0,gcc_ntox86_64 -Y_gpp
http://community.qnx.com/sf/go/post121870
This is a long-standing bug in the QNX libc. I can't seem to be able to find the JIRA trail, but the workaround is to remove the #define of _C2 from <sys/target_nto.h> since it's not used anywhere but causes C++ compilations to break when using the GNU libstdc++ library.Stephen Webb2022-07-13T14:51:21Zpost121869: Build failed on QNX7.1 x86_64 with -Vgcc/8.3.0,gcc_ntox86_64 -Y_gpp
http://community.qnx.com/sf/go/post121869
When build the following C++ code:
// test.cpp
#include <map>
#include <string>
#include <iostream>
using namespace std;
int main()
{
map<int, int> m = { {0, 0}, {1, 1} };
cout << "Hello, stdc++17\n";
return 0;
}
1. Build with C++17 and LLVM C++ library, work fine
/root/qnx710/host/linux/x86_64/usr/bin/q++ -Vgcc/8.3.0,gcc_ntox86_64 -Y_cxx -lang-c++ -std=gnu++17 -o test test.cpp
2. Build with C++17 and GNU C++ library: can't work
/root/qnx710/host/linux/x86_64/usr/bin/q++ -Vgcc/8.3.0,gcc_ntox86_64 -Y_gpp -lang-c++ -std=gnu++17 -o test test.cpp
In file included from /root/qnx710/target/qnx7/usr/include/stddef.h:23,
from /root/qnx710/target/qnx7/usr/include/c++/8.3.0/bits/cxxabi_init_exception.h:38,
from /root/qnx710/target/qnx7/usr/include/c++/8.3.0/bits/exception_ptr.h:38,
from /root/qnx710/target/qnx7/usr/include/c++/8.3.0/exception:143,
from /root/qnx710/target/qnx7/usr/include/c++/8.3.0/new:40,
from /root/qnx710/target/qnx7/usr/include/c++/8.3.0/ext/new_allocator.h:33,
from /root/qnx710/target/qnx7/usr/include/c++/8.3.0/x86_64-pc-nto-qnx7.1.0/bits/c++allocator.h:33,
from /root/qnx710/target/qnx7/usr/include/c++/8.3.0/bits/allocator.h:46,
from /root/qnx710/target/qnx7/usr/include/c++/8.3.0/bits/stl_tree.h:64,
from /root/qnx710/target/qnx7/usr/include/c++/8.3.0/map:60,
from test.cpp:1:
/root/qnx710/target/qnx7/usr/include/c++/8.3.0/bits/stl_map.h:638:25: error: expected nested-name-specifier before numeric constant
template<typename _C2>
^~~
/root/qnx710/target/qnx7/usr/include/c++/8.3.0/bits/stl_map.h:638:25: error: expected '>' before numeric constant
In file included from /root/qnx710/target/qnx7/usr/include/c++/8.3.0/map:61,
from test.cpp:1:
/root/qnx710/target/qnx7/usr/include/c++/8.3.0/bits/stl_map.h:640:34: error: type/value mismatch at argument 3 in template parameter list for 'template<class _Key, class _Tp, class _Compare, class _Alloc> class std::map'
merge(map<_Key, _Tp, _C2, _Alloc>& __source)
^
/root/qnx710/target/qnx7/usr/include/c++/8.3.0/bits/stl_map.h:640:34: note: expected a type, got '1'
In file included from /root/qnx710/target/qnx7/usr/include/stddef.h:23,
from /root/qnx710/target/qnx7/usr/include/c++/8.3.0/bits/cxxabi_init_exception.h:38,
from /root/qnx710/target/qnx7/usr/include/c++/8.3.0/bits/exception_ptr.h:38,
from /root/qnx710/target/qnx7/usr/include/c++/8.3.0/exception:143,
from /root/qnx710/target/qnx7/usr/include/c++/8.3.0/new:40,
from /root/qnx710/target/qnx7/usr/include/c++/8.3.0/ext/new_allocator.h:33,
from /root/qnx710/target/qnx7/usr/include/c++/8.3.0/x86_64-pc-nto-qnx7.1.0/bits/c++allocator.h:33,
from /root/qnx710/target/qnx7/usr/include/c++/8.3.0/bits/allocator.h:46,
from /root/qnx710/target/qnx7/usr/include/c++/8.3.0/bits/stl_tree.h:64,
from /root/qnx710/target/qnx7/usr/include/c++/8.3.0/map:60,
from test.cpp:1:
/root/qnx710/target/qnx7/usr/include/c++/8.3.0/bits/stl_map.h:646:25: error: expected nested-name-specifier before numeric constant
template<typename _C2>
^~~
/root/qnx710/target/qnx7/usr/include/c++/8.3.0/bits/stl_map.h:646:25: error: expected '>' before numeric constant
In file included from /root/qnx710/target/qnx7/usr/include/c++/8.3.0/map:61,
from test.cpp:1:
/root/qnx710/target/qnx7/usr/include/c++/8.3.0/bits/stl_map.h:648:34: error: type/value mismatch at argument 3 in template parameter list for 'template<class _Key, class _Tp, class _Compare, class _Alloc> class std::map'
merge(map<_Key, _Tp, _C2, _Alloc>&& __source)
^
/root/qnx710/target/qnx7/usr/include/c++/8.3.0/bits/stl_map.h:648:34: note: expected a type, got '1'
In file included from /root/qnx710/target/qnx7/usr/include/stddef.h:23,
from /root/qnx710/target/qnx7/usr/include/c++/8.3.0/bits/cxxabi_init_exception.h:38,
from /root/qnx710/target/qnx7/usr/include/c++/8.3.0/bits/exception_ptr.h:38,
from /root/qnx710/target/qnx7/usr/include/c++/8.3.0/exception:143,
from /root/qnx710/target/qnx7/usr/include/c++/8.3.0/new:40,
from /root/qnx710/target/qnx7/usr/include/c++/8.3.0/ext/new_allocator.h:33,
from /root/qnx710/target/qnx7/usr/include/c++/8.3.0/x86_64-pc-nto-qnx7.1.0/bits/c++allocator.h:33,
from /root/qnx710/target/qnx7/usr/include/c++/8.3.0/bits/allocator.h:46,
from /root/qnx710/target/qnx7/usr/include/c++/8.3.0/bits/stl_tree.h:64,
from /root/qnx710/target/qnx7/usr/include/c++/8.3.0/map:60,
from test.cpp:1:
/root/qnx710/target/qnx7/usr/include/c++/8.3.0/bits/stl_map.h:651:25: error: expected nested-name-specifier before numeric constant
template<typename _C2>
^~~
/root/qnx710/target/qnx7/usr/include/c++/8.3.0/bits/stl_map.h:651:25: error: expected '>' before numeric constant
In file included from /root/qnx710/target/qnx7/usr/include/c++/8.3.0/map:61,
from test.cpp:1:
/root/qnx710/target/qnx7/usr/include/c++/8.3.0/bits/stl_map.h:653:39: error: type/value mismatch at argument 3 in template parameter list for 'template<class _Key, class _Tp, class _Compare, class _Alloc> class std::multimap'
merge(multimap<_Key, _Tp, _C2, _Alloc>& __source)
^
/root/qnx710/target/qnx7/usr/include/c++/8.3.0/bits/stl_map.h:653:39: note: expected a type, got '1'
/root/qnx710/target/qnx7/usr/include/c++/8.3.0/bits/stl_map.h:653:2: error: 'template<class _Key, class _Tp, class _Compare, class _Alloc> template<<typeprefixerror><anonymous> > void std::map<_Key, _Tp, _Compare, _Alloc>::merge(int&)' cannot be overloaded with 'template<class _Key, class _Tp, class _Compare, class _Alloc> template<<typeprefixerror><anonymous> > void std::map<_Key, _Tp, _Compare, _Alloc>::merge(int&)'
merge(multimap<_Key, _Tp, _C2, _Alloc>& __source)
^~~~~
/root/qnx710/target/qnx7/usr/include/c++/8.3.0/bits/stl_map.h:640:2: note: previous declaration 'template<class _Key, class _Tp, class _Compare, class _Alloc> template<<typeprefixerror><anonymous> > void std::map<_Key, _Tp, _Compare, _Alloc>::merge(int&)'
merge(map<_Key, _Tp, _C2, _Alloc>& __source)
^~~~~
In file included from /root/qnx710/target/qnx7/usr/include/stddef.h:23,
from /root/qnx710/target/qnx7/usr/include/c++/8.3.0/bits/cxxabi_init_exception.h:38,
from /root/qnx710/target/qnx7/usr/include/c++/8.3.0/bits/exception_ptr.h:38,
from /root/qnx710/target/qnx7/usr/include/c++/8.3.0/exception:143,
from /root/qnx710/target/qnx7/usr/include/c++/8.3.0/new:40,
from /root/qnx710/target/qnx7/usr/include/c++/8.3.0/ext/new_allocator.h:33,
from /root/qnx710/target/qnx7/usr/include/c++/8.3.0/x86_64-pc-nto-qnx7.1.0/bits/c++allocator.h:33,
from /root/qnx710/target/qnx7/usr/include/c++/8.3.0/bits/allocator.h:46,
from /root/qnx710/target/qnx7/usr/include/c++/8.3.0/bits/stl_tree.h:64,
from /root/qnx710/target/qnx7/usr/include/c++/8.3.0/map:60,
from test.cpp:1:
/root/qnx710/target/qnx7/usr/include/c++/8.3.0/bits/stl_map.h:659:25: error: expected nested-name-specifier before numeric constant
template<typename _C2>
^~~
/root/qnx710/target/qnx7/usr/include/c++/8.3.0/bits/stl_map.h:659:25: error: expected '>' before numeric constant
In file included from /root/qnx710/target/qnx7/usr/include/c++/8.3.0/map:61,
from test.cpp:1:
/root/qnx710/target/qnx7/usr/include/c++/8.3.0/bits/stl_map.h:661:39: error: type/value mismatch at argument 3 in template parameter list for 'template<class _Key, class _Tp, class _Compare, class _Alloc> class std::multimap'
merge(multimap<_Key, _Tp, _C2, _Alloc>&& __source)
^
/root/qnx710/target/qnx7/usr/include/c++/8.3.0/bits/stl_map.h:661:39: note: expected a type, got '1'
/root/qnx710/target/qnx7/usr/include/c++/8.3.0/bits/stl_map.h:661:2: error: 'template<class _Key, class _Tp, class _Compare, class _Alloc> template<<typeprefixerror><anonymous> > void std::map<_Key, _Tp, _Compare, _Alloc>::merge(int&&)' cannot be overloaded with 'template<class _Key, class _Tp, class _Compare, class _Alloc> template<<typeprefixerror><anonymous> > void std::map<_Key, _Tp, _Compare, _Alloc>::merge(int&&)'
merge(multimap<_Key, _Tp, _C2, _Alloc>&& __source)
^~~~~
/root/qnx710/target/qnx7/usr/include/c++/8.3.0/bits/stl_map.h:648:2: note: previous declaration 'template<class _Key, class _Tp, class _Compare, class _Alloc> template<<typeprefixerror><anonymous> > void std::map<_Key, _Tp, _Compare, _Alloc>::merge(int&&)'
merge(map<_Key, _Tp, _C2, _Alloc>&& __source)
^~~~~
/root/qnx710/target/qnx7/usr/include/c++/8.3.0/bits/stl_map.h: In member function 'void std::map<_Key, _Tp, _Compare, _Alloc>::merge(int&)':
/root/qnx710/target/qnx7/usr/include/c++/8.3.0/bits/stl_map.h:642:56: error: type/value mismatch at argument 2 in template parameter list for 'template<class _Tree1, class _Cmp2> class std::_Rb_tree_merge_helper'
using _Merge_helper = _Rb_tree_merge_helper<map, _C2>;
^
/root/qnx710/target/qnx7/usr/include/c++/8.3.0/bits/stl_map.h:642:56: note: expected a type, got '1'
/root/qnx710/target/qnx7/usr/include/c++/8.3.0/bits/stl_map.h:643:25: error: '_Merge_helper' has not been declared
_M_t._M_merge_unique(_Merge_helper::_S_get_tree(__source));
^~~~~~~~~~~~~
/root/qnx710/target/qnx7/usr/include/c++/8.3.0/bits/stl_map.h: In member function 'void std::map<_Key, _Tp, _Compare, _Alloc>::merge(int&)':
/root/qnx710/target/qnx7/usr/include/c++/8.3.0/bits/stl_map.h:655:56: error: type/value mismatch at argument 2 in template parameter list for 'template<class _Tree1, class _Cmp2> class std::_Rb_tree_merge_helper'
using _Merge_helper = _Rb_tree_merge_helper<map, _C2>;
^
/root/qnx710/target/qnx7/usr/include/c++/8.3.0/bits/stl_map.h:655:56: note: expected a type, got '1'
/root/qnx710/target/qnx7/usr/include/c++/8.3.0/bits/stl_map.h:656:25: error: '_Merge_helper' has not been declared
_M_t._M_merge_unique(_Merge_helper::_S_get_tree(__source));
^~~~~~~~~~~~~
In file included from /root/qnx710/target/qnx7/usr/include/stddef.h:23,
from /root/qnx710/target/qnx7/usr/include/c++/8.3.0/bits/cxxabi_init_exception.h:38,
from /root/qnx710/target/qnx7/usr/include/c++/8.3.0/bits/exception_ptr.h:38,
from /root/qnx710/target/qnx7/usr/include/c++/8.3.0/exception:143,
from /root/qnx710/target/qnx7/usr/include/c++/8.3.0/new:40,
from /root/qnx710/target/qnx7/usr/include/c++/8.3.0/ext/new_allocator.h:33,
from /root/qnx710/target/qnx7/usr/include/c++/8.3.0/x86_64-pc-nto-qnx7.1.0/bits/c++allocator.h:33,
from /root/qnx710/target/qnx7/usr/include/c++/8.3.0/bits/allocator.h:46,
from /root/qnx710/target/qnx7/usr/include/c++/8.3.0/bits/stl_tree.h:64,
from /root/qnx710/target/qnx7/usr/include/c++/8.3.0/map:60,
from test.cpp:1:
/root/qnx710/target/qnx7/usr/include/c++/8.3.0/bits/stl_multimap.h: At global scope:
/root/qnx710/target/qnx7/usr/include/c++/8.3.0/bits/stl_multimap.h:654:25: error: expected nested-name-specifier before numeric constant
template<typename _C2>
^~~
/root/qnx710/target/qnx7/usr/include/c++/8.3.0/bits/stl_multimap.h:654:25: error: expected '>' before numeric constant
In file included from /root/qnx710/target/qnx7/usr/include/c++/8.3.0/map:62,
from test.cpp:1:
/root/qnx710/target/qnx7/usr/include/c++/8.3.0/bits/stl_multimap.h:656:39: error: type/value mismatch at argument 3 in template parameter list for 'template<class _Key, class _Tp, class _Compare, class _Alloc> class std::multimap'
merge(multimap<_Key, _Tp, _C2, _Alloc>& __source)
^
/root/qnx710/target/qnx7/usr/include/c++/8.3.0/bits/stl_multimap.h:656:39: note: expected a type, got '1'
In file included from /root/qnx710/target/qnx7/usr/include/stddef.h:23,
from /root/qnx710/target/qnx7/usr/include/c++/8.3.0/bits/cxxabi_init_exception.h:38,
from /root/qnx710/target/qnx7/usr/include/c++/8.3.0/bits/exception_ptr.h:38,
from /root/qnx710/target/qnx7/usr/include/c++/8.3.0/exception:143,
from /root/qnx710/target/qnx7/usr/include/c++/8.3.0/new:40,
from /root/qnx710/target/qnx7/usr/include/c++/8.3.0/ext/new_allocator.h:33,
from /root/qnx710/target/qnx7/usr/include/c++/8.3.0/x86_64-pc-nto-qnx7.1.0/bits/c++allocator.h:33,
from /root/qnx710/target/qnx7/usr/include/c++/8.3.0/bits/allocator.h:46,
from /root/qnx710/target/qnx7/usr/include/c++/8.3.0/bits/stl_tree.h:64,
from /root/qnx710/target/qnx7/usr/include/c++/8.3.0/map:60,
from test.cpp:1:
/root/qnx710/target/qnx7/usr/include/c++/8.3.0/bits/stl_multimap.h:662:25: error: expected nested-name-specifier before numeric constant
template<typename _C2>
^~~
/root/qnx710/target/qnx7/usr/include/c++/8.3.0/bits/stl_multimap.h:662:25: error: expected '>' before numeric constant
In file included from /root/qnx710/target/qnx7/usr/include/c++/8.3.0/map:62,
from test.cpp:1:
/root/qnx710/target/qnx7/usr/include/c++/8.3.0/bits/stl_multimap.h:664:39: error: type/value mismatch at argument 3 in template parameter list for 'template<class _Key, class _Tp, class _Compare, class _Alloc> class std::multimap'
merge(multimap<_Key, _Tp, _C2, _Alloc>&& __source)
^
/root/qnx710/target/qnx7/usr/include/c++/8.3.0/bits/stl_multimap.h:664:39: note: expected a type, got '1'
In file included from /root/qnx710/target/qnx7/usr/include/stddef.h:23,
from /root/qnx710/target/qnx7/usr/include/c++/8.3.0/bits/cxxabi_init_exception.h:38,
from /root/qnx710/target/qnx7/usr/include/c++/8.3.0/bits/exception_ptr.h:38,
from /root/qnx710/target/qnx7/usr/include/c++/8.3.0/exception:143,
from /root/qnx710/target/qnx7/usr/include/c++/8.3.0/new:40,
from /root/qnx710/target/qnx7/usr/include/c++/8.3.0/ext/new_allocator.h:33,
from /root/qnx710/target/qnx7/usr/include/c++/8.3.0/x86_64-pc-nto-qnx7.1.0/bits/c++allocator.h:33,
from /root/qnx710/target/qnx7/usr/include/c++/8.3.0/bits/allocator.h:46,
from /root/qnx710/target/qnx7/usr/include/c++/8.3.0/bits/stl_tree.h:64,
from /root/qnx710/target/qnx7/usr/include/c++/8.3.0/map:60,
from test.cpp:1:
/root/qnx710/target/qnx7/usr/include/c++/8.3.0/bits/stl_multimap.h:667:25: error: expected nested-name-specifier before numeric constant
template<typename _C2>
^~~
/root/qnx710/target/qnx7/usr/include/c++/8.3.0/bits/stl_multimap.h:667:25: error: expected '>' before numeric constant
In file included from /root/qnx710/target/qnx7/usr/include/c++/8.3.0/map:62,
from test.cpp:1:
/root/qnx710/target/qnx7/usr/include/c++/8.3.0/bits/stl_multimap.h:669:34: error: type/value mismatch at argument 3 in template parameter list for 'template<class _Key, class _Tp, class _Compare, class _Alloc> class std::map'
merge(map<_Key, _Tp, _C2, _Alloc>& __source)
^
/root/qnx710/target/qnx7/usr/include/c++/8.3.0/bits/stl_multimap.h:669:34: note: expected a type, got '1'
/root/qnx710/target/qnx7/usr/include/c++/8.3.0/bits/stl_multimap.h:669:2: error: 'template<class _Key, class _Tp, class _Compare, class _Alloc> template<<typeprefixerror><anonymous> > void std::multimap<_Key, _Tp, _Compare, _Alloc>::merge(int&)' cannot be overloaded with 'template<class _Key, class _Tp, class _Compare, class _Alloc> template<<typeprefixerror><anonymous> > void std::multimap<_Key, _Tp, _Compare, _Alloc>::merge(int&)'
merge(map<_Key, _Tp, _C2, _Alloc>& __source)
^~~~~
/root/qnx710/target/qnx7/usr/include/c++/8.3.0/bits/stl_multimap.h:656:2: note: previous declaration 'template<class _Key, class _Tp, class _Compare, class _Alloc> template<<typeprefixerror><anonymous> > void std::multimap<_Key, _Tp, _Compare, _Alloc>::merge(int&)'
merge(multimap<_Key, _Tp, _C2, _Alloc>& __source)
^~~~~
In file included from /root/qnx710/target/qnx7/usr/include/stddef.h:23,
from /root/qnx710/target/qnx7/usr/include/c++/8.3.0/bits/cxxabi_init_exception.h:38,
from /root/qnx710/target/qnx7/usr/include/c++/8.3.0/bits/exception_ptr.h:38,
from /root/qnx710/target/qnx7/usr/include/c++/8.3.0/exception:143,
from /root/qnx710/target/qnx7/usr/include/c++/8.3.0/new:40,
from /root/qnx710/target/qnx7/usr/include/c++/8.3.0/ext/new_allocator.h:33,
from /root/qnx710/target/qnx7/usr/include/c++/8.3.0/x86_64-pc-nto-qnx7.1.0/bits/c++allocator.h:33,
from /root/qnx710/target/qnx7/usr/include/c++/8.3.0/bits/allocator.h:46,
from /root/qnx710/target/qnx7/usr/include/c++/8.3.0/bits/stl_tree.h:64,
from /root/qnx710/target/qnx7/usr/include/c++/8.3.0/map:60,
from test.cpp:1:
/root/qnx710/target/qnx7/usr/include/c++/8.3.0/bits/stl_multimap.h:675:25: error: expected nested-name-specifier before numeric constant
template<typename _C2>
^~~
/root/qnx710/target/qnx7/usr/include/c++/8.3.0/bits/stl_multimap.h:675:25: error: expected '>' before numeric constant
In file included from /root/qnx710/target/qnx7/usr/include/c++/8.3.0/map:62,
from test.cpp:1:
/root/qnx710/target/qnx7/usr/include/c++/8.3.0/bits/stl_multimap.h:677:34: error: type/value mismatch at argument 3 in template parameter list for 'template<class _Key, class _Tp, class _Compare, class _Alloc> class std::map'
merge(map<_Key, _Tp, _C2, _Alloc>&& __source)
^
/root/qnx710/target/qnx7/usr/include/c++/8.3.0/bits/stl_multimap.h:677:34: note: expected a type, got '1'
/root/qnx710/target/qnx7/usr/include/c++/8.3.0/bits/stl_multimap.h:677:2: error: 'template<class _Key, class _Tp, class _Compare, class _Alloc> template<<typeprefixerror><anonymous> > void std::multimap<_Key, _Tp, _Compare, _Alloc>::merge(int&&)' cannot be overloaded with 'template<class _Key, class _Tp, class _Compare, class _Alloc> template<<typeprefixerror><anonymous> > void std::multimap<_Key, _Tp, _Compare, _Alloc>::merge(int&&)'
merge(map<_Key, _Tp, _C2, _Alloc>&& __source)
^~~~~
/root/qnx710/target/qnx7/usr/include/c++/8.3.0/bits/stl_multimap.h:664:2: note: previous declaration 'template<class _Key, class _Tp, class _Compare, class _Alloc> template<<typeprefixerror><anonymous> > void std::multimap<_Key, _Tp, _Compare, _Alloc>::merge(int&&)'
merge(multimap<_Key, _Tp, _C2, _Alloc>&& __source)
^~~~~
/root/qnx710/target/qnx7/usr/include/c++/8.3.0/bits/stl_multimap.h: In member function 'void std::multimap<_Key, _Tp, _Compare, _Alloc>::merge(int&)':
/root/qnx710/target/qnx7/usr/include/c++/8.3.0/bits/stl_multimap.h:658:61: error: type/value mismatch at argument 2 in template parameter list for 'template<class _Tree1, class _Cmp2> class std::_Rb_tree_merge_helper'
using _Merge_helper = _Rb_tree_merge_helper<multimap, _C2>;
^
/root/qnx710/target/qnx7/usr/include/c++/8.3.0/bits/stl_multimap.h:658:61: note: expected a type, got '1'
/root/qnx710/target/qnx7/usr/include/c++/8.3.0/bits/stl_multimap.h:659:24: error: '_Merge_helper' has not been declared
_M_t._M_merge_equal(_Merge_helper::_S_get_tree(__source));
^~~~~~~~~~~~~
/root/qnx710/target/qnx7/usr/include/c++/8.3.0/bits/stl_multimap.h: In member function 'void std::multimap<_Key, _Tp, _Compare, _Alloc>::merge(int&)':
/root/qnx710/target/qnx7/usr/include/c++/8.3.0/bits/stl_multimap.h:671:61: error: type/value mismatch at argument 2 in template parameter list for 'template<class _Tree1, class _Cmp2> class std::_Rb_tree_merge_helper'
using _Merge_helper = _Rb_tree_merge_helper<multimap, _C2>;
^
/root/qnx710/target/qnx7/usr/include/c++/8.3.0/bits/stl_multimap.h:671:61: note: expected a type, got '1'
/root/qnx710/target/qnx7/usr/include/c++/8.3.0/bits/stl_multimap.h:672:24: error: '_Merge_helper' has not been declared
_M_t._M_merge_equal(_Merge_helper::_S_get_tree(__source));SHENGFA ZHANG2022-07-13T14:32:05Zpost121850: Re: Onvif support for QNX 6.5?
http://community.qnx.com/sf/go/post121850
Many thanks, I'll see how far we can get on 6.5.
MartinMartin Gagnon2022-07-08T20:15:34Zpost121849: Re: Onvif support for QNX 6.5?
http://community.qnx.com/sf/go/post121849
Er, to clarify -- that's the configure and make for ffmpeg.
-WillWill Miles2022-07-08T20:03:54Zpost121848: Re: Onvif support for QNX 6.5?
http://community.qnx.com/sf/go/post121848
Hi Martin,
ffmpeg is an open source project; you'll probably need to compile it for your target platform. For our QNX 6.6-based system we found there were no additional patches required to cross compile for QNX and get it working for our application - it built "out of the box" so to speak with the right configure options.
That said: if you need https support, you may also need to port gnutls, which did require a little more porting effort.
Here is a quick copy-and-paste of the configure and make lines from our Linux-based cross build system:
CC=qcc
CXX=QCC
CFLAGS="$CFLAGS -D__EXT"
CARCH="ntox86"
export AR="${CARCH}-ar"
export AS="${CARCH}-as"
export ELFEDIT="${CARCH}-elfedit"
export LD="${CARCH}-ld"
export NM="${CARCH}-nm"
export OBJDUMP="${CARCH}-objdump"
export OBJCOPY="${CARCH}-objcopy"
export RANLIB="${CARCH}-ranlib"
export SIZE="${CARCH}-size"
export STRINGS="${CARCH}-strings"
export STRIP="${CARCH}-strip"
./configure \
--prefix='/usr' \
--disable-debug \
--disable-static \
--disable-stripping \
--enable-gmp \
--enable-gnutls \
--enable-gpl \
--enable-shared \
--enable-version3 \
--enable-cross-compile \
--cc=${CC} \
--cxx=${CXX} \
--ld=qcc \
--ranlib=${RANLIB} \
--strip=${STRIP} \
--nm=${NM} \
--ar=${AR} \
--as=${AS} \
--target-os=qnx \
make -j10
----
Hope this helps some,
-WillWill Miles2022-07-08T20:03:03Zpost121847: Re: Onvif support for QNX 6.5?
http://community.qnx.com/sf/go/post121847
Thank you Will, I'll have a look.
Do you know of an ffmpeg implementation for QNX 6.5?
Thank you,
MartinMartin Gagnon2022-07-08T18:29:43Zpost121845: Re: Onvif support for QNX 6.5?
http://community.qnx.com/sf/go/post121845
Oddly enough I was just poking an ONVIF recorder earlier this week ...
ONVIF cameras use RTSP for sending the actual image data. If you can pin down the camera model, you may not need to bother with making the ONVIF service calls; all you need is the RTSP URL to pass to your RTSP client (eg. ffmpeg).
Stack overflow has a good breakdown of how to use command-line ffmpeg to capture still frames from an RTSP stream to an image file: https://stackoverflow.com/questions/25360470/ffmpeg-capture-current-frame-and-overwrite-the-image-output-file
If you need to support *any* ONVIF camera, you will have to implement the RTSP stream URL lookup. If you have to *detect* the ONVIF camera, it gets a bit tougher -- ONVIF cameras use the WS-Discovery protocol, for which the open source implementations all seem to be built on fairly deep dependency stacks that would have to be ported. I had success with python-ws-discovery as we've already built a Python 3 port for our QNX 6 platform.
Hope this is of some help,
-WillWill Miles2022-07-08T17:31:09Zpost121841: Re: Onvif support for QNX 6.5?
http://community.qnx.com/sf/go/post121841
Thank you Mario, that's valuable. I'll definitely have a look.Martin Gagnon2022-07-08T12:54:29Zpost121839: Re: Onvif support for QNX 6.5?
http://community.qnx.com/sf/go/post121839
Hi, sometime ago I've have a similar request and I've found some doc on
github https://github.com/onvif/specs/
Initially I started to write from scatch an applicazion just to controls only PTZ
and I've find a C/C++ library for Windows/Linux that may help in some way here
https://sourceforge.net/projects/libonvif/.
Unfortunatly project has been aborted, so I've not completed the work :-)
I'm sorry I can't be of much more help
M.mario sangalli2022-07-08T06:31:03Zpost121838: Onvif support for QNX 6.5?
http://community.qnx.com/sf/go/post121838
I see there's some support for the Onvif protocol in the Sensor Framework of QNX 7 (https://www.qnx.com/developers/docs/7.1/#com.qnx.doc.adas.system_services/topic/sensor_example_onvif.html)
A client of ours needs to get a screenshot from a Profile S camera from a computer running QNX 6.5.0SP1. Anyone knows if this is achievable, in one way or another?
Thank youMartin Gagnon2022-07-07T21:06:06Zpost121824: Re: Macros in QNX libraries break C++17 GCC headers
http://community.qnx.com/sf/go/post121824
Note, however, that this problem only occurs with the non-default C++ headers. Is there any reason you are not using the default ones?
--EladElad Lahav2022-06-14T12:37:50Zpost121821: Re: Macros in QNX libraries break C++17 GCC headers
http://community.qnx.com/sf/go/post121821
As far as I can tell this definition is a left over from a previous math library and can now be removed.
--EladElad Lahav2022-06-13T20:39:59Zpost121814: Macros in QNX libraries break C++17 GCC headers
http://community.qnx.com/sf/go/post121814
Including certain QNX libraries causes the macro "_C2" to get defined to 1. _C2 is, however, used as a token string in the GCC 8.3 C++17 libraries in numerous places.
Going into target/qnx7/usr/include and running "grep "\b_C2\b" -R -I" makes the problem rather obvious.Oleksiy Pikalo2022-06-09T04:23:23Zpost121805: Re: mq_timedreceive_monotonic changed return value after applying 4844 patch
http://community.qnx.com/sf/go/post121805
The previous return was EINTR and after applying the patch the return is EAGAIN, timeout is set also.
> I have integrated QNX patch 4844 into our QNX 650SP1 and I am facing a change
> in behaviour
> of the mq library call "mq_timedreceive_monotonic", can you please help me to
> understand the change history of the mq library ?
> Its important also to say that the queue was created without setting the non
> blocking flag.omar bunni2022-05-21T21:33:08Zpost121804: mq_timedreceive_monotonic changed return value after applying 4844 patch
http://community.qnx.com/sf/go/post121804
I have integrated QNX patch 4844 into our QNX 650SP1 and I am facing a change in behaviour
of the mq library call "mq_timedreceive_monotonic", can you please help me to understand the change history of the mq library ?
Its important also to say that the queue was created without setting the non blocking flag.omar bunni2022-05-16T05:58:16Zpost121803: Re: Dynamic Memory allocation of Global vs Local
http://community.qnx.com/sf/go/post121803
Note: the issue is observed when migrating from QNX6.5 PS1 to QNX7.1Sheran Vaz Singarayappa(deleted)2022-05-11T10:43:38Zpost121802: Dynamic Memory allocation of Global vs Local
http://community.qnx.com/sf/go/post121802
Trying to create a VTK object using below code snippet
vtkSmartPointer<vtkCylinderSource> test=vtkSmartPointer<vtkCylinderSource>::New();
test->SetHeight(rodLen);
test->SetCenter(0,0,0);
test->SetRadius(rodRadius);
test->Update(); <----- It crashes here at startup
The above code snippet works fine when I call it in main(). The same crashes at call to Update() when I put it in the constructor of a globally initialized object.
Is it due to memory limit changes in QNX 7.1? what is your recommendation?Sheran Vaz Singarayappa(deleted)2022-05-11T10:41:54Zpost121793: Re: QEMU virtio-net networking issue (QNX 7 generic x86_64 image)
http://community.qnx.com/sf/go/post121793
> Hello all,
>
> I am running QNX 7 on latest mainline QEMU, and after some fiddling around I
> got it to work.
>
> I encountered a few issues with networking, the most important one being a
> regression with virtio-net.
>
> I have investigated the issue and reported it to QEMU in this thread.
> I am currently disabling ioeventfd as a workaround, and this is making my
> networking stable, including host TCP and UDP forwarding to the guest.
>
> https://www.mail-archive.com/qemu-devel@nongnu.org/msg561163.html
>
> Maybe something is going wrong between the QNX guest driver and the QEMU
> device?
>
> -----
>
> A second minor issue is that the generic x86 build file does not contain a
> section for virtio-net,
> nor any PCI-IDs that seem to match emulated devices in QEMU.
>
> After creating that section, and with the regression fix applied to QEMU,
> everything works fine.
> I also added INTEL_8086_100e=8086/100e as a PCI-ID for the e1000 driver, which
> QEMU exposes.
>
> Note that host port forwarding only seems to work with virtio-net (and only
> after patching QEMU to disable ioeventfd).
>
> Maybe it would be helpful to add something like the following to the generic
> x86_64 build file?
>
> My current change is:
>
> --- x86_64-generic.build.save 2018-07-31 15:24:03.277092184 +0200
> +++ x86_64-generic.build 2018-09-19 14:25:15.935782840 +0200
> @@ -215,6 +215,7 @@
> libsocket.so
> devnp-e1000.so
> devnp-rtl8169.so
> +devnp-virtio.so
> libcrypto.so
>
>
> @@ -231,6 +232,7 @@
> STD_NULL=/dev/null
>
> # supported list for the network devices
> +INTEL_8086_100e=8086/100e
> INTEL_8086_100f=8086/100f
> INTEL_8086_1559=8086/1559
> INTEL_8086_1570=8086/1570
> @@ -240,6 +242,8 @@
> INTEL_8086_1503=8086/1503
> INTEL_8086_1f41=8086/1f41
> RTL_RTL8169=10ec/8168
> +VIRTIO_NET_OLD=1af4/1000
> +VIRTIO_NET_NEW=1af4/1041
>
> # uncomment the line below if any driver use the old PCI API's
> export PCI_BKWD_COMPAT_MODULE=/lib/dll/pci/pci_bkwd_compat.so
> @@ -252,6 +256,7 @@
>
> #check if there is the Intel E1000 Ethernet device in the list
> if grep $INTEL_8086_100f $PCI_DEVICE_LIST > $STD_NULL || \
> + grep $INTEL_8086_100e $PCI_DEVICE_LIST > $STD_NULL || \
> grep $INTEL_8086_1559 $PCI_DEVICE_LIST > $STD_NULL || \
> grep $INTEL_8086_1570 $PCI_DEVICE_LIST > $STD_NULL || \
> grep $INTEL_8086_15a3 $PCI_DEVICE_LIST > $STD_NULL || \
> @@ -269,10 +274,18 @@
> elif grep $RTL_RTL8169 $PCI_DEVICE_LIST > $STD_NULL
> then
> echo "Starting RTL8169 Ethernet driver ..."
> - io-pkt-v6-hc -d rtl8169
> + io-pkt-v4-hc -d rtl8169
> if_up -r 10 -p rt0
> ifconfig rt0 up
>
> +elif grep $VIRTIO_NET_NEW $PCI_DEVICE_LIST > $STD_NULL || \
> + grep $VIRTIO_NET_OLD $PCI_DEVICE_LIST > $STD_NULL
> +then
> + echo "Starting virtio-net driver ..."
> + io-pkt-v6-hc -d virtio
> + if_up -r 10 -p vt0
> + ifconfig vt0 up
> +
> else
> echo "No Ethernet device has been detected"
> exit 0;
>
>
>
>asyr aubsd(deleted)2022-04-29T05:54:56Zpost121778: Re: pidin irq reporting strange IRQ number
http://community.qnx.com/sf/go/post121778
> It is possible that your Linux distro behaves the same way, e.g. the kernel
> does the demuxing for you. More likely than not, the logical vector numbers
> are different then. However it is equally possible that in your Linux you must
> attach to the cascade vector and do the demuxing yourself.
>
> Regards,
> Al
I was quite happy to not have to endure the horror of trying to figure out how to do this with Linux! :-) After 35 years using QNX I was reticent about having to go there!
Once I was able to figure out which IRQ I needed to map to it was plain sailing and I ended up back in my comfort zone.
GeoffGeoff Roberts2022-04-02T04:03:21Zpost121777: Re: pidin irq reporting strange IRQ number
http://community.qnx.com/sf/go/post121777
Thanks to the pointer Michael gave me in regards to the cascading interrupts, and reference to init_intrinfo.c, I was able to figure it out. It turned out that I had to attach to IRQ 296 - which was a far cry from 48! :-)
It's all working fine now.
So thank you Michael - you have saved me much grief!
Geoff.Geoff Roberts2022-04-02T03:58:30Zpost121776: Re: pidin irq reporting strange IRQ number
http://community.qnx.com/sf/go/post121776
It is possible that your Linux distro behaves the same way, e.g. the kernel does the demuxing for you. More likely than not, the logical vector numbers are different then. However it is equally possible that in your Linux you must attach to the cascade vector and do the demuxing yourself.
Regards,
AlAlbrecht Uhlmann2022-04-01T19:00:51Zpost121775: Re: pidin irq reporting strange IRQ number
http://community.qnx.com/sf/go/post121775
> On that platform, IRQ 48 is what's known as a cascade interrupt. A single
> interrupt which represents several others which are demuxed by specific
> callouts. You cannot attach directly to it, instead you attach to one of the
> demuxed interrupt vectors (which start at 200 for this particular cascade).
> See init_intrinfo.c in your BSP
Thanks for that!
I'll take a look at that file (init_intrinfo.c) over the weekend (it's early Sat morning here) and with the Xilinx FPGA guru who is working with me (and knows nothing about QNX) try and get the GPIO interrupt working on Monday.
Am I correct however in assuming that even though InterruptAttach() returns a valid ID for IRQ 48 there is actually more work to be done to get it working? If so, is it likely to be work on the QNX side or FPGA (PL) side? Or both?
It's the first time either of us have had to get this particular GPIO interrupt working with QNX but I gather from what you say Petalinux would behave the same way. Is this correct? If so, and we can get that working, it should therefore be relatively straight forward to get it working with QNX.
Geoff.Geoff Roberts2022-04-01T15:54:24Zpost121774: Re: pidin irq reporting strange IRQ number
http://community.qnx.com/sf/go/post121774
On that platform, IRQ 48 is what's known as a cascade interrupt. A single interrupt which represents several others which are demuxed by specific callouts. You cannot attach directly to it, instead you attach to one of the demuxed interrupt vectors (which start at 200 for this particular cascade).
See init_intrinfo.c in your BSPMichael Kisel2022-04-01T11:52:33Zpost121773: pidin irq reporting strange IRQ number
http://community.qnx.com/sf/go/post121773
Hello. I am working with the Xilinx ZCU104 using the most recent QNX 7.1 BSP.
We have set up the GPIO to read on one of the PMOD's a 3.3v PPS from a GPS unit. We know that the pulses are arriving as we can see them when we poll the appropriate input register bit. We have enabled the interrupt for that bit.
The IRQ I need to attach to is 48 (0x30). Calls to InterruptAttach() or InterruptAttachEvent() return a valid ID (13 in my case) and for all intents and purposes everything is fine. Except the handlers don't catch any interrupt.
A pidin irq shows that the interrupt registered is 200 (0xc8). Not 48.
How can this be? What might be happening to cause this? All the other IRQ's are fine and properly reported by pidin (like those used by the I2C and other drivers). Only 48 causes this behaviour.
I'm out of ideas as to how do deal with this. The FPGA (a Xilinx specialist but from the Petalinux world) is also scratching his head. We're not sure if it's something we have done on the PL (FPGA) side or not. What could we do there to provoke QNX into reporting a different IRQ?
Thanks,
Geoff.Geoff Roberts2022-03-31T22:58:15Zpost121746: Re: slog2info -w skips processes that are not running
http://community.qnx.com/sf/go/post121746
This behavior is not clear from the documentation. The option states that the -w option "prints all available older logs". Skipping inactive processes means that all older logs are not printed.
More importantly, this makes review of all log data complicated. For test systems, we run slog2info with the -w option at startup. The intent is to see everything that happened during boot and then keep printing everything that comes later. With early processes getting skipped, it is not clear how to achieve this without printing a lot of information twice (aka run slog2info then again with the -w option) or possibly missing some data (slog2 info, then with the -c option, then with the -w option.david lavacek2022-03-04T16:08:00Zpost121745: Re: slog2info -w skips processes that are not running
http://community.qnx.com/sf/go/post121745
The behavior that you describe is consistent with the original intent of the -w/-W (live log streaming feature).
slog2info [-w/-W] queries slogger2 to find out which buffer sets are still live.
Whereas slog2info alone performs a static log dump of everything under /dev/shmem/slogger2, which also includes (for a certain time) buffer sets from terminated processes.Jack Nowinski2022-03-04T14:27:36Zpost121741: Re: compile ssh with QNX7.0 utilities
http://community.qnx.com/sf/go/post121741
I use 7.1 and found endian.h in two places:
$QNX_BASE/target/qnx7/usr/include/io-pkt/machine/endian.h
$QNX_BASE/target/qnx7/usr/include/qh/endian.h
I presume it's in the same spot under QNX 7.0
Perhaps you need to add the "machine" directory to your $INCLUDE path? (-I argument to qcc)Geoff Roberts2022-02-25T02:16:59Zpost121740: compile ssh with QNX7.0 utilities
http://community.qnx.com/sf/go/post121740
Did anyone successfully build the ssh with QNX7.0 utilities?
I want to apply patch over ssh. but met below error:
qcc -V gcc_ntoaarch64le -Wall -Wextra -Wpointer-arith -Wuninitialized -Wsign-compare -Wformat-security -Wsizeof-pointer-memaccess -Wno-pointer-sign -Wno-unused-parameter -Wno-unused-result -fno-strict-aliasing -D_FORTIFY_SOURCE=2 -ftrapv -fno-builtin-memset -fstack-protector-strong -I. -I. -DSSHDIR=\"/usr/etc\" -D_PATH_SSH_PROGRAM=\"/usr/bin/ssh\" -D_PATH_SSH_ASKPASS_DEFAULT=\"/usr/libexec/ssh-askpass\" -D_PATH_SFTP_SERVER=\"/usr/libexec/sftp-server\" -D_PATH_SSH_KEY_SIGN=\"/usr/libexec/ssh-keysign\" -D_PATH_SSH_PKCS11_HELPER=\"/usr/libexec/ssh-pkcs11-helper\" -D_PATH_SSH_SK_HELPER=\"/usr/libexec/ssh-sk-helper\" -D_PATH_SSH_PIDDIR=\"/var/run\" -D_PATH_PRIVSEP_CHROOT_DIR=\"/var/empty\" -DHAVE_CONFIG_H -c binn.c -o binn.o
binn.c:45:20: fatal error: endian.h: No such file or directory
compilation terminated.
cc: /home/zchen/qnx700/host/linux/x86_64/usr/lib/gcc/aarch64-unknown-nto-qnx7.0.0/5.4.0/cc1 error 1
Makefile:198: recipe for target 'binn.o' failed
make: *** [binn.o] Error 1zhijun chen2022-02-25T01:59:21Zpost121739: Re: Does QNX7.0 utility support rsync tool?
http://community.qnx.com/sf/go/post121739
Hi will,
that works for me. thank you very much!
Regards,
Zhijunzhijun chen2022-02-25T01:56:15Zpost121738: slog2info -w skips processes that are not running
http://community.qnx.com/sf/go/post121738
slog2info prints information from the slogger buffer. By default, it prints only infomration from the buffer. Using the "-w" option, it should print information from the buffer and then keep printing new information that is slogged afterwards.
It has been observed that there is another difference in behiavior with the "-w" option. Processes which are not running at the time "slog2info -w" is called are skipped. Even though those processes are in the slogger buffer (having run to completion previously), even their history is ignored.
example sequence:
1. start system
2. run a process X which runs, slogs information, then terminates.
3. run "slog2info". Observe the slogs of process X along with everything else
4. run "slog2info -w". Observe that process X slogs do not show up.
Testing was done with QNX 7.0. Slog2info build info:
QNX_BUILDID=(GNU)9d193bf4a577498ee3cd4eb7fe291a8c
NAME=slog2info
DESCRIPTION=SLOGGER2 system service
DATE=2017/01/19-14:49:37-EST
STATE=stable
HOST=sdp700-node1
USER=builder
VERSION=7.0.0
TAGID=700-SDP_3_build-aarch64-8david lavacek2022-02-24T23:25:32Zpost121733: Re: Does QNX7.0 utility support rsync tool?
http://community.qnx.com/sf/go/post121733
Hi Zhijun,
Out of the box rsync supports operation over ssh, so all that's required from the destination is a local install of rsync and a working sshd. A call of 'rsync [your options here] src user@destination_host:destination_folder' will connect via ssh and launch rsync on the remote end when needed. Instructions for setting up sshd are on the "sshd" page in the QNX Utilities Reference.
-WillWill Miles2022-02-21T14:31:05Zpost121732: do we happen to have an example for libtracelog.so.1?
http://community.qnx.com/sf/go/post121732
I just found a header file tracelog.h, don't know logic.do we happen to have an example for libtracelog.so.1?
yes, I can directly use traceevent and InterruptHookTrace. but some one in the backaground is using it, so InterruptHookTrace would be failed.
but tracelogger is working. for readelf, I found it depended on ibtracelog.so.1, not directly playing with InterruptHookTraceGavin Han(deleted)2022-02-21T02:49:30Zpost121731: Re: Does QNX7.0 utility support rsync tool?
http://community.qnx.com/sf/go/post121731
Hi Will,
Thanks for your information. right now the rsync can be executed on QNX7.0 successfully.
one further question: if I want the QNX to be the rsync server, how do I configure it?
Thanks,
Zhijunzhijun chen2022-02-18T18:22:06Zpost121730: Intel® Time Coordinated Computing ITCC - Tiger Lake Architecture
http://community.qnx.com/sf/go/post121730
Hi everyone,
I'm working on a project with Intel 11th gen Core processors and I have multiple questions.
First of all there are no specific BSPs for this architecture yet and I have to use generic BSP. Apparently in the specific board that I'm working with, this BSP has issues with audio and video drivers and they're not working properly. Is there any QNX development roadmap available that shows when they are planning to provide Tiger Lake BSP?
I was wondering how Intel® Time Coordinated Computing ITCC feature in the 11th gen Intel Core CPUs can help the performance of QNX RTOS. Also does anyone know when this feature will be supported by QNX?Saeed Shahinfar2022-02-18T01:01:45Zpost121727: Re: Does QNX7.0 utility support rsync tool?
http://community.qnx.com/sf/go/post121727
I can confirm that rsync required no patches for QNX 6.6. If it's of any use, our current recipe is below -- popt and zlib are built elsewhere in our distro, so I can't speak for if the vendored versions work.
CHOST="x86-unknown-nto-qnx"
CBUILD="x86_64-unknown-linux-gnu"
export CC=qcc
export CXX=QCC
export ac_cv_prog_cc_c99=""
export rsync_cv_MAKEDEV_TAKES_3_ARGS=yes
./configure --build=${CBUILD} --host=${CHOST} \
--prefix=/usr \
--disable-debug \
--with-included-popt=no \
--with-included-zlib=no \
--enable-simd=no \
--disable-acl-support \
--disable-xxhash \
--disable-zstd \
--disable-lz4 \
--disable-ipv6
makeWill Miles2022-02-16T19:15:45Zpost121726: Re: Does QNX7.0 utility support rsync tool?
http://community.qnx.com/sf/go/post121726
I think it will be part of the next release of the SDP after 7.1.
But in the mean time, it is not that hard to port from source. IIRC mostly some configure time options.
You can also contact your BB/QNX sales/engineering team and negotiate it as part of a CSP for SDP7.0.
JimJim Sleeth2022-02-16T15:30:10Zpost121725: Re: Does QNX7.0 utility support rsync tool?
http://community.qnx.com/sf/go/post121725
Hi,
we are also interested to use rsync. I checked QSC, it is not part of the SDK, neither in 7.0 nor in 7.1.
Maybe it can be ported quite easily from the sources. We haven't looked into that as yet. The only thing that could be a problem if the filesystem behaviour differs in subtle points between QNX powerfailsafe FS and regular Linux/Windows FS.
Regards,
-AlAlbrecht Uhlmann2022-02-16T08:42:42Zpost121724: Does QNX7.0 utility support rsync tool?
http://community.qnx.com/sf/go/post121724
I want to use this command to transfer large file remotely.
any idea for how to install rsync on QNX 7.0?
thanks,
Zhijunzhijun chen2022-02-16T02:56:26Zpost121714: Re: Unable to catch hardware interrupts
http://community.qnx.com/sf/go/post121714
> This works for the clock interrupt on a 7.1 x86_64 machine:
Indeed it does! :-)
Two lessons learnt from this exercise.
1. Don't assume the timer IRQ is 0. Use the SYSPAGE_ENTRY(qtime)->intr value! Which in my case under QNX 7.1 is IRQ2. But why IRQ0 worked in QNX 6.5 beats me but it threw me off. I seem to recall from the deep dim past that IRQ was a 50mSec interrupt. QNX4? It was so long ago... I actually use SYSPAGE in some clock related routines I have but haven't touched them in years. So I forgot about it...
2. Make sure hardware (like UART's) you want to have generate interrupts are configured properly. In my case, I had forgotten that the GPO2 bit of the 16550 (8250) MCR register needs to be set.
So now I have my own version of the ser8250 driver working pretty much the way I want it.
Is there any documentation for the io-char library? I've looked but with no success.
Thanks,
Geoff.
>
> #include <stdio.h>
> #include <sys/neutrino.h>
> #include <sys/syspage.h>
>
> int
> main(int argc, char **argv)
> {
> struct sigevent ev;
> SIGEV_INTR_INIT(&ev);
>
> int const intr = SYSPAGE_ENTRY(qtime)->intr;
> int const id = InterruptAttachEvent(intr, &ev, _NTO_INTR_FLAGS_TRK_MSK);
> if (id == -1) {
> perror("InterruptAttachEvent");
> return 1;
> }
>
> for (unsigned i = 0; i < 1000; i++) {
> InterruptWait(0, NULL);
> InterruptUnmask(intr, id);
> }
>
> printf("Done\n");
> return 0;
> }Geoff Roberts2022-02-09T06:47:30Zpost121712: Re: How to compile an assemble code in QDE
http://community.qnx.com/sf/go/post121712
sorry to bother
problem solved
just simply added S at the end.
SRCS = $(call rwildcard, src, c S)
thanks.Gavin Han(deleted)2022-02-07T09:11:57Zpost121711: How to compile an assemble code in QDE
http://community.qnx.com/sf/go/post121711
Hello my friends
I am trying to port some code from open source which contain some assemble code, file name ends up with .S
I am having no idea how to compile those .s to my project, if just copy/paste them to src, they were ignored at compiling time.
thank you very much.
Br.
GavinGavin Han(deleted)2022-02-07T08:22:51Zpost121710: Re: Unable to catch hardware interrupts
http://community.qnx.com/sf/go/post121710
This works for the clock interrupt on a 7.1 x86_64 machine:
#include <stdio.h>
#include <sys/neutrino.h>
#include <sys/syspage.h>
int
main(int argc, char **argv)
{
struct sigevent ev;
SIGEV_INTR_INIT(&ev);
int const intr = SYSPAGE_ENTRY(qtime)->intr;
int const id = InterruptAttachEvent(intr, &ev, _NTO_INTR_FLAGS_TRK_MSK);
if (id == -1) {
perror("InterruptAttachEvent");
return 1;
}
for (unsigned i = 0; i < 1000; i++) {
InterruptWait(0, NULL);
InterruptUnmask(intr, id);
}
printf("Done\n");
return 0;
}Elad Lahav2022-02-02T11:59:35Zpost121709: Re: Unable to catch hardware interrupts
http://community.qnx.com/sf/go/post121709
> Hi Geoff,
>
> My best guess is that the driver left the interrupt masked. See if an explicit
> call to InterruptUnmask() helps.
> If that's the case then the driver may be missing the _NTO_INTR_FLAGS_TRK_MSK
> flag in its InterruptAttach() call.
>
> Also, you don't need I/O privileges to use InterruptAttachEvent(), just the
> PROCMGR_AID_INTERRUPTEVENT ability (which root should have).
>
> --Elad
Hi Elad,
I tried a call to InterruptUnmask() but it didn't help. That's when I was still playing with IRQ's 3 & 4. I didn't do this when I tried IRQ 0. Didn't think I'd have to.
What I don't understand is why this code using IRQ 0 works with QNX6.5 and not 7.1. I am obviously able to hook into the timer interrupt with no apparent consequences. Tomorrow I'll try the UART's on the 32-bit QNX 6.5 machine for completeness.
But if it works, while the same source when built on 7.1 doesn't (regardless of whether or not I use the C or C++ compiler), what else is there with IRQ 0?
I will try the InterruptUnmask() call on IRQ's 3 and 4 tomorrow but with IRQ 0???
Cheers,
Geoff.Geoff Roberts2022-02-02T11:48:32Zpost121708: Re: Unable to catch hardware interrupts
http://community.qnx.com/sf/go/post121708
Hi Geoff,
My best guess is that the driver left the interrupt masked. See if an explicit call to InterruptUnmask() helps.
If that's the case then the driver may be missing the _NTO_INTR_FLAGS_TRK_MSK flag in its InterruptAttach() call.
Also, you don't need I/O privileges to use InterruptAttachEvent(), just the PROCMGR_AID_INTERRUPTEVENT ability (which root should have).
--EladElad Lahav2022-02-02T11:32:35Zpost121707: Re: Unable to catch hardware interrupts
http://community.qnx.com/sf/go/post121707
> Hi,
>
> before kill the UART driver just use "pidin irq" and "pidin mem" to spy
> and learn where the things are. May help ;-)
> Apparently you have a command line access to your board on 7.1
>
> -- Alexandre
Hi Alexandre,
I did that. pidin -f NQ shows the IRQ's of devc-ser8250 as expected: 4 and 3 respectively.
After killing devc-ser8250 I start the example InterruptAttacheEvent() process (that I call sintr for no particular reason).
pidin -f NQ shows whatever IRQ I use - 0, 4, or 3.
pidin -f NQk shows all the process abilities I expected (including interruptevent).
I can build it using either the C or C++ compiler. Neither works - InterruptWait() never returns. However, in QNX6.5 both work. No function returns a failure (typically -1) and errno is always EOK.
I have access to the target x86_64 systems by either ssh, telnet, or local console (kbd/scn). Typically ssh.
Both are effectively PC's. The IEI TANK-610 is so called "embedded" but it's really just a "PC" reduced in physical size with no moving parts (big heat sink on top) powered from 12 to 36 VDC. Nothing special.
Note tat this is the first time I have attempted to catch hardware interrupts using 7.1 on an x86_64 system. I have however successfully been doing such things (with serial ports) going back to the QNX2 days, right through QNX 4 and QNX6. Obviously 7.1 is different and I thought I had it covered. But apparently not! :-)
Geoff.Geoff Roberts2022-02-02T09:30:59Zpost121706: Re: Unable to catch hardware interrupts
http://community.qnx.com/sf/go/post121706
Hi,
before kill the UART driver just use "pidin irq" and "pidin mem" to spy
and learn where the things are. May help ;-)
Apparently you have a command line access to your board on 7.1
-- AlexandreAlexandre REBEKO2022-02-02T08:51:01Zpost121705: Unable to catch hardware interrupts
http://community.qnx.com/sf/go/post121705
Hello.
I'm using QNX 7.1 and the platform is Intel x86_64. Two different machines - one a recent IEI TANK-610 and the other some obscure motherboard that I inherited a couple of years ago.
I am running in all cases as root.
When I discovered I had a problem with the TANK I decided to build up the 2nd machine and still have the problem. So I don't think it's to do with the TANK (a Celeron N3160 processor).
I am back to basics using some sample code I found documented with the InterruptAttachEvent() function that uses IRQ3 (2nd UART at 0x2f8).
I killed devc-ser8250 so that I could have unfettered access to that interrupt. Didn't help. So I went to 3f8/4. No better. So then IRQ0 which is the timer interrupt. No good!
The same code builds and runs perfectly on my QNX 6.5 development machine.
On the 7.1 system I added a call to procmgr_ability() - but I don't think I really needed to as I'm running as root anyway. Whatever, it didn't help. procmgr_ability() returns EOK so I guess it's happy.
ThreadCtl(_NTO_TCTL_IO, 0) returns 0 so I guess it's happy also.
The call to InterruptAttachEvent() returns 6 so I guess it's happy.
For good measure I call InterruptEnable() but I don't think that's really required. It didn't help anyway.
InterruptWait() simply never returns regardless of IRQ used. It really surprised me that IRQ0 didn't work for me.
It doesn't work when I use InterruptAttach() either with my own handler. The handler is never called. Nowhere do I get any failed functions.
What might I be doing wrong in 7.1 that works fine in 6.5 (apart from the procmgr_ability() call)? I'm sure it's simple!
Thanks,
Geoff.
ButGeoff Roberts2022-02-02T00:45:19Zpost121704: Re: spawn() fails on QNX 6.5.0
http://community.qnx.com/sf/go/post121704
That sounds like you're closing it. If the resmgr was screwing up then you'd not likely to be able to recover it.Roger Maclean2022-01-31T13:09:51Zpost121703: Re: spawn() fails on QNX 6.5.0
http://community.qnx.com/sf/go/post121703
Well, good news I think.
I was able to dup() the STDIN descriptor before it went bad and then restore it so that spawn() could function after the EBADF error. So, I restore it with dup2() and call spawn() again and that works.
However, I'm trying to determine how STDIN is getting closed or messed up in the first place.
Is there any way to tell if it's getting closed or if the resmgr is messed up?
If the resmgr is messed up, can it be restarted?Edward Llewellyn2022-01-28T21:13:38Zpost121702: Re: spawn() fails on QNX 6.5.0
http://community.qnx.com/sf/go/post121702
Yes, it could be closed. The other possibility would be that something has gone wrong on the resmgr side. The way 'pidin fds' works is that pidin dups the process's fs and calls iofdinfo on the result to get the path. So if something is bad on the resmgr side it might also make it vanish. Thought the getting closed is perhaps more likely.Roger Maclean2022-01-27T22:12:42Zpost121701: Re: spawn() fails on QNX 6.5.0
http://community.qnx.com/sf/go/post121701
I checked pidin fds for my process.
Before the issue happens, I see fds as:
0 1 rw 0 /dev/devh-usb.so
1 1
2 1
After the spawn() issue happens:
1 1
2 1
It looks like FD 0 gets closed somehow, if I'm reading this right.Edward Llewellyn2022-01-27T21:52:45Zpost121700: Re: spawn() fails on QNX 6.5.0
http://community.qnx.com/sf/go/post121700
Yes, for fds there is no translation, so they'll just be 0,1,2. I mentioned in a previous comment that you could try calling `iofdinfo`, maybe `fstat` would be easier.
If the spawnp is failing, I would expect that one of them is no longer associated with an open file in the server, but I don't know what would cause it to become invalid.Ian Larson2022-01-27T21:28:37Zpost121699: Re: spawn() fails on QNX 6.5.0
http://community.qnx.com/sf/go/post121699
pidin fds
should indicate if the fds are sane.Roger Maclean2022-01-27T21:28:29Zpost121698: Re: spawn() fails on QNX 6.5.0
http://community.qnx.com/sf/go/post121698
I'm not running my program in the debugger, if that's what you're asking about.
It's rather difficult for me to do so, as the lab test stand has it's own PC that connects directly to our QNX device.
This lab PC doesn't have Momentics on it..
Is there another way to get this information you talk about?
Also, how I can tell if fds 0, 1 and 2 are valid or not?
What are their coids? 0, 1 and 2?Edward Llewellyn2022-01-27T21:24:03Zpost121697: Re: spawn() fails on QNX 6.5.0
http://community.qnx.com/sf/go/post121697
Once spawnp starts returning EBADF do you know that FDs 0,1,2 are all still valid? If you have traces, do you see the resource manager receiving the _IO_DUP messages during the spawn process?Ian Larson2022-01-27T21:08:26Zpost121696: Re: spawn() fails on QNX 6.5.0
http://community.qnx.com/sf/go/post121696
I added your suggested code into my program, but it's not finding any FDs with _NTO_COF_DEAD
in the flags.
The flags are all either 0 or 1 (_NTO_COF_CLOEXEC).
Anything else I should look for?Edward Llewellyn2022-01-27T19:42:38Zpost121695: Re: spawn() fails on QNX 6.5.0
http://community.qnx.com/sf/go/post121695
One of the things `procmgr_daemon` does is it attempts to close all file descriptors, opens /dev/null and dups it to 0,1,2. This may or may not be relevant.
One thing you could try is: once the system is in the state where spawnp fails with EBADF, you could try using ConnectServerInfo(0, ...) to scan the process's fds and check the flags for `_NTO_COF_DEAD`, and/or iofdinfo to see if the connections are still valid.
ConnectServerInfo can be used in a loop to scan for file descriptors. e.g.
struct _server_info sinfo;
next_fd = 5;
while (...) {
int fd = ConnectServerInfo(0, next_fd, &sinfo);
if (fd == -1 || fd & _NTO_SIDE_CHANNEL) break;
print_info_about_connection();
next_fd = fd+1;
}
if there is a connection with coid 5, ConnectServerInfo will return 5 (and sinfo will have information about 5). If 5 is not valid, it will return the next first valid coid (6,7,8...).
You can stop looping when `(fd & _NTO_SIDE_CHANNEL) == _NTO_SIDE_CHANNEL`Ian Larson2022-01-27T17:29:00Zpost121694: Re: spawn() fails on QNX 6.5.0
http://community.qnx.com/sf/go/post121694
BTW, I did try putting delays in my code, and that didn't help, so I think it's not a timing issue.Edward Llewellyn2022-01-27T17:08:00Zpost121693: Re: spawn() fails on QNX 6.5.0
http://community.qnx.com/sf/go/post121693
I found code that was calling printf(). This code is useless as the program is making itself a daemon with
procmgr_daemon().
Are you saying we shouldn't output data to fds 0, 1, or 2?Edward Llewellyn2022-01-27T16:49:42Zpost121692: Re: spawn() fails on QNX 6.5.0
http://community.qnx.com/sf/go/post121692
Are you opening/closing fds 0,1,2 in any of the other threads? If those files are open and valid it may be some other issue.Ian Larson2022-01-25T22:52:42Zpost121691: Re: spawn() fails on QNX 6.5.0
http://community.qnx.com/sf/go/post121691
So, would putting multi-second sleep() calls between the spawn() tries help? That might be an option.
Thanks for replying quickly, BTW.Edward Llewellyn2022-01-25T22:41:58Zpost121690: Re: spawn() fails on QNX 6.5.0
http://community.qnx.com/sf/go/post121690
I think I must be ending up with a partially opened FD. How to I fix it without restarting my device manager program?
Restarting that program isn't a good option, because to do that it would have to shut down all of our other applications (we have about 20-30 running) and then restarting everything again.
I'm passing in STDIN, STDOUT and STDERR, not other files the parent has opened.
I did try spawnv() as well as spawnp() and spawn().
spawnv() fails badly because apparently the FDs aren't able to be duplicated.Edward Llewellyn2022-01-25T22:39:56Zpost121689: Re: spawn() fails on QNX 6.5.0
http://community.qnx.com/sf/go/post121689
There's fairly well understood race condition when doing things like fork/spawn in a multithreaded process. During the process creation phase the process manager has to iterate over the file descriptors in the parent process that need to be duplicated in the child, and then send an _IO_DUP message to the resource manager.
The process of opening/closing a file descriptor involves:
1. Open a connection to the resource manager
2. Send a _IO_CONNECT message with information about the file you're interested in
3. The resource manager creates an OCB for the client process
And the process of closing a file descriptor is:
1. Send an _IO_CLOSE message on the coid
2. The resource manager cleans up the OCB associated with the client's file
3. Detach the connection from the resource manager.
If the process manager tries to duplicate a file descriptor that is partially opened or partially closed in the parent(the connection exists but the resource manager doesn't have information about it), the spawn/fork will fail with EBADF.
It sounds like you may be hitting this race condition, or may be ending up with a file descriptor that is partially open.Ian Larson2022-01-25T22:33:54Zpost121688: Re: spawn() fails on QNX 6.5.0
http://community.qnx.com/sf/go/post121688
Additional information:
Rhp_char_t ** const ExecutablePath = argv ;
struct inheritance inherit;
memset (&inherit,0,sizeof(inheritance));
inherit.flags =SPAWN_NOZOMBIE ;
Rhp_int32_t fd_map[] = { STDIN_FILENO, STDOUT_FILENO, STDERR_FILENO };
childProcessID = spawnp(ExecutablePath[0],3,fd_map,&inherit,ExecutablePath,NULL);
This is the code, without the logging.Edward Llewellyn2022-01-25T21:44:12Zpost121687: spawn() fails on QNX 6.5.0
http://community.qnx.com/sf/go/post121687
I have a multi-threaded program that is failing on the spawn() call.
I get EBADF, but when I log the parameters to spawn() none of them look wrong.
This is happening after my program goes through a process of:
1. Shut down a process that talks to the CAN driver.
2. Spawn a test mode program, which interfaces to the CAN driver in a different way
2. Shut down the test mode program (with kill process).
3. Restart the program that talks to the CAN_ResMgr driver.
After several cycles of the above, the device manager that's doing the spawn() gets EBADF from the spawn() call (either one) and after that spawn() will not work for the device manager until the device manager is killed and restarted.
Again, all the parameters to the spawn() call look fine both before and after the call.Edward Llewellyn2022-01-25T21:36:45Zpost121686: how can i use egl-opengl api on qnx stream?
http://community.qnx.com/sf/go/post121686
i want to render a qnx stream use opengl, but i finally found that i can not create egl surface from qnx stream producer. Does any one know it? thands for attention.liang zhiyong(deleted)2022-01-25T08:54:30Zpost121679: Re: Failed dd clone of compact flash
http://community.qnx.com/sf/go/post121679
> I tried using dd to clone the compact flash
> dd if=dev/sda of=/image.img # copy original compact flash to a file
> dd if=/image.img if=dev/sda #copy file to target compact flash
>
> but when I use the cloned compact flash I get an error that it can't read(?)
> the mounted drive:
> mount -tgnx6 /dev/hd0t179 /d0
> mount: can't mount /d0 (type qnx6)
> mount: possible reason: read only file system.
>
> What am I missing when making the clone?
I'm not sure if this will help but when I get this message it is invariably when using a QNX6 file system on a USB drive. I don't know is a similar approach needs to be taken with your flash drive. I have used compact flash with QNX6 however with no such problems.
The way I fixed it (in QNX7) was by mounting as follows:
mount -t qnx6 -o sync=ignore /dev/usb0t177 /usb (for example)
This allows me to write to the USB drive. Otherwise it's read only.
I imagine something like this might work for you:
mount -t qnx6 -o sync=ignore /dev/hd0t179 /d0Geoff Roberts2022-01-14T23:56:45Zpost121678: Re: Failed dd clone of compact flash
http://community.qnx.com/sf/go/post121678
Sorry, you are right, I did a typo. It should be:
dd if=/image.ing of=/dev/sdaRodger Yoshida(deleted)2022-01-14T19:11:23Zpost121677: Re: Failed dd clone of compact flash
http://community.qnx.com/sf/go/post121677
Is it at typing error or did you really use “if=" twice when writing back to the device?
Sent from my BlackBerry — the most secure mobile device
From: community-noreply@qnx.com
Sent: 14 January 2022 20:00
To: ostech-core_os@community.qnx.com
Reply to: ostech-core_os@community.qnx.com
Subject: Failed dd clone of compact flash
I tried using dd to clone the compact flash
dd if=dev/sda of=/image.img<http://image.img> # copy original compact flash to a file
dd if=/image.img<http://image.img> if=dev/sda #copy file to target compact flash
but when I use the cloned compact flash I get an error that it can't read(?) the mounted drive:
mount -tgnx6 /dev/hd0t179 /d0
mount: can't mount /d0 (type qnx6)
mount: possible reason: read only file system.
What am I missing when making the clone?
_______________________________________________
OSTech
http://community.qnx.com/sf/go/post121675
To cancel your subscription to this discussion, please e-mail ostech-core_os-unsubscribe@community.qnx.com<mailto:ostech-core_os-unsubscribe@community.qnx.com>Gerd Wetzel2022-01-14T19:08:49Zpost121676: Re: Failed dd clone of compact flash
http://community.qnx.com/sf/go/post121676
clarification on the cloning process. The cloning was done a different computer. It was done on a computer running RHE 8. This way the compact flash cards are not "in use".Rodger Yoshida(deleted)2022-01-14T19:06:44Z