The following has been working on my original iphone running 2.0.1 firmware:

Prerequisites: iphone must be running sshd. Install openssh from Cydia to accomplish this.


1. Choose any song or wav file. Edit it if you like.
2. Import the file into iTunes, right click and create an AAC version (note: I've tried creating the aac version using faac in linux but the iphone doesn't play it).
3. Single-click the aac version in iTunes and do either CTRL-i or Apple-i to find the filesystem location of the file.
4. Turn on your iphone, figure out its IP address, make sure sshd is running.
5. Use scp on your computer to copy the aac file to the following folder on your iphone: /private/var/stash/Ringtones/ but give the file a name with the extension .m4r, for example:
scp mysong.aac [email protected]:/private/var/stash/Ringtones/CoolSong.m4r
No reboot is necessary, you can immediately choose your new ringtone on the iphone.

I hope this was useful to someone. The other guides I found online didn't help that much, they were too complicated.