I use a standalone GPS logger (not a nav device, not a smartphone) for this purpose.
My model is a Holux M-1000C (not really a recommendation but I can't complain -- reasonably priced, 20+ hours of logging on one battery, spare batteries readily available as it uses one of the popular Nokia phone batteries).
There's plenty of options, just choose whatever suits you: http://www.bt747.org/compatible_gps
I download the track and convert it to GPX using http://www.bt747.org/
-- requires getting used to as it has its quirks but does the job.
I then geotag the photos using Exiftool, http://www.sno.phy.queensu.ca/~phil/exiftool/
. It cross references the dates/ times in the EXIF data in CR2 and JPG with the GPX file and updates the EXIF with location.
Alternatively, you can use Lightroom for this task (4.0+), it will also geocode (provide address for lat/long coordinates) but it won't update the actual CR2's though, I believe.
The benefits of this method are that you can geotag photos from multiple cams this way and that you can use the track for other purposes. FWIW, you can get the logger to log things like altitude and velocity which make a nice addition to photos shot from airplanes -- not sure if Canon's GPS module does this.