Monday, 8 October 2018

QNX /WinCE Porting Journey

Its been 4 years ... It started with a simple question.



 First target was Raspberry . Initial 3 things are necessary  for porting to any OS , 1- Timer 2-UART(just to see whats happening inside the board ) , 3- Interrupt ,normally, the trouble comes with interrupt, load address has to be mapped with boot address properly. I ran into multiple problems in the process.So with no choices left out, ordered Beaglebone(4000Rs) , which is very well supported by QNX.


BBB QNX bsp had no HDMI graphics support .. It can be wiredup with 24X parallel LCD , that  requires additional module & LCD.. I didn't like to spend another 4000Rs on that ... Initially graphics driver was very challenging, later figured out the way to do it. 


Then I came back to raspberry to fix the graphics, In this process ,I found that Photon ,’ the famous QNX UI’ is not supported on ARM version. really I did not expected this .. Instead they were promoting QT. dont know the logic behind this decision .. Technically if photon can run on x86 , it should be possible to make it run on ARM .  Ideally what I wanted was, to move X86 Application code to ARM , which would save probably 400$ to 600$  hardware cost. porting an app from Photon to QT , is something a hell of job .. instead you could rewrite it from scratch ... yes ..First door closed..  I lost my interest on continuing further on this direction..   If Photon was open source, It could have been easily ported to ARM.( QNX guys still keep the ARM version of Photon library , but it crashes immediately )

 Second Raspberry’s Network chip on USB, is something ,as a person from hardware & software background  , I couldn’t digest it .  One could make an Ethernet IP core out of 20K LUT  which probably cost them additional 20cents… Seriously I cant still believe that how they carried away with their decision. Linux driver development is different, you have an army of developers who are ready to spend their day & night for a little pride. That’s not the case for other OS. 

I still have a mouse/keypad/Ethernet baremetal code (well someone did a nice job), which is in C++ .  most divers don’t support C++ .. Someone has to spend another 15 days to make it pure C code . which is another hell of work.. again the success rate is 50 :50 .. No time/ patience to do that. 

QNX graphics is consuming a huge CPU cycle.  Well I wanted to add GPU support , even spent some time on “Lima”  library .. I even  thought of tweaking it .. well ,mali GPU is a closed source library  ,’ Lima ‘guys were trying to reverse engineer it..    Another best method  is making a  wrapper around Linux Mali library  .. I know the complexities.. Linux /QNX  library loading mechanism /file format / function loading/ kernel support  everything is different . but since linux is open source , it should be possible to make it …  one can’t take these kind of work without QNX team support.   Another Door is closed. 


Some one did a nice job on raspberry  porting to WinCE(very basic)..  I wanted to add USB mouse & Keyboard support .. I had a baremetel code for that , but WinCE compiler was very older than the one my code was targeted for…  spend some days on that , don’t want to procced further on that.

 Next I was searching for something cheaper than raspberry, but with proper Network & USB hardware support … there Orange Pi came. I have QNX 6.5 & WinCE 7   , at the time these software were released ,no quad Core ARM Cortex was born.. The compiler is very old , not all the multi core instructions are supported.  

Lessons
1.   Always strict to open source (especially for something you do it as a hobby)
2.   Choose the best hardware or stay close to the well supported OS
 

will continue to do FreeRTOS porting .  Well  I am cleaning the Orange Pi code..  will release the basic code in a week .