[Omni 5.1][Nexus 5] Homemade fails to boot; QSEECOM, librpmb.so - Omni Q&A

After a dealing with selling my house and moving into a new one, I've finally got my build system back together and connected to the Internet. This Ubuntu machine has been successfully building OmniROM 4.x for a couple devices and 5.1 for Nexus 5 for some time, but now I have a puzzle.
The "nightly" version of OmniROM boots and runs fine on the hardware. However, when I try to boot the "homemade" version of 5.1, it fails to get very far in the process. I've already pulled down a fresh repo, installed the factory drivers from https://developers.google.com/android/nexus/drivers (originally 5.1 LMY48B, but now have also tried fresh copies of 5.1 LMY48M) and everything appears to build properly.
Looking at the two logcat outputs, the earliest hints of error seem to be the inability to load a key library
NIGHTLY:
Code:
03-31 16:27:29.726 D/QSEECOMD: ( 179): qseecom listener services process entry PPID = 1
03-31 16:27:29.726 E/QSEECOMD: ( 179): Listener: index = 0, hierarchy = 0
03-31 16:27:29.733 D/QSEECOMD: ( 179): Init dlopen(librpmb.so, RTLD_NOW) succeeds
03-31 16:27:29.733 D/QSEECOMD: ( 179): Init::Init dlsym(g_FSHandle rpmb_init_service) succeeds
HOMEMADE:
Code:
03-31 15:07:02.586 E/QSEECOMD: ( 176): Listener: index = 0, hierarchy = 0
03-31 15:07:02.586 E/QSEECOMD: ( 176): Init dlopen(librpmb.so, RLTD_NOW) is failed....
03-31 15:07:02.586 E/QSEECOMD: ( 176): ERROR: RPMB_INIT failed, shall not start listener services
That stanza, or one very similar is spattered throughout the homemade logcat.
Looking at the homemade version, "find / -name librpmb.so" returns nothing.
For the nightly version, it is found at /system/lib/librpmb.so
I don't see it in the output directory, but it is in the vendor source directory
Code:
[email protected]:~/devel/build/hammerhead-5.1/out/target/product/hammerhead$ find . -name librpmb.so
[email protected]:~/devel/build/hammerhead-5.1/out/target/product/hammerhead$ find $ANDROID_BUILD_TOP/vendor -name librpmb.so
/home/jeff/devel/build/hammerhead-5.1/vendor/qcom/hammerhead/proprietary/librpmb.so
Digging further, vendor/qcom/hammerhead/device-partial.mk does not include librpbm.so (but does, for example, include qseecomd)
I don't see anything in vendor/qcom/hammerhead/ that would copy over librpmb.so
Looking at the installed nightly rom, /system/lib/librpmb.so is there (and has the same md5 as that from the qcom driver distributions)
Has anyone seen this before? Any suggestions on resolution? (other than the obvious, "Well, just edit the qcom device-partial.mk")
I'm sort of stuffed on doing any dev work until I can get a working baseline build again...
Thanks,
Jeff

jeffsf said:
After a dealing with selling my house and moving into a new one, I've finally got my build system back together and connected to the Internet. This Ubuntu machine has been successfully building OmniROM 4.x for a couple devices and 5.1 for Nexus 5 for some time, but now I have a puzzle.
The "nightly" version of OmniROM boots and runs fine on the hardware. However, when I try to boot the "homemade" version of 5.1, it fails to get very far in the process. I've already pulled down a fresh repo, installed the factory drivers from https://developers.google.com/android/nexus/drivers (originally 5.1 LMY48B, but now have also tried fresh copies of 5.1 LMY48M) and everything appears to build properly.
Looking at the two logcat outputs, the earliest hints of error seem to be the inability to load a key library
NIGHTLY:
Code:
03-31 16:27:29.726 D/QSEECOMD: ( 179): qseecom listener services process entry PPID = 1
03-31 16:27:29.726 E/QSEECOMD: ( 179): Listener: index = 0, hierarchy = 0
03-31 16:27:29.733 D/QSEECOMD: ( 179): Init dlopen(librpmb.so, RTLD_NOW) succeeds
03-31 16:27:29.733 D/QSEECOMD: ( 179): Init::Init dlsym(g_FSHandle rpmb_init_service) succeeds
HOMEMADE:
Code:
03-31 15:07:02.586 E/QSEECOMD: ( 176): Listener: index = 0, hierarchy = 0
03-31 15:07:02.586 E/QSEECOMD: ( 176): Init dlopen(librpmb.so, RLTD_NOW) is failed....
03-31 15:07:02.586 E/QSEECOMD: ( 176): ERROR: RPMB_INIT failed, shall not start listener services
That stanza, or one very similar is spattered throughout the homemade logcat.
Looking at the homemade version, "find / -name librpmb.so" returns nothing.
For the nightly version, it is found at /system/lib/librpmb.so
I don't see it in the output directory, but it is in the vendor source directory
Code:
[email protected]:~/devel/build/hammerhead-5.1/out/target/product/hammerhead$ find . -name librpmb.so
[email protected]:~/devel/build/hammerhead-5.1/out/target/product/hammerhead$ find $ANDROID_BUILD_TOP/vendor -name librpmb.so
/home/jeff/devel/build/hammerhead-5.1/vendor/qcom/hammerhead/proprietary/librpmb.so
Digging further, vendor/qcom/hammerhead/device-partial.mk does not include librpbm.so (but does, for example, include qseecomd)
I don't see anything in vendor/qcom/hammerhead/ that would copy over librpmb.so
Looking at the installed nightly rom, /system/lib/librpmb.so is there (and has the same md5 as that from the qcom driver distributions)
Has anyone seen this before? Any suggestions on resolution? (other than the obvious, "Well, just edit the qcom device-partial.mk")
I'm sort of stuffed on doing any dev work until I can get a working baseline build again...
Thanks,
Jeff
Click to expand...
Click to collapse
Weird. I still haven't gotten completely back from vacation (have a friend visiting now) so I haven't built Omni in a while...
I'll try to build it when they leave, not sure when that will be though.
@XpLoDWilD and @maxwen - Could this potentially be one of those weird messes where our source trees have an issue but the build server hasn't properly synced? This wouldn't be the first time we've had a "why the hell didn't this break months ago" issues like some issues @Jakew02 had last winter.

More digging reveals that between 5.0 (LRX21O) and 5.1.1 (LMY48M) the following files appear to be added (all in 5.1.0 LMY47D aka 1743759):
vendor/qcom/hammerhead/proprietary/librpmb.so
vendor/qcom/hammerhead/proprietary/libssd.so
vendor/qcom/hammerhead/proprietary/qmi_fw.conf​
On the other hand, vendor/qcom/hammerhead/device-partial.mk has apparently not changed since at least LRX21O
fgrep suggests that libssd.so is referenced in qseecomd (as is librpmb.so)

jeffsf said:
More digging reveals that between 5.0 (LRX21O) and 5.1.1 (LMY48M) the following files appear to be added (all in 5.1.0 LMY47D aka 1743759):
vendor/qcom/hammerhead/proprietary/librpmb.so
vendor/qcom/hammerhead/proprietary/libssd.so
vendor/qcom/hammerhead/proprietary/qmi_fw.conf​
On the other hand, vendor/qcom/hammerhead/device-partial.mk has apparently not changed since at least LRX21O
fgrep suggests that libssd.so is referenced in qseecomd (as is librpmb.so)
Click to expand...
Click to collapse
Better use the DonkeyCoyote repo, at least this is what Jenkins does afaik: https://github.com/DonkeyCoyote/proprietary_vendor_lge/tree/android-5.1/hammerhead

golden-guy said:
Better use the DonkeyCoyote repo, at least this is what Jenkins does afaik: https://github.com/DonkeyCoyote/proprietary_vendor_lge/tree/android-5.1/hammerhead
Click to expand...
Click to collapse
Didn't realize he wasn't... librpmb was added with https://github.com/DonkeyCoyote/pro...mmit/1a71e5c4d257c4883e1dea461fd893df13e0413c
AOSP's official binary blob distros often are missing stuff that is necessary for some capabilities and CAN be found in the factory images.
We don't mention DC in any official documentation for legal liability reasons... We probably need to update the extract-files scripts for ALL of our devices...

Related

[GUIDE][ICS/JB/common] Definitive FAQ for newest miui porting

I know there is a Proxuser's guide - "How to Port MIUI v4 for your device" and GREAT thread intended to eliminate porting quirks.
My goal is to collect all the experience we got in that thread, which could be helpful for new users porting newest releases of miui.
FAQ assumes questionaire, but my format will be more look like a guide but as collection, it could be treated as FAQ.
Structure will be Stage-divided to ease of use.
Stage 1. Initial port
Let's start with first moment - bases choice.
Under base I will mean rom which could be used to port miui and also miui release you choose.
Let's assume - just "Base" will mean rom for your device with ICS/JellyBean, such as Cyanogen Mod or AOKP or AOSP and their variations(I don't know if it is possible to use stock rom for porting and wouldn't recommend it), when "MIUI base" means any miui rom you prefer (my preference and advice - MIUIandroid crespo [nexus S] or MIUIandroid maguro (Galaxy Nexus) release). You could use any miui base but results will be unpredictable and may very vary from guide stands, for those cases I prepared common debugging stage, which will help to eliminate bugs I haven't listed.
MIUI for nexus S and Galaxy Nexus are now upgraded to Jelly Bean. That actually means - you couldn't use their miui bases to port ICS roms(which still under support).
For those who stuck at ICS the situation is as follows:
If version number is not crucial, you might just stick at MIUI 2.8.10 http://weedy.ca/miuiandroid/ and use old kind Nexus S/Galaxy Nexus roms. In guide I will describe steps right for you with mark "ICS-only".
If for you version number is crucial - stop reading this guide and just use PatchROM (though rom will be based on Stock rom).
There is third variant, but it needs a device with nearly same specs:
you might just replace some files in miui-supported device rom with files from your stock rom. For now that case is only tested on xperia 2011 products (play,live with walkman,ray, mini, pro, mini pro etc) - arc s [lt18i] miui base and xperia 2012 (u,p, sola etc) - S miui base.
When base choosen, start to port:
Copy unpacked base rom (so set of folders) to any folder you prefer (let's name it "MIUI"), it usually contains:
system - folder on which we will work more often
data - may contain something necessary such as first boot scripts, config files etc.
META-INF - contains certificates and signature for signcheck, updater-script(we also will work on it) update-binary (updater-script command processor)
boot.img, kernel and ramdisk packed together, touch only if kernel should be changed to something more recent or if your preference is not similar with base rom maker's, but keep in mind that you have to place modules that provided with kernel to lib/modules [or in place where .ko files are]
Starting with system:
delete:
app
framework
media
fonts
then open miui archive and extract those folders to system. Don't close archive.
Open lib folder in system to add from the same archive:
content-types.properties [for themes]
liblbesec.so [for LBE Guard - MIUI superuser]
liblocSDK_2.2.so [for baidu location service, prevents network location provider FC]
JellyBean-only:
libjni_resource_drm.so [themes DRM, actually involves download online themes screen]
Open etc folder in system to add from the same archive:
yellowpage.db [Phone calls ability]
ICS-only
telocation.td (as for nexus S and telocation.db in others) [location provider dependency]
JellyBean-only:
telocation.idf (possible new telocation.db)
go to permissions folder in etc to add:
com.nxp.mifare.xml [NFC]
miui-framework.xml [activates miui framework, near all apps won't work without that]
com.google.android.media.effects.xml [gallery]
com.google.widevine.software.drm.xml [something also related to google may affect play market]
com.google.android.maps.xml [gmaps]
Open xbin folder in system to add from the same archive:
su [replace, don't even use base one!]
invoke-as [binary with near busybox and toolbox functionality, need everywhere in system, mostly in themes and SU]
that's all about additional files. Devices which don't have NFC(Near Field Communication chip) also shouldn't have Nfc.apk in app folder!
Let's modify build.prop then, to add:
Code:
ro.build.id=MIUI
ro.build.display.id=MIUI
ro.build.version.incremental=2.x.x
ro.config.ringtone=MI.ogg
ro.config.notification_sound=FadeIn.ogg
ro.config.alarm_alert=GoodMorning.ogg
ro.config.sms_received_sound=FadeIn.ogg
ro.config.sms_delivered_sound=MessageComplete.ogg
ro.build.version.incremental points to MIUI you port, so specify it.
At your base you will most likely see these lines
Code:
ro.config.ringtone=
ro.config.notification_sound=
ro.config.alarm_alert=
ro.config.sms_received_sound=
ro.config.sms_delivered_sound=
are filled with ringtones that only base have, soo just change them as MIUI do have different ringtone set.
Initial port done, in system part, let's talk about Updater-script:
any release of miui you port should have that line:
Code:
set_perm(0, 0, 06755, "/system/xbin/invoke-as");
for example you have that bunch of code [which is mostly common for CM9 release]:
Code:
set_perm_recursive(0, 0, 0755, 0644, "/system");
set_perm_recursive(0, 2000, 0755, 0755, "/system/bin");
set_perm(0, 3003, 06755, "/system/bin/ip");
set_perm(0, 3003, 02750, "/system/bin/netcfg");
set_perm(0, 3004, 02755, "/system/bin/ping");
set_perm(0, 2000, 06750, "/system/bin/run-as");
set_perm_recursive(1002, 1002, 0755, 0440, "/system/etc/bluetooth");
set_perm(0, 0, 0755, "/system/etc/bluetooth");
set_perm(1000, 1000, 0640, "/system/etc/bluetooth/auto_pairing.conf");
set_perm(3002, 3002, 0444, "/system/etc/bluetooth/blacklist.conf");
set_perm(1002, 1002, 0440, "/system/etc/dbus.conf");
set_perm(1014, 2000, 0550, "/system/etc/dhcpcd/dhcpcd-run-hooks");
set_perm(0, 2000, 0550, "/system/etc/init.goldfish.sh");
set_perm_recursive(0, 0, 0755, 0555, "/system/etc/ppp");
set_perm_recursive(0, 2000, 0755, 0644, "/system/vendor");
set_perm_recursive(0, 2000, 0755, 0755, "/system/xbin");
set_perm(0, 0, 06755, "/system/xbin/librank");
set_perm(0, 0, 06755, "/system/xbin/procmem");
set_perm(0, 0, 06755, "/system/xbin/procrank");
set_perm(0, 0, 06755, "/system/xbin/su");
set_perm(0, 0, 06755, "/system/xbin/tcpdump");
set_perm_recursive(0, 0, 0755, 0644, "/system/vendor/firmware");
set_perm(0, 2000, 0755, "/system/vendor/firmware");
set_perm_recursive(0, 0, 0755, 0555, "/system/etc/init.d");
So line I pointed should be somewhere there, for example:
Code:
set_perm(0, 0, 06755, "/system/xbin/librank");
set_perm(0, 0, 06755, "/system/xbin/procmem");
set_perm(0, 0, 06755, "/system/xbin/procrank");
set_perm(0, 0, 06755, "/system/xbin/su");
[B][SIZE="4"]set_perm(0, 0, 06755, "/system/xbin/invoke-as");[/SIZE][/B]
set_perm(0, 0, 06755, "/system/xbin/tcpdump");
IF you have problems with SU, that line may help:
Code:
symlink("/system/xbin/su", "/system/bin/su");
paste it somewhere after
Code:
symlink("busybox"[B][COLOR="YellowGreen"][later big code bunch like "/system/xbin/[" etc][/COLOR][/B]
but before
Code:
unmount("/system");
Your own MIUI is now ready to be flashed, but only, if your device is SOOO near on hardware part with MIUI base
For those who didn't met that rule I prepared next parts - framework mods and common debugging and troubleshooting. See next 2 posts.
Stage 2
Recently I had an Acer Liquid MT[now bricked], which is Qualcomm S2 device(msm7x30) and my guide defines also assume you have device with Qualcomm inside. But some of guide moments[first stage is not exception] are common for most devices with other chips.
I also used Cyanogen Mod 9 as base, so some of these defines wouldn't be applicable to your porting using AOSP base.
That was on ICS, and I will count that in while describing for those who don't care about miui version and porting something before MIUI 2.8.10.
Now I have MIUI-supported Xperia Arc S. But its MIUI is based on stock rom (such a shame). So as FXP provides us CM 10, I started to port over it to bring latest and greatest of MIUI jellybean on that device. So again Qualcomm, but with stock ICS, which means lesser quirks on porting. I again will assume you are on Qualcomm but I have to say that all defines of this stage are nomore device-specific.
Returning to guide:
Stage 2. Framework mods to make it boot
Rom not booting? - that is most likely a framework issue, that is remained from Nexus S/Galaxy Nexus. But don't run to base to grab all framework and paste it to base, else you will have a base rom instead of miui
My suggestion is port.
For those who are new in apktool disassembling, I suggest to read something like that http://forum.xda-developers.com/showthread.php?t=1511730 or that http://forum.xda-developers.com/showthread.php?t=1752201 or google it to understand common principles of work.
For framework-res.apk mods we will use Connor-apktool and scripts for ease of use: http://code.google.com/p/android-apktool/downloads/list (choose only dependencies for your platform, don't replace AAPT from them). Always choose latest one!
Let's assume again:
disassemble something - usually means issuing
Code:
apktool d [[COLOR="YellowGreen"]full name of apk or jar[/COLOR]]
command on file I specify if more info not specified
assemble something - usually means issuing
Code:
apktool b [[COLOR="YellowGreen"]disassembled apk or jar folder without .apk in name or with ".out" at the end for jars[/COLOR] ]
command on file I specify
better way to assemble is drag assembled classes.dex(or resources.arsc and xmls at rest folders in case of assembling framework-res.apk) from [file you modified]/build/apk to original file, opened as archive (in windows you also have to check out a compression rate to make it the same as there were before dragging, which prompts to you as compression method like "Normal" and "Store")
smali - piece of code on dalvik bytecode language, are part of nearly any disassembled file
smali tree/just "tree"/"*.smali" - usually means set of files with the same name in the beginning but with different end(usually with $ before), for example
Code:
RIL*.smali means:
[LIST]
[*]RIL.smali
[*]RIL$1.smali
[*]RIL$RILReceiver.smali
[*]RIL$RILSender.smali
[/LIST]
Let's start with framework mods:
All frameworks are located at system/framework.
framework.jar
Mostly issues are produced there.
Disassemble framework.jar from MIUI port you are working so you will see framework.jar.out. Go to smali folder in it. Later all actions we will produce from there (except assembling).
First replace some files from your base framework.jar (fist disassemble base rom's framework.jar and move all files I will specify, replace if asked).
Listing all smali I had to replace in framework.jar:
ICS-only:
Code:
[B]android/os/Power.smali[/B]
org/codeaurora/Performance.smali
[B]android/media/MediaRecorder*.smali[/B]
android/graphics/Paint.smali
android/os/Environment.smali
android/view/HardwareCanvas.smali
[B]android/net/wifi/WifiNative.smali[/B]
Common:
Code:
android/view/Gles20*.smali (not only canvas but all with gles20 at the beginning)
[B]android/hardware/Camera*.smali[/B]
[B]android/server/BluetoothA2dpService*.smali[/B]
[B]android/content/res/PackageRedirectionMap*.smali[/B]
[B]com/android/internal/telephony/RIL*.smali[/B]
JellyBean Only:
Code:
[B]android/bluetooth/HeadsetBase*.smali[/B]
[B]com/android/internal/app/ActivityTrigger.smali[/B]
[B]android/webkit/HTML5*.smali[/B]
[B]android/webkit/SelectActionModeCallback[/B]
I highlighted those could be common for all chips, not only for Qualcomm ones.
But some of smalis are not following common rules.
The weirdest exception of that - WebviewCore. If you replace only WebViewCore tree, Gmail, Facebook, Browser, HTML viewer and all that is using this class WON'T WORK. What was my solution is to replace Webview*.smali tree, so I met all dependencies that class may work with.
ICS-only:
That class, and Sound Recorder are in need of one property from SystemProperties.smali, which is located at android/os/.
But don't run to base to take it and replace immediately as you read It have to be patched
end of ICS-only
I highlighted it as ICS-only as you will just replace it on JellyBean - it's now hard to patch, but easy to replace.
>>Common Remark about patching smalis
Patching (usually named diffing, diff, that means "find differences and eliminate them") in our context is a process of comparing two files and adding contents of one of them to another and not replacing anything. Our diff process will consist of base->miui content addition so smali we modify could live in dual life - for your base and for MIUI remained framework. For start of diff you should have both base and miui files you want to modify, and a diff tool (in windows - beyond compare,total commander, winmerge or notepad++), my preference - Meld diff viewer[really simple and visual-oriented], the only thing - it's running on linux environment and I don't know if there is a windows version. Then just open files in tool and start adding. Sometimes you have to add all entries are not present in miui one from base, sometimes you should be smart enough to mod only part which needed and nothing more and also sometimes to replace pieces of code which are actually safe to do so. That's a whole process.
>>
Example - our SystemProperties.smali:
Actually after opening you see it is full of differences from base:
http://minus.com/mbmfprmG4K/
you see those green blocks? Each of them signs a missing part of code you should add, in Meld it's just about of clicking little arrow that represents that block. As for windows tools, they should have something like "add all" and many other things could do it in a batch way.
A little piece of smartness:
that file is the only one I discovered which allow replacing .line with big code pieces, see that:
http://minus.com/mdnAholnL/
do you see ".line 126" and HUGE code block against it? you may forget about ".line 126" and copy block against it with no doubt. Note that line numbers etc could change, always check before doing something.
That line also became a dealbreaker on JellyBean, that's why we decided it would be better to just replace it. Ecample will give you a clue just about common patch process.
>>
Another file has to be modified in same way - AssetManager.smali, which is located at android/content/res.
Beware of replacing anything on it[only add, as stand before], if something went wrong, it might produce awful logcat nobody could understand so you have to re-port rom again to catch a causer.
Another interesting patch you should perform if you have different than RIL telephony class.
To determine which ril class you have, seek for following line in your build.prop:
Code:
ro.telephony.ril_class=
If you don't have such, mostly it means you are using RIL class and don't need a patch.
in my case it was:
Code:
ro.telephony.ril_class=LGEQualcommRIL
so I'll describe a process for it, pointing what is common.
All ril classes located at com/android/internal/telephony, so go to it.
LGEqualcommRIL have a single smali, so copy only that one[if your class also have another smali with the same name, for example LGEStarRIL$1.smali, copy them too], Also, unlike most classes in CM, LGEQualcommRIL have a dependency - QualcommSharedRIL, which tree you should also move to that folder near LGE one.
Classes that are also have that dependency:
LGEQualcommUiccRIL
HTCQualcommRIL
SamsungQualcommUiccRIL
Others are dervied from RIL and don't have any dependencies like that. As CM involves more and more devices, to determine what dependencies you actually need, ask source code:
Code:
public class LGEQualcommRIL extends QualcommSharedRIL implements CommandsInterface
extends means your dependency you have to also add to MIUI, if it is "RIL", go ahead and continue porting.
To make your class work instead of RIL, you should modify MIUI' PhoneFactory.smali located at the same folder in following way:
Code:
.line 136
new-instance v8, Lcom/android/internal/telephony/RIL;
invoke-direct {v8, p0, v4, v0}, Lcom/android/internal/telephony/RIL;-><init>(Landroid/content/Context;II)V
->
Code:
.line 136
new-instance v8, Lcom/android/internal/telephony/[B]LGEQualcomm[/B]RIL;
invoke-direct {v8, p0, v4, v0}, Lcom/android/internal/telephony/[B]LGEQualcomm[/B]RIL;-><init>(Landroid/content/Context;II)V
it changes a constructor of RIL class to LGEQualcommRIL class. If my lines incorrect, just type RIL in search in Phonefactory, it will show you exactly 2 defines with "RIL" involved.
Another case for patching is android/media/AudioFormat.smali.
Copy all missing lines from base to miui, it would be enough. I have decide to not replacing it coz of constructor that is differ and might one day turn into bomb.
The most complicated smali case, WebSettingsClassic. It do contains lines that should be added, also lines that should be slightly modified.
Let's try to make the process bit easier with these steps:
first of all, find those fields:
Code:
.field private mMediaPreloadEnabled
.field private mWebGLEnabled:Z
they are at the beginning of file, marked as green blocks. Attention: then there is a listing that asks you about default value, like that:
Code:
.line 91
iput-boolean v2, p0, Landroid/webkit/WebSettingsClassic;->mMediaPreloadEnabled:Z
DON'T EVEN TOUCH THEM! Even if you know what are you doing - it will fail on boot if you placed that lines in miui file.
interesting place here.. when you will search for webgl from the beginning, you will hit such block, marked as blue (incompatible):
Code:
goto/16 :goto_1
.end method
.method private native nativeIsWebGLAvailable()Z
.end method
while miui file will show just that:
Code:
goto :goto_1
and ".end method" after. "You f***n kiddng?" - will you ask.. yeah, pure cheat. Let's fix it up:
paste only:
Code:
.end method
.method private native nativeIsWebGLAvailable()Z
before ".end_method" but after "goto :goto_1", so that full block will be instantly turned to whie:
Code:
goto :goto_1
.end method
.method private native nativeIsWebGLAvailable()Z
.end method
except "goto", which will show as differ, but who cares?
After searching "webgl" on base file you will possibly see a code block starting with:
Code:
.method public declared-synchronized isWebGLAvailable()Z
add it without any thought. You should do the same with following methods:
Code:
.method public declared-synchronized setMediaPreloadEnabled(Z)V
.method public declared-synchronized setWebGLEnabled(Z)V
btw, those methods are so-called "setters" - methods in class that intended to adjust value to class field.
DON'T ADD ANYTHING ELSE, IT WILL POSSIBLY BREAK BOOTING AGAIN! You've been warned.
Framework.jar port done!
the only thing to do - assemble it.
services.jar
Unlike framework.jar, there are lesser things to do. But they are also significant for porting process.
ICS-only:
InputManager*.smali - the only thing should be replaced [and located in com/android/server/wm/].
On JellyBean it is located at com/android/server/Input ands also have to be replaced.
You may also replace usb folder, but actually those who have MTP(devices with kernel 3.0 or so, that are having new "USB gadget framework" drivers, consult with development branch for details) are in no need to do so, as for others (as of mine instance on MT development) you have to replace it. In stage 4 I will present my ways to make usb subsystem work on miui.
Also, there is a new smali on Jellybean: watchdog*.smali. Just replace whole tree of this in com/android/server/.
As for diff files, there is one: PowerManagerService.smali(may I shorten its name to PMS?)
there is no matter to diff it like others as it have too much dependencies to resolve and may cause your system crash.
ICS-only:
So, it only asks about nativeStartSurfaceFlingerOffAnimation method. but hey, PMS do have such method, but its name is nativeStartSurfaceFlingerAnimation, so without "Off"; my solution is to add "Off" to it, see that stack:
http://minus.com/lY4DiQfJ451Aq
that's where you should find you first entry (there are 2)
second entry showed there:
http://minus.com/lchMVcHtKe46T
after editing , you should see a huge block to add:
http://minus.com/lbmNygeJBs9klv
add it, and that smali is ported.
end of ICS-only
On jellybean porting it more trivial:
nativeCPUBoost is missing. You will have some defines in base file. Use search by keyword "cpuboost" in base file to determine where they are and just add them to miui one.
defines will be:
Code:
.method private static native nativeCpuBoost(I)V
-method definition.
Code:
.method public cpuBoost(I)V
-method code block.
and nothing extra.
Assemble new services.jar.out to services.jar when complete.
Done those but still not boots or boots but functions improperly? see next Stages- 3 and 4, I will enlighten all moments of debugging what's wrong and also additional tweaks for specific devices that faced problems with porting [It's just impossible to do that for each device, so there is a great thread you could always ask what's wrong if my advices didn't help].
Stage 3
Third part mostly touches cases where tuto above didn't resolved boot problems, also cases where there is no confidence 2nd stage will work/cases when people are trying to investigate themselves but mostly not xperienced in such(the most respectable case). To understand what's going on with your build it would be better to be CM/AOSP/AOKP dev, so you will most likely know where to find an answer. But if it is not about you, let me point on some moments could help.
Stage 3. Understanding logs and debugging
Yes, exactly understanding. Most likely people are going to forum and just posting logcat (that might contain common error). My goal is show you - logcat is not shuch thing you should fear to investigate!
First of all, let's assume something:
adb - powerful tool, in our case the must have thing to make a log. Article on android devs most likely describes all the moments about adb power: http://developer.android.com/tools/help/adb.html
logcat/log - one of the android advantages that allows you to debug what's going on with your system. by "make log" I will assume issuing
Code:
adb logcat >log.txt
command, last argument - log.txt is a text file with log system provided to you (you could use any name).
sometimes we need an answer about things that are going on with baseband (so-called radio). In those cases I usually asking to take radiolog. That's how it could be produced:
Code:
adb logcat -b radio >log.txt
reading it might be a pain, as terms of it are too much hardware-specific, but it anyway complies with principles I will put below.
debug/debugging - process of analyzing code which helps to eliminate bugs (that's why de-bug)
Some people experiencing problems with log, most common are:
-wrong MIUI base which prevents usb subsytem to start (nexus S base most likely allows you to use log)
-no/corrupted/wrong usb drivers on PC
-Windows :crying: most likely is about new usb subsystems etc, so advice is the only one - try on ubuntu (not working without udev rules)
-somewhat corrupted/inconsistent usb port
-lack of "persist.sys.usb.config= mass_storage,adb" in build.prop, specifically "adb" in this line.
Note: if your log only consists of:
Code:
link system/bin/sh failed: no such file or directory
or something like that, you should contact a CM dev, else, you are most likely know what happened ;]
Alright when we got a log, it consist of many many lines that are looping if your system not boots. That's why that kind of situation is sometimes called bootloop. System may repeat a error eternal time it lives, so log might be huge.
To parse what's going on there are some advice:
keywords:
search in log you got some keywords, that might be useful on debugging boot issue;
most common keywords are:
"E/" - error
"E/dalvikvm" - possibly crucial system error
"No such file or directory" - says it all
"couldn't" - android likes that, mostly shows faulty things.
"fail"/"failed" - mostly crucial error
"W/"/"warning" - says it all, but not always warn could be a boot failure cause
"exception"(especially NullPointerException) - points you that something went wrong in framework or application work
I/ tags could be also useful at debugging, but most helpful are errors and warnings.
Most common constructs:
"couldn't find native method", the most common reason of a bootloop.
For instance:
Code:
E/dalvikvm( 100): ERROR: couldn't find native method
E/dalvikvm( 100): Requested: Landroid/view/GLES20Canvas;.nStartTileRendering:(IIIII)V
E/JNIHelp ( 100): RegisterNatives failed for 'android/view/GLES20Canvas', aborting
Let's parse that construct to extract parts we will fix.
First of all. smali path might be extracted from that line:
Code:
E/JNIHelp ( 100): RegisterNatives failed for 'android/view/GLES20Canvas', aborting
->
Code:
android/view/GLES20Canvas
that's it, smali we are looking for is GLES20Canvas.smali. But.. android/view.. where it is? Answer comes from android source, it took some time to analyze frameworks.. Just let's assume: all that starting with "android" in path belongs to framework,jar.
What if path doesn't contain "android" at the beginning?
Again the answer is in source. Paths like"org/" are belong to framework.jar.
"com/android/server" - services.jar (there is the same folder at framework.jar but most likely you don't need to touch it).
another place we could be mixed up:
"com/android/internal" - framework.jar
"com/android/internal/policy/impl/" - android.policy.jar
for framework.jar path ends up on internal, which represents telephony folder. policy/impl is the only android.policy.jar folder.
Other frameworks are actually not used in port as they contain core android functionality which is common.
Note about smali you found:
it might be not smali you are looking for, most likely when code points you to android functionality and widgets (control elements) like combobox or listview, it's a sign to think twice what have you done on your system to port it
it might be tree of smali(remember 2nd stage assumes?), to ease of use, always replace smali with its tree, and only if error becomes worse, think about single smali or about diff(2nd stage assumes again )
from
Code:
E/dalvikvm( 100): Requested: Landroid/view/GLES20Canvas;.nStartTileRendering:(IIIII)V
we could extract a method which is missing - nStartTileRendering. In some cases only that method should be added and nothing more.
" android.content.res.Resources$NotFoundException: Resource ID #XXX"
Example:
Code:
E/AndroidRuntime( 3047): *** FATAL EXCEPTION IN SYSTEM PROCESS: WindowManagerPolicy
E/AndroidRuntime( 3047): android.content.res.Resources$NotFoundException: Resource ID #0x3060008
E/AndroidRuntime( 3047): at android.content.res.Resources.getValue(Resources.j ava:1022)
E/AndroidRuntime( 3047): at android.content.res.MiuiResources.getValue(MiuiRes ources.java:56)
E/AndroidRuntime( 3047): at miui.util.ResourceMapper.resolveReference(Resource Mapper.java:9)
E/AndroidRuntime( 3047): at miui.util.HapticFeedbackUtil.updateSettings(Haptic FeedbackUtil.java:109)
E/AndroidRuntime( 3047): at miui.util.HapticFeedbackUtil$SettingsObserver.obse rve(HapticFeedbackUtil.java:92)
E/AndroidRuntime( 3047): at miui.util.HapticFeedbackUtil.<init>(HapticFeedback Util.java:75)
E/AndroidRuntime( 3047): at com.android.internal.policy.impl.MiuiPhoneWindowMa nager.init(MiuiPhoneWindowManager.java:108)
E/AndroidRuntime( 3047): at com.android.server.wm.WindowManagerService$PolicyT hread.run(WindowManagerService.java:733)
Wrong MIUI base, mostly. Appear when something changed by previous porter (miui) which affects resources you won't have, banal link error.
" Fatal signal 11 (SIGSEGV) at 0xdeadbaad (code=1)"
Hope all of you heared about C language. That error is a form of C "exceptional case"(in other words - exception).
You will see if it happen:
Code:
F/libc ( 2698): Fatal signal 11 (SIGSEGV) at 0xdeadbaad (code=1)
I/DEBUG ( 130): *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
I/DEBUG ( 130): Build fingerprint: 'tmous/htc_doubleshot/doubleshot:4.0.3/IML
74K/275847.101:user/release-keys'
I/DEBUG ( 130): pid: 2698, tid: 2698 >>> zygote <<<
I/DEBUG ( 130): signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr deadbaa
d
I/DEBUG ( 130): r0 deadbaad r1 00000001 r2 a0000000 r3 00000000
I/DEBUG ( 130): r4 00000000 r5 00000027 r6 4086fbfd r7 00000036
I/DEBUG ( 130): r8 40253f04 r9 40233a7e 10 0000904c fp 00009062
I/DEBUG ( 130): ip 4028b240 sp befcfa60 lr 401043c1 pc 40100adc cpsr 600
00030
I/DEBUG ( 130): d0 2f64696f72646e61 d1 2f746e65746e6f63
I/DEBUG ( 130): d2 657373412f736572 d3 726567616e614d74
I/DEBUG ( 130): d4 0000d4cc0000d4b1 d5 0000d4e80000d4cd
yaa.. ENORMOUS code block, build fingerprint, fatal signal and stack trace.. welcome to hell
One little thing: error is right above that block, don't even try to parse its contents, ignore it.
WE ALL DIE!!!111
yaa, series of "died" errors:
Code:
I/ServiceManager( 1478): service 'media.audio_flinger' died
I/ServiceManager( 1478): service 'media.player' died
I/ServiceManager( 1478): service 'media.camera' died
I/ServiceManager( 1478): service 'media.audio_policy' died
IGNORE them, it's a result of exception right above(no matter C exception or java one), it's better to see it instead of posting "WE ALL DIE!!!111"
"Unable to extract+optimize DEX from '/system/framework/framework.jar'" and other WTF cases
examples:
Code:
D/dalvikvm( 103): DexOpt: --- BEGIN 'framework.jar' (bootstrap=1) ---
E/dalvikvm( 172): Duplicate class definition: 'Landroid/media/MediaRecorder;'
E/dalvikvm( 172): Trouble with item 2900 @ offset 0x17a86c
E/dalvikvm( 172): Cross-item verify of section type 0006 failed
E/dalvikvm( 172): ERROR: Byte swap + verify failed
E/dalvikvm( 172): Optimization failed
W/dalvikvm( 103): DexOpt: --- END 'framework.jar' --- status=0xff00, process failed
E/dalvikvm( 103): Unable to extract+optimize DEX from '/system/framework/framework.jar'
D/dalvikvm( 103): Unable to process classpath element '/system/framework/framework.jar'
E/JNIHelp ( 103): Native registration unable to find class 'android/debug/JNITest', aborting
Code:
05-30 14:15:15.970: E/NetworkLocationRealOs(2304): no android ID; can't access encrypted cache
05-30 14:15:15.970: E/NetworkLocationRealOs(2304): java.io.IOException: no android ID; can't access encrypted cache
Code:
1012: 07-03 03:28:21.350: E/System(1538): ************ Failure starting core service
07-03 03:28:21.350: E/System(1538): java.lang.NullPointerException
07-03 03:28:21.350: E/System(1538): at com.android.server.pm.PackageManagerService.grantPermissionsLPw(PackageManagerService.java:4299)
07-03 03:28:21.350: E/System(1538): at com.android.server.pm.PackageManagerService.updatePermissionsLPw(PackageManagerService.java:4247)
07-03 03:28:21.350: E/System(1538): at com.android.server.pm.PackageManagerService.<init>(PackageManagerService.java:1170)
07-03 03:28:21.350: E/System(1538): at com.android.server.pm.PackageManagerService.main(PackageManagerService.java:858)
07-03 03:28:21.350: E/System(1538): at com.android.server.ServerThread.run(SystemServer.java:167)
07-03 03:28:21.350: I/SystemServer(1538): Input Method Service
07-03 03:28:21.360: W/SystemServer(1538): ***********************************************
1021: 07-03 03:28:21.370: A/SystemServer(1538): BOOT FAILURE starting Input Manager Service
1022: 07-03 03:28:21.370: A/SystemServer(1538): java.lang.NullPointerException
1023: 07-03 03:28:21.370: A/SystemServer(1538): at android.app.PendingIntent.getBroadcast(PendingIntent.java:293)
1024: 07-03 03:28:21.370: A/SystemServer(1538): at com.android.server.InputMethodManagerService.<init>(InputMethodManagerService.java:548)
1025: 07-03 03:28:21.370: A/SystemServer(1538): at com.android.server.ServerThread.run(SystemServer.java:271)
1026: 07-03 03:28:21.400: E/AndroidRuntime(1538): Error reporting WTF
1027: 07-03 03:28:21.400: E/AndroidRuntime(1538): java.lang.NullPointerException
1028: 07-03 03:28:21.400: E/AndroidRuntime(1538): at com.android.internal.os.RuntimeInit.wtf(RuntimeInit.java:345)
1029: 07-03 03:28:21.400: E/AndroidRuntime(1538): at android.util.Log$1.onTerribleFailure(Log.java:103)
1030: 07-03 03:28:21.400: E/AndroidRuntime(1538): at android.util.Log.wtf(Log.java:278)
1031: 07-03 03:28:21.400: E/AndroidRuntime(1538): at com.android.server.ServerThread.reportWtf(SystemServer.java:77)
1032: 07-03 03:28:21.400: E/AndroidRuntime(1538): at com.android.server.ServerThread.run(SystemServer.java:274)
mostly likely is about way assembling framework files. Also some of them might be just corrupted by accident. Sometimes these errors caused by wrong smali replacement or wrong diff methodology. Or it might be just banal reason - no place in system or cache partitions.
English []
Most log parts are in mere, not technician English,log might be read as little book with bright characters. Find what you are looking for and fix it..
Source code is your best friend in porting
I'd recommend to have an android source code [from internet or on your local PC] to port something that outstands of rules I listed. For example CM frameworks source could be found here: https://github.com/CyanogenMod/android_frameworks_base .
That mostly affect cases in which hardware that is not working/working but not perfect/working incorrect on MIUI but worked like a charm on base.
Any log line represents a line of code in source, that one could search and debug from there (as source is mostly common, that miui ports possibility proove). Each smali represents a java source code or its part(- subclass which signed by $), each java is in frameworks folder on source (mostly frameworks/base). Log line is a message, which formed with C rules about these rules, so you have to avoid ciphers or guess how could code represent that message. You may search guessed line in source to locate java file, or locate it manually according to smali location and my advice and search in it.
Happy debugging
Stage 4
Last part. We recently ported miui, all is great and mostly functions, But.. am I the only one or that one looks incomplete? One could make its port complete by following next stage:
Stage 4. Advanced tweaks and specific hardware fixes
USB subsystem(mass storage/tether/debugging sign)
First of all, little self - check:
you have to be on old USB Gadget framework kernel source. Those you could clarify by talking with cm dev. Also I'm not rejecting it could work for others but in slightly modified sequence.
Starting from framework-res.apk.
You have to disassemble it first, but before you use actual "apktool d", you should also issue:
Code:
apktool if framework-res.apk
that is necessary for decoding internal resources correctly.
Disassemble base and MIUI frameworks and leave base one as we will work with MIUI one and will use base as a reference.
After disassembling, let's go to res/values in it:
As old usb gadget needs old mass storage path which was applicable to gingerbread, we should add that path to strings.xml.
If you only disassembled that file, you should see something like that:
Code:
<string name="launchBrowserDefault">Launch Browser?</string>
<string name="SetupCallDefault">Accept Call?</string>
</resources>
exact line to add at the near end:
Code:
<string name="config_legacyUmsLunFile">/sys/devices/platform/usb_mass_storage/lun0/file</string>
so that you will get something like that:
Code:
<string name="launchBrowserDefault">Launch Browser?</string>
<string name="SetupCallDefault">Accept Call?</string>
<string name="config_legacyUmsLunFile">/sys/devices/platform/usb_mass_storage/lun0/file</string>
</resources>
Remark:
that case is the only applicable to devices which have old kind SD card only. Look at the framework-res on your device, it also might have different LUN file path(actually it is a file, which collects all your SD data to be mounted as usb drive), that you should always replace in mind my defines with yours to make actual usb work.
Devices with flash memory(also called EMMC or embedded SD on flash) and SD[or without SD support at all], should be treat in custom way unfortunately I don't know, consult with your device CM devs for more details. And hey, most of these devices are on new usb gadget, so don't need my guide at all
<<
After addition, save strings.xml and go to res/xml in the same framework-res.That's where you also should use base framework-res.
copy from base to miui storage_list.xml and replace when prompted. That file provides only your device-specific SD support, not nexus S or whatever miui base you use.
Assemble miui framework-res.apk and, attention! disassemble it again. That action allows you to see resource ID-s for each line exactly in manner they will be used in living rom.
Remark:
Each resource-drawable, string, boolean switcher etc is treated by its ID - personal identificator. Resources are used in other frameworks and APK to identify something necessary for them. framework-res.apk is a resource storage, which handled by android.content.res package classes like ResourceManager.
USB subsystem also uses some resource to provide to user actual USB status and right mass storage.
<<
Make sure you have both base and miui framework-res, then open both: res/values/public.xml.
Now, we could start the main part - services.jar mod
After adding line "config_legacyUmsLunFile" there will be its id in public.xml after compiling. That's why I stand you should disassemble assembled framework-res again. Remember both ID-s from base and from miui.
Also you need ID-s from both base and miui for following resources:
"stat_sys_adb" - usb debugging icon
"adb_active_notification_title" - usb debugging short message
"adb_active_notification_message" - usb debugging long message
JellyBean-specific:
"config_oemUsbModeOverride" - usb mode override flag
Remark:
public.xml is a resource dictionary, example of line:
Code:
<public type="drawable" name="stat_sys_adb" id="0x010804f8" />
means as follows: public type="drawable", drawable - mere picture for different resolution, drawn on the screen, public type subsequently is a type of resource. name="stat_sys_adb" - name of resource, that may be name of acual file or string or bool define etc. id="0x010804f8" - hexadecimal resource identifier. Important note: most resource users are treat resource name without leading zero, for example, 0x010804f8 in usb smalis presented as 0x10804f8, that fact will be necessary on finding and replacing resources(I'd call it matching process), exactly what we are going to do with USB folder smalis.
<<
Open USB folder in miui services.jar (smali/com/android/server/usb), you will see smalis, as usual. Replace its contents with those in base services.jar' usb folder.
Then we are going to match resources: each ID you found in public.xml should be bound to resource call in smali. Let's start:
we will work with miui usb folder smalis. Open UsbService.smali, now remember what id was bound to config_legacyUmsLunFile in base public.xml, for example it was 0x01040029, eliminate leading zero and search file contents for resource 0x1040029, so you will find its entry. Replace that entry with resource you got from public.xml in miui, again, without leading zero. Search for the same ID in LegacyUsbDeviceManager.smali and replace it to miui one.
If you got how that process work, remaining task is match other resource id-s that listed above (usb debugging icon, long and short message). They will be in following files
LegacyUsbDeviceManager$LegacyUsbHandler
UsbDeviceManager$UsbHandler
JellyBean-specific:
UsbDeviceManager.smali also contains necessary switch - config_oemUsbModeOverride, also match ID-s with miui framework and here you go.
USB debugging message is not so necessary as mass storage [coz if resource of mass storage file not found, you won't get usb subsystem to work].
After matching is done, assemble services.jar.
Done! USB subsystem now works.
Another moment could be necessary is to change USB tether interface device to usb0 (as Nexus S is using rndis0 instead, and base whatever you choosed may also have another tether interface)
To change it, you again need a disassembled framework-res.apk(don't forget "apktool if") In it navigate to res/values/arrays.xml.
find the following:
Code:
<string-array name="config_tether_usb_regexs">
in nexus S full block will look like that:
Code:
<string-array name="config_tether_usb_regexs">
<item>[COLOR="Orange"]rndis0[/COLOR]</item>
</string-array>
Look, I highlighted interface name for you! So the only part you should do it is just replace it to yours. Example for usb0:
Code:
<string-array name="config_tether_usb_regexs">
<item>[COLOR="Orange"]usb0[/COLOR]</item>
</string-array>
Interface name could be seen in the same file but in base rom.
By The Way, do you see
Code:
<string-array name="config_tether_wifi_regexs">
<item>[COLOR="Orange"]wl0.1[/COLOR]</item>
</string-array>
right after usb one? That is the interface for wifi tether, that you also should change to yours (one your base needed) and that is it! I saw somewhere following interface variant:
Code:
<string-array name="config_tether_wifi_regex[/B]">
<item>[COLOR="orange"]tiap//d[/COLOR]</item>
</string-array>
which is for Sony [Ericsson] devices with Texas Instruments wifi chip, just see yours in base to check this out.
in the same file you may also fix Autobrightness levels, I mean those ones:
Code:
<integer-array name="config_autoBrightnessLevels">
<integer-array name="config_autoBrightnessLcdBacklightValues">
<integer-array name="config_autoBrightnessButtonBacklightValues">
<integer-array name="config_autoBrightnessKeyboardBacklightValues">
MIUI doesn't have autobrightness tweaks so that is the only way those levels could be applied.
To fully close framework-res and don't come back no more, let's see other things you could do with it:
Minimal brightness too low
There is a bug with brightness: when you regulating it to minmal, screen comes black and won't come back until wipe.
Reason is banal - screen highlight couldn't handle so low value (in nexus S it's 10), first of all find a line at res/values/integers.xml:
Code:
<integer name="config_screenBrightnessDim">10</integer>
in most cases value "20" will be reliable, so change "10" to "20":
Code:
<integer name="config_screenBrightnessDim">20</integer>
Fix "Network won't automatically picks up"
The problem on some devices like HTC on 7x30 QC architecture, is in one little switch [res/values/bools.xml] :
Code:
<bool name="skip_restoring_network_selection">[COLOR="orange"]true[/COLOR]</bool>
just change it to "false":
Code:
<bool name="skip_restoring_network_selection">[COLOR="orange"]false[/COLOR]</bool>
and network will come up.
Fix "Deep sleep issue on some devices"
Problem reported Wildfire S users resolved by that little define [res/values/bools.xml] :
Code:
<bool name="config_bluetooth_adapter_quick_switch">[COLOR="orange"]true[/COLOR]</bool>
change it to "false":
Code:
<bool name="config_bluetooth_adapter_quick_switch">[COLOR="orange"]false[/COLOR]</bool>
and issue will be resolved.
Also, it might be interesting to check out all bools.xml defines to see if something should be changed.
Fixing wrong hardware-software keyboard relationship [auto-rotate and showing issues] (also for galaxy tab 7)
Those with built-in hardware keyboard may experiencing following issue: when hardware keyboard opened, you also see a software keyboard and when you just need a software keyboard, it won't show. Also auto-rotate won't work properly when keyboard is activated.
Seems on Galaxy Tab 7 Samsung(or maybe Cyanogen Mod?) handles software keyboard in relation of some kind of dummy hardware keyboard, so it's our case too.
ICS-only:
To fix that issue, disassemble miui android.policy.jar and navigate to smali/com/android/internal/policy/impl/PhoneWindowManager.smali
there are three constants, according to the source: 0(0x0) - lid closed, 1(0x1) - lid open, and -1(-0x1) - lid absent.
they are located after a function "GetSwitchState".
Original idea was to swap these constants so that system gets fooled about your keyboard state:
code that exists:
Code:
const/4 v1, 0x1
-> code that you will get after mod:
Code:
const/4 v1, 0x0
the same you should proceed with zero:
Code:
const/4 v1, 0x0
->
Code:
const/4 v1, 0x1
you might also have to change
Code:
const/4 v1, -0x1
->
Code:
const/4 v1, 0x1
to get rid of absent state.
another ways to fix this up:
res/values/bools.xml
change
Code:
<bool name="config_forceDisableHardwareKeyboard">[COLOR="Orange"]false[/COLOR]</bool>
->
Code:
<bool name="config_forceDisableHardwareKeyboard">[COLOR="Orange"]true[/COLOR]</bool>
as we see, it force-disables hardware keyboard so that only soft one will show up.
for devices with hardware keyboard that might also be a deal:
res/values/integers.xml
change the following two line:
Code:
<integer name="config_lidOpenRotation">90</integer>
<integer name="config_lidKeyboardAccessibility">1</integer>
Next questions will be related to various APK fixes:
before we start you need to know that all apk are depend on framework-res resources, so before you start disassembling them, let's clarify steps: "apktool if" each framework with resources you have in miui, in stock there are two:
Code:
apktool if framework-res.apk
Code:
apktool if framework-miui-res.apk
then each apk could be disassembled as usual.
Getting rid of MIUI start screen
Have you mentioned it? Ya, that annoying setup wizard.. In the end it suggests you to input your XIAOMI account which some users may never had and won't create. Keep them out of stress - get rid of that wizard!
Let me show how:
there are 2 ways, one - fully infiltrate that wizard from user's eye, second - will let you choose a language(useful in multilanguage releases) and setup wifi, then go right to homescreen.
Common moment: disassemble Provision.apk and go to smali contents - com/android/provision and choose DefaultActivity.smali
First method - codename "infiltration":
we will modify contents of "isProvisioned" method.
Kill all except "const/4 v1" and "return v1" in it, change const/4 v1 to 0x1 so you will get something like that:
Code:
.method private deviceIsProvisioned()Z
.locals 3
.prologue
const/4 v1, 0x1
return v1
.end method
actually, we are just saying to setup wizard that device is already passed its steps and don't need them anymore. So that setup wizard won't even be showed.
Second method - codename "multilang":
it is based on exploit, which is as follows: one could bypass xiaomi account prompt if before flashing miui he pull off sim card and then on setupwizard won't set up wifi. Wizard will send you to "sim not found" dialog, which then will allow one to "dismiss" account request.
Line which asks about SIM state is as follows:
Code:
invoke-virtual {v1}, Landroid/telephony/TelephonyManager;->getSimState()I
then
Code:
move-result v1
const/4 v2, 0x5
some variable now consists of returned value.
To initialte that value to fail a check, I've just changed constant value to one that telephony manager will never return: -0x5
Code:
const/4 v2, -0x5
Now its time to point fail to logical end of wizard, we are going to change label..
Code:
if-ne v1, v2, :[COLOR="DarkOrange"]cond_5[/COLOR]
if not equals v1, v2 (if (v1!=v2) in С manner ) go to label cond_5. As we stated, v1 won't be equal v2,so it will go to cond_5, which is not a place we wish to go (coz of unbelieveable hardcode). But there is a wishable place - cond_6:
Code:
invoke-direct {p0}, Lcom/android/provision/DefaultActivity;->finishSetup()V
yyyyeah, right to finish
so we are changing cond_5 to cond_6:
Code:
if-ne v1, v2, :[COLOR="DarkOrange"]cond_6[/COLOR]
that's it! In the end you will get: language selection->wifi setup->homescreen, almost briliant!
Whether you choosed first or second method - assemble apk you got after all things done.
Fixing not working mic in calls
Disassemble Phone.apk and navigate to res/values/bools.xml to change:
Code:
<bool name="send_mic_mute_to_AudioManager">[COLOR="Orange"]false[/COLOR]</bool>
->
Code:
<bool name="send_mic_mute_to_AudioManager">[COLOR="orange"]true[/COLOR]</bool>
Fixing pin code prompt on xperia devices
Disassemble Phone.apk and navigate to res/values/bools.xml to change:
Code:
<bool name="ignore_sim_network_locked_events">[COLOR="orange"]false[/COLOR]</bool>
->
Code:
<bool name="ignore_sim_network_locked_events">[COLOR="orange"]true[/COLOR]</bool>
Enabling hidden settings
Did you know that you may activate LEDs settings? Or maybe use camera key to trigger some useful functions? If not, follow the next little tuto.
Disassemble Settings.apk, navigate to bools.xml in res/values.
Activating LED settings
It would be enough to change
Code:
<bool name="has_led">[COLOR="orange"]false[/COLOR]</bool>
->
Code:
<bool name="has_led">[COLOR="orange"]true[/COLOR]</bool>
As you may got, other hidden settings are also there, I'll just list them and assume all of them needs just replacement false to true to make them activated
Multitouch gestures
Still didn't mentioned how they works, but, xiaomi wouldn't make something just for its appearence in settings.
Code:
<bool name="has_multi_touch">[COLOR="orange"]false[/COLOR]</bool>
MI button
Mi button on any device that has camera button!
What is MI button? It's a tweak that allows dedicated button to do something instead of its mere function (for example-issuing camera app as for cam button). You may adjust any app in rom to be executed, any switch from miui switchers and also trigger some actions like "menu", "call", "screen off toggle"(allows you to switch screen on and off, so possibly replace power button which is mostly weak) and "screenshot".
how to activate it? - the same:
Code:
<bool name="has_camera_key">[COLOR="orange"]false[/COLOR]</bool>
change to "true"
Dock settings
mere dock station settings dialog.
Code:
<bool name="has_dock_settings">[COLOR="orange"]false[/COLOR]</bool>
Trackball settings
for devices such as nexus one with active trackball.
Code:
<bool name="has_track_ball">[COLOR="orange"]false[/COLOR]</bool>
"Black bar" fix
more details - https://www.dropbox.com/s/6u63tozthmj6xa9/Screenshot_2012-08-07-09-49-09.png
Let's get MiuiSystemUI.apk and disassemble it.
Locate to res/values/drawables.xml and delete first line:
Code:
<item type="drawable" name="notification_header_bg">#ff000000</item>
it might vary but always contains black colour (#ff000000). Recompile modified systemUI.
Least but hope not last define for that guide, hope it will fill up with latest and greatest from MIUI devices users and porters around the world.
Cheers, L_F.
Finally Come up with great Tut.. Thanks Alot Brother
Very detailed and good written tutorial! Thanks and good job!
Thanks
AS my device bricked, you could always tell me what to replace/add on my guide, so it will look up-to-date
ADD: added Stage 3.
Done. Have something to add? Write here, I'll form a new guide branch for you. Found a mistake? Contact me.
BTW, if somebody have more time than I, It would be great you could support that guide to keep it up-to-date.
Thanks for the detailed guide. I just started porting for my device. I have one question though. Once I successfully port to one version, what are the files I need to consider for next version? I think some files I can just use from the previous port (like hardware related files). If you have any suggestions on the files I have to look for while porting next version of miui, it will be very helpful. Not sure whether I am asking the right question. Looks like once I do this I can reuse all the files for next port
raj_k_r said:
Thanks for the detailed guide. I just started porting for my device. I have one question though. Once I successfully port to one version, what are the files I need to consider for next version? I think some files I can just use from the previous port (like hardware related files). If you have any suggestions on the files I have to look for while porting next version of miui, it will be very helpful. Not sure whether I am asking the right question. Looks like once I do this I can reuse all the files for next port
Click to expand...
Click to collapse
I replace all the files from last build on next and try to boot.
If I get errors, I look if I have to replace more files or re-replace some.
what are the files I need to consider for next version? I
Click to expand...
Click to collapse
All the same, you have to repeat guide for each release coz frameworks are changing each release.
I'd form a patch kit with all smalis you want to replace and patch remaining each time.
here is my logcat
what the things need to change
assetmanager.smali ??? and/or any other things ????
Code:
$ adb logcat
I/miui ( 1113): Welcome to Android 4.0.4 /
I/miui ( 1114): .-.-.-..-..-..-..-. .-..-..---.
I/miui ( 1115): | | | || || || || | | || | \ \
I/miui ( 1116): '-'-'-''-''----''-'O'----''---'
I/miui ( 1117):
I/run-parts( 1108): dealing with default theme
I/mountext( 1129): Checking /dev/block/mmcblk0p2 for errors...
I/run-parts( 1108): e2fsck 1.41.12 (17-May-2010)
I/run-parts( 1108): /dev/block/mmcblk0p2: clean, 11/1050624 files, 132591/420099 7 blocks
I/run-parts( 1108): mount: mounting /dev/block/mmcblk0p2 on /sd-ext failed: No s uch file or directory
E/mountext( 1133): Unable to mount filesystem for /sd-ext!
I/mountext( 1136): No swap partition found.
I/apps2sd ( 1139): /sd-ext not mounted...nothing to do
I/run-parts( 1108): cp: can't stat '/system/etc/wifi/hostapd.conf': No such file or directory
I/run-parts( 1108): chown: /data/misc/wifi/hostapd.conf: No such file or directo ry
I/run-parts( 1108): chmod: /data/misc/wifi/hostapd.conf: No such file or directo ry
I/DEBUG ( 1158): debuggerd: Jul 14 2012 05:52:57
I/Vold ( 1156): Vold 2.1 (the revenge) firing up
D/Vold ( 1156): Volume sdcard state changing -1 (Initializing) -> 0 (No-Media )
I/Netd ( 1157): Netd 1.0 starting
D/Vold ( 1156): Volume sdcard state changing 0 (No-Media) -> 2 (Pending)
D/DirectVolume( 1156): DirectVolume::handlePartitionAdded -> MAJOR 179, MINOR 1, PARTN 1
D/DirectVolume( 1156): DirectVolume::handlePartitionAdded -> MAJOR 179, MINOR 2, PARTN 2
D/Vold ( 1156): Volume sdcard state changing 2 (Pending) -> 1 (Idle-Unmounted )
E/Netd ( 1157): Unable to bind netlink socket: No such file or directory
E/Netd ( 1157): Unable to open quota2 logging socket
D/AndroidRuntime( 1161):
D/AndroidRuntime( 1161): >>>>>> AndroidRuntime START com.android.internal.os.Zyg oteInit <<<<<<
D/AndroidRuntime( 1161): CheckJNI is OFF
I/SurfaceFlinger( 1160): SurfaceFlinger is starting
I/SurfaceFlinger( 1160): SurfaceFlinger's main thread ready to run. Initializing graphics H/W...
E/qsd8k.gralloc( 1160): We support 2 buffers
I/qsd8k.gralloc( 1160): using (fd=9)
I/qsd8k.gralloc( 1160): id = msmfb31_1ffff
I/qsd8k.gralloc( 1160): xres = 480 px
I/qsd8k.gralloc( 1160): yres = 854 px
I/qsd8k.gralloc( 1160): xres_virtual = 480 px
I/qsd8k.gralloc( 1160): yres_virtual = 1708 px
I/qsd8k.gralloc( 1160): bpp = 16
I/qsd8k.gralloc( 1160): r = 11:5
I/qsd8k.gralloc( 1160): g = 5:6
I/qsd8k.gralloc( 1160): b = 0:5
I/qsd8k.gralloc( 1160): width = 76 mm (160.421051 dpi)
I/qsd8k.gralloc( 1160): height = 136 mm (159.497055 dpi)
I/qsd8k.gralloc( 1160): refresh rate = 0.00 Hz
D/CALCFPS ( 1160): DEBUG_CALC_FPS: 0
D/CALCFPS ( 1160): period: 10
D/CALCFPS ( 1160): ignorethresh_us: 500000
D/CALCFPS ( 1160): DEBUG_CALC_FPS: 0
D/CALCFPS ( 1160): period: 10
D/CALCFPS ( 1160): ignorethresh_us: 500000
D/FramebufferNativeWindow( 1160): mNumBuffers = 2
D/libEGL ( 1160): loaded /system/lib/egl/libGLES_android.so
D/libEGL ( 1160): loaded /system/lib/egl/libEGL_adreno200.so
D/libEGL ( 1160): loaded /system/lib/egl/libGLESv1_CM_adreno200.so
D/libEGL ( 1160): loaded /system/lib/egl/libGLESv2_adreno200.so
I/AudioFlinger( 1163): Loaded primary audio interface from LEGACY Audio HW HAL ( audio)
I/AudioFlinger( 1163): Using 'LEGACY Audio HW HAL' (audio.primary) as the primar y audio interface
I/AudioFlinger( 1163): Loaded a2dp audio interface from A2DP Audio HW HAL (audio )
D/AudioHardwareInterface( 1163): setMode(NORMAL)
I/AudioHardwareQSD( 1163): Set master volume to 1.000000.
I/CameraService( 1163): CameraService started (pid=1163)
E/CameraService( 1163): Could not load camera HAL module
I/SurfaceFlinger( 1160): EGL informations:
I/SurfaceFlinger( 1160): # of configs : 35
I/SurfaceFlinger( 1160): vendor : Android
I/SurfaceFlinger( 1160): version : 1.4 Android META-EGL
I/SurfaceFlinger( 1160): extensions: EGL_KHR_image EGL_KHR_image_base EGL_KHR_fe nce_sync EGL_ANDROID_image_native_buffer EGL_ANDROID_image_native_buffer EGL_AND ROID_get_render_buffer
I/SurfaceFlinger( 1160): Client API: OpenGL ES
I/SurfaceFlinger( 1160): EGLSurface: 5-6-5-0, config=0x0
I/SurfaceFlinger( 1160): OpenGL informations:
I/SurfaceFlinger( 1160): vendor : Qualcomm
I/SurfaceFlinger( 1160): renderer : Adreno (TM) 200
I/SurfaceFlinger( 1160): version : OpenGL ES-CM 1.1
I/SurfaceFlinger( 1160): extensions: GL_AMD_compressed_ATC_texture GL_AMD_perfor mance_monitor GL_APPLE_texture_2D_limited_npot GL_ARB_vertex_buffer_object GL_EX T_texture_filter_anisotropic GL_EXT_texture_format_BGRA8888 GL_EXT_texture_type_ 2_10_10_10_REV GL_OES_blend_equation_separate GL_OES_blend_func_separate GL_OES_ blend_subtract GL_OES_compressed_ETC1_RGB8_texture GL_OES_compressed_paletted_te xture GL_OES_depth_texture GL_OES_draw_texture GL_OES_EGL_image GL_OES_EGL_image _external GL_OES_framebuffer_object GL_OES_matrix_palette GL_OES_packed_depth_st encil GL_OES_point_size_array GL_OES_point_sprite GL_OES_read_format GL_OES_rgb8 _rgba8 GL_OES_stencil_wrap GL_OES_texture_cube_map GL_OES_texture_env_crossbar G L_OES_texture_float GL_OES_texture_half_float GL_OES_texture_half_float_linear G L_OES_texture_npot GL_OES_texture_mirrored_repeat GL_QCOM_binning_control GL_QCO M_extended_get GL_QCOM_tiled_rendering GL_AMD_compressed_3DC_texture
I/SurfaceFlinger( 1160): GL_MAX_TEXTURE_SIZE = 4096
I/SurfaceFlinger( 1160): GL_MAX_VIEWPORT_DIMS = 4096 x 4096
I/SurfaceFlinger( 1160): flags = 00200000
D/CALCFPS ( 1160): DEBUG_CALC_FPS: 0
D/CALCFPS ( 1160): period: 10
D/CALCFPS ( 1160): ignorethresh_us: 500000
D/libEGL ( 1273): loaded /system/lib/egl/libGLES_android.so
D/libEGL ( 1273): loaded /system/lib/egl/libEGL_adreno200.so
D/libEGL ( 1273): loaded /system/lib/egl/libGLESv1_CM_adreno200.so
D/libEGL ( 1273): loaded /system/lib/egl/libGLESv2_adreno200.so
E/dalvikvm( 1161): ERROR: couldn't find native method
E/dalvikvm( 1161): Requested: Landroid/content/res/AssetManager;.splitThemePacka ge:(Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;)I
E/JNIHelp ( 1161): RegisterNatives failed for 'android/content/res/AssetManager' , aborting
F/libc ( 1161): Fatal signal 11 (SIGSEGV) at 0xdeadbaad (code=1)
I/AudioFlinger( 1163): AudioFlinger's thread 0x105c8 ready to run
W/AudioFlinger( 1163): Thread AudioOut_1 cannot connect to the power manager ser vice
I/AudioHardwareQSD( 1163): Routing audio to Speakerphone
D/AudioHardwareQSD( 1163): Switching audio device to
D/AudioHardwareQSD( 1163): Speakerphone
I/AudioPolicyService( 1163): Loaded audio policy from LEGACY Audio Policy HAL (a udio_policy)
I/DEBUG ( 1158): *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** * **
I/DEBUG ( 1158): Build fingerprint: 'SEMC/LT18i_0000-0000/LT18i:4.0.3/4.1.C.0. 7/-H9_3w:user/release-keys'
I/DEBUG ( 1158): pid: 1161, tid: 1161 >>> zygote <<<
I/DEBUG ( 1158): signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr deadbaa d
I/DEBUG ( 1158): r0 deadbaad r1 00000001 r2 a0000000 r3 00000000
I/DEBUG ( 1158): r4 00000000 r5 00000027 r6 40838acd r7 00000036
I/DEBUG ( 1158): r8 401aca80 r9 4018d722 10 0000904c fp 00009062
I/DEBUG ( 1158): ip 401f7240 sp beedba60 lr 4001f881 pc 4001bbcc cpsr 600 00030
I/DEBUG ( 1158): d0 2f64696f72646e61 d1 2f746e65746e6f63
I/DEBUG ( 1158): d2 657373412f736572 d3 726567616e614d74
I/DEBUG ( 1158): d4 0000d4cc0000d4b1 d5 0000d4e80000d4cd
I/DEBUG ( 1158): d6 0000d5040000d4e9 d7 0000d5200000d505
I/DEBUG ( 1158): d8 0000000000000000 d9 0000000000000000
I/DEBUG ( 1158): d10 0000000000000000 d11 0000000000000000
I/DEBUG ( 1158): d12 0000000000000000 d13 0000000000000000
I/DEBUG ( 1158): d14 0000000000000000 d15 0000000000000000
I/DEBUG ( 1158): d16 7265747369676552 d17 207365766974614e
I/DEBUG ( 1158): d18 0000d5740000d559 d19 0000d5900000d575
I/DEBUG ( 1158): d20 0000d5ac0000d591 d21 0000d5c80000d5ad
I/DEBUG ( 1158): d22 0000d5e40000d5c9 d23 0000d6000000d5e5
I/DEBUG ( 1158): d24 0000000000000000 d25 0000000000000000
I/DEBUG ( 1158): d26 0000000000000000 d27 0000000000000000
I/DEBUG ( 1158): d28 0000000000000000 d29 0000000000000000
I/DEBUG ( 1158): d30 0000000000000000 d31 0000000000000000
I/DEBUG ( 1158): scr 60000010
I/DEBUG ( 1158):
I/AudioHardwareQSD( 1163): AudioHardware pcm playback is going to standby.
I/DEBUG ( 1158): #00 pc 00017bcc /system/lib/libc.so
I/DEBUG ( 1158): #01 pc 0000c282 /system/lib/libnativehelper.so (jn iRegisterNativeMethods)
I/DEBUG ( 1158): #02 pc 00044778 /system/lib/libandroid_runtime.so (_ZN7android14AndroidRuntime21registerNativeMethodsEP7_JNIEnvPKcPK15JNINativeMet hodi)
I/DEBUG ( 1158): #03 pc 0005e0a6 /system/lib/libandroid_runtime.so (_ZN7android37register_android_content_AssetManagerEP7_JNIEnv)
I/DEBUG ( 1158): #04 pc 00044884 /system/lib/libandroid_runtime.so
I/DEBUG ( 1158): #05 pc 000448b6 /system/lib/libandroid_runtime.so (_ZN7android14AndroidRuntime8startRegEP7_JNIEnv)
I/DEBUG ( 1158): #06 pc 000449ac /system/lib/libandroid_runtime.so (_ZN7android14AndroidRuntime5startEPKcS2_)
I/DEBUG ( 1158): #07 pc 00008f0a /system/bin/app_process
I/DEBUG ( 1158): #08 pc 00016bd0 /system/lib/libc.so (__libc_init)
I/DEBUG ( 1158):
I/DEBUG ( 1158): code around pc:
I/DEBUG ( 1158): 4001bbac 4623b15c 2c006824 e026d1fb b12368db \.#F$h.,..&..h# .
I/DEBUG ( 1158): 4001bbbc 21014a17 6011447a 48124798 24002527 .J.!zD.`.G.H'%. $
I/DEBUG ( 1158): 4001bbcc f7f47005 2106edda ee86f7f5 460aa901 .p.....!....... F
I/DEBUG ( 1158): 4001bbdc f04f2006 94015380 94029303 ea32f7f5 . O..S........2 .
I/DEBUG ( 1158): 4001bbec 4622a905 f7f52002 f7f4ea3c 2106edc6 .."F. ..<...... !
I/DEBUG ( 1158):
I/DEBUG ( 1158): code around lr:
I/DEBUG ( 1158): 4001f860 41f0e92d 46804c0c 447c2600 68a56824 -..A.L.F.&|D$h. h
I/DEBUG ( 1158): 4001f870 e0076867 300cf9b5 dd022b00 47c04628 gh.....0.+..(F. G
I/DEBUG ( 1158): 4001f880 35544306 37fff117 6824d5f4 d1ee2c00 .CT5...7..$h.,. .
I/DEBUG ( 1158): 4001f890 e8bd4630 bf0081f0 00028c7e 41f0e92d 0F......~...-.. A
I/DEBUG ( 1158): 4001f8a0 fb01b086 9004f602 461f4815 4615460c .........H.F.F. F
I/DEBUG ( 1158):
I/DEBUG ( 1158): memory map around addr deadbaad:
I/DEBUG ( 1158): beec7000-beedc000 [stack]
I/DEBUG ( 1158): (no map for address)
I/DEBUG ( 1158): (no map above)
I/DEBUG ( 1158):
I/DEBUG ( 1158): stack:
I/DEBUG ( 1158): beedba20 4019702a /system/lib/libandroid_runtime.so
I/DEBUG ( 1158): beedba24 4b9f7e00 /dalvik-LinearAlloc (deleted)
I/DEBUG ( 1158): beedba28 4b9f75e8 /dalvik-LinearAlloc (deleted)
I/DEBUG ( 1158): beedba2c 0000002b
I/DEBUG ( 1158): beedba30 40048780 /system/lib/libc.so
I/DEBUG ( 1158): beedba34 40048718 /system/lib/libc.so
I/DEBUG ( 1158): beedba38 00000000
I/DEBUG ( 1158): beedba3c 4001f881 /system/lib/libc.so
I/DEBUG ( 1158): beedba40 00000000
I/DEBUG ( 1158): beedba44 beedba74 [stack]
I/DEBUG ( 1158): beedba48 40838acd /system/lib/libdvm.so
I/DEBUG ( 1158): beedba4c 00000036
I/DEBUG ( 1158): beedba50 401aca80 /system/lib/libandroid_runtime.so
I/DEBUG ( 1158): beedba54 4001e9ed /system/lib/libc.so
I/DEBUG ( 1158): beedba58 df0027ad
I/DEBUG ( 1158): beedba5c 00000000
I/DEBUG ( 1158): #00 beedba60 1d200031
I/DEBUG ( 1158): beedba64 52010c85
I/DEBUG ( 1158): beedba68 40196926 /system/lib/libandroid_runtime.so
I/DEBUG ( 1158): beedba6c 0000f2c8 [heap]
I/DEBUG ( 1158): beedba70 40196926 /system/lib/libandroid_runtime.so
I/DEBUG ( 1158): beedba74 fffffbdf
I/DEBUG ( 1158): beedba78 00000036
I/DEBUG ( 1158): beedba7c 0000f2c8 [heap]
I/DEBUG ( 1158): beedba80 40196926 /system/lib/libandroid_runtime.so
I/DEBUG ( 1158): beedba84 401d0285 /system/lib/libnativehelper.so
I/DEBUG ( 1158): #01 beedba88 0000f2c8 [heap]
I/DEBUG ( 1158): beedba8c 1d200031
I/DEBUG ( 1158): beedba90 0000f2c8 [heap]
I/DEBUG ( 1158): beedba94 4018dbb8 /system/lib/libandroid_runtime.so
I/DEBUG ( 1158): beedba98 40196926 /system/lib/libandroid_runtime.so
I/DEBUG ( 1158): beedba9c 4019365b /system/lib/libandroid_runtime.so
I/DEBUG ( 1158): beedbaa0 1d200025
I/DEBUG ( 1158): beedbaa4 4015177b /system/lib/libandroid_runtime.so
I/ServiceManager( 1155): service 'media.audio_flinger' died
I/ServiceManager( 1155): service 'media.player' died
I/ServiceManager( 1155): service 'media.camera' died
I/ServiceManager( 1155): service 'media.audio_policy' died
what the things need to change
assetmanager.smali ???
Click to expand...
Click to collapse
right you are. Read third stage, you will orient on those logs more fluently ;]
Ленс, у меня при декомпиляции frasmework.jar от miui.us(Desire HD) появляются ошибки: http://yadi.sk/d/8ylx4nI504DD
Подскажи,это нормально или нет?
Lens, mind you translate that to russian or ukrainian and share with me? My mail [email protected]
Click to expand...
Click to collapse
I'm not planning such translation in near future, sorry.
пока нет времени на подобный перевод, извините.
lens! log attached
http://sebsauvage.net/paste/?c0dc044424fe8df6#mlqLGewvWaQYfr2e/iPyiMotdNf1+oE50qBIn5IGPNA=
Hello,
Can same one help me out? My MIUI port has two mayor issue. First is sometimes my device not boot. Seems totally random for me. The logcat simple stops at a point, and it not continue the reboot process, but the boot animation just going and going. After I reboot my device it boot up without any problem... Sometimes boot up at the first time... sometimes not... Seems totally random.
Here is the log: http://pastebin.com/XVMBQS8L
As I mentioned it just stop at this and not go any further until I reset with the reset button.
My other problem with it is, after I receive an email and MIUI send a notification to the statusbar soon after it crash. And keeps crash (reboot) until I remove those notifacations. Here is the log: http://pastebin.com/Fn2zhAxL
Any idea how to fix it? Thank you very much in advance!
log attached
http://sebsauvage.net/paste/?c0dc044...E50qBIn5IGPNA=
Click to expand...
Click to collapse
that one:
Code:
E/AndroidRuntime(1305): java.lang.NoClassDefFoundError: com.android.server.CpuGovernorService
check your services.jar for CpuGovernorService I almost sure it's not there
sometimes my device not boot. Seems totally random for me. The logcat simple stops at a point, and it not continue the reboot process, but the boot animation just going and going
Click to expand...
Click to collapse
Sounds like there are codecs which faulty when talk with miui frameworks. Could you wipe out them?
after I receive an email and MIUI send a notification to the statusbar soon after it crash. And keeps crash (reboot) until I remove those notifacations.
Click to expand...
Click to collapse
yess, again faulty codecs..
Hey flytouch users, why you want miui for that MONSTER?
I could boot but it says SystemUI has stopped, updater has stopped. There is no status bar. But I can make calls, send SMS, wifi works, can apply themes. What could be the problem for SystemUI stopped error? Nowhere I could get the answer. In some thread I read that I have to copy framework-res-miui.xml to etc/permissions but I could not find this file anywhere.
Attaching the log file.

WiFi suddenly always searching, no ssids, nothing found

Hi,
I intensively searched for my problem, but found always other non-related stuff.
Recently (last 1, 2 days) my WiFi didn't connect to any APs any more. I was using CN nightlies and franco kernel, so today I did update CN without franco. Afterwards I downgraded CN and did a radio update and now I tried the stock 4.2.2 image with the flash-all script, which also seemed to reflash my radio.
The default wifi dialog always displayed the saved wifis only. And after installing stock, the initial wifi dialog displayed "searching" only for a very long time. Sometimes I see some networks and I even managed to connect to mine, but it dropped immediately.
I know, this is very undetailed, but do you have any recommendations / logs to look out / smth which could point me in the right direction? Or is my hardware just broken?
logcat outputs this when turning wi-fi on (on stock 4.2.2, unrooted):
D/WifiService( 499): setWifiEnabled: true pid=1942, uid=1000
D/BluetoothAdapter( 1942): 1110956336: getState() : mService = null. Returning STATE_OFF
W/Netd ( 156): No subsystem found in netlink event
D/NetlinkEvent( 156): Unexpected netlink message. type=0x11
W/Netd ( 156): No subsystem found in netlink event
D/NetlinkEvent( 156): Unexpected netlink message. type=0x11
D/Tethering( 499): sendTetherStateChangedBroadcast 1, 0, 0
D/Tethering( 499): InitialState.processMessage what=4
D/Tethering( 499): sendTetherStateChangedBroadcast 0, 0, 0
D/SoftapController( 156): Softap fwReload - Ok
D/CommandListener( 156): Setting iface cfg
D/CommandListener( 156): Trying to bring down wlan0
E/NetdConnector( 499): NDC Command {219 softap fwreload wlan0 STA} took too long (739ms)
I/wpa_supplicant( 9715): Successfully initialized wpa_supplicant
I/wpa_supplicant( 9715): rfkill: Cannot open RFKILL control device
I/wpa_supplicant( 9715): rfkill: Cannot open RFKILL control device
D/CommandListener( 156): Setting iface cfg
D/CommandListener( 156): Trying to bring up p2p0
D/BluetoothAdapter( 1942): 1110956336: getState() : mService = null. Returning STATE_OFF
Click to expand...
Click to collapse
when flashing stock (via the official google flash scripts), stock firmware files (qualcom, ..) are also flashed, right? or could I do something useful with the official google binaries?
Stupid post.... Ignore

[Solved] GT-I9205 Stuck At Boot Animation

Hi,
Currently I'm compiling OmniRom for Samsung Galaxy Mega GT-I9205.
When I try to boot it for the first time, the Omni is stuck at the boot animation...
May I know what is the general failure for this particular issue? and how to solve it?
logcat F/
Code:
12-29 19:01:06.722 F/MediaProfiles( 287): frameworks/av/media/libmedia/MediaProfiles.cpp:324 CHECK(quality != -1) failed.
12-29 19:01:06.722 F/libc ( 287): Fatal signal 6 (SIGABRT) at 0x0000011f (code=-6), thread 287 (zygote)
logcat /E
Code:
12-29 19:01:07.513 E/QualcommCamera( 754): Qint android::get_number_of_cameras(): E
...
12-29 19:01:07.513 I/AudioPolicyManagerBase( 754): loadAudioPolicyConfig() loaded /system/etc/audio_policy.conf
12-29 19:01:07.523 D/ALSADevice( 754): ALSA module opened
12-29 19:01:07.533 D/AudioHardwareALSA( 754): AudioHardware: DLOPEN successful for ACDBLOADER
12-29 19:01:07.533 D/ACDB-LOADER( 754): ACDB -> ACDB_CMD_INITIALIZE
12-29 19:01:07.533 E/ ( 754): [ACDB RTC]->rtc init done!->result [0]
12-29 19:01:07.533 E/Diag_Lib( 754): actp_diag_init: call diag init function with B5F20ECD
12-29 19:01:07.533 E/Diag_Lib( 754): Diag_LSM_Init: Failed to open handle to diag driver, error = 13
12-29 19:01:07.533 E/Diag_Lib( 754): actp_diag_init: diag init failed
12-29 19:01:07.533 E/ ( 754): [ACDB ACPH]->actp diag init done!
---
I suspect the media_profiles.xml is corrupted... but nope...
anywhere this is the comparison of media_profiles.xml between
melius >> https://github.com/Grarak/android_d...mon/blob/android-4.4/media/media_profiles.xml
hammerhead >> https://github.com/omnirom/android_device_lge_hammerhead/blob/android-4.4/media_profiles.xml
Diff >> http://diffchecker.com/ghjvhy51
and the device mk file
Code:
https://github.com/Grarak/android_device_samsung_melius-common/blob/android-4.4/melius-common.mk
# Media Profile
PRODUCT_COPY_FILES += \
$(LOCAL_PATH)/media/media_profiles.xml:system/etc/media_profiles.xml
# Note: Didnt have media_codecs.xml
Code:
https://github.com/omnirom/android_device_lge_hammerhead/blob/android-4.4/device.mk
PRODUCT_COPY_FILES += \
device/lge/hammerhead/media_codecs.xml:system/etc/media_codecs.xml \
device/lge/hammerhead/media_profiles.xml:system/etc/media_profiles.xml
Try using hammerhead (or another closer similar Qcom device)'s media_codec.xml and media_profiles.xml (or remove those files)
Thank your for the suggestion... look like i have to test on hammerhead xml afterall :crying:
but b4 that,
Im hoping someone able to tell me the logcat diagnostic
coz this file is currently used in CM11 (I9205) and they didnt have issue for this particular matter
Great news...
I managed to get it working... now omnirom have another working device in his pocket
Solutions: use media codec + profile from hammerhead... media codec + profile by touchwiz wont work
---
but i still have some problem
i able to get the camera to work, but the video recording is recording black screen...

[DEV][Thinktank]Porting 4K & Timeshift video from Z2 to other Xperia devices

I've seen dozens of threads about 4K recording and Timeshift video. None of them work. Let's keep all relevant DEVELOPMENT info here. It will be way easier for real developers and other people that could share some useful info or their attempts to get 4K & 120 FPS recording on other device than the Z2.
If you can contribute, please do it here instead of your own threads. Working alone is much harder. Let's work together on this, so we could finally get it to work. That's what XDA is all about.
Please don't spam this thread. I've made it to ACTUALLY get this finally working.
Featured on:
Softpedia
gsmarena
xperiablog.net
androidbeat
nextpowerup
gadgethelpline - no link to this thread
androidheadlines
techshout
sonyxperiaz.co.uk
XDA
Let me know about any others @lagalaga @Riyal - we're getting famous xD
If you want to discuss about it or ask some questions about it then do it here in the link below and keep this thread clean:
http://forum.xda-developers.com/showthread.php?t=2768422
Download it from here
Discuss/talk about it here.
Thanks to me, @lagalaga and @Riyal .
FAQ:
Is this going to work on my xxx?
For now it's only compatible with Z1 and Z1c on 4.4. We're working on fixing all of the bugs and then we'll try to bring it to more devices. Z Ultra will propably be the next device that will get this mod ported as it also boasts S800 chip.
Does it work on CM11?
You tell us, it's really fresh!
How do I install it?
1. Root your phone
2. Make a nandroid backup in a recovery, just in case something goes wrong.
3. Install xposed framework
4. Install Serajr's modulemodule
5. Enable Serjar's module after installing it.
6. Reboot.
7. Flash the latest zip from this post
8. Enjoy!
Why do I need Serajr's "Xperia Xposed (KK)" Module?
Serajr's module contains the so-called "SuperUser mod". Please be aware that this is different from the SuperUser root management app. So, what does this mean?
The .apks contained in this mod have a different signature from the original .apk files. This prevents them from using the extended camera functions added by Sony. Serajr's "Xperia Xposed" mod disables this signature verification. If you do not want to install the Xposed framework or Serajr's module, you can also disable signature verification by patching the services.jar. Please see DavidMKD's instructions here.
I keep getting "Camera not available" errors in 4k or Timeshift Video
You probably do not have SuperUser mod installed properly. If you are using Serajr's Xposed module, you need to make sure that the Xposed framework is installed properly. Just launch the Xposed app, click on the first menu it and make sure app_process and XposedBridge.jar are installed and highlighted in green. If it still does not work, make sure that Serajr's module is in fact activated. Yes, you need to activate a module after downloading it. This also requires a reboot after activating the module.
My camera freezes when I record in 4k
You probably have SteadyShot enabled. This is currently not supported. It's also a good idea to make sure you've flashed the latest version of this mod. The Steadyshot menu item is disabled in the APK, but sometimes the setting is already activated in the app's database. You need to go to app settings and clear data for the following apps (thanks @jasonx20ac):
Cameracommon
Cameras
Camera extensions
Camera
Video
Video is too dark in Timeshift Video/120fps
olokos said:
Try blinking 120 times per second. I bet you won't see anything anything even if you blink 10 times per second.. That's pretty much it with the camera.
Click to expand...
Click to collapse
This is a hardware limitation, nothing we can do.
How do I uninstall your mod
You revert back to the backup you made just before you installed our mod. You did get a nandroid, right?[/QUOTE]
xxx doesn't work, help/other random questions and stuff
Don't post about it in this thread!!!
If you want to discuss about it or ask some questions about it then do it here in the link below and keep this thread clean! :
http://forum.xda-developers.com/showthread.php?t=2768422
What else needs to be done?
For this moment only steadyshot doesn't work on 4k recording.
Let me know if you have any other questions and I'll add them to the FAQ.
Will this work on Z Ultra/Z/T/V etc?
For now we will work on the Steadyshot and Z Ultra. Anything else that is not a sony device and is running older SoC than Snapdragon 800 won't be able to do 4k videos due to hardware limitations. 120fps MIGHT be possible on other devices than the S800 family, but first we'll have to deal with steadyshot or Z Ultra port. For now this is only working for Z1/Z1c.
I did my attempt before just not posting this on xda. I did to the point of even reverse engineering the so files of some of the camera libs to inspect it. One thing I could say is the libraries & the kernel already supports 4k & 120fps recording. The only limit now is the android profile for 4k and 120fps.
This thing requires a mod of the android Camera HAL on the core framework and add support for 4k and 120fps which I am finding it hard to do since I have no advance knowledge with android as a whole. I think anyone with full experience with the whole android source code could help this like for example some of the core developers on cyanogen.
If someone can backtrack this function I think we can port 4k.
http://developer.android.com/refere...mera.Parameters.html#getSupportedVideoSizes()
What's the output of this function on the Z1 and the Z2? We could try with an xposed module for a start.
Wysłane z mojego C6903 przy użyciu Tapatalka
My preliminary results and idea
Hey guys, let's do this!
I'm reposting my previous meagre results from the other thread.
Start with fresh KK 757 ROM
Deodex ROM, install Sejrar Xposed mod for SuperUser
Install @xperiaz2's newSuperVideoCamera.apk
Push the Z2 media_profiles.xml
At this point, timeshift recording _stops_ working with a new error message:
Code:
E/CameraSource( 318): Requested frame rate (120) is not supported: 15,30,45,60
This means, to me, that the FPS setting is rejected further down in the validation chain. Some kind of success.
Things I have tried as well:
Push Z2 camera.msm8974.so, camera.qcom.so - does not really change anything
Push the Z2 libstagefright.so - this results in a boot loop. (Perhaps because the other libs did not match)
Decompile newSuperVideoCamera.apk - there is some validation code in there which reads an XML ressource that comes with the APK. But I don't think the limit is in there. After all, that APK works on the Z2.
My ideas at this point:
libcamera_clientsemc.so
libcamera_client.so
Push the z2 camera firmware? (/system/vendor/camera/)
Deodex ALL the APKs, disassemble ALL the .so files and grep
I'm super short on time. My next step would be looking at where
Code:
E/CameraSource( 318): Requested frame rate (120) is not supported: 15,30,45,60
is coming from. I did find that string in some .so files. I basically wonder if the limitation is somewhere in the main framework or in a supporting camera file, like the EEPROM firmware.
Code:
[email protected]:/mnt/lib$ grep -E -ri "Requested frame rate .* is not supported" *
Binary file libstagefright.so matches
[email protected]:/mnt/lib$ cd ..
[email protected]:/mnt$ grep -E -ri "Requested frame rate .* is not supported" *
Hm, I just looked at the libstagefright source:
Code:
if (frameRate != -1) {
CHECK(frameRate > 0 && frameRate <= 120);
const char* supportedFrameRates =
params->get(CameraParameters::KEY_SUPPORTED_PREVIEW_FRAME_RATES);
CHECK(supportedFrameRates != NULL);
LOGV("Supported frame rates: %s", supportedFrameRates);
char buf[4];
snprintf(buf, 4, "%d", frameRate);
if (strstr(supportedFrameRates, buf) == NULL) {
LOGE("Requested frame rate (%d) is not supported: %s",
frameRate, supportedFrameRates);
return BAD_VALUE;
}
Where is CameraParameters::KEY_SUPPORTED_PREVIEW_FRAME_RATES coming from? Is that even related to the problem at hand? It says _PREVIEW_.
Edit: I'll just leave this here: http://source.android.com/devices/camera/camera.html
---------- Post added at 09:58 AM ---------- Previous post was at 09:08 AM ----------
I took a very quick look at the libs in lib/*cam*.so. I disassembled them using an objdump build for ARM binaries. It seems like all parameter-related calls go elsewhere. I think lib/libcal* might contain the HAL. Or lib/camera/libexcal_halctrl_plugin.so.
---------- Post added at 10:25 AM ---------- Previous post was at 09:58 AM ----------
Instead of blindly disassembling files, I've made a list of cam-related which differ from the Z2 dump.
Differing files are prefixed with +/-.
Code:
[email protected]:~/download/sirius/vendor/lib$ diff -u /tmp/sirius_cam_libs.txt /tmp/z1_cam_libs.txt
--- /tmp/sirius_cam_libs.txt 2014-05-30 10:22:51.376765058 +0200
+++ /tmp/z1_cam_libs.txt 2014-05-30 10:20:54.143544043 +0200
@@ -1,71 +1,73 @@
93a1f926d3a12e9ca4824c956d508a66 libcamera_client.so
b3d3ef1d566b3707f5775e02d4692d52 libcamera_clientsemc.so
-a3edba0d2feef9e2ab9c3f4b91a3dc37 libcamera_metadata.so
+f4e5f060ae74c371e531202ef54100c6 libcamera_metadata.so
72c9d7ba9dbe6b73018545cde8ab372a libcameraextensionclient.so
d586a965ccd6f650cc77780a32dadc8c libcameraextensionjni.so
7a5579b182d8d2e1cd15ac94a30f81bd libcameraextensionservice.so
-494537a6cb1e5fb0035907d5cfcb5c8e libcameralight.so
+9d93128f6bed366f5ac2202862832236 libcameralight.so
27a1b4f36a139a4f83e5d009f4e2e850 libcameraservice.so
-0b75f5df9b40958b0b4974056ac5eee7 libcammw.so
-e4eef4a200f8a9ff29bcd839a878ca3f libgcam.so
-4b7b821ca095e3d8adcab5c75752812f libgcam_swig_jni.so
+0f359b812950510539bf51d59b57ccb8 libcammw.so
+bc03ce47cc6436beaea03e0b32d887a6 libgcam.so
+34e22f61aec410da9fe12ad122497bbf libgcam_swig_jni.so
e93d12f69d96d7d7ad7014ef5fc992e3 libimscamera_jni.so
-63be241b1f1789a4834329b54231312b libmm-qcamera.so
-f13787f130fcb2b9deeaa9c32df18016 libmmcamera_interface.so
-82cdf1807bbc6a598f610c932e0b6c1d libexcal_halctrl_plugin.so
-2a94119126f0b4740f1987a819d06a22 libexcal_idtctrl_plugin.so
-4a8a1430c8eab53f3ef738ca0241fcd3 LGI02BN1.dat
-bd0ef41189e3a35a39ba583a573bd074 LGI02BN1_CACAO.dat
-d871adc83bde1828d0b02f55f991be15 LGI02BN1_IMX132.dat
-3e49122f24e2b7a6e3d613959e288823 SEM02BN1.dat
-bd0ef41189e3a35a39ba583a573bd074 SEM02BN1_CACAO.dat
-d871adc83bde1828d0b02f55f991be15 SEM02BN1_IMX132.dat
-decd21e51fda98dd083a8928dbd47813 SOI20BS0.dat
+3775b2b51b778f99e42dc34784cf4a72 libmm-qcamera.so
+d5b1cba2549b64054de57b3a17c15196 libmmcamera_interface.so
+b6237e563273dc166c5024b74de281ac libexcal_halctrl_plugin.so
+841c2be632d27950545e5c0945cb15f8 libexcal_idtctrl_plugin.so
+db5dd107ac9d44984d10f03a33711f8b LGI02BN1.dat
+05a9e3971bc288c831644f69356493c4 LGI02BN1_CACAO.dat
+9dbee89f32e5d34e6660208d9fc4680c LGI02BN1_IMX132.dat
+d87835b026f535098358fa0a3699eaff SEM02BN1.dat
+05a9e3971bc288c831644f69356493c4 SEM02BN1_CACAO.dat
+9dbee89f32e5d34e6660208d9fc4680c SEM02BN1_IMX132.dat
+a8d0735567ba3b04175b0ecd864c85c1 SOI13BS9.dat
+0adf6448947587eda7b92649ebbbac61 SOI13BS9_CACAO.dat
+efbb4d4ce6312999362f78b5d1ab282c SOI20BS0.dat
ec390331a2fefa7db5930358da5b96e9 SOI20BS0_BU64296GWX.dat
-1421ff0f451398c3e585405a9ea1a10b SOI20BS0_CACAO.dat
-4e61468ac674fcb1020e2715dc8dec6b SOI20BS0_IMX200.dat
+519c86ac9bbbf99d7ad418bf82d82af3 SOI20BS0_CACAO.dat
+e4d94011669e4c47bb88f65e4dcea02c SOI20BS0_IMX200.dat
929c9f0b96f577e51edbcab9f1922e3e flash.dat
-13a874cc2898fb3fd9b254834a0f0433 product.dat
+ee8a3c0ef00c8f6c8a9458a5d4fc06c6 product.dat
e9bd05f4403d30c2512abb517168ee63 product_CACAO.dat
-ef22da65ed1cd0e6fa89ec2c89ae6fc8 lib-imscamera.so
-39137471837272672a0ff48ffee5b4be libmmcamera2_c2d_module.so
-3c37dc9eec1790c03605abf6ac3983ee libmmcamera2_cpp_module.so
-1196676d59f606e1c458864808d8d1c3 libmmcamera2_iface_modules.so
-eef8fbe9f58afed5add9500ab533485c libmmcamera2_imglib_modules.so
-63c3981f5217c6e119e7574af08acbf2 libmmcamera2_isp_modules.so
-bbdf76cb4c21655060013c67569b8151 libmmcamera2_pproc_modules.so
-2570d502c5e6bf29125853f704bb8ad5 libmmcamera2_sensor_modules.so
-43d17188bad9a05b60adf30e4c193719 libmmcamera2_stats_algorithm.so
-f78b5538003b3bd79705ca8a935d1112 libmmcamera2_stats_modules.so
-fef566ec52a6308f170db11f23dd188e libmmcamera2_vpe_module.so
+9f29f495df282a671b6c163be6cdb30d lib-imscamera.so
+a1a4cb8ce8577d2b6333894e081d8c65 libmmcamera2_c2d_module.so
+75c8ffb6fd8bad34adf5f5eb40f1e02a libmmcamera2_cpp_module.so
+363f6d193977c4d10d4c7cfc401d7108 libmmcamera2_iface_modules.so
+d4fe52fce08bfea259f47677fd909681 libmmcamera2_imglib_modules.so
+8be561df7588929d21eb10fd6391dcd8 libmmcamera2_isp_modules.so
+23857108a8de8cc45c6b7c029f7336a4 libmmcamera2_pproc_modules.so
+3f0f59d3ab545bd64b273fa30cc6bd1d libmmcamera2_sensor_modules.so
+e026ad2af46ef786e431fae5852dbf4d libmmcamera2_stats_algorithm.so
+a7aba420d1e21208c90feff869811caa libmmcamera2_stats_modules.so
+c059bd13cb4692d24efa60286b52a29f libmmcamera2_vpe_module.so
f7767985d442ba1dc3da4c9172f44b6f libmmcamera2_wnr_module.so
98a7907d524c953f3b666feb3407083c libmmcamera_faceproc.so
-fc8d85b36cbd033956681bff04a06aab libmmcamera_hdr_gb_lib.so
-85354bcc6210e2d9b4fb17631a995a95 libmmcamera_hdr_lib.so
-5823693674a58cc40eb561bc4e437086 libmmcamera_imglib.so
-3bdb7b22a3a4171d4fac9a74afb512af libmmcamera_ofilm_oty5f03_eeprom.so
-0e8922a3d08b237860ac02457f6f0bbd libmmcamera_sunny_p12v01m_eeprom.so
-1a3e919c181d002588be5a4f6a31bdf6 libmmcamera_sunny_p5v23c_eeprom.so
-db462f6d784d37f37aa15331059081af libmmcamera_sunny_q8v18a_eeprom.so
-868fb153dac744402900638af861429b libmmcamera_tintless_algo.so
-f4faadbd97ecb6117a5e84113ad6b05c libmmcamera_tintless_bg_pca_algo.so
-12a182ff996d13144a24fcd7f30dbdea libmmcamera_truly_cm7700_eeprom.so
-b6f78a47d7c5725b8386ed3b034b7a40 libmmcamera_tuning.so
-ec2d3de7882441c12a740053a0bb4a0f libmmcamera_wavelet_lib.so
-939f75ffb07bc2b04baa067ffd4aca7c liboemcamera.so
+8b91580908c8bbba9ca7a32ac0f64b6d libmmcamera_hdr_gb_lib.so
+8a4b3584449021844c734dbdd4ffbcce libmmcamera_hdr_lib.so
+41ecfa8bd5f328f9bd37b77fb6c61966 libmmcamera_imglib.so
+2d1061d71161491820ee66dd66b3288b libmmcamera_ofilm_oty5f03_eeprom.so
+c6d923dcfb40e5dbf93122111754b96b libmmcamera_sunny_p12v01m_eeprom.so
+dedd91532de2977c00491acc984f1df4 libmmcamera_sunny_p5v23c_eeprom.so
+53f614eb8ad32fa4d92c18e0fd98c19e libmmcamera_sunny_q8v18a_eeprom.so
+a879624ba28c110018e2ae8205f0497f libmmcamera_tintless_algo.so
+d483a68b03749eb13132aab0154e8690 libmmcamera_tintless_bg_pca_algo.so
+0a178ce9b50ab4e6c053a8e5cdc97f7e libmmcamera_truly_cm7700_eeprom.so
+f8cbd2dd4f0e077e6e89e01a1a5cd3d0 libmmcamera_tuning.so
+3e982409dc91f11bb5b4b114bb582e6c libmmcamera_wavelet_lib.so
+27867ab76d31a46729646e31344777e0 liboemcamera.so
53bd825ac673f39f5cfbac5a82694104 libchromatix_SKUAA_ST_gc0339_common.so
91fe5ec1d3f13b7578aebaeb87afa401 libchromatix_SKUAA_ST_gc0339_default_video.so
b24bf7fa8d3a7e8e65c4edea6a355845 libchromatix_SKUAA_ST_gc0339_preview.so
ec30ed4fc7279b148a910e29b453794b libchromatix_SKUAB_ST_s5k4e1_common.so
-f8e399fa4afc64eb884e3fdb4ab7813c libchromatix_SKUAB_ST_s5k4e1_default_video.so
-7a6d551c28832a0a457e0514e199bcfd libchromatix_SKUAB_ST_s5k4e1_hfr_120fps.so
-706ac5e46c06e0d523d1febfbd10cb22 libchromatix_SKUAB_ST_s5k4e1_hfr_60fps.so
-2b51ad44d62c26b8ff095f303af7dd71 libchromatix_SKUAB_ST_s5k4e1_hfr_90fps.so
-ff7d89fc55788a71ce43077e8a9ff647 libchromatix_SKUAB_ST_s5k4e1_liveshot.so
-980ce2a3181e5b502aaa339504148ad8 libchromatix_SKUAB_ST_s5k4e1_preview.so
-86c6ddcc6b8342001d2cfd8c2ec36b9b libchromatix_SKUAB_ST_s5k4e1_snapshot.so
-b7304ae1e3719dde6f4268b44d55c8cc libchromatix_SKUAB_ST_s5k4e1_video_hd.so
-09d5bbc80c14aa638007a174debdf60e libchromatix_SKUAB_ST_s5k4e1_zsl.so
+ab5c972a78c23ae116e9e779b87cbfd4 libchromatix_SKUAB_ST_s5k4e1_default_video.so
+b50b1bb5dc89682197271b4b2a38789f libchromatix_SKUAB_ST_s5k4e1_hfr_120fps.so
+59e4adc79ce7256b2209338230adf674 libchromatix_SKUAB_ST_s5k4e1_hfr_60fps.so
+436a828d36be2b06802110f73ad11eb4 libchromatix_SKUAB_ST_s5k4e1_hfr_90fps.so
+eb4a412e1e082242fa58e3e081b4c2fa libchromatix_SKUAB_ST_s5k4e1_liveshot.so
+500e12147dbab0efee22b437d3c814d1 libchromatix_SKUAB_ST_s5k4e1_preview.so
+523e4950ac1001d24a3367019a5b7fbf libchromatix_SKUAB_ST_s5k4e1_snapshot.so
+1ded59af8a39029052cd43240a831bb6 libchromatix_SKUAB_ST_s5k4e1_video_hd.so
+86d5a8c26730acb26ce157c351164848 libchromatix_SKUAB_ST_s5k4e1_zsl.so
30e4c8c92ca754fe9b3319fe3bf45cbc libchromatix_imx134_common.so
f4199401d6aa464df711f34d244dac2d libchromatix_imx134_default_video.so
2217b32c548fa7fe8c260e4455c4eaca libchromatix_imx134_hfr_120.so
@@ -73,24 +75,24 @@
06c848b52fcf7ab79dee52d62f6b9902 libchromatix_imx134_preview.so
2dd3f4ef1cbd4bde61690c62b7d551d4 libchromatix_imx134_snapshot.so
e340858bd283c2e5ebe753b20af4e135 libchromatix_imx135_common.so
-78baf0e548af301dab5ddfb62b0a5d87 libchromatix_imx135_default_video.so
+557c15cf742559c36d9adfa7d81c866d libchromatix_imx135_default_video.so
37e794554421d3ec27937df96cbd0a7c libchromatix_imx135_hfr_120.so
7202126d9c6ecae036ece26bfdb3dd55 libchromatix_imx135_hfr_60.so
aadad7e9723cf58cebc766fc9a989238 libchromatix_imx135_hfr_90.so
-485983c388f87bf55e1e81e82862b9bc libchromatix_imx135_preview.so
-298fdecf75d9d893cea8639fe1657055 libchromatix_imx135_snapshot.so
-a43d4e752ffbb02a2404099f1f29d7b8 libchromatix_imx135_video_hd.so
+8e261788956847653294aaaffd3e33de libchromatix_imx135_preview.so
+e6a45db75fd4b82ebdb3bb79ec3f19f6 libchromatix_imx135_snapshot.so
+73e9af28f258c93e9dbafa8f7a8af90a libchromatix_imx135_video_hd.so
eb15537549887f222df684c4cc9546e6 libchromatix_ov2720_common.so
e109a1a032788624205442b51a40ccf6 libchromatix_ov2720_default_video.so
79ae6e084a11ef919147c7803c716451 libchromatix_ov2720_hfr.so
154ae2090b2251393843aeb0895f1151 libchromatix_ov2720_liveshot.so
88676a68918ccf651a49c3144c73fdd7 libchromatix_ov2720_preview.so
3a3488e0beb32c6cf3966ba52aece6d3 libchromatix_ov2720_zsl.so
-bfa6d04363964b68da5d88ed962bc56f libchromatix_ov5648_oty5f03_common.so
-9e7aec4feee9c249588ba229f2264f3e libchromatix_ov5648_oty5f03_default_video.so
-b65a1e3f9be559c1971fd57610dfffd1 libchromatix_ov5648_oty5f03_preview.so
-3562ce083f12b84a17e737991d15b09a libchromatix_ov5648_oty5f03_snapshot.so
-fbead760a33e399d7f6344b477b3e2cc libchromatix_ov5648_oty5f03_zsl.so
+4cd474f4272dde42c312e20e543ba57e libchromatix_ov5648_oty5f03_common.so
+a3b1785b37a3c73bb9e8aafe82eb1b55 libchromatix_ov5648_oty5f03_default_video.so
+e4bff3685e2d3baa589bfb3c2e04ccf8 libchromatix_ov5648_oty5f03_preview.so
+fcbe6ae1c33590d34f975b7be6af0f4c libchromatix_ov5648_oty5f03_snapshot.so
+ccde332fe3e14d1c1d180c8c98fbf9c7 libchromatix_ov5648_oty5f03_zsl.so
0a5edc031cfbb47bb6b1125545bb5617 libchromatix_ov8825_common.so
f6439e6909141a189ad34d38294420fd libchromatix_ov8825_default_video.so
53d7376f9f1b5c774de57991c8832942 libchromatix_ov8825_hfr_120fps.so
@@ -107,8 +109,8 @@
b513f118deb40d2d2dcc72ca304fa3e7 libchromatix_ov8865_q8v18a_common.so
498ee582bbca041ca6f1d1e0d12b024e libchromatix_ov8865_q8v18a_default_video.so
dd75ef2335ae5a7cfb933d3e4ca7972b libchromatix_ov8865_q8v18a_hfr_120fps.so
-fbe827e6411845a40b1103cf9beba4aa libchromatix_ov8865_q8v18a_hfr_60fps.so
-a74ebec872caaf1ea9e1dd5f5157a442 libchromatix_ov8865_q8v18a_hfr_90fps.so
+905d11aa09200de08da7e4bd8a72f097 libchromatix_ov8865_q8v18a_hfr_60fps.so
+16c2afb0ba3a14389454eab3e23090fd libchromatix_ov8865_q8v18a_hfr_90fps.so
eab4ee1f0fa18b292c15ccee1ea91a10 libchromatix_ov8865_q8v18a_liveshot.so
c37ba33169dc6519f10aff55be157721 libchromatix_ov8865_q8v18a_preview.so
17df16cea2081afa29dddb2efa657bb2 libchromatix_ov8865_q8v18a_snapshot.so
---------- Post added at 11:00 AM ---------- Previous post was at 10:25 AM ----------
I decided lib-imscamera.so looked promising. I dumped the assembly with
Code:
arm-none-eabi-objdump -g -t -T -x -D -S -s lib-imscamera.so
and diff'ed the files. Nothing spectacular. I guess I should try to diff the assembly for all relevant files.
My bet would be those files:
Code:
-4a8a1430c8eab53f3ef738ca0241fcd3 LGI02BN1.dat -bd0ef41189e3a35a39ba583a573bd074 LGI02BN1_CACAO.dat -d871adc83bde1828d0b02f55f991be15 LGI02BN1_IMX132.dat -3e49122f24e2b7a6e3d613959e288823 SEM02BN1.dat -bd0ef41189e3a35a39ba583a573bd074 SEM02BN1_CACAO.dat -d871adc83bde1828d0b02f55f991be15 SEM02BN1_IMX132.dat -decd21e51fda98dd083a8928dbd47813 SOI20BS0.dat
I think that's the firmware for the camera which is used on the Z2 and the Z1. The thing is - which one is for the Z2 and which one is for the Z1 and how do we actually use it?...
Somebody should really try flashing the Z2 rom. I actually think that I might try that myself. I'll propably end up in a bootloop, but whatever.
olokos said:
My bet would be those files:
Code:
-4a8a1430c8eab53f3ef738ca0241fcd3 LGI02BN1.dat -bd0ef41189e3a35a39ba583a573bd074 LGI02BN1_CACAO.dat -d871adc83bde1828d0b02f55f991be15 LGI02BN1_IMX132.dat -3e49122f24e2b7a6e3d613959e288823 SEM02BN1.dat -bd0ef41189e3a35a39ba583a573bd074 SEM02BN1_CACAO.dat -d871adc83bde1828d0b02f55f991be15 SEM02BN1_IMX132.dat -decd21e51fda98dd083a8928dbd47813 SOI20BS0.dat
I think that's the firmware for the camera which is used on the Z2 and the Z1. The thing is - which one is for the Z2 and which one is for the Z1 and how do we actually use it?...
Somebody should really try flashing the Z2 rom. I actually think that I might try that myself. I'll propably end up in a bootloop, but whatever.
Click to expand...
Click to collapse
I've PM'd you those files. I'm not sure if anything is gained by flashing the Z2 firmware. Either you will end up in a bootloop or you will end up with a working camera without knowing which files/changes in the Z2 rom were responsible
lagalaga said:
I've PM'd you those files. I'm not sure if anything is gained by flashing the Z2 firmware. Either you will end up in a bootloop or you will end up with a working camera without knowing which files/changes in the Z2 rom were responsible
Click to expand...
Click to collapse
I've flashed the .DAT files myself (the camera firmware). Now mediaserver crashes. The backtrace however gives us a nice insight how the stack is built:
Code:
I/DEBUG ( 326): #03 pc 0000dd07 /system/lib/libc.so (calloc+10)
I/DEBUG ( 326): #04 pc 0000815f /system/lib/libcald_pal.so (PAL_MemAllocEx+14)
I/DEBUG ( 326): #05 pc 00017759 /system/lib/libcald_hal.so
I/DEBUG ( 326): #06 pc 00019a47 /system/lib/libcald_hal.so
I/DEBUG ( 326): #07 pc 00009419 /system/lib/libcald_hal.so
I/DEBUG ( 326): #08 pc 00038fdf /system/lib/libcald_server.so
I/DEBUG ( 326): #09 pc 0003c731 /system/lib/libcald_server.so (Cald_CamCtrl_Create+88)
I/DEBUG ( 326): #10 pc 0003081d /system/lib/libcald_server.so
I/DEBUG ( 326): #11 pc 00002285 /system/lib/libcald_client.so (Cald_Client_Create+12)
I/DEBUG ( 326): #12 pc 000129e7 /system/lib/hw/camera.qcom.so (android::SemcCameraHardware::startCamera()+6)
I/DEBUG ( 326): #13 pc 00012d8f /system/lib/hw/camera.qcom.so (android::SemcCameraHardware::createInstance(int, bool)+214)
I/DEBUG ( 326): #14 pc 00012f27 /system/lib/hw/camera.qcom.so (HAL_openCameraHardware+74)
I/DEBUG ( 326): #15 pc 00008fff /system/lib/hw/camera.qcom.so
I/DEBUG ( 326): #16 pc 00044c91 /system/lib/libcameraservice.so (android::CameraClient::initialize(camera_module*)+180)
I/DEBUG ( 326): #17 pc 0003e58f /system/lib/libcameraservice.so (android::CameraService::connectFinishUnsafe(android::sp<android::CameraService::BasicClient> const&, android::sp<android::IBinder> const&)+16)
I/DEBUG ( 326): #18 pc 00040333 /system/lib/libcameraservice.so (android::CameraService::connect(android::sp<android::ICameraClient> const&, int, android::String16 const&, int, android::sp<android::ICamera>&)+494)
I/DEBUG ( 326): #19 pc 00021943 /system/lib/libcamera_client.so (android::BnCameraService::onTransact(unsigned int, android::Parcel const&, android::Parcel*, unsigned int)+314)
I/DEBUG ( 326): #20 pc 0003e0ad /system/lib/libcameraservice.so (android::CameraService::onTransact(unsigned int, android::Parcel const&, android::Parcel*, unsigned int)+104)
----
Edit:
I decided to copy the following (with the camera firmware in place):
libcald_hal.so
libcald_pal.so
libcald_server.so
libcald_util.so
libexcal_system.so
Didn't work, camera apps crash with a different backtrace than the one above:
Code:
W/dalvikvm( 4903): Exception Ljava/lang/NullPointerException; thrown while initializing Lcom/sonymobile/android/addoncamera/supervideo/paramet
ers/VideoSize;
W/dalvikvm( 4903): Exception Ljava/lang/ExceptionInInitializerError; thrown while initializing Lcom/sonymobile/android/addoncamera/supervideo/
parameters/CapturingMode;
D/dalvikvm( 4903): Method.invoke() on bad class Lcom/sonymobile/android/addoncamera/supervideo/parameters/CapturingMode; failed
D/AndroidRuntime( 4903): Shutting down VM
W/dalvikvm( 4903): threadid=1: thread exiting with uncaught exception (group=0x4161dd88)
E/AndroidRuntime( 4903): FATAL EXCEPTION: main
E/AndroidRuntime( 4903): Process: com.sonymobile.android.addoncamera.supervideo, PID: 4903
E/AndroidRuntime( 4903): java.lang.ExceptionInInitializerError
E/AndroidRuntime( 4903): at com.sonymobile.android.addoncamera.supervideo.parameters.CapturingMode.<clinit>(CapturingMode.java:22)
E/AndroidRuntime( 4903): at java.lang.reflect.Method.invokeNative(Native Method)
E/AndroidRuntime( 4903): at java.lang.reflect.Method.invoke(Method.java:515)
E/AndroidRuntime( 4903): at java.lang.Enum$1.create(Enum.java:43)
E/AndroidRuntime( 4903): at java.lang.Enum$1.create(Enum.java:35)
E/AndroidRuntime( 4903): at libcore.util.BasicLruCache.get(BasicLruCache.java:54)
E/AndroidRuntime( 4903): at java.lang.Enum.getSharedConstants(Enum.java:209)
E/AndroidRuntime( 4903): at java.util.EnumMap.initialization(EnumMap.java:758)
E/AndroidRuntime( 4903): at java.util.EnumMap.<init>(EnumMap.java:404)
E/AndroidRuntime( 4903): at com.sonymobile.android.addoncamera.supervideo.parameters.ParamManager.<init>(ParamManager.java:36)
E/AndroidRuntime( 4903): at com.sonymobile.android.addoncamera.supervideo.SuperVideoActivity.setupCoreInstance(SuperVideoActivity.java:199)
E/AndroidRuntime( 4903): at com.sonymobile.android.addoncamera.supervideo.SuperVideoActivity.setUpAll(SuperVideoActivity.java:150)
E/AndroidRuntime( 4903): at com.sonymobile.android.addoncamera.supervideo.SuperVideoActivity.onCreate(SuperVideoActivity.java:144)
------
edit deleted
There's also something else missing... :-\
Could you also post this mediaserver log? Maybe that will tell us more. Do you even get the feel of 120 fps before pressing the record button or are you stuck on launching?
Wysłane z mojego C6903 przy użyciu Tapatalka
olokos said:
There's also something else missing... :-\
Could you also post this mediaserver log? Maybe that will tell us more. Do you even get the feel of 120 fps before pressing the record button or are you stuck on launching?
Click to expand...
Click to collapse
The first backtrace I posted is from mediaserver, I believe. The camera stuff lives inside.mediaserver so they both hoedown.
I have been.looking at framework.jar
I believe Sony has added some Strings in the Camera classes related.to Her support
The strings are both in Z1 and Z2. So it is probably not the framework. I can see.that it all comes down to Camera.getParameters
I am going to look at the Camera documentation link above some more to find.out where these are coming.from. Perhaps we can indeed use Xposed.
Preview does not look like 120fps to me
This is with the Z2 media_profile, no other mods.
Is it possible to get 120 or 60 fps working on XZ? I know it doesnt have S800 like Z1, but I've heard there are also some S4 devuces thar can record in slo-mo
Sent from my C6603 using Tapatalk
speedy56 said:
Is it possible to get 120 or 60 fps working on XZ? I know it doesnt have S800 like Z1, but I've heard there are also some S4 devuces thar can record in slo-mo
Sent from my C6603 using Tapatalk
Click to expand...
Click to collapse
It's not yet working on the Z1 so I can't tell you anything. It might not work on Z1 at all. Please post your questions HERE
Random fun facts:
Z2 SemcPowerSaveModule can apparently limit camera FPS to save power/cope with thermal stress. No such thing in Z1
data/com.sonymobile.cameracommon/databases/camera_status.db stores the camera status, but I believe that is more of a cache and not the camera configuration. The corresponding class is CameraCommon/smali/com/sonymobile/cameracommon/provider/CameraStatusProvider.
Code:
...> ;
1|power_off|0|0x0|0x0|0x0|0|0|off|off|off|off|off|off|off|off|off
sqlite> .dump
PRAGMA foreign_keys=OFF;
BEGIN TRANSACTION;
CREATE TABLE android_metadata (locale TEXT);
INSERT INTO "android_metadata" VALUES('de_DE');
CREATE TABLE status (_id INTEGER PRIMARY KEY AUTOINCREMENT, device_status TEXT, camera_id INTEGER, preview_resolution TEXT, picture_resolution TEXT, video_resolution TEXT, preview_max_fps INTEGER, video_recording_fps INTEGER, burst_shooting TEXT, time_shift TEXT, art_filter TEXT, face_identification TEXT, face_detection TEXT, scene_recognition TEXT, object_tracking TEXT, video_stabilizer TEXT, photo_light TEXT);
INSERT INTO "status" VALUES(1,'power_off',0,'0x0','0x0','0x0',0,0,'off','off','off','off','off','off','off','off','off');
DELETE FROM sqlite_sequence;
INSERT INTO "sqlite_sequence" VALUES('status',1);
COMMIT;
sqlite> select video_recording_fps from status;
0
I decompiled the Z2 apks (all of them) and found nothing interesting. Might just be me.
I looked at some of the .so files again - it would be interesting to have some kind of dependency graph.
Some random strings and greps:
Code:
[email protected]:/mnt/vendor/lib$ grep -ri q-fps-range-values *
Binary file lib-imscamera.so matches
[email protected]:/mnt/vendor/lib$ grep -ri preview-fps-range
Binary file lib-imscamera.so matches
strings mm-qcamera-app | grep -i -E '(hfr|fps|frame|rate|high)'
libcammw
[email protected]:~/download/sirius$ arm-none-eabi-readelf -a -D ./lib/libcammw.so | grep NEED
0x00000001 (NEEDED) Shared library: [libc.so]
0x00000001 (NEEDED) Shared library: [liblog.so]
0x00000001 (NEEDED) Shared library: [libdl.so]
0x00000001 (NEEDED) Shared library: [libcutils.so]
0x00000001 (NEEDED) Shared library: [libmmcamera_interface.so]
0x00000001 (NEEDED) Shared library: [libmmjpeg_interface.so]
./lib/libmmcamera_interface.so
doer
libcammw.so
cammw_sensor_get_caps
imx200_get_sensor_param
00009240 T cammw_camera_get_caps
0000b74c T cammw_camera_get_config
0000a8a8 T cammw_camera_get_port_info
cammw_get_info+0xd94
mm_camera_query_capability+0x54
I have a feeling that the magic is in libcammw.so. Replacing it leads to crashes related to liboemcamera.so and libmmcamera2_isp_modules.so.
In the log, I see this
Code:
06-01 08:52:51.084 10074 10135 E somc-camera-driver: SOCAM_ERR: sony_read_parameterfile: sony_read_parameterfile: FILE data_size too large (41152)
06-01 08:52:51.084 10074 10135 E somc-camera-driver: SOCAM_ERR: sony_read_parameterfile: sony_read_parameterfile: ERROR! param_version=0 != 263
06-01 08:52:51.084 10074 10135 E somc-camera-driver: SOCAM_ERR: sony_read_parameterfile: sony_read_parameterfile: cannnot a
Replacing the camera firmware again: no luck. Replacing the related libs: no luck.
In fact, even after removing the modifications, camera won't open anymore. I have to restore the system partition. Weird. So my last trial, replacing liboemcamera.so and libmmcamera2_isp_modules.so might have been irrelevant as the eeprom could have been messed up. Perhaps the camera needs to be powered down longer for that to unstick, but that's just a hypothesis.
Next step: attach a debugger to system/bin/mm-qcamera-daemon - that's where libcammw.so is used.
Next step after that: replace _all_ the *camera*so and *cal*so.
The GDB build in my NDK6 can't handle the shared object implementation on android. It does not see the libcammw.so.so stuff when attached to the camera daemon. I can't even continue the camera daemon after attaching. This is bull***.
Guys I was wandering if this helps you at all? As this says 120fps
Sent from my C6903 using XDA Premium 4 mobile app
adam20115 said:
Guys I was wandering if this helps you at all? As this says 120fps
Sent from my C6903 using XDA Premium 4 mobile app
Click to expand...
Click to collapse
Check the mediainfo of that file. I bet it's not 120fps if that's from using existing mods. If you can get that overlay or you know at least how to got that overlay just like in the previous mods, then let us know. @xperiaz2 @krabappel2548
If any of you wonder what would happen if you flash just the Z2 rom without kernel on the Z1,then it's a bootloop.
Wysłane z mojego C6903 przy użyciu Tapatalka
Guys try checking out camera.msm8794.so & camera.qcom.so. Also have a look at this thread.
http://forum.xda-developers.com/showthread.php?t=2548974
It's from a LG G2 thread. They manage to port 4k & 120fps. The exact patch that implemented the feature was v2.0.6 link here. http://d-h.st/QhP
Riyal said:
http://forum.xda-developers.com/showthread.php?t=2548974
It's from a LG G2 thread. They manage to port 4k & 120fps. The exact patch that implemented the feature was v2.0.6 link here. http://d-h.st/QhP
Click to expand...
Click to collapse
Won't help, unfortunately. Something deeper in the system does not support 120fps.
Stuff I did today:
I looked at the available implementation of a QCOM camera HAL somewhere in the Android source code: https://android.googlesource.com/platform/hardware/qcom/camera
I traced the methods to obtain the available frame rates.
Code:
// Set HFR
String8 hfrValues = createHfrValuesString(
m_pCapability->hfr_tbl,
m_pCapability->hfr_tbl_cnt,
HFR_MODES_MAP,
sizeof(HFR_MODES_MAP) / sizeof(QCameraMap));
In that implementation, the frame rates are queried over the V4L interface directly from the kernel. The camera HAL defines a query_capability method pointer which calls mm_camera_intf_query_capability. This in turn calls mm_camera_query_capability.
Code:
int32_t mm_camera_query_capability(mm_camera_obj_t *my_obj)
{
int32_t rc = 0;
struct v4l2_capability cap;
/* get camera capabilities */
memset(&cap, 0, sizeof(cap));
rc = ioctl(my_obj->ctrl_fd, VIDIOC_QUERYCAP, &cap);
if (rc != 0) {
CDBG_ERROR("%s: cannot get camera capabilities, rc = %d\n", __func__, rc);
}
pthread_mutex_unlock(&my_obj->cam_lock);
return rc;
}
I don't know if the code works the same on the Z1, but libmmcamera_interface.so has the same method names. The HAL is in libmmcamera_interface.so, btw, and you can just call query_capability. See the code for mm-qcamera-app:
Code:
my_cam_app->hal_lib.ptr = dlopen("libmmcamera_interface.so", RTLD_NOW);
test_obj->cam = cam_app->hal_lib.mm_camera_open(cam_id);
rc = test_obj->cam->ops->query_capability(test_obj->cam->camera_handle);
if (rc != MM_CAMERA_OK) {
CDBG_ERROR("%s: failed query_capability", __func__);
rc = -MM_CAMERA_E_GENERAL;
goto error_after_getparm_buf_map;
}
So, of course, I decided to look at the kernel. I diff'ed doomlords Z1 and Z2 kernels and there is no relevant difference in drivers/media/platform/msm.
So, relevant code in the HAL is in QCamera2HardwareInterface::initCapabilities, which obtains a cam_capability_t struct. The struct contains:
Code:
uint8_t fps_ranges_tbl_cnt; /* fps ranges table size */
cam_fps_range_t fps_ranges_tbl[MAX_SIZES_CNT]; /* fps ranges table */
uint8_t hfr_tbl_cnt; /* table size for HFR */
cam_hfr_info_t hfr_tbl[CAM_HFR_MODE_MAX]; /* HFR table */
This is the kernel-side code that handles the IOCTL:
Code:
static int camera_v4l2_querycap(struct file *filep, void *fh,
struct v4l2_capability *cap)
{
int rc;
struct v4l2_event event;
/* can use cap->driver to make differentiation */
camera_pack_event(filep, MSM_CAMERA_GET_PARM,
MSM_CAMERA_PRIV_QUERY_CAP, -1, &event);
rc = msm_post_event(&event, MSM_POST_EVT_TIMEOUT);
if (rc < 0)
return rc;
rc = camera_check_event_status(&event);
return rc;
}
The code for msm_post_event looks like it talks to an 'imaging server' in userspace.

[Q] NFC problems in CM12-based mods with klte/g900f

Hi,
the mod threads for the various cm12 builds claim that NFC is working, and there are also several user replies with reports that it works fine. Yet it doesn't work correctly for me, and at least some others: The device reports that NFC is working, I can activate and deactivate it, but accessing cards only works partially or not at all. The funny thing is that after flashing cm12, restoring an old cm11 nandroid backup does not restore NFC functionality. It doesn't matter if I do a clean install/full wipe. With Lollipop TW roms (I've tried XtreStoLite), NFC works fine.
I'll try to keep this top post up to date. Last update: 2015/03/15
We've found the issue that caused the major part of the problems. A configuration file must be adapted to the latest firmware. (update.zip version) This fix has been accepted upstream and is included in nightlies starting from 20150316.
There are cards/tags that still don't work, but do with stock, though. I've tested:
German eID (works)
Mifare Ultralight (works)
Beam (works)
EMV (works)
Mifare Classic (e.g. German "Mensacard", membership card from gym / McFit, ..) does not work. See below for debug output of libncf-nci.
Hi there,
I have exactly the same problem. NFC doesn't work for me neither. My device is a G900F from Germany, bought via Amazon using Euphoria OS which is based on CM12.
Ah, and just to get that straight, european G900F is klte without any other letters, right?
This post is obsolete: The problem is very likely not kernel-driver related.
I investigated a bit if the Kernel could be the problem. For this, I took the amplitude_rw kernel (based on Samsung's, but available from github) and Ktoonsez's version of the CM12 kernel . Both use the same version of the pn547 driver. The nfc-nci driver differs, but it doesn't make any difference if I copy the files over from the Samsung-based version and recompile. (The driver is disabled in the CM kernel by default anyway, I tried to enable it, of course. If I additionaly copy the related .so files from the Samsung rom that doesn't change anything either.) Continuing to investigate the differences, I noticed that the other difference is that the CM kernel has a hack that prevents the bcm2079x from being loaded on non-900P/I variants. I removed that line and noticed that the probe function of the driver did not complain that the device was missing, though from the looks of the code it would if it wasn't there. With that in mind, I tried to copy the bcm2079x firmware, configuration and .so files from a CM12 sprint build, but that didn't resolve the problem either.
More info: I've also compiled Ktoonsez's kernel with NFC_DEBUG set, and enabled the dynamic debug output for the driver. Doesn't look helpful to me, but for the sake of completeness:
Code:
<7>[ 967.651230] pn547_dev_open : 10,60
<6>[ 967.662071] pn547_dev_ioctl power on, irq=1
<6>[ 967.762268] pn547_dev_ioctl power off, irq=0
<6>[ 967.884563] pn547_dev_ioctl power on, irq=1
<6>[ 967.887970] pn547 : + w
<7>[ 967.888021] pn547_dev_write : writing 4 bytes.
<6>[ 967.889048] pn547 : - w
<7>[ 967.889159] pn547_dev_read : reading 3 bytes. irq=0
<6>[ 967.889218] pn547 : + r
<6>[ 967.889264] pn547: wait_event_interruptible : in
<6>[ 967.918905] pn547 : call
<6>[ 967.919127] pn547 : h
<6>[ 967.919655] pn547: i2c_master_recv
<7>[ 967.919741] pn547_dev_read : reading 3 bytes. irq=1
<6>[ 967.919793] pn547 : + r
<6>[ 967.920168] pn547: i2c_master_recv
<6>[ 967.921893] pn547 : + w
<7>[ 967.921938] pn547_dev_write : writing 3 bytes.
<6>[ 967.922314] pn547 : - w
<6>[ 967.922474] pn547 : call
<7>[ 967.922664] pn547_dev_read : reading 3 bytes. irq=1
<6>[ 967.922709] pn547 : + r
<6>[ 967.923138] pn547: i2c_master_recv
.. etc ..
<6>[ 998.860380] pn547: i2c_master_recv
<6>[ 998.873274] pn547_dev_ioctl power off, irq=0
During the log, I've had an NFC test application open and an NFC tag close to the device.
Last, I tried to check what's the problem with copying Samsung's files. If I use their NfcNci.adb, logcat throws
Code:
E/AndroidRuntime( 2655): FATAL EXCEPTION: main
E/AndroidRuntime( 2655): Process: com.android.nfc, PID: 2655
E/AndroidRuntime( 2655): java.lang.NoSuchMethodError: No static method isProductShip()I in class Landroid/os/Debug; or its super classes (declaration of 'android.os.Debug' appears in /system/framework/framework.jar)
E/AndroidRuntime( 2655): at com.android.nfc.NfcService.<clinit>(NfcService.java:164)
E/AndroidRuntime( 2655): at com.android.nfc.NfcApplication.onCreate(NfcApplication.java:61)
E/AndroidRuntime( 2655): at android.app.Instrumentation.callApplicationOnCreate(Instrumentation.java:1011)
E/AndroidRuntime( 2655): at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4553)
E/AndroidRuntime( 2655): at android.app.ActivityThread.access$1600(ActivityThread.java:147)
E/AndroidRuntime( 2655): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1357)
E/AndroidRuntime( 2655): at android.os.Handler.dispatchMessage(Handler.java:102)
E/AndroidRuntime( 2655): at android.os.Looper.loop(Looper.java:135)
E/AndroidRuntime( 2655): at android.app.ActivityThread.main(ActivityThread.java:5256)
E/AndroidRuntime( 2655): at java.lang.reflect.Method.invoke(Native Method)
E/AndroidRuntime( 2655): at java.lang.reflect.Method.invoke(Method.java:372)
E/AndroidRuntime( 2655): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:898)
E/AndroidRuntime( 2655): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:693)
After doing some more digging, I discovered that running
Code:
setprop nfc.nxp_log_level_global 3
as root enables tons of debug messages.
Maybe it's the firmware
Obsolete: This is unlikely. Its only Mifare cards that don't work, and the protocols are, as far as I can see, implemented in the userland library.
I noticed that after enabling NFC, one of the logcat outputs is
Code:
D/NxpHal ( 1081): FW version for FW file = 0x118
D/NxpHal ( 1081): FW version from device = 0x8011f
D/NxpHal ( 1081): FW image older than device's, skip update
Maybe this helps. (Could anyone with working NFC check which FW their device has? Should work the same way: Run setprop.. as root, enable NFC, search logcat output for the FW info, then reset the log level to 0.)
Mifare cards
I further noticed that holding a Mifare card near the antenna does trigger a reaction:
Code:
D/NxpTml ( 2317): PN547 - I2C Read successful.....
D/NxpNciR ( 2317): len = 23 > 61051401808000FF010904000454566739010800000000
D/NxpTml ( 2317): PN547 - Posting read message.....
D/NxpHal ( 2317): read successful status = 0x0
D/NxpHal ( 2317): NxpNci: RF Interface = MIFARE
D/NxpHal ( 2317): NxpNci: Protocol = MIFARE
D/NxpHal ( 2317): NxpNci: Mode = A Passive Poll
D/NxpExtns( 2317): const CNfcParam* CNfcConfig::find(const char*) const found MIFARE_READER_ENABLE=(0x1)
D/NxpTml ( 2317): PN547 - Write requested.....
D/NxpTml ( 2317): PN547 - Invoking I2C Write.....
D/NxpTml ( 2317): PN547 - Read requested.....
D/NxpTml ( 2317): PN547 - Invoking I2C Read.....
D/NxpNciX ( 2317): len = 7 > 20020401800100
D/NxpTml ( 2317): PN547 - I2C Write successful.....
D/NxpTml ( 2317): PN547 - Posting Fresh Write message.....
D/NxpTml ( 2317): PN547 - Tml Writer Thread Running................
D/NxpHal ( 2317): write successful status = 0x0
D/NxpTml ( 2317): PN547 - I2C Read successful.....
D/NxpNciR ( 2317): len = 4 > 40020106
D/NxpTml ( 2317): PN547 - Posting read message.....
D/NxpHal ( 2317): read successful status = 0x0
D/NxpHal ( 2317): > Deinit workaround for LLCP set_config 0x0 0x0 0xa
D/NxpHal ( 2317): phNxpNciHal_print_res_status: response status =STATUS_OK
D/NxpTml ( 2317): PN547 - Read requested.....
D/NxpTml ( 2317): PN547 - Invoking I2C Read.....
But nothing ever shows up in an NFC test app and I have to deactivate and reactivate NFC at this point to scan any of the working smartcards. So likely something in the mifare reader code does not work.
No NFC for me either
Running yesterday's nightly 20150310 on klte, no NFC either.
Any news? I have a SM-G900F and am unable to read NFC tags since updating to CM12 (now using 20150313).
My NFC was gone too after I updated to the latest nightly yesterday. It appears that copying the firmware file and configuration from XtreStoLite fixed that, and that I'm back to the situation I described in the top post again now. I'll attach both files (in one archive). They should be placed in the according directories in the /system partition, i.e.
etc/libnfc-nxp.conf -> /system/etc/libnfc-nxp.conf
system/vendor/firmware/libpn547_fw.so -> system/vendor/firmware/libpn547_fw.so
Could you test if copying them & rebooting (partially) restores NFC for you, too? (This should be possible with a file manager like X-Plore) If you don't want to use my archive, download XtreStoLite and extract the same files from their zip. Flashing CM should restore the original files in any case.
FirebirdDE said:
My NFC was gone too after I updated to the latest nightly yesterday. It appears that copying the firmware file and configuration from XtreStoLite fixed that, and that I'm back to the situation I described in the top post again now. I'll attach both files (in one archive). They should be placed in the according directories in the /system partition, i.e.
etc/libnfc-nxp.conf -> /system/etc/libnfc-nxp.conf
system/vendor/firmware/libpn547_fw.so -> system/vendor/firmware/libpn547_fw.so
Could you test if copying them & rebooting (partially) restores NFC for you, too? (This should be possible with a file manager like X-Plore) If you don't want to use my archive, download XtreStoLite and extract the same files from their zip. Flashing CM should restore the original files in any case.
Click to expand...
Click to collapse
Hey, that actually worked! I tried with an NFC reader app, and my nfc tag popped up right away.
So now we're missing only flashable zip
I will try this one and if it will work, I will try my scripting luck
And here it is, enjoy
I believe that it might suffice to update the configuration file. According to the logs, at least on my phone, the firmware file isn't used anyway.
FirebirdDE said:
My NFC was gone too after I updated to the latest nightly yesterday. It appears that copying the firmware file and configuration from XtreStoLite fixed that, and that I'm back to the situation I described in the top post again now. I'll attach both files (in one archive). They should be placed in the according directories in the /system partition, i.e.
etc/libnfc-nxp.conf -> /system/etc/libnfc-nxp.conf
system/vendor/firmware/libpn547_fw.so -> system/vendor/firmware/libpn547_fw.so
Could you test if copying them & rebooting (partially) restores NFC for you, too? (This should be possible with a file manager like X-Plore) If you don't want to use my archive, download XtreStoLite and extract the same files from their zip. Flashing CM should restore the original files in any case.
Click to expand...
Click to collapse
WOHOOOO! Thank you very much. My klte's NFC stopped working after flashing some alpha CM12. Some days ago I flashed cm-12-20150310-NIGHTLY-klte and the NFC problem remained. Now I replaced /etc/libnfc-nxp.conf with the config file you attached and NFC is working again.
Great! I've submitted this upstream, hopefully they'll accept this. It would be good to get feedback from someone who didn't experience any NFC issues in the first place, though, to make sure that this does not break NFC for anyone.
How awesome. NFC is really stable too and I think we have found the fix. I belive that many galaxy s5 CM12 users will be happy
Seems like the fix will be in the next nightly, too.
Still some Problems
Hello,
first at all thanks for your research!
I installed your fix for the NFC (tried both zip and "self" copy) but NFC is not working correct:
* sometimes when enable/disable NFC i get a sound (not allways)
* When i scan a tag (the first time after enabling nfc) i get a sound for scanning, but NFC TagInfo and Tagstand Writer did not recognize the tag.
* Sometimes NFC TagInfo by NXP is working but one one time... (hard to explain, often the scanning works when i open the settings?)
* The Scanning works only once till i deaktivate/active NFC
I used the the fix with cyanogenmod nightly 14-03-2015 and now with the Unofficial build [ROM] CyanogenMod 12.0 | Android 5.0 Lollipop | [03/13/2015]
Also installed the latest Xposed framwork and SELinux "Permissive" ...
Any ideas?
Thanks in advance
Which variant do you have? (I, and afaik all others that reported here, have a g900f)
What kind of NFC tag do you try to scan? (As I've already written in the top post, Mifare Classic does not work.)
The relevant logcat (see a few posts up, I've posted a setprop-command that enables debug output) would also be interesting.
Btw., the only sound I get is for the recognition of a NFC chip and its removal. Enabling/disabling makes no sound whatsoever.
FirebirdDE said:
Which variant do you have? (I, and afaik all others that reported here, have a g900f)
What kind of NFC tag do you try to scan? (As I've already written in the top post, Mifare Classic does not work.)
The relevant logcat (see a few posts up, I've posted a setprop-command that enables debug output) would also be interesting.
Btw., the only sound I get is for the recognition of a NFC chip and its removal. Enabling/disabling makes no sound whatsoever.
Click to expand...
Click to collapse
What i forgot i have G900F
Sometimes i really got sound for enable/disable!?!
Hard to tell you what type of NFC tag i use, bacuse i cannot read them at all.
I tried
* a writable tag from androidbands.com
* a company card
* a skiing card
I will try to logcat later this day....
FirebirdDE said:
Which variant do you have? (I, and afaik all others that reported here, have a g900f)
What kind of NFC tag do you try to scan? (As I've already written in the top post, Mifare Classic does not work.)
The relevant logcat (see a few posts up, I've posted a setprop-command that enables debug output) would also be interesting.
Btw., the only sound I get is for the recognition of a NFC chip and its removal. Enabling/disabling makes no sound whatsoever.
Click to expand...
Click to collapse
Here is a loccat (created with logcat extrem app - currently no adb available for me)
Actions:
Activate NFC // Scann androidbrands.com Tag // Deactivate NFC
Looks like problems with the "libpn547_fw":
Code:
Line 191: D/NxpFwDnld( 447): @@@/system/vendor/firmware/libpn547_fw.so
Line 193: E/NxpFwDnld( 447): NULL handler : unable to load the library file, specify correct path
Line 199: E/NxpFwDnld( 447): Image extraction Failed - invalid imginfo or imginfolen!!
Line 201: E/NxpFwDnld( 447): Error loading libpn547_fw !!
Line 209: E/NxpHal ( 447): Wrong FW Version >>> Firmware download not allowed
The file exists in "/system/vendor/firmware/libpn547_fw.so" with "rw-rw----"
ostauss said:
Here is a loccat (created with logcat extrem app - currently no adb available for me)
Actions:
Activate NFC // Scann androidbrands.com Tag // Deactivate NFC
Looks like problems with the "libpn547_fw":
Code:
Line 191: D/NxpFwDnld( 447): @@@/system/vendor/firmware/libpn547_fw.so
Line 193: E/NxpFwDnld( 447): NULL handler : unable to load the library file, specify correct path
Line 199: E/NxpFwDnld( 447): Image extraction Failed - invalid imginfo or imginfolen!!
Line 201: E/NxpFwDnld( 447): Error loading libpn547_fw !!
Line 209: E/NxpHal ( 447): Wrong FW Version >>> Firmware download not allowed
The file exists in "/system/vendor/firmware/libpn547_fw.so" with "rw-rw----"
Click to expand...
Click to collapse
changed permissions to "rw-rw-r--" looks like lib is correctly loaded, but scanned androidbands.com Tag still not recognized by TagInfo...

Categories

Resources