Sailfish OS - Hardware Adaptation Development Kit - Собираем пакеты для мультимедиа

Если у Вас есть драйвер ALSA для вашего устройства, то вам будет счастье и радость, если де его нет, то придётся пробрасывать драйвера из андроида. Сборку этих пакетов сегодня и рассмотрим.
Кстати в HADK вообще не затрагивается этот вопрос.
Sailfish OS - Hardware Adaptation Development Kit - Собираем пакеты для мультимедиа

Собираем audioflingerglue

Заходим в MER SDK и выполняем следующий скрипт
Код BASH:
  1. ubu-chroot -r $MER_ROOT/sdks/ubuntu
  2. cd $ANDROID_ROOT
  3. hadk
  4. source build/envsetup.sh
  5. breakfast $DEVICE
  6. make libaudioflingerglue miniafservice
  7.  
Далее всё уже делаем в SDK rootfs
Если всё прошло без ошибок, то в итоге мы получим необходимые нам файлы библиотек, теперь их нужно упаковать. Нам понадобятся 2 файла: упаковочный скрипт и SPEC файл для сборки в RPM.
Первый файл называем $ANDROID_ROOT/pack_source_af.sh вот его содержимое:
Код BASH:
  1. fold=audioflingerglue-0.0.1
  2. rm -rf $fold
  3. mkdir $fold
  4. mkdir -p $fold/out/target/product/${DEVICE}/system/lib
  5. mkdir -p $fold/out/target/product/${DEVICE}/system/bin
  6. mkdir -p $fold/external/audioflingerglue
  7. cp ./out/target/product/${DEVICE}/system/lib/libaudioflingerglue.so $fold/out/target/product/${DEVICE}/system/lib/
  8. cp ./out/target/product/${DEVICE}/system/bin/miniafservice $fold/out/target/product/${DEVICE}/system/bin/
  9. cp ./external/audioflingerglue/*.h $fold/external/audioflingerglue/
  10. cp ./external/audioflingerglue/hybris.c $fold/external/audioflingerglue/
  11. tar -cjvf ${fold}.tgz $fold
Перед выполнением его назначим его исполняемым файлом (внезапно да?)
Код BASH:
  1. chmod +x $ANDROID_ROOT/pack_source_af.sh
Теперь собираем RPM пакет, для его сборки нам понадобится SPEC файл
Код BASH:
  1. touch $ANDROID_ROOT/audioflingerglue.spec
С таким содержимым:
Код SPEC:
  1. %define strip /bin/true
  2. %define __requires_exclude ^.*$
  3. %define __find_requires %{nil}
  4. %global debug_package %{nil}
  5. %define __provides_exclude_from ^.*$
  6. %define device_rpm_architecture_string armv7hl
  7. %define _target_cpu %{device_rpm_architecture_string}
  8. Name: audioflingerglue
  9. Summary: Android AudioFlinger glue library
  10. Version: 0.0.1
  11. Release: 1
  12. Group: System/Libraries
  13. License: ASL 2.0
  14. Source0: %{name}-%{version}.tgz
  15. AutoReqProv: no
  16. %description
  17. %{summary}
  18. %package devel
  19. Summary: audioflingerglue development headers
  20. Group: System/Libraries
  21. Requires: audioflingerglue = %{version}-%{release}
  22. BuildArch: noarch
  23. %description devel
  24. %{summary}
  25. %prep
  26. %if %{?device_rpm_architecture_string:0}%{!?device_rpm_architecture_string:1}
  27. echo "device_rpm_architecture_string is not defined"
  28. exit -1
  29. %endif
  30. %setup
  31.  
  32. %build
  33. pwd
  34. ls
  35. tar -xvf %name-%version.tgz
  36. %install
  37. mkdir -p $RPM_BUILD_ROOT/%{_libexecdir}/droid-hybris/system/lib/
  38. mkdir -p $RPM_BUILD_ROOT/%{_libexecdir}/droid-hybris/system/bin/
  39. mkdir -p $RPM_BUILD_ROOT/%{_includedir}/audioflingerglue/
  40. mkdir -p $RPM_BUILD_ROOT/%{_datadir}/audioflingerglue/
  41. pushd %name-%version
  42. cp out/target/product/*/system/lib/libaudioflingerglue.so
  43. $RPM_BUILD_ROOT/%{_libexecdir}/droid-hybris/system/lib/
  44. cp out/target/product/*/system/bin/miniafservice
  45. $RPM_BUILD_ROOT/%{_libexecdir}/droid-hybris/system/bin/
  46. cp external/audioflingerglue/audioflingerglue.h $RPM_BUILD_ROOT/%{_includedir}/audioflingerglue/
  47. cp external/audioflingerglue/hybris.c $RPM_BUILD_ROOT/%{_datadir}/audioflingerglue/
  48. popd
  49. %files
  50. %defattr(-,root,root,-)
  51. %{_libexecdir}/droid-hybris/system/lib/libaudioflingerglue.so
  52. %{_libexecdir}/droid-hybris/system/bin/miniafservice
  53. %files devel
  54. %defattr(-,root,root,-)
  55. %{_includedir}/audioflingerglue/*.h
  56. %{_datadir}/audioflingerglue/hybris.c
Теперь собираем собственно RPM:

Код BASH:
  1. mb2 -s audioflingerglue.spec -t $VENDOR-$DEVICE-$PORT_ARCH build
  2. mv RPMS/*.rpm $ANDROID_ROOT/droid-local-repo/$DEVICE/
  3. createrepo $ANDROID_ROOT/droid-local-repo/$DEVICE
  4. sb2 -t $VENDOR-$DEVICE-$PORT_ARCH -R -msdk-install zypper ref
На выходе мы создаём репос для нашего audioflingerglue. Если этого не получилось пишите ошибки в комментариях, попробуем решить проблему. Далее, мы собираем модули для PulseAudio

Сборка pulseaudio-modules-droid-glue

Сперва убираемся за собой:
Код BASH:
  1. rm out/target/product/$DEVICE/system/bin/miniafservice
  2. rm out/target/product/$DEVICE/system/lib/libaudioflingerglue.so
Клонируем репозиторий и собираем модуль pulseaudio
Код BASH:
  1. mkdir -p $MER_ROOT/devel/mer-hybris
  2. cd $MER_ROOT/devel/mer-hybris
  3. PKG=pulseaudio-modules-droid-glue
  4. rm -rf $PKG
  5. git clone https://github.com/mer-hybris/pulseaudio-modules-droid-glue.git
  6. cd $PKG
  7. curl http://pastebin.com/raw/H8U5nSNm -o pulseaudio-modules-droid-glue.patch
  8. patch -p1 < pulseaudio-modules-droid-glue.patch
  9.  
  10. mb2 -s rpm/$PKG.spec -t $VENDOR-$DEVICE-$PORT_ARCH build
  11. mkdir -p $ANDROID_ROOT/droid-local-repo/$DEVICE/$PKG/
  12. rm -f $ANDROID_ROOT/droid-local-repo/$DEVICE/$PKG/*.rpm
  13. mv RPMS/*.rpm $ANDROID_ROOT/droid-local-repo/$DEVICE/$PKG
  14. createrepo $ANDROID_ROOT/droid-local-repo/$DEVICE
  15. sb2 -t $VENDOR-$DEVICE-$PORT_ARCH -R -m sdk-install zypper ref
На выходе имеем собранные модули Pulse в следующей статье мы продолжим сборку модулей для работы с мультимедиа в Sailfish, необходимых для работы с камерой и прочим.
Комментарии (0)

Нет комментариев. Ваш будет первым!

Copyright 2016-2024 NeoChapay