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
-
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.
-
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.
- Non-Rhodium phones: I have no idea if it will work. Please provide feedback on
the XDA forums if you try it.
So far I've heard of success with my new RIL on Diam100 and Raph100, so it
appears to be in good shape for all MSM models.
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:
- 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.
- 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.
- I've also added some performance enhancements on top.
- I've set the SDcard readahead to 2MB (up from the default of 128KB).
readahead discussion
- 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
- Other miscellaneous stuff:
- 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.
- 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
- 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
- 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.
- 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.
- 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.
- I've added the game Quake (version 1) to the system. Read about it
here
- Superuser control - I've added the Superuser.apk to the system so that you're
prompted whenever any app requests root access.
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:
-
For basic CDMA operation:
ro.telephony.default_network = 4
ro.cdma.home.operator.alpha = Sprint
ro.cdma.home.operator.numeric = 310120
-
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.
- 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
- 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.
- 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.)
- 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.
- 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.
- 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.
- 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.