No description or website provided.
C Java Makefile C++ Shell
Latest commit d3e2d9a Dec 21, 2016 @DeckerSU minor fixes before release
Permalink
Failed to load latest commit information.
cmhw/org/cyanogenmod/hardware init commit Dec 11, 2016
etc init commit Dec 11, 2016
flyme init commit Dec 11, 2016
include add mising MediaBufferGroup::acquire_buffer symbol Dec 12, 2016
lib_driver_cmd_mt66xx init commit Dec 11, 2016
libmtk_symbols minor fixes before release Dec 21, 2016
libshims trying to fix camera #2 Dec 15, 2016
meizupshelper init commit Dec 11, 2016
mrdump first try to add libmrdump Dec 12, 2016
mtk init commit Dec 11, 2016
other update readme Dec 13, 2016
overlay trying to fix camera Dec 15, 2016
patches some notes after update CM sources Dec 16, 2016
patches_decker minor fixes before release Dec 21, 2016
power init commit Dec 11, 2016
prebuilt some changes to build with mod framework_av Dec 20, 2016
recovery init commit Dec 11, 2016
ril/telephony/java/com/android/internal/telephony init commit Dec 11, 2016
rootdir trying to fix camera #2 Dec 15, 2016
seccomp init commit Dec 11, 2016
sepolicy some notes after update CM sources Dec 16, 2016
Android.mk init commit Dec 11, 2016
AndroidBoard.mk init commit Dec 11, 2016
AndroidProducts.mk init commit Dec 11, 2016
BoardConfig.mk minor fixes before release Dec 21, 2016
LICENSE init commit Dec 11, 2016
README.md new info about mtk color format Dec 19, 2016
build.log minor fixes before release Dec 21, 2016
build_fix.sh fix gello build Dec 11, 2016
cm.mk init commit Dec 11, 2016
cyanogenmod.org.crt fix gello build Dec 11, 2016
device_smart_surf2_4g.mk some changes to build with mod framework_av Dec 20, 2016
egl.cfg init commit Dec 11, 2016
encoders.txt _ZN7android13GraphicBufferC1Ejjij symbol fix on frameworks_native Dec 16, 2016
extract-files.sh init commit Dec 11, 2016
jdk_switch.sh prepare to fix camera Dec 14, 2016
logcat.txt trying to fix camera Dec 15, 2016
media_profiles.xml init commit Dec 11, 2016
openssl_problem.txt update readme Dec 13, 2016
proprietary-files.bak disable NAV bar (soft keys) Dec 12, 2016
proprietary-files.txt some fixes Dec 21, 2016
setup-makefiles.sh init commit Dec 11, 2016
symbols.txt revert all previous changes and add some log to libmtk_symbols Dec 15, 2016
system.prop disable NAV bar (soft keys) Dec 12, 2016
vendorsetup.sh init commit Dec 11, 2016

README.md

МТС Smart Surf2 4G (дерево устройства)

Это дерево - попытка собрать CM14.1 под МТС Smart Surf2 4G. За основу взята разработка oleg.svs - https://github.com/olegsvs/android_device_archos_persimmon , за что ему огромное спасибо. Без этого дерева ничего бы не получилось.

Внимание! Дерево в находится в режиме разработки. Прошивка собирается, но перед ее сборкой необходимо применить соответствующие патчи из папки patches и patches_decker, причем часть из них возможно придется применить вручную, т.к. в .sh скрипт для патча я мог забыть что-то дописать.

Что работает на данный момент?

Предупреждаю, что пока дерево в таком виде с комментариями здесь собрать достаточно сложно, но можно, если понимать о чем идет речь. К сожалению, пока это не тот вариант, чтобы сделать make -j# bacon и сразу же получить результат. Нужны правки исходников CM, применение патчей из дерева плюс ручное редактирование. Т.к. я пока не дозрел как все это нормально оформить.

Итак, работает:

  • Дисплей и тач, т.е. прошивка запускается и можно видеть изображение (да, да, этого я тоже долго от нее добивался).
  • Звук ... после нескольких суток работы проблемы с audio.primary.mt6737m.so удалось победить.
  • Связь! Да, да, ril заработал, правда только после замены mtk-ril.so и mtk-rilmd2.so от другого аппарата на CM.
  • Заработали основная и фронтальная камеры, заработал фонарик (пока не работает съемка видео). Также приложение камера пока падает, съемка возможна из меню Галерея -> Камера.
  • Не работают некоторые вещи, зависящие от vendor/lib/libwvm.so.

Рабочие заметки

[1] Если при сборке у вас появляется ошибка out of memory в jack, то нужно сделать следующее:

export JACK_SERVER_VM_ARGUMENTS="-Dfile.encoding=UTF-8 -XX:+TieredCompilation -Xmx4096m" export ANDROID_JACK_VM_ARGS="-Xmx4g -Dfile.encoding=UTF-8 -XX:+TieredCompilation" В $HOME/.jack-server/config.properties поставить jack.server.max-service=1.

Плюс, я запустил сборку как make -j2 bacon, вместо make -j5 bacon.

[2] Заметки:

  • find . -type f -printf "%p\n" - получение списка файлов в директории

[3] Устранение ошибки с Gello:

Идём на https://maven.cyanogenmod.org/ и экспортируем сертификат.

apt-get install ca-certificates (обычно уже есть в системе) install -m 0644 cyanogenmod.crt /usr/local/share/ca-certificates update-ca-certificates.

[4] Сделать revert этого commit'а:

Автор: Dimitry Ivanov <dimitry@google.com>  2016-01-22 00:25:32
Коммитер: Dimitry Ivanov <dimitry@google.com>  2016-01-22 03:43:04
Предок: 05c2f6b3d39ee92eae248e902a5a54fdcc6c696f (Merge "libc: hide __signalfd4 symbol")
Потомок:  a42483baad9a37297e6bbbe02d433ecbde890386 (Merge "Revert "Temporary apply LIBC version to __pthread_gettid"")
Ветка: remotes/github/cm-14.1, remotes/m/cm-14.1
Следует за: android-sdk-adt_r12
Предшествует: 

Revert "Temporary apply LIBC version to __pthread_gettid"

This reverts commit 0ef1d121b5e4845f4ef3b59ae9a1f99ceb531186.

Bug: http://b/26392296
Bug: http://b/26391427
Change-Id: I7bbb555de3a43813e7623ff6ad4e17874d283eca

Т.е. сделать apply LIBC version to __pthread_gettid.

** Обязательно! ***

cd ~/cm14.1/bionic/libc/
git revert bba395492a0bb6ee72d0ad8e4d468e852392220e

[5] Добавить /proc/ged в FD whitelist в frameworks/base/core/jni/fd_utils-inl.h

index 84252c0..2888064 100644
--- a/core/jni/fd_utils-inl.h
+++ b/core/jni/fd_utils-inl.h
@@ -58,6 +58,7 @@ static const char* kPathWhitelist[] = {
   "/dev/ion",
   "/dev/dri/renderD129", // Fixes b/31172436
   "/system/framework/org.cyanogenmod.platform-res.apk",
+  "/proc/ged" // [+] Decker
 #ifdef PATH_WHITELIST_EXTRA_H
 PATH_WHITELIST_EXTRA_H
 #endif

https://github.com/SlimRoms/frameworks_base/commit/81760e4b9026c3b3153a8e6691494484c7b92897

Либо вот так:

diff --git a/core/jni/fd_utils-inl-extra.h b/core/jni/fd_utils-inl-extra.h
index 993c320..3ef2b60 100644
--- a/core/jni/fd_utils-inl-extra.h
+++ b/core/jni/fd_utils-inl-extra.h
@@ -20,6 +20,9 @@
     "/proc/aprf",
 */

+#define PATH_WHITELIST_EXTRA_H \
+    "/proc/ged",
+
 // Overload this file in your device specific config if you need
 // to add extra whitelisted paths.
 // WARNING: Only use this if necessary. Custom inits should be

(!!!) По идее этот файл нужно положить в дерево устройства, но я не знаю как это сделать. Ни одного примера дерева с файлом fd_utils-inl-extra.h я не нашел.

[6] Чтобы запустилась связь mtk-ril.so и mtk-rilmd2.so не должны быть со стока, т.к. стоковые используют две функции из libnetutils.so :

  • ifc_set_txq_state
  • ifc_ccmni_md_cfg

Которых в исходниках CM14.1 просто нет. Решение найдено, mtk-ril.so и mtk-rilmd2.so должны быть взяты от другого аппарата на CM с рабочим радиомодулем. Либо же надо пересобрать ril из исходников (которых нет). Исходники RIL'а удалось найти только для 6752 здесь - http://4pda.ru/forum/index.php?showtopic=583114&view=findpost&p=50599174 , но я пока не понял как их правильно подключить к дереву и попробовать собрать. Поэтому воспользуемся prebuilt версией.

Что не повредит почитать, если все-таки найти исходники ril'а:

[7] 12-12 03:21:11.029 834 921 E WVMExtractor: Failed to open libwvm.so: dlopen failed: cannot locate symbol "_ZN7android16MediaBufferGroupC1Ev" referenced by "/system/vendor/lib/libwvm.so"...

https://d.fuqu.jp/c++filtjs/ -> _ZN7android16MediaBufferGroupC1Ev -> android::MediaBufferGroup::MediaBufferGroup()

frameworks/av/media/libstagefright

Вот тут http://forum.xda-developers.com/showpost.php?p=69901934&postcount=381 вроде пофиксили такую же ошибку.

Еще можно поискать так:

[8] HAL : dlopen failed: cannot locate symbol "_ZN7android11AudioSystem24getVoiceUnlockDLInstanceEv" referenced by "/system/lib/hw/audio.primary.mt6737m.so"...

Мой корявый патч для звука есть в 0001-mtk-audio-fix.patch0001-mtk-audio-fix.patch .

Еще audio.primary.mt6737m.so был нужен mrdump, вот откуда я его взял - https://github.com/nofearnohappy/vendor_AOSP/tree/master/mediatek/proprietary . Тоже интересная ссылка, есть исходники некоторых модулей Mediatek.

[9] libwvm.so

  • _ZNK7android11MediaSource11ReadOptions9getSeekToEPxPNS1_8SeekModeE -> android::MediaSource::ReadOptions::getSeekTo(long longandroid::MediaSource::ReadOptions::SeekMode) Варианты решения: поправлено в патче patches_decker\0002-fix-access-wvm-to-ReadOptions.patch
  • _Z8WV_SetupRP9WVSessionRKSsS3_R13WVCredentials14WVOutputFormatmPv -> WV_Setup(..
  • _ZN7android16MediaBufferGroup14acquire_bufferEPPNS_11MediaBufferE -> android::MediaBufferGroup::acquire_buffer(android::MediaBuffer**) Варианты решения: для предыдущих версий CM: https://gist.github.com/ishantvivek/ba0ec07f0e8cdf8ca3f2 https://review.cyanogenmod.org/#/c/77502/ add mising MediaBufferGroup::acquire_buffer symbol
  • _ZN7android16MediaBufferGroup14acquire_bufferEPPNS_11MediaBufferEb - android::MediaBufferGroup::acquire_buffer(android::MediaBuffer**bool)

Вообщем все что касается импортируемых функций в libwvm в стоковой прошивке импортировалось из libstagefright, в исходниках CM14.1 все что касается MediaBuffer'а было убрано из экспорта, и насколько я понял разработчики придерживаются мнения, что эти функции в stagefright в CM не должны быть экспортируемыми, т.е. решение которое предлагается командой Cyanogen - правьте код, который использует MediaBuffer. В нашем случае пересобрать libwvm мы не можем, т.к. она была взята из стоковой прошивки, поэтому единственный остающийся доступный вариант - это правка исходников stagefright и добавление всего недостающего в экспорт. Правильно я это сделал или нет - вопрос пока открытый. Но направление что править и как - есть.

После того как удалось все это поправить выяснилось что:

WVMExtractor: Failed to open libwvm.so: dlopen failed: cannot locate symbol "EVP_PKEY_new_mac_key" referenced by "/system/lib/libdrmmtkutil.so"...

Суть проблемы - EVP_PKEY_new_mac_key была в external/boringssl в CM13.0, однако в CM14.1 она просто отсутствует. Т.к. был вот такой вот коммит:

https://boringssl-review.googlesource.com/#/c/5120/ с названием Remove EVP_PKEY_HMAC.

Как решить это - я пока не придумал.

https://github.com/CyanogenMod/android_external_boringssl - 1e4884f615b20946411a74e41eb9c6aa65e2d5f3 (вот тут все сломалось)

git reset --hard b668df14e33797d154fa8c56c0cab5fa05b03b94 - откат 20e10d33d55155a05c50ff9d0c2f332984a842fd - вернуть все на прежнее место

https://boringssl-review.googlesource.com/#/c/5120/

[10] Случайно увидел еще один красивый вариант фикса недостающих экспортов при запуске /system/lib/hw/audio.primary.mt6737m.so (см. п. 8), в решении из 8 и моем патче необходимые экспорты добавляются в libmedia ... а здесь - https://github.com/olegsvs/android_device_cyanogen_mt6735-common/commit/24f4cac2876e583b1e01e186733c15407b129c52 все отстутствующее собирается в libmtk_symbols, которая потом в init'е помешается в LD_PRELOAD. Решение красиво тем, что в подключаемой таким способом библиотеке можно собрать заглушки для любых экспортов.

[11]

Есть 4 варианта для альтернативы java (предоставляет /usr/bin/java).

  Выбор   ПутьПриор Состояние
------------------------------------------------------------
  0/usr/lib/jvm/java-8-oracle/jre/bin/java  1081  автоматический режим
  1/usr/lib/jvm/java-7-openjdk-amd64/jre/bin/java   1071  ручной режим
  2/usr/lib/jvm/java-7-oracle/jre/bin/java  1 ручной режим
  3/usr/lib/jvm/java-8-openjdk-amd64/jre/bin/java   1081  ручной режим
* 4/usr/lib/jvm/java-8-oracle/jre/bin/java  1081  ручной режим

[12] Временно убрал из списка файлов:

# подсветка экрана и т.п.

lib/hw/audio.a2dp.default.so
lib/hw/audio_policy.stub.so
lib/hw/lights.mt6737m.so
lib/hw/radio.fm.mt6737m.so
lib/hw/remoteir.default.so  

Без этого подсветка экрана не гаснет, не работает авторегулировка яркости и т.п. Верну, когда разберусь с камерой.

http://4pda.ru/forum/index.php?s=&showtopic=715583&view=findpost&p=56099172 - камера заработала, описание как я это сделал тут.

[13] ...

[14] Работа продолжается ...

Три патча framework av (cm13.0) для Mediatek:

И другая информация к размышлению:

Лог:

12-14 10:16:54.737   303   303 I FFMPEG  : Last message repeated 1 times
12-14 10:16:54.737   303   303 I FFMPEG  : [mov,mp4,m4a,3gp,3g2,mj2 @ 0xb6053200] moov atom not found
12-14 10:16:54.737   303   303 E FFmpegExtractor: android-source:0xb3266000: avformat_open_input failed, err:Invalid data found when processing input
12-14 10:16:54.738   303   303 W FFmpegExtractor: sniff through BetterSniffFFMPEG failed, try LegacySniffFFMPEG
12-14 10:16:54.744   534   547 E Sensors : handleToDriver handle(0)
12-14 10:16:54.744   534   547 D Accel   : setDelay: (handle=0, ns=20000000)
12-14 10:16:54.744   534   547 E Sensors : new setDelay handle(0),ns(20000000)m, error(0), index(2)
12-14 10:16:54.744   534  1471 E Sensors : handleToDriver handle(0)
12-14 10:16:54.744   534  1471 D Accel   : setDelay: (handle=0, ns=20000000)
12-14 10:16:54.745   534  1471 E Sensors : new setDelay handle(0),ns(20000000)m, error(0), index(2)
12-14 10:16:54.746   303   303 E FFmpegExtractor: android-source:0xb3266000|file:: avformat_open_input failed, err:Invalid data found when processing input
12-14 10:16:54.746   303   303 D FFmpegExtractor: SniffFFMPEG failed to sniff this source
12-14 10:16:54.751   304   304 E MetadataRetrieverClient: failed to capture a video frame
12-14 10:16:54.751  1604  1693 E MediaMetadataRetrieverJNI: getFrameAtTime: videoFrame is a NULL pointer
12-14 10:16:54.752  1604  1693 W MediaThumbRequest: Can't create mini thumbnail for /storage/emulated/0/DCIM/OpenCamera/VID_20161214_101102.mp4

[15] Немного отвлеченная тема ... про дефолтные обои ...

/home/decker/cm14.1/vendor/cm/overlay/common/frameworks/base/core/res/res/drawable-xhdpi/default_wallpaper.png mkdir -p

[16] Сборка:

cd ~/cm14.1/
. build/envsetup.sh
breakfast smart_surf2_4g
. device/mts/smart_surf2_4g/build_fix.sh
(применение и ручная проверка применения всех патчей)
make -j2 bacon 2>&1 | tee device/mts/smart_surf2_4g/build.log

[17] Посмотреть динамические символы и сделать demangle:

nm -D libui.so | grep GraphicBufferC1 | c++filt

[18] Если после обновления исходников CM у вас не стартует init - попробуйте заново сделать git checkout . в папке /system/core/init, а тажке не применять вот этот патч 0002-Changes-for-more-level-log.patch . Также уделите особенное внимание пункту [4]. Вообщем в моем случае после наложения всех патчей и реинициализации /system/core/init/* все успешно собралось.

[19] В последнем патче 0005-_ZN7android13GraphicBufferC1Ejjij-symbol-fix-on-fram.patch я добавил экспорт _ZN7android13GraphicBufferC1Ejjij в сам framework native (т.е. в frameworks/native/), чтобы избежать "хаков" в mtk_symbols и т.п. Теперь libui.so будет собираться с этим символов в экспорте, что обеспечит нормальную работу старых BLOB'ов, которые используют этот экспорт.

[20] Хм ... кажется я понял как завести кодеки на камере ... в последних логах я увидел нечто вроде:

I am_proc_died: [0,3011,com.google.android.apps.maps]
D ActivityManager: cleanUpApplicationRecord -- 3011  
E OMXNodeInstance: setConfig(13f0033:google.aac.encoder, ConfigPriority(0x6f800002)) ERROR: Undefined(0x80001001)
I ACodec  : codec does not support config priority (err -2147483648) 
I MPEG4Writer: limits: 3023495040/0 bytes/us, bit rate: 14096000 bps and the estimated moov size 405123 bytes
I MPEG4Writer: Start time offset: 1000000 us 
I MediaCodecSource: MediaCodecSource (video) starting
I CameraSource: Using encoder format: 0x22   
I CameraSource: Using encoder data space: 0x104  
W CameraSource: Failed to set video encoder format/dataspace to 34, 260 due to -38   

Ну и плюс:

12-17 02:30:40.381   316   918 E OMXNodeInstance: getParameter(13c002b:MTK.ENCODER.AVC, ParamConsumerUsageBits(0x6f800004)) ERROR: UnsupportedIndex(0x8000101a)
12-17 02:30:40.383   319  2573 W ACodec  : do not know color format 0x7f000200 = 2130706944
12-17 02:30:40.384   319  2573 W ACodec  : do not know color format 0x7f000789 = 2130708361
12-17 02:30:40.386   319  2573 W ACodec  : do not know color format 0x7f000200 = 2130706944
12-17 02:30:40.389   319  2573 I ACodec  : setupAVCEncoderParameters with [profile: Baseline] [level: Level21]
12-17 02:30:40.392   319  2573 I ACodec  : [OMX.MTK.VIDEO.ENCODER.AVC] cannot encode color aspects. Ignoring.
12-17 02:30:40.392   319  2573 I ACodec  : [OMX.MTK.VIDEO.ENCODER.AVC] cannot encode HDR static metadata. Ignoring.
12-17 02:30:40.392   319  2573 I ACodec  : setupVideoEncoder succeeded
12-17 02:30:40.393   316   918 E OMXNodeInstance: setConfig(13c002b:MTK.ENCODER.AVC, ConfigPriority(0x6f800002)) ERROR: UnsupportedIndex(0x8000101a)

Почему-то мне кажется что проблема в форматах / цветовых профилях самой камеры, т.е. в том что система некорректно обрабатывает их. Камера в МТС Smart Surf2 4G еще и поддерживает HDR (?), по-крайней мере такая либа в libhdrproc.so есть в ее составе. Возможная идея по решению, смотрим вот это дерево и как там патчится MtkCameraParameters.cpp в патчах. Так вот, они патчат файл для добавления различных параметров камеры, которого в стоковом framework/av даже нет. Если посмотреть git внимательно, то в нем например есть репа такого фреймворка android_frameworks_av. Он конечно для старого CM, но смысл не в этом. Там как раз прикручен этот файл MtkCameraParameters.cpp. Т.е. теперь задача прикрутить MtkCameraParameters.cpp к фреймворку от CM14 и посмотреть что получится. При поиске изменений обращаем внимание на флаги и директивы условной компиляции по ключевикам: BOARD_HAS_MTK_HARDWARE в .mk и *MTK_HARDWARE** в *.c и .cpp ... (ну и .h конечно же).

[21] Немного новой информации о Color Format во фреймворке от Mediatek:

vendor/mediatek/proprietary/frameworks/native/include/media/openmax/OMX_IVCommon.h

typedef enum OMX_COLOR_FORMATTYPE {
...
    OMX_COLOR_FormatAndroidOpaque = 0x7F000789,
    OMX_MTK_COLOR_FormatYV12 = 0x7F000200,
...

WBR, Decker [ http://www.decker.su ]

Credits and thanks

  • CyanogenMod team
  • oleg.svs
  • ruslan_3_

Полезные ссылки