Background:
Can't locate a TWRP image for WI502Q device
@T10NAZ has been helping in his TWRP for WI501Q thread. It seems more polite to separate this discussion from his TWRP release thread.
Goal:
Build a booting TWRP image for WI502Q device
I'll be posting step-by-step directions as I make progress and I'll also be posting questions!
Steps
Repo
1) Install repo (sudo apt-get install repo)
1a) repo init -u git://github.com/joeykrim/platform_manifest_twrp_omni_wren.git -b twrp-6.0
1b) repo sync
2) Clone device configuration and kernel files
2a) mkdir -p device/asus/wren (Inside omni directory cloned in 1b)
2b) cd device/asus/ && git clone https://github.com/joeykrim/wren
3) Setup AOSP to compile and Compile
3a) . build/envsetup.sh
3b) lunch omni_wren-eng
3c) mka recoveryimage OR make clean && mka -j9 recoveryimage
Sources:
Referencing Dees_Troy's guide for compiling TWRP: http://forum.xda-developers.com/showthread.php?p=32965365#post32965365
Sparrow Omni ROM/Recovery compile files: https://github.com/asyan4ik/sparrow
Compiling kernel: http://forum.xda-developers.com/android/software/ultimate-guide-compile-android-kernel-t2871276 & https://source.android.com/source/building-kernels.html & @T10NAZ who compiled the kernel and provided the binary
Dependencies (Not complete list):
My GitHub forks include minor changes in order to compile without errors: https://github.com/joeykrim/platform_manifest_twrp_omni_wren & https://github.com/joeykrim/wren
OmniROM requires OpenJDK 7: sudo apt-get install openjdk-7-jdk (Reference for install, replace version 8 with 7)
Unresolved Issues:
1) Requires pre-compiled or compiling kernel
1a) Unable to pull from device: /dev/block/platform/msm_sdcc.1/by-name/boot: Permission denied and /dev/block/mmcblk0p11: Permission denied
1b) ASUS Kernel source: https://www.asus.com/au/support/Download/42/1/0/3/y5tW5D4k3zKBVKf4/32/
Latest version at this time: ASUS ZenWatch2 (WI502Q) Kernel source code V5.20.0.111 (MEC23G)
Requires a prebuilt toolchain - AOSP recommends: git clone https://android.googlesource.com/platform/prebuilts/gcc/linux-x86/arm/arm-eabi-4.6
export ARCH=arm
export CROSS_COMPILE=arm-eabi-
make wren_user_msm8226-perf_defconfig - results in many errors, as shown in the multiple posts below
@T10NAZ suggested using wren_defconfig instead of wren_user_msm8226-perf_defconfig, compiled a kernel and posted it: http://forum.xda-developers.com/showpost.php?p=65955638&postcount=13
2) Sparrow (BoardConfig.mk) calls for an older font file: font_7x16.h (bootable/recovery/minui.old/font_7x16.h). For now, disabled as compiling with it results in an error:
"In file included from bootable/recovery/minui/graphics.cpp:35:
bootable/recovery/minui/font_7x16.h:12:14: error: initialization of flexible array member is not allowed
.rundata = {
^"
u should post in the android dev or android orid dev section of the zenwatch 2 i think.
here in q&a it might get lost
just a friendly advice. i have a w501q. for mine there is T10NAZ's version which works perfectly if tethered (a flashable version would be nich to have )
4RK4N said:
u should post in the android dev or android orid dev section of the zenwatch 2 i think.
here in q&a it might get lost
just a friendly advice. i have a w501q. for mine there is T10NAZ's version which works perfectly if tethered (a flashable version would be nich to have )
Click to expand...
Click to collapse
im working on making it flashable
T10NAZ said:
I used this dev tree here so you can modify it to get twrp for the 502
or to practice by using the files available for the 501
all you need is the omni 6.0 source for twrp 3.0.0.0 and the latest kernel source and you are off to the races!
If you need help let me know
Click to expand...
Click to collapse
Summary
I have omni 6.0 source and using asyan4ik's device tree for sparrow, I have the sparrow TWRP recovery.img compiled in out/target/product/sparrow. The 501 device was a good starting point, thanks!
Now to 502, I'm unable to get a kernel binary to use in order to build TWRP. Any suggestions on how to either get the 502 kernel binary or get the 502 kernel source compiling?
Details:
1) I'm not able to get the kernel binary, which asyan4ik provided for the 501/sparrow device on the github repo. I tried but couldn't pull the kernel binary from the 502 device: /dev/block/platform/msm_sdcc.1/by-name/boot: Permission denied and /dev/block/mmcblk0p11: Permission denied
2) I do have the kernel source from ASUS's web site, but am seeing multiple errors when compiling with wren_user_msm8226-perf_defconfig or wren_userdebug_msm8226_defconfig.
Example of an error: "kernel/printk.c: In function ‘printk_buffer_rebase’:
kernel/printk.c:1022:38: error: ‘ASUS_SW_VER’ undeclared (first use in this function)
strncpy(asus_global.kernel_version, ASUS_SW_VER, sizeof(asus_global.kernel_version));
^
kernel/printk.c:1022:38: note: each undeclared identifier is reported only once for each function it appears in
scripts/Makefile.build:308: recipe for target 'kernel/printk.o' failed"
joeykrim said:
Summary
I have omni 6.0 source and using asyan4ik's device tree for sparrow, I have the sparrow TWRP recovery.img compiled in out/target/product/sparrow. The 501 device was a good starting point, thanks!
Now to 502, I'm unable to get a kernel binary to use in order to build TWRP. Any suggestions on how to either get the 502 kernel binary or get the 502 kernel source compiling?
Details:
1) I'm not able to get the kernel binary, which asyan4ik provided for the 501/sparrow device on the github repo. I tried but couldn't pull the kernel binary from the 502 device: /dev/block/platform/msm_sdcc.1/by-name/boot: Permission denied and /dev/block/mmcblk0p11: Permission denied
2) I do have the kernel source from ASUS's web site, but am seeing multiple errors when compiling with wren_user_msm8226-perf_defconfig or wren_userdebug_msm8226_defconfig.
Example of an error: "kernel/printk.c: In function ‘printk_buffer_rebase’:
kernel/printk.c:1022:38: error: ‘ASUS_SW_VER’ undeclared (first use in this function)
strncpy(asus_global.kernel_version, ASUS_SW_VER, sizeof(asus_global.kernel_version));
^
kernel/printk.c:1022:38: note: each undeclared identifier is reported only once for each function it appears in
scripts/Makefile.build:308: recipe for target 'kernel/printk.o' failed"
Click to expand...
Click to collapse
that error was the most annoying thing ever and i always had an issue with it.
download this Makefile and replace the one in the root of the kernel folder with that one, that will get rid of that error. You may run into more errors, and hopefully they are ones that i had problems with
T10NAZ said:
that error was the most annoying thing ever and i always had an issue with it.
download this Makefile and replace the one in the root of the kernel folder with that one, that will get rid of that error. You may run into more errors, and hopefully they are ones that i had problems with
Click to expand...
Click to collapse
Great, your Makefile cleared up the ASUS_SW_VER error!
Amazing they release kernel source that doesn't compile...
Next error...
1) TIF_MM_RELEASED undecleared
kernel/exit.c: In function ‘exit_mm’:
kernel/exit.c:510:28: error: ‘TIF_MM_RELEASED’ undeclared (first use in this function)
set_tsk_thread_flag(tsk, TIF_MM_RELEASED);
^
kernel/exit.c:510:28: note: each undeclared identifier is reported only once for each function it appears in
scripts/Makefile.build:308: recipe for target 'kernel/exit.o' failed
It does appear to be defined...
grep -irs TIF_MM_RELEASED *
arch/arm/include/asm/thread_info.h:#define TIF_MM_RELEASED 23 /* task MM has been released */
arch/arm64/include/asm/thread_info.h:#define TIF_MM_RELEASED 24
drivers/staging/android/lowmemorykiller.c: if (test_task_flag(tsk, TIF_MM_RELEASED))
kernel/exit.c: set_tsk_thread_flag(tsk, TIF_MM_RELEASED);
joeykrim said:
Great, your Makefile cleared up the ASUS_SW_VER error!
Amazing they release kernel source that doesn't compile...
Next error...
1) TIF_MM_RELEASED undecleared
kernel/exit.c: In function ‘exit_mm’:
kernel/exit.c:510:28: error: ‘TIF_MM_RELEASED’ undeclared (first use in this function)
set_tsk_thread_flag(tsk, TIF_MM_RELEASED);
Click to expand...
Click to collapse
Your grep maybe or maybe not shed light on the issue.
The first 2 are defined but not in the last 2, the last 2 are calling TIF_MM_RELEASED (at least that is my understanding) however it has a number after defining it
anyways travel to the folder kernel and open exit.c, and assuming you can see line numbers on your text editor, go to line 506, and that whole #ifndef config thing, maybe either do this:
Code:
#define TIF_MM_RELEASED 23
#ifndef CONFIG_UML
mm_released = mmput(mm);
if (mm_released)
set_tsk_thread_flag(tsk, TIF_MM_RELEASED);
#endif
or add the define TIF_MM under the config_UML.
Im almost thinking ASUS has some other things outside of the kernel source to allow it to build cleanly
T10NAZ said:
Your grep maybe or maybe not shed light on the issue.
The first 2 are defined but not in the last 2, the last 2 are calling TIF_MM_RELEASED (at least that is my understanding) however it has a number after defining it
anyways travel to the folder kernel and open exit.c, and assuming you can see line numbers on your text editor, go to line 506, and that whole #ifndef config thing, maybe either do this:
Code:
#define TIF_MM_RELEASED 23
#ifndef CONFIG_UML
mm_released = mmput(mm);
if (mm_released)
set_tsk_thread_flag(tsk, TIF_MM_RELEASED);
#endif
or add the define TIF_MM under the config_UML.
Im almost thinking ASUS has some other things outside of the kernel source to allow it to build cleanly
Click to expand...
Click to collapse
Defining it either before or inside of CONFIG_UML both worked to clear the error. Thanks!
Now two more errors:
kernel/asusdebug.c: In function 'proc_asusdebug_init':
kernel/asusdebug.c:1405:15: error: 'struct mutex' has no member named 'owner'
fake_mutex.owner = current;
^
kernel/asusdebug.c: At top level:
kernel/asusdebug.c:1418:15: error: expected declaration specifiers or '...' before string constant
EXPORT_COMPAT("qcom,asusdebug");
^
scripts/Makefile.build:308: recipe for target 'kernel/asusdebug.o' failed
joeykrim said:
Defining it either before or inside of CONFIG_UML both worked to clear the error. Thanks!
Now two more errors:
kernel/asusdebug.c: In function 'proc_asusdebug_init':
kernel/asusdebug.c:1405:15: error: 'struct mutex' has no member named 'owner'
fake_mutex.owner = current;
^
kernel/asusdebug.c: At top level:
kernel/asusdebug.c:1418:15: error: expected declaration specifiers or '...' before string constant
EXPORT_COMPAT("qcom,asusdebug");
^
scripts/Makefile.build:308: recipe for target 'kernel/asusdebug.o' failed
Click to expand...
Click to collapse
Whats weird is asusdebug.c is exactly the same on the 501 and 502,
this may be a dumb question but, are you make clean after every edit?
T10NAZ said:
Whats weird is asusdebug.c is exactly the same on the 501 and 502,
this may be a dumb question but, are you make clean after every edit?
Click to expand...
Click to collapse
Yes, I have been using make clean, but the system I'm using might be on newer versions that are causing issues (Ubuntu 16.04).
I'm assuming that since asusdebug.c is the same between devices, you didn't receive the same error?
I'm using the toolchain included with OmniROM: prebuilts/gcc/linux-x86/arm/arm-eabi-4.8/bin/arm-eabi- through export CROSS_COMPILE=/tmp/omni/prebuilts/gcc/linux-x86/arm/arm-eabi-4.8/bin/arm-eabi-
Downgraded gcc to 4.8 (/usr/bin/gcc -> /usr/bin/gcc-4.8)
Anything else I should check? Not sure if I should just grab Ubuntu 14.04, put it in a VM and start again from there...
joeykrim said:
Yes, I have been using make clean, but the system I'm using might be on newer versions that are causing issues (Ubuntu 16.04).
I'm assuming that since asusdebug.c is the same between devices, you didn't receive the same error?
I'm using the toolchain included with OmniROM: prebuilts/gcc/linux-x86/arm/arm-eabi-4.8/bin/arm-eabi- through export CROSS_COMPILE=/tmp/omni/prebuilts/gcc/linux-x86/arm/arm-eabi-4.8/bin/arm-eabi-
Downgraded gcc to 4.8 (/usr/bin/gcc -> /usr/bin/gcc-4.8)
Anything else I should check? Not sure if I should just grab Ubuntu 14.04, put it in a VM and start again from there...
Click to expand...
Click to collapse
only difference i have is i am running 15.10 with linaro 4.9.4 toolchain I wonder if itll get stuck on the same error if i take a crack at it
---------- Post added at 10:06 PM ---------- Previous post was at 09:41 PM ----------
So i tried it, I tar -xvf'd the source, added the path to the linaro chain, used my modified makefile for Sparrow, and typed make wren_defconfig (that might be highly unconventional) and make -j# ARCH=arm
I didnt hit the errors you had, but I ran into issues im more familiar with, starting with
Code:
In file included from drivers/devfreq/devfreq_trace.h:43:0,
from drivers/devfreq/devfreq_trace.c:20:
include/trace/define_trace.h:79:43: fatal error: ./devfreq_trace.h: No such file or directory
#include TRACE_INCLUDE(TRACE_INCLUDE_FILE)
^
compilation terminated.
which you just copy devfreq_trace.h into include/trace
after that I got the next error I encountered for sparrow,
Code:
drivers/hwmon/qpnp-adc-common.c: In function ‘qpnp_adc_scale_batt_therm’:
drivers/hwmon/qpnp-adc-common.c:732:4: error: ‘adcmap_btm_threshold’ undeclared (first use in this function)
adcmap_btm_threshold,
^
drivers/hwmon/qpnp-adc-common.c:732:4: note: each undeclared identifier is reported only once for each function it appears in
In file included from include/linux/kref.h:18:0,
from include/linux/of.h:21,
from drivers/hwmon/qpnp-adc-common.c:16:
and that issue, it calls either Sparrow or Wren specific battery voltages in the qpnp-adc-common.c for whatever you are working on. But it doesnt do that!! All you do is find qpnp-adc-common-wren.h
and copy pasta this:
Code:
static const struct qpnp_vadc_map_pt adcmap_btm_threshold[] = {
{-300, 1538},
{-200, 1538},
{-100, 1384},
{-90, 1372},
{-80, 1360},
{-70, 1346},
{-60, 1335},
{-50, 1322},
{-40, 1308},
{-30, 1298},
{-20, 1282},
{-10, 1269},
{0, 1255},
{10, 1251},
{20, 1238},
{30, 1225},
{40, 1212},
{50, 1199},
{60, 1186},
{70, 1173},
{80, 1160},
{90, 1147},
{100, 1122},
{110, 1111},
{120, 1097},
{130, 1086},
{140, 1074},
{150, 1060},
{160, 1048},
{170, 1035},
{180, 1021},
{190, 1009},
{200, 998},
{210, 987},
{220, 977},
{230, 966},
{240, 952},
{250, 943},
{260, 932},
{270, 923},
{280, 911},
{290, 902},
{300, 891},
{310, 881},
{320, 871},
{330, 860},
{340, 849},
{350, 839},
{360, 832},
{370, 823},
{380, 813},
{390, 807},
{400, 801},
{410, 790},
{420, 779},
{430, 774},
{440, 769},
{450, 760},
{460, 750},
{470, 742},
{480, 738},
{490, 730},
{500, 721},
{510, 714},
{520, 713},
{530, 707},
{540, 701},
{550, 695},
{560, 689},
{570, 683},
{580, 677},
{590, 671},
{600, 665},
{610, 659},
{620, 653},
{630, 647},
{640, 641},
{650, 635},
{660, 629},
{670, 623},
{680, 617},
{690, 611},
{700, 496},
{710, 490},
{720, 484},
{730, 478},
{740, 472},
{750, 466},
{760, 460},
{770, 454},
{780, 448},
{790, 442}
};
right above static const struct qpnp_vadc_map_pt adcmap_qrd_btm_threshold[] = { at line 56
There are a few more errors that can be easily fixed after that, Im not sure if its your 16.04 or omni's toochain but so far im just running into fixable errors that got in the way on sparrow as well
*Update*
I ran into 3 more issues, they are just indicating exactly where files are by adding /home/user/kernel/etc/etc/etc to things that say they dont know where its at
and I got it to build
{
"lightbox_close": "Close",
"lightbox_next": "Next",
"lightbox_previous": "Previous",
"lightbox_error": "The requested content cannot be loaded. Please try again later.",
"lightbox_start_slideshow": "Start slideshow",
"lightbox_stop_slideshow": "Stop slideshow",
"lightbox_full_screen": "Full screen",
"lightbox_thumbnails": "Thumbnails",
"lightbox_download": "Download",
"lightbox_share": "Share",
"lightbox_zoom": "Zoom",
"lightbox_new_window": "New window",
"lightbox_toggle_sidebar": "Toggle sidebar"
}
@joeykrim do you want the zimage that i created so you can mess with twrp for now? I will try and assist in any way i can to get you to build the kernel and twrp up for Wren users!
T10NAZ said:
only difference i have is i am running 15.10 with linaro 4.9.4 toolchain I wonder if itll get stuck on the same error if i take a crack at it
---------- Post added at 10:06 PM ---------- Previous post was at 09:41 PM ----------
So i tried it, I tar -xvf'd the source, added the path to the linaro chain, used my modified makefile for Sparrow, and typed make wren_defconfig (that might be highly unconventional) and make -j# ARCH=arm
I didnt hit the errors you had, but I ran into issues im more familiar with, starting with
Code:
In file included from drivers/devfreq/devfreq_trace.h:43:0,
from drivers/devfreq/devfreq_trace.c:20:
include/trace/define_trace.h:79:43: fatal error: ./devfreq_trace.h: No such file or directory
#include TRACE_INCLUDE(TRACE_INCLUDE_FILE)
^
compilation terminated.
which you just copy devfreq_trace.h into include/trace
after that I got the next error I encountered for sparrow,
Code:
drivers/hwmon/qpnp-adc-common.c: In function ‘qpnp_adc_scale_batt_therm’:
drivers/hwmon/qpnp-adc-common.c:732:4: error: ‘adcmap_btm_threshold’ undeclared (first use in this function)
adcmap_btm_threshold,
^
drivers/hwmon/qpnp-adc-common.c:732:4: note: each undeclared identifier is reported only once for each function it appears in
In file included from include/linux/kref.h:18:0,
from include/linux/of.h:21,
from drivers/hwmon/qpnp-adc-common.c:16:
and that issue, it calls either Sparrow or Wren specific battery voltages in the qpnp-adc-common.c for whatever you are working on. But it doesnt do that!! All you do is find qpnp-adc-common-wren.h
and copy pasta this:
Code:
static const struct qpnp_vadc_map_pt adcmap_btm_threshold[] = {
{-300, 1538},
{-200, 1538},
{-100, 1384},
{-90, 1372},
{-80, 1360},
{-70, 1346},
{-60, 1335},
{-50, 1322},
{-40, 1308},
{-30, 1298},
{-20, 1282},
{-10, 1269},
{0, 1255},
{10, 1251},
{20, 1238},
{30, 1225},
{40, 1212},
{50, 1199},
{60, 1186},
{70, 1173},
{80, 1160},
{90, 1147},
{100, 1122},
{110, 1111},
{120, 1097},
{130, 1086},
{140, 1074},
{150, 1060},
{160, 1048},
{170, 1035},
{180, 1021},
{190, 1009},
{200, 998},
{210, 987},
{220, 977},
{230, 966},
{240, 952},
{250, 943},
{260, 932},
{270, 923},
{280, 911},
{290, 902},
{300, 891},
{310, 881},
{320, 871},
{330, 860},
{340, 849},
{350, 839},
{360, 832},
{370, 823},
{380, 813},
{390, 807},
{400, 801},
{410, 790},
{420, 779},
{430, 774},
{440, 769},
{450, 760},
{460, 750},
{470, 742},
{480, 738},
{490, 730},
{500, 721},
{510, 714},
{520, 713},
{530, 707},
{540, 701},
{550, 695},
{560, 689},
{570, 683},
{580, 677},
{590, 671},
{600, 665},
{610, 659},
{620, 653},
{630, 647},
{640, 641},
{650, 635},
{660, 629},
{670, 623},
{680, 617},
{690, 611},
{700, 496},
{710, 490},
{720, 484},
{730, 478},
{740, 472},
{750, 466},
{760, 460},
{770, 454},
{780, 448},
{790, 442}
};
right above static const struct qpnp_vadc_map_pt adcmap_qrd_btm_threshold[] = { at line 56
There are a few more errors that can be easily fixed after that, Im not sure if its your 16.04 or omni's toochain but so far im just running into fixable errors that got in the way on sparrow as well
*Update*
I ran into 3 more issues, they are just indicating exactly where files are by adding /home/user/kernel/etc/etc/etc to things that say they dont know where its at
Click to expand...
Click to collapse
Excellent! Yea, not sure whether it's the not-yet-final Ubuntu 16.04 release, OmniROM's toolchain, or some odd combination. If I try again, I'll do everything in a VM with a fresh and final Ubuntu image...
T10NAZ said:
and I got it to build
@joeykrim do you want the zimage that i created so you can mess with twrp for now?
Click to expand...
Click to collapse
Yes, please!
Once I have the kernel image, I can focus on tinkering with the sparrow build files to get wren compiling and working. Hopefully won't take too much effort and fastboot booting...
joeykrim said:
Excellent! Yea, not sure whether it's the not-yet-final Ubuntu 16.04 release, OmniROM's toolchain, or some odd combination. If I try again, I'll do everything in a VM with a fresh and final Ubuntu image...
Yes, please!
Once I have the kernel image, I can focus on tinkering with the sparrow build files to get wren compiling and working. Hopefully won't take too much effort and fastboot booting...
Click to expand...
Click to collapse
Alrighty, I added both zImage and zImage-dtb just in case, dtb is mainly what you will work with.
And for twrp 3.0.0.0, there are a bit of changes you need to do to Sparrows files. So we will both be helping each other out with getting it stable and working right for sparrow and wren .
https://drive.google.com/file/d/0B_Duyz8Shz-YbmZ2ZE82VUZSR2c/view?usp=sharing
T10NAZ said:
Alrighty, I added both zImage and zImage-dtb just in case, dtb is mainly what you will work with.
And for twrp 3.0.0.0, there are a bit of changes you need to do to Sparrows files. So we will both be helping each other out with getting it stable and working right for sparrow and wren .
https://drive.google.com/file/d/0B_Duyz8Shz-YbmZ2ZE82VUZSR2c/view?usp=sharing
Click to expand...
Click to collapse
Great! Using the kernel you supplied and the slightly modified Build files from: https://github.com/lj50036/platform_manifest_twrp_omni and I forked here: https://github.com/joeykrim/wren
I was able to get the recovery (TWRP-v3.0.0-0) to compile and boot. wren TWRP v3.0.0-0 recovery.img: https://joeykrim.com/android/devices/wren/twrp-v3.0.0-0.jk-v1.recovery.img
Updates now posted in the development thread: http://forum.xda-developers.com/zen...nt/recovery-twrp-3-0-0-0-wi502q-root-t3343366
Bugs (All Fixed):
1) Unable to backup recovery partition - isn't visible from backup menu
2) The screen resolution is small, but it works! Any suggestions on adjusting the screen resolution?
I'll probably start with BoardConfig.mk settings...
fb0 reports (possibly inaccurate):
vi.bits_per_pixel = 32
vi.red.offset = 0 .length = 8
vi.green.offset = 8 .length = 8
vi.blue.offset = 16 .length = 8
setting GGL_PIXEL_FORMAT_RGBA_8888
double buffered
framebuffer: 0 (280 x 280)
I:Checking resolution...
I:Scaling theme width 0.875000x and height 0.875000x, offsets x: 0 y: 0