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

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

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

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


Перво наперво необходимо установить песочницу для сборки.

Код BASH:
  1. MERSDK $
  2. hadk
  3. sdk-assistant create $VENDOR-$DEVICE https://releases.sailfishos.org/sdk/targets/Sailfish_OS-3.2.0.12-Sailfish_SDK_Tooling-i486.tar.7z
  4. sdk-assistant create $VENDOR-$DEVICE-$PORT_ARCH https://releases.sailfishos.org/sdk/targets/Sailfish_OS-3.2.0.12-Sailfish_SDK_Target-$PORT_ARCH.tar.7z
Проверяем работоспособность песочницы:
Код BASH:
  1. MERSDK $
  2. cd $HOME
  3. cat > main.c << EOF
  4. #include <stdlib.h>
  5. #include <stdio.h>
  6. int main(void) {
  7.   printf("Hello, world!");
  8.   return EXIT_SUCCESS;
  9. }
  10. EOF
  11. sb2 -t $VENDOR-$DEVICE-$PORT_ARCH gcc main.c -o test
  12.  
Тут мы собираем в окружении простую программку которая выводит Hello, world! для проверки работоспособности компилятора и прочего.
Ну и запускаем её:
Код BASH:
  1. sb2 -t $VENDOR-$DEVICE-$PORT_ARCH ./test
Если всё прошло гуд, то переходим к следующему шагу.

Создаём SPEC файлы для сборки rpm

Первый у нас на очереди droid-hal-device собственной персоной - не забудьте поменять дефайны устройства под ваши
Код BASH:
  1. MER_SDK $
  2. cd $ANDROID_ROOT
  3. mkdir rpm
  4. cd rpm
  5. git init
  6. git submodule add https://github.com/mer-hybris/droid-hal-device dhd
  7. # Rename 'hammerhead' and other values as appropriate
  8. cat <<'EOF' >droid-hal-hammerhead.spec
  9. # These and other macros are documented in dhd/droid-hal-device.inc
  10. %define device hammerhead
  11. %define vendor lge
  12. %define vendor_pretty LG
  13. %define device_pretty Nexus 5
  14. %define installable_zip 1
  15. %include rpm/dhd/droid-hal-device.inc
  16. EOF
Будет правильным выложить это всё на ваш GitHub - мы же добрые и за свободу?
Код BASH:
  1. git add .
  2. git commit -m "[dhd] Initial content"
  3. # Create this repository under your GitHub home
  4. git remote add myname https://github.com/myname/droid-hal-hammerhead
  5. git push myname master
  6. cd -
Естественно, ваши урлы на гитхабе должны быть другие. Мои вот: https://github.com/neochapay/droid-hal-tiny210

Следующий на очереди - пакет конфигов hybris - droid-config
Код BASH:
  1. MER_SDK $
  2. cd $ANDROID_ROOT
  3. mkdir hybris/droid-configs -p
  4. cd hybris/droid-configs
  5. git init
  6. git submodule add https://github.com/mer-hybris/droid-hal-configs droid-configs-device
  7. mkdir rpm
  8. cat <<'EOF' >rpm/droid-config-hammerhead.spec
  9. # These and other macros are documented in
  10. # ../droid-configs-device/droid-configs.inc
  11. %define device hammerhead
  12. %define vendor lge
  13. %define vendor_pretty LG
  14. %define device_pretty Nexus 5
  15. %define dcd_path ./
  16. # Adjust this for your device
  17. %define pixel_ratio 2.0
  18. # We assume most devices will
  19. %define have_modem 1
  20. %include droid-configs-device/droid-configs.inc
  21. EOF
Как мы видим - в данном разделе мы определили некоторые параметры нашего устройства, такие как наличие модема и на сколько нам надо будет изменять pixel_ratio
И конечно же, выкладываем на gihub потому что мы молодцы.
Код BASH:
  1. git add .
  2. git commit -m "[dcd] Initial content"
  3. # Create this repository under your GitHub home
  4. git remote add myname https://github.com/myname/droid-config-hammerhead
  5. git push myname master
  6. cd -
Опять же - не забываем менять урлы у меня получился такой: https://github.com/neochapay/droid-config-tiny210
Следующий скрипт добавить в древо hybris новое устройство и поможет настроить переменные окружения.
Код BASH:
  1. cd $ANDROID_ROOT
  2. rpm/dhd/helpers/add_new_device.sh
Настраиваем переменные окружения:
Код BASH:
  1. cd hybris/droid-configs
  2. COMPOSITOR_CFGS=sparse/var/lib/environment/compositor
  3. mkdir -p $COMPOSITOR_CFGS
  4. cat <<EOF >$COMPOSITOR_CFGS/droid-hal-device.conf
  5. # Config for $VENDOR/$DEVICE
  6. EGL_PLATFORM=hwcomposer
  7. QT_QPA_PLATFORM=hwcomposer
  8. # Determine which node is your touchscreen by checking /dev/input/event*
  9. LIPSTICK_OPTIONS=-plugin evdevtouch:/dev/input/event0
  10. -plugin evdevkeyboard:keymap=/usr/share/qt5/keymaps/droid.qmap
  11. EOF
Тут стоит явно обратить внимание на переменные! У меня графика заработала только при EGL_PLATFORM=fbdev в Вашем устройстве может быть по другому. Ну и смотрите внимательно куда коннектится тач. Проверять достаточно просто:
Код BASH:
  1. cat /dev/input/event0
И тыкаем по экрану - посыпались символы - вот ваш тач.

Опять таки - выкладываем всё в гит. Почему? Потому что мы молодцы.
Код BASH:
  1. git add .
  2. git commit -m "[dcd] Patterns and compositor config"
  3. git push myname master
Далее пакет версии droid-hal - всё привычно всё по кругу.
Код BASH:
  1. cd -
  2. mkdir hybris/droid-hal-version-hammerhead
  3. cd hybris/droid-hal-version-hammerhead
  4. git init
  5. git submodule add https://github.com/mer-hybris/droid-hal-version
  6. mkdir rpm
  7. cat <<'EOF' >rpm/droid-hal-version-hammerhead.spec
  8. # rpm_device is the name of the ported device
  9. %define rpm_device hammerhead
  10. # rpm_vendor is used in the rpm space
  11. %define rpm_vendor lge
  12. # Manufacturer and device name to be shown in UI
  13. %define vendor_pretty LG
  14. %define device_pretty Nexus 5
  15. # See ../droid-hal-version/droid-hal-device.inc for similar macros:
  16. %define have_vibrator_native 1
  17. %define have_led 1
  18. %include droid-hal-version/droid-hal-version.inc
  19. EOF
  20. git add .
  21. git commit -m "[dvd] Initial content"
  22. # Create this repository under your GitHub home
  23. git remote add myname
  24. https://github.com/myname/droid-hal-version-hammerhead
  25. git push myname master
теперь подключаем все три репозитория к repo
Заходим в $ANDROID_ROOT/.repo/local_manifests/hammerhead.xml
И добавляем следующее:
Код XML:
  1. <project path="rpm/"
  2. name="myname/droid-hal-hammerhead" revision="master" />
  3. <project path="hybris/droid-configs"
  4. name="myname/droid-config-hammerhead" revision="master" />
  5. <project path="hybris/droid-hal-version-hammerhead"
  6. name="myname/droid-hal-version-hammerhead" revision="master" />
на данном этапе, всё готово к сборке Ваших собственных RPM круто да?
Код BASH:
  1. MER_SDK $
  2. cd $ANDROID_ROOT
  3. rpm/dhd/helpers/build_packages.sh
Если на этом этапе выскакивает ошибка что то типа
Код BASH:
  1. Installed (but unpackaged) file(s) found:
То эти файлы надо добавить в ваш spec файл устройства по пути rpm/$droid-hal-
$DEVICE.spec вставив их ДО строчки %include. Должно получиться что то типа такого:
Код PHP:
  1. %define straggler_files
  2. /init.mmi.boot.sh
  3. /init.mmi.touch.sh
  4. /init.qcom.ssr.sh
  5. /selinux_version
  6. /service_contexts
  7. %{nil}
И да последняя строка обязательна!

На выходе, мы получим пакеты, которые в следующей серии будем собирать готовую Sailfish OS RootFS !
Комментарии (3)
  1. Большое спасибо за инструкцию на русском.

    Есть один момент, полностью повторил инструкцию, хотя бы научиться собирать, но при запуске
    rpm/dhd/helpers/build_packages.sh

    Буквально сразу ловлю:
    error: Bad exit status from /var/tmp/rpm-tmp.ABxgsc (%build)


    RPM build errors:
    Bad exit status from /var/tmp/rpm-tmp.ABxgsc (%build)


    Бьюсь уже второй день, не могу понять что же не так. Специально даже внимательно перепроверил себя, сделал по пашей инструкции, затем строго придерживался официального мануала, результат один. В мане сказан пример "7.2.2 Troubleshoot errors from build_packages.sh", но не совсем понимаю как применить. Спасибо!
  2. Вот конкретный выхлоп:

    WARNING: CONFIG_UTS_NS is invalid
    It is unset
    Allowed values : y, !
    Comment says: optional, enables kernel namespaces for systemd-nspawn containers

    WARNING: CONFIG_NETFILTER_XT_MATCH_NFACCT is invalid
    It is unset
    Allowed values : y, m, !
    Comment says: connman (optional): for routing and statistic support in sessions, http://git.kernel.org/cgit/network/connman/connman.git/commit/README?id=41f37125887cb9208da2441e350e1e3324c17ee6

    WARNING: CONFIG_BLK_CGROUP is invalid
    It is unset
    Allowed values : y, !
    Comment says: systemd (optional): http://0pointer.de/blog/projects/cgroups-vs-cgroups.html

    error: Bad exit status from /var/tmp/rpm-tmp.ABxgsc (%build)


    RPM build errors:
    Bad exit status from /var/tmp/rpm-tmp.ABxgsc (%build)
  3. Ну и где доказательства про 18 запусков у маска в 2018 году? Или ты предпочтешь и тут меня забанить?
Copyright 2016-2024 NeoChapay