I also hooked my gps to my gp2x a while ago. Decoded the nmea strings, drew maps on the screen based on the location. I dont remember exactly if I posted the code but I know I offered it to anyone interested. It was pretty slick, I realized I had maps that were too small in the sense that it was hard to read while driving. So ideally I need to re-do the zoom level. Second to get a usable number of maps I needed a way to automate the "borrowing" of maps. I spent a number of hours on this and then gave up, so basically my project is on hold...It is non-os, meaning no linux, no sdl, no sd card but 64mb of memory minus registers and video and such. Not much to decoding of nmea strings, only one you need bother with intially. Not hard to stay in integer land and avoid floating point.
I found someone selling new receivers on ebay. Bought a receiver, antenna, and some connectors and such from Mouser, all told it was maybe $40 total, probably less. Problem is the connectors were too small for me to manage, tried crimping the wires, dont think I had all of them connected at the same time (although I may have thought I had), and I may have fried the unit, gave up on that. My handheld garmin works just fine though.
If I were to get serious about it (again), I probably would never have thought to mount the gps inside, but would have tried to make an enclosure that mounted to the gp2x, and I would definitely power both the gps and gp2x off the car battery (assuming this is a car naviagion system), and solve that problem.
If you are interested in doing your own mapping software or even nmea on the gp2x I HIGHLY recommend driving around town with a gps in nmea mode feeding something that can log the raw nmea data (like a laptop). then write a windows program (or I can give you one, perhaps already did in this code would have to see) that pushes the logged nmea data out a serial port. The gp2x wont know you are not really driving around town, and you wont need to drive around town to test your software.
Here is my code and binary:
http://www.dwelch.com/gp2x/gcc940-20060725b-gpsplot.zip
I dont know if my code will be much use as an executable. You have to merge it with a number of 600x600 maps borrowed from the same source that I used (not to be named here). The maps are run length encoded, then zlib compressed, a header added, then a bunch put together with a table of contents added, all of this added to the binary and then an .img header put on it so that the ART103 bootloader can run it from an sd card.
It says 940, but that was when I was running on the 940 while linux was on the 920 (ran out of memory for maps fast). The version above is all 920, no linux, no sdl, no sd card (after boot). I made my own gcc to compile it using a modified newlib such that mallocs work (for zlib). This gcc has been posted in another thread...