Портирование ядра
Узнать инфу об устройстве
Самый простой способ установить мою программу Device Info HW, в настройках включить адреса i2c, если есть root, то включить и его, требуется для дисплея и для полной ифнормациии для новых устройств с android 7.0+
Старый вариант:
а) Чтобы узнать для какого оборудования собрано ядро в mtk, можно посмотреть ProjectConfig.mk, расположенный в /system/data/misc/
б) На каких шинах i2c висят устройства /sys/bus/i2c/drivers
в) свой lcm, если в проекте несколько
cat /proc/cmdline
Сборка ядра
Скачиваем исходники:
git clone https://github.com/andr7e/acer_v370_kk
и компилятор gcc:
https://android-build.…toolchain-4.9-2014.04/
(архив tar.gz)
Распаковать в /home/user/kernel_build
cd исходники
./build_fly446.sh
Структура исходников
/mediatek
custom/common/kernel - общие исходники (драйвера...)
custom/$project/kernel - для вашего устройства (cust'ы)
config/$project ProjectConfig.mk
$project = fly89_iq446_wet_kk
custom/$project/kernel/dct/dct/codegen.dws
GPIO пины, клавиши
Адаптация
mtk 6589
Отладка
Ядро
adb shell
su
dmesg
cat /proc/kmsg
Android
adb logcat > logcat.log
Запускаем только после того, как обнаружилось устройство.
Дисплей
Добавляем LCM драйвер для вашего дисплея
common/kernel/lcm
Прописываем в
common/kernel/lcm/mt65xx_lcm_list.c
В новых устройствах используется lk, и если название драйвера отличается от родного, загрузка не пойдет.
Клавиши
Смотрим лог dmesg при нажатии кнопки громкости "-" у нас так:
[0:swapper/0]kpd: (pressed) HW keycode = 10
[0:swapper/0]kpd: Linux keycode = 0
Нужно прописать правильное соответствие кодов.
Запускаем в wine DrvGen.exe, выбираем codegen.dws, на вкладке keypad settngs вводим в нужную ячейку.
Посмотреть, что получилось можно так: запускаем генерацию и смотрим в файле project_name/kernel/dct/cust_kpd.h
/* HW keycode [0 ~ 71] -> Linux keycode */
#define KPD_INIT_KEYMAP() \
{ \
[1] = KEY_VOLUMEUP, \
[10] = KEY_VOLUMEDOWN, \
}
KEY_VOLUMEUP прописано в ядре Linux
Дополнительный вариант:
<4>[ 297.333097] (0)[38:pmic_6325_threa]kpd: PMIC reset Key generate, pressed=0
<4>[ 297.333160] (0)[38:pmic_6325_threa]kpd: (released) HW keycode =115 using PMIC
Надо было прописать напротив Home key (в коде идет как KPD_PMIC_RSTKEY_MAP)
Тачскрин
GT9XX
В исходниках tpd_custom_gt9xx надо вписать конфиг, можно взять в /proc/gt9xx_config
Подсветка
проект/kernel/leds/mt65xx/cust_leds.c
В новых используется стандартный PWM, в более старых отдельный контроллер (Для него нужна cust ф-ция через GPIO)
Зарядка
bq24158 на mt6752 добавляем драйвер в power.
Датчики
Проверяем, чтобы i2c адрес соответствовал (одинаковый в пределах платформы)
Акселерометр
прописываем direction (отвечает за пересчет координат x, y, z)
Освещенности, приближения (alsps)
Шкала освещенности
Границы для датчика приближения
Камера
У меня получилось заставить работать основную камеры ov8830_raw + fm50af
Вот небольшая инструкция:
1) Добавляем поддержку в ядро
а) Вписываем в ProjectConfig.mk свои камеры
б) Включение камеры прописано в custom/your_project/camera/kd_camera_hw.c
Если вашей модели нет, берем из других исходников, желательно этой же платформы.
Подача питания, биты, GPIO.
Обычно достаточно стандартной инициализации для этой модели.
Если в логе видим id камеры, значит камеру завелась. (camera open id = 0x8830 (Для ov8830))
Затем прописываем автофокус (lens)
2) Сборка libcameracustom
Берем исходники из шапки - eastaeon89
Я просто добавил свои камеры в ProjectConfig.mk (оставить только свои, иначе может не работать)
Собираем
./mk проект dr libcameracustom
Проверяем, чтобы функции с вашей камерой были в libcameracustom.so (можно через nano)
3*
Если не получилось, поиском можно найти, где встречается дефолтная и сделать также для вашей (лучше по имени SENSOR_DRVNAME_OV8830_RAW)
Там мест 7 будет, но в большинстве уже есть поддержка:
kernel/imgsensor
hal/imgsensor
Для фронтальной ov9726_mipi_raw в eastaeon89 пришлось вписывать в sensorlist, в hal нашел только с mt6571 (в остальных не хватало файлов)
Либа собралась.
В kd_camera_hw.c взял от ov5647.
Фонарик, вспышка
constant_flashlight/led_strobe.c
GPIO_FLASH_LED_EN
Обычно достаточно прописать GPIO пин в codegen. Но бывают и по i2c, umpu.
flashlight hal
torchDuty - фонарик
afDuty - автофокус
pfDuty - вспышка
mfDuty - manual
Узнать инфу об устройстве
Самый простой способ установить мою программу Device Info HW, в настройках включить адреса i2c, если есть root, то включить и его, требуется для дисплея и для полной ифнормациии для новых устройств с android 7.0+
Старый вариант:
а) Чтобы узнать для какого оборудования собрано ядро в mtk, можно посмотреть ProjectConfig.mk, расположенный в /system/data/misc/
б) На каких шинах i2c висят устройства /sys/bus/i2c/drivers
в) свой lcm, если в проекте несколько
cat /proc/cmdline
Сборка ядра
Скачиваем исходники:
git clone https://github.com/andr7e/acer_v370_kk
и компилятор gcc:
https://android-build.…toolchain-4.9-2014.04/
(архив tar.gz)
Распаковать в /home/user/kernel_build
cd исходники
./build_fly446.sh
Структура исходников
/mediatek
custom/common/kernel - общие исходники (драйвера...)
custom/$project/kernel - для вашего устройства (cust'ы)
config/$project ProjectConfig.mk
$project = fly89_iq446_wet_kk
custom/$project/kernel/dct/dct/codegen.dws
GPIO пины, клавиши
Адаптация
mtk 6589
Отладка
Ядро
adb shell
su
dmesg
cat /proc/kmsg
Android
adb logcat > logcat.log
Запускаем только после того, как обнаружилось устройство.
Дисплей
Добавляем LCM драйвер для вашего дисплея
common/kernel/lcm
Прописываем в
common/kernel/lcm/mt65xx_lcm_list.c
В новых устройствах используется lk, и если название драйвера отличается от родного, загрузка не пойдет.
Клавиши
Смотрим лог dmesg при нажатии кнопки громкости "-" у нас так:
[0:swapper/0]kpd: (pressed) HW keycode = 10
[0:swapper/0]kpd: Linux keycode = 0
Нужно прописать правильное соответствие кодов.
Запускаем в wine DrvGen.exe, выбираем codegen.dws, на вкладке keypad settngs вводим в нужную ячейку.
Посмотреть, что получилось можно так: запускаем генерацию и смотрим в файле project_name/kernel/dct/cust_kpd.h
/* HW keycode [0 ~ 71] -> Linux keycode */
#define KPD_INIT_KEYMAP() \
{ \
[1] = KEY_VOLUMEUP, \
[10] = KEY_VOLUMEDOWN, \
}
KEY_VOLUMEUP прописано в ядре Linux
Дополнительный вариант:
<4>[ 297.333097] (0)[38:pmic_6325_threa]kpd: PMIC reset Key generate, pressed=0
<4>[ 297.333160] (0)[38:pmic_6325_threa]kpd: (released) HW keycode =115 using PMIC
Надо было прописать напротив Home key (в коде идет как KPD_PMIC_RSTKEY_MAP)
Тачскрин
GT9XX
В исходниках tpd_custom_gt9xx надо вписать конфиг, можно взять в /proc/gt9xx_config
Подсветка
проект/kernel/leds/mt65xx/cust_leds.c
В новых используется стандартный PWM, в более старых отдельный контроллер (Для него нужна cust ф-ция через GPIO)
Зарядка
bq24158 на mt6752 добавляем драйвер в power.
Датчики
Проверяем, чтобы i2c адрес соответствовал (одинаковый в пределах платформы)
Акселерометр
прописываем direction (отвечает за пересчет координат x, y, z)
Освещенности, приближения (alsps)
Шкала освещенности
Границы для датчика приближения
Камера
У меня получилось заставить работать основную камеры ov8830_raw + fm50af
Вот небольшая инструкция:
1) Добавляем поддержку в ядро
а) Вписываем в ProjectConfig.mk свои камеры
б) Включение камеры прописано в custom/your_project/camera/kd_camera_hw.c
Если вашей модели нет, берем из других исходников, желательно этой же платформы.
Подача питания, биты, GPIO.
Обычно достаточно стандартной инициализации для этой модели.
Если в логе видим id камеры, значит камеру завелась. (camera open id = 0x8830 (Для ov8830))
Затем прописываем автофокус (lens)
2) Сборка libcameracustom
Берем исходники из шапки - eastaeon89
Я просто добавил свои камеры в ProjectConfig.mk (оставить только свои, иначе может не работать)
Собираем
./mk проект dr libcameracustom
Проверяем, чтобы функции с вашей камерой были в libcameracustom.so (можно через nano)
3*
Если не получилось, поиском можно найти, где встречается дефолтная и сделать также для вашей (лучше по имени SENSOR_DRVNAME_OV8830_RAW)
Там мест 7 будет, но в большинстве уже есть поддержка:
kernel/imgsensor
hal/imgsensor
Для фронтальной ov9726_mipi_raw в eastaeon89 пришлось вписывать в sensorlist, в hal нашел только с mt6571 (в остальных не хватало файлов)
Либа собралась.
В kd_camera_hw.c взял от ov5647.
Фонарик, вспышка
constant_flashlight/led_strobe.c
GPIO_FLASH_LED_EN
Обычно достаточно прописать GPIO пин в codegen. Но бывают и по i2c, umpu.
flashlight hal
torchDuty - фонарик
afDuty - автофокус
pfDuty - вспышка
mfDuty - manual
Как-то всё достаточно "размыто" описано, сложно разобраться
ОтветитьУдалитькто захочет - тот поймет, дано направление..
ОтветитьУдалитьНа mt6757 не будет подобного направления?
ОтветитьУдалитьПока не планируется. Есть запись для 5.1 mt6752, может добавлю для 6/7 про dts - это теперь основное. Пока с новыми не сталкивался.
ОтветитьУдалитьЕсть исходники ядра на котором работает андроид 5.1.1 на mtk6589 как их портировать на fly iq446?
ОтветитьУдалитьПеренести проект fly из моих исходников, в исходники ядра под 5.1.1
УдалитьРебят, есть Huawei Y5 II 2016, хочу сделать туда нормальное ядро, но codegen.dws из исходников открывается только в DrvGen внутри исходников ядра и содержимое его явно отличается от того, что может показать DrvGen от 4Fwolf. Скажите, лучше браться за новое ядро и прописывать там dts или всё таки мучиться с codegen?
ОтветитьУдалитьРодной бери DrvGen, вообще от версии android/ядра они могут отличаться. Стоит собрать стоковые, если они нормальные. В данном случае codegen, это же mt6582, c 3.18 там уже в большей степени dts.
УдалитьЕсть ли исходники рабочего ядра под MTK Mt6589 на Android 5.1.1 и как портировать на ZTE Skate 2 (ZTE V967S)?
ОтветитьУдалить