XDAndroid FRX06+Fixes

This is my personal build of Android 2.2.2 for HTC Touch Pro 2 (Rhodium) phones, based on the XDAndroid FRX06 source plus my own bug fixes and enhancements. The last update was 2011-06-21.

Please read the Requirements carefully before attempting to download and use my build. If you're using CDMA then you need to read the entire page. As of 2011-05-21 there are a number of kernel-dependent changes in my build. If you're not running my kernel this build will not work.

You use these files at your own risk! I make no guarantees that they will work for you. For all I know they'll blow up your phone. Whatever happens is your responsibility. I didn't ask you to run my stuff, you chose to come looking here yourself. If you have problems with these files I will not help you. It's all on you.

Requirements

  1. Due to some of the changes I've made, you should start with a fresh data.img before using it. If you have an existing data.img, rename it to something else. A new data.img will be created automatically at bootup.
  2. You must use both the rootfs and system images together, neither will work with anything else. If you have problems running them, get logcat logs showing the problem.
       logcat -v time
       logcat -v time -b radio
    
    If you don't know how to use these commands, STOP RIGHT NOW and don't use this build.
  3. Non-Rhodium phones: I have no idea if it will work. Please provide feedback on the XDA forums if you try it.

Change Summary

The majority of my changes are against clones of the XDAndroid repos, so you can find them by starting here:
https://gitorious.org/xdandroid
Some other changes are to components that XDAndroid has not yet forked from the main google code, so I've had to set up personal projects for them. There are currently two repos involved:
https://gitorious.org/hycdroid
https://gitorious.org/rilspy/hardware_ril
My kernel changes can be found here:
https://gitorious.org/~hyc/linux-on-qualcomm-s-msm/hycs-linux-msm

All of my changes exist in those four places, so you can examine them in detail if you wish. Here's a brief summary:

  1. First and foremost, a fixed RIL library. This is what first got me started into developing XDAndroid code, and is probably the most important change because it fixes the worst stability issues. The libhtcgeneric-ril.so here fixes all of the Sleep-of-Death incidents (SoDs) I had. It fixes network-location for GSM, fixes issues with data connection reliability, and adds 100% new support for real CDMA mode, including SMS/MMS support. It also supports mode switching for world phones, allowing them to dynamically switch between GSM and CDMA.
  2. Leveraging all of these RIL improvements required me to touch/fix a lot of other elements in the system and rootfs. Along the way I have optimized the rootfs init script so that it doesn't needlessly recreate many system files on every reboot. By minimizing the needless rewrites I have also eliminated a number of bind mounts from the setup. The rootfs I have bundled here incorporates F22's latest changes too, for keymap enhancement and such.
  3. I've also added some performance enhancements on top.
    1. I've set the SDcard readahead to 2MB (up from the default of 128KB).
      readahead discussion
    2. I've patched the MediaScanner to only scan certain directory trees on the SDcard for media, instead of scanning the entire card.
      Taming the MediaScanner
  4. Other miscellaneous stuff:
    1. data connections now use /system/bin/pppd instead of /bin/pppd. Dunno where the rootfs /bin/pppd came from, it was quite old. It's now deleted.
    2. the wifi device name used to be tiwlan0 for TI devices and eth0 for Broadcom devices. They're now both renamed to just wlan0. This change was done to help eliminate some of the pointless rewrites/bind mounts in /init. If you tried to use this image with your existing data.img, you need to edit the name in
       	/data/misc/wifi/wpa_supplicant.conf
      
    3. Hardware 3D acceleration, using /system/lib/egl/libGLES_qcom.so. Not entirely sure where this library came from, but it's a GLES 1.1 library that has been floating around for a while.
      OpenGLES v1.1 update
    4. Gallery3D - with the accelerated 3D, Gallery3D is actually pretty usable. The only problem is the screen gets garbled if you rotate orientation while it's running. I've found a new Gallery3Dr.apk that fixes the rotation problem. It came from here. If you prefer the original 2D Gallery, go into /system/app and rename Gallery3Dr.apk to Gallery3Dr.apk.O and rename Gallery.apk.O to Gallery.apk.
    5. Better video codecs - not entirely sure where these came from either. /system/lib/libOmx*
      Note - I've patched these; the H264 decoder now works for up to 640x368 resolution (instead of the original 480x368) and the MPEG4 decoder now works for up to 720x400.
    6. Windows Media codecs - these seem to be part of the regular build, but were omitted from the FRX06 image. I don't know why, just put them back in.
    7. I've added the game Quake (version 1) to the system. Read about it here
    8. Superuser control - I've added the Superuser.apk to the system so that you're prompted whenever any app requests root access.
  5. if you need to customize any system properties before first boot, just create a local.prop file on your SDcard (in the same place as haret.exe etc.) with the properties you want. It will be copied into /data/local.prop at boot time.

CDMA support

You will need to set an APN for your CDMA network. At the very least you will need to provide the MMS settings, otherwise you will not be able to send any MMSs. If your network operator uses usernames and passwords for the data connection, you will also have to set these in the APN.

In this build Sprint MMS is fully supported. Sprint's MMS servers have a number of bugs in how they format messages but I've worked around all of them. The details are summarized here.

Previous versions of my build required you set a number of properties to get CDMA working. All of these are now set automatically, just install the build and it should work without any further tweaks.

For historical reference - you can still set these properties manually if you want to, but you should not need to:

  1. For basic CDMA operation:
    	ro.telephony.default_network = 4
    	ro.cdma.home.operator.alpha = Sprint
    	ro.cdma.home.operator.numeric = 310120
    
  2. For World Phone functionality:
    If you have a RHOD400 or RHOD500 (Sprint or Verizon) you can toggle between GSM and CDMA mode dynamically. My ril used to require you to manually set this property
    	ro.ril.world_phone = true
    
    In previous builds it may have used
    	ro.telephony.world_phone = true
    

Kernel-Dependent Changes

As of 2011-05-21 there are a number of kernel-dependent features added to this build. Until the relevant kernel patches are merged into the mainline autobuild, you must use my kernel otherwise this system will not work for you.
  1. Keyboard and button backlight: I've removed the keyboard backlight support from the kernel because I've enabled it in userland instead. The kernel didn't have button light support before but I've also enabled it in userland. (2011-05-28) I've refined my earlier keyboard backlight patch, it now supports variable brightness and soft fade. Details are here
  2. New Audio Routing: This build has JB's new audio libraries. I've bundled the audio parameter .csv files from my phone. If they don't work for you, you can use your own in /sdcard. Details are here. The kernel patches I used are here.
  3. Bluetooth support: Only for Rhodiums. I've bundled the BCM4325.hcd file from my phone. If it doesn't work for you, you'll have to grab your own and replace what I have in /system/etc. Details are here. (The kernel side of this has been in the mainline autobuild for quite a while, actually.)
  4. SCBS: Jon Pry's Super Cool Battery Software. All of his kernel and rootfs changes are here, but you will still need to install his BABS.apk yourself. The scbs daemon is not run automatically in the init script. It's set as a service in /init.rc and the service is disabled by default. If you want to use it, issue the command "start scbs" from a command shell. I've found that running it causes very slow wakes, so I am no longer using it. The full info is here. The kernel patches I used are here.
  5. Kexec support: (2011-05-28) Kexec lets you directly boot a new kernel from the current kernel, totally bypassing the bootloader. It allows you to reboot quickly when you've just installed a new kernel. While kexec support has existed in Linux since 2004, our kernels will crash when started by kexec unless they've been properly patched. My kernel patches are here. I've also patched userland to add Kexec and Reboot options to the shutdown menu. (You should still use regular Reboot if you're restarting due to problems e.g. hanging hardware. Kexec should only be used when things are working normally and you just want to switch to a newly installed kernel.) Like HaRET, kexec only works if you are *not* overclocking.
  6. Faster 3G data: (2011-06-21) Jon Pry's smd_tty fix (to avoid some errors that could cause kernel panics), with further enhancements by me to improve performance. My tests show this is ~40% faster/more efficient than before. The details are here.
  7. RHOD400/500 GSM fix: (2011-06-21) Latest fix from autobuild tree. Fixes loss of radio when phone goes to sleep. The bug only affects RHOD400/RHOD500, and only when using GSM.

Further reading

See this post (and the thread in general): http://forum.xda-developers.com/showpost.php?p=13098254&postcount=359
Discussions about the rootfs have been occurring here: http://forum.xda-developers.com/showthread.php?t=935710

The download links are hidden in the Change Summary. I don't appreciate people using my work without reading and following the directions. If you've read all the way down to here, congratulations. You'll need to run my kernel and modules. I don't know when the fixes in them will get to the autobuild. Note that in my kernel, the LED is solid green while a wakelock is set, and blinking green when the phone is fully asleep. This kernel should be behaving very well, although running scbs still slows down wakes.