The multimedia project I work on at QNX is now available on foundry27. Foundry27 is QNX’s development portal where you can find software projects actively being developed.
Audis new navigation system includes 3D textured buildings.
(Credit: Audi)
Audi’s new Q5 sports navigation graphics empowered by chip maker Nvidia, along with a radically updated dashboard interface, which Audi calls the Multimedia Interface, or MMI. Integrated into the new navigation system is an automotive grade Nvidia …
There are lots of other advanced features that it shows as well such as voice integration, hands free support for bluetooth phones. I hope a few of you have a chance to see it.
The article also has some interesting stats on hard drives and bluetooth integration in cars. The head units in cars these days are as powerful as many desktop computers and have even more peripherals.
Now unfortunately, the one thing the article has completely wrong is that “Microsoft Automotive Platform … offers the most universal integration”. If I were to compare MS Auto to QNX Car, I’d like to point out:
CD’s are not dead. MS Auto currently doesn’t do CDs, or CD Changers. QNX is shipping in many cars today with that feature. We also support MP3-CD’s
Ripping CDs, or USB Sticks. QNX’s MME manages all this for you so that when you ask to rip a CD or list of USB tracks to your hard drive it will do that as fast as possible without interrupting your playback. And if you power off your car, it’ll continue where it left off.
Embedded hard drive support: without ripping, do you support a hard drive?
Internet Radio integration.. how connected are you without the internet?
QNX Car also has the same “most universal integration” features that MS has: USB Mass Storage, iPod, PlaysForSure, Zune, Bluetooth.
QNX Car is shipping in many other makes than Ford. In fact the last stat I heard is that it is in over 40% of the 2009 models! I should talk to marketing to get a completely accurate number.
As usual, Microsoft has lots of dollars to spend on advertising, but the real question is how good is their product? QNX has always been quality driven, and therefore is chosen to run space equipment, nuclear power plants, and the fancy features in your car.
I spent some time getting QNX working on Parallels 3.0. Its working well with the exception of video which I know can work, I just haven’t spent the time to get it going yet. If you get it working please comment on this post with how to do it.
First off, why use Parallels now that VMWare is working? I use Parallels instead of VMWare because it is much faster for what I use it for. I have all my work on my mac and export that folder using nfs to my virtual machines. On my virtual machines I do builds as well as run and test my code. I did a quick test comparing QNX 6.3.2 building the multimedia engine and it took 9.5 minutes on VMWare Fusion 1.1, it took Parallels slightly less than 3 minutes to do the same thing. I also find a significamarknt difference in performance while running my application also.
Issues:
There are 3 issues with QNX 6.3.2 running on Parallels out of the box:
1. Kernel doesn’t work
2. Network driver (ne2000) doesn’t work
3. Graphics detect vga mode only
There is only one issue with running QNX 6.3.2 on VMWare Fusion out of the box:
1. USB doesn’t work
I’ve got problems one and two fixed for Parallels, here are the steps to get yourself a QNX 6.3.2 virtual machine running on Parallels 3.0 build 5582. There are two floppy images you’ll need to get for this off my server:
Choose the amount of RAM to give QNX. I choose 300.
Create a new hard disk image. I make mine 3000GB expanding.
Shared networking
Give it a name
Optimize for VM
Click more options, then select ISO image, then choose the image you got from step 1.
uncheck “start guest operating system”
Click menu item “Edit” then “Virtual Machine…”
Click “Add…” I add a usb adapter
Click “Options” Then click the “Booting” tab on the right. Choose “Floppy, Hard Disk, CDROM”
Click “Floppy” on the left. Check the “Connect at startup” checkbox. Click the “…” for the image file and choose the QNX632ParallelsInstall.fdd file.
Click OK. Then start the VM.
Install QNX:
Follow the steps on the screen. You’ll need your license key to perform the installation. Make sure to install to the complete hard drive. Myself I install all the tools and GPL utilities. When it asks you to reboot, just turn off the virtual machine by hitting the red stop button on the top right.
Prepare the VM for regular booting:
Click “Edit” | “Virtual Machine…”
Click Floppy
Check the “…” for the image file and choose QNX632ParallelsBoot.fdd
Click OK. Start the virtual machine.
This part you need to do quickly. While the virtual machine is booting, click on the black part where the VM text will come up to put your cursor into it. Then when it asks if you want to enter boot options by hitting the space key, hit the space key on your keyboard.
Press F5 to have it drop to a shell during boot
Type these commands in the shell to replace the stock 6.3.2 network driver with one that works included in the boot image:
cd /lib/dll
/bin/cp devn-ne2000.so devn-ne2000.so.bak
/bin/cp /proc/boot/devn-ne2000.so devn-ne2000.so
Hit CTRL-D twice
It should continue booting. Only the vga option will present itself at first, continue using these settings.
I’ve always found it a lot of work to install open source software on QNX.. until today. pkgsrc is fantastic!
From the QNX community website:
‘pkgsrc’ is a framework for building third-party software and managing the resulting packages. Originally developed on NetBSD, pkgsrc has evolved according to NetBSD’s principle of portability and currently supports 13 different platforms (hopefully QNX will be number 14). Over 6400 packages are in the base distribution.
This handles dependencies and can build packages on your desktop, very important for a good UNIX system. So far I’ve got bash, openssh, and perl installed… more to follow
If you haven’t given it a shot it is quite simple to get started with, you can find the instructions on the wiki.
I had fun writing my first unblock handler in a resource manager. unblock handling is required when clients are currently blocked on a resource manager service and are requesting to be unblocked because of being hit by a signal or other reasons. The kernel will detect that they’d like be unblocked and will send a pulse to the server passing the rcvid and ocb that need to be unblocked and that resource manager can decide what to do with it.
So the reason I was adding this was to support timeouts on the API. This is relatively easy to do from a client API:
Supporting this in a server is more difficult. The server is already in the middle of processing the request, potentially
already blocked itself. Ideally we could cancel the request but sometimes that isn’t possible.
Lets just say you can, your unblock handler could be as simple as:
int io_unblock(resmgr_context_t *ctp, io_pulse_t *msg, RESMGR_OCB_T *ocb)
Lots of exciting things coming from QNX these days. QNX released several new technical videos to YouTube today. Mine included is posted there although it isn’t that technical. Its good to start with an overview and I’ll get some more done in the future I’m sure.
My goals for setting up my development environment are:
– Keep code files off of virtual machines so that I can work on my laptop without killing the battery
– have full access to tools like gcc and gdb
– not too worried about using the IDE since I typically work with another editor
For a while it was difficult since I picked up one of the first Macbook Pro’s and at that time there were no virtual machine environments for it. Eventually came Parallels and then VMWare.
I started with setting up Mac OS X Tiger to be an NFS file server. Leopard is going to use /etc/exports to make this easy to do, but until then while you’re running Tiger your best bet is to use NFS Manager. I create a /w folder which I put all my source code checkouts and QNX stages into and when I mount it on my virtual machine it gets the same /w pathname. This way it doesn’t matter which system I’m on, its /w either way.
In my experience so far, parallels is very fast. Even single CPU it out performs VMWare Fusion 1.0 running QNX 6.3.0. Keep in mind however that parallels doesn’t support QNX and the standard 6.3.2 neutrino doesn’t run on Parallels. Colin Burgess managed to get the kernel running on Parallels and that worked well for a while. io-audio, io-net, io-graphics, and io-usb all work well on Parallels. The only problem is that its gotten quite unstable for me, I’m not sure if its because of a Parallels update that I’ve installed or not, but io-audio seems to hang now and then, and in addition parallels itself crashes fairly frequently.
VMWare is stable, io-audio, and io-net work. It has SMP which is good for testing multi-threaded access to applications. The downsides is that its a dog… it is very slow to compile compared to Parallels, somewhere in the order of 5-8 times slower which is very noticeable. And io-usb gives errors but I haven’t spent much time at all trying to get this working. Because parallels has gotten so unstable I’m going to spend a bit more time trying to get this working better.
Many months ago I had built the QNX toolchain on Mac OS X so that I could build QNX applications directly on Darwin. I’m going to take a crack at this again. The reason why I went away from this in the past was because I had only compiled GCC 3.3.4 and we typically ship 2.9.53 binaries so my executables were often incompatible. Parallels back then was very fast and stable and there was no big performance difference while building small apps on the virtual machine. Now that things have gotten so unstable or slow depending on virtual machine I choose I’m going to rebuild the toolchain for Darwin and do testing in VMWare.
One thing that is very nice about this problem, is that I have a choice