Записки утконоса-программиста

Sailfish OS - Hardware Adaptation Development Kit - Часть четвёртая

По результатам прошлой записи у нас появился свой локальный репозиторий с собранными файликами адаптации hybris, теперь пора собрать установочный образ!
Sailfish OS - Hardware Adaptation Development Kit - Часть четвёртая

Распаковать initram

Итак чтобы распаковать initram нам нужно:
1. https://github.com/osm0sis/mkbootimg - идём сюда качаем собираем устанавливаем
2. Разжимаем образ:
Код BASH:
  1. mkdir img
  2. unpackbootimg -i hybris-boot.img -o img
  3.  
Получится много файликов:
hybris-boot.img-base
hybris-boot.img-cmdline
hybris-boot.img-kerneloff
hybris-boot.img-ramdisk.gz
hybris-boot.img-tagsoff
hybris-boot.img-board
hybris-boot.img-dtb
hybris-boot.img-pagesize
hybris-boot.img-ramdiskoff
hybris-boot.img-zImage
Названия более или менее объясняют что это и куда. Нам нужен hybris-boot.img-ramdisk.gz - зазипованый cpio архивчик
3. Распаковываем его:
Код BASH:
  1. gzip -d img/hybris-boot.img-ramdisk.gz
  2. mv img/hybris-boot.img-ramdisk img/hybris-boot.img-ramdisk.cpio
дальше работаем с ним как с обычным cpio архивом

Hybris - макросы droid-version-hal

В прошлой заметке при создании пакета droid-version-hal у меня возникли некоторые вопросы с макросами. Вроде бы разобрался с ними - выкладываю сюда:

have_kernel_modules - если ядро собирается не монолитом, а с модулями
have_camera - если есть камера. Да она работает через gstreamer :)
have_mm_omx - если есть поддержка OpenMAX (пока не понял что есть это)
have_vibrator - есть ли вибрация
have_droid_bin - пакует /system в отдельный RPM
have_led - есть ли у устройства сигнальный светодиод

Sailfish OS - Hardware Adaptation Development Kit - Часть третья

Итак, по результатам прошлой серии у нас появился готовая сборка hybris для вашего устройства. Пора её упаковать. Это необходимо, для того, чтобы правильно встроить droid-hal-init .

ВНИМАНИЕ! В данном тексте приводится сборка droid-hal для nexus5 с кодовым именем hammerhead если вы собираете не под это устройство, то надо заменить и в тексте и В НАЗВАНИЯХ ФАЙЛОВ hammerhead на имя вашего устроства!

Sailfish OS - Hardware Adaptation Development Kit - Часть третья

Оно ожило!

Видео:

https://www.youtube.com/watch?v=D4UhPIS3iEw

Ну что сказать, железка показывает графику. И это хорошо. Lipstick не запускается, но я над этим работаю.

Bionic libhybris path

Тут оказывается надо ещё в исходники лезть бионика из за несовместимости некоторых вызовов. Таких как errno и tls. Спускаться так низко по стеку ни когда не случалось. Если честно доки пришлось читать в огромном количестве и многие из них, как патч в официальном репосе, только запутывал. На данный момент получился таким...

Исправление ошибки точки монтирования

Если возникает ошибка:
Код BASH:
  1. find: `device/*/generic': No such file or directory
  2. find: `device/unknown': No such file or directory
  3. find: `device/android': No such file or directory
  4. hybris/hybris-boot/Android.mk:67: ********************* /boot appears to live on ERROR: *fstab* not found
  5. hybris/hybris-boot/Android.mk:68: ********************* /data appears to live on ERROR: *fstab* not found
  6. hybris/hybris-boot/Android.mk:71: *** There should be a one and only one device entry for HYBRIS_BOOT_PART and HYBRIS_DATA_PART. Stop.
Это значит в файле $ANDROID_ROOT/hybris/hybris-boot/fixup-mountpoints отсутствует ваше устройство. Ради эксперимента на 90 строчке можете добавить своё. Не факт конечно что соберётся, но мне помогло.

Скоро...

Скоро...

Нужно из cyanogenmod

Для работы sailfish нам из cyanogenmod требуется
/system/lib
/system/bin
/system/etc
/system/build.prop
/build.prob
/system/framework
/system/usr/icu/icudt51l.dat
/system/usr/share/zoneinfo/tzdata
Вроде бы ни чего не забыл...

Hwcomposer запустился...вроде...

Сейчас будет краткий рассказ о том, как программирование вызывает паранойю. Когда ты программируешь и погружаешься в новую среду (а для меня среда ядра linux, android и прочее новая среда) то ты по умолчанию считаешь себя дебилом, а всех в округе гениями. Но иногда продакшен код, который используется в куче мест сделан так, что...не будем матом.
Суть: графикой в моей железкой заведует программулина pvrsrvinit которая, как я понял, обращается к ядру и говорит мол мне надо столько то памяти и прочее. Прога закрытая и что там происходит внутри мне не известно. И работает она кривоватенько...причины такой работы мне не понятны. Но суть в том что:
1 - Ядро создаёт устройства с такими правами доступа, что pvrsrvinit к ним не имеет доступа
2 - Если ты переставляешь права доступа и запускаешь pvrsrvinit, то он запускается и снова выставляет права так, что hwcomposer не хочет запускаться.
Это в кратце...а полную историю