Проблемы при работе с MeeGo SDK и их решения

В этой статье перечислены основные ошибки, которые были обнаружены при использовании MeeGo SDK. Данная статья базируется на переводе англоязычной страницы из MeeGo wiki, однако, её содержимое было существенно переработано и дополнено.



Если вы знаете другие типичные ошибки и их решения, вы можете оставить информацию о них в комментариях к статье, и, после изучения редактором, они будут добавлены в основной текст. Предложения об улучшении содержания статьи также приветствуются.


Общие ошибки SDK


mad-admin не работает через прокси-сервер



Если Вы выходите в интернет через прокси-сервер, то следует использовать ключ -x для указания адреса и порта прокси-сервера. Например:

# mad-admin fetch -x http://proxy.host:8080 http://server/path/file.tgz



либо перед запуском mad-admin установить переменную окружения http_proxy:

# export http_proxy="http://<username>:<password>@<proxy_URL>:<proxy_port>"


При запуске qmake сообщает, что, значение QMAKESPEC не задано.

$ mad -t meego-handset-ia32-1.1 qmake
-unix is deprecated.
QMAKESPEC has not been set, so configuration cannot be deduced.
Error processing project file:
/home/user_x/work/meego/qthello-handset/qthello-handset.pro



Задайте значение QMAKESPEC с помощью команды:

$ export QMAKESPEC=linux-g++


При компиляции приложений, которые созданы в MeeGo Touch Framework под MeeGo 1.1, выводится такое сообщение:

Undefined reference to QDataStream...
Undefined reference to QWidgetPrivate...
Undefined reference to QObjectPrivate...
...



Дело в том, что на хостовую систему была установлена другая версия Qt по сравнению с той, которая имелась в MeeGo. Эта новая версия используется вместо старой. Это и есть причина ошибки.



Для решения возникшей проблемы сперва надо убедиться, что Qt Creator находит библиотеки MeeGo Qt в корневой системе (sysroot).

Далее следует заменить $sysroot на директорию для окружения, на котором ведется работа. Как правило, это /usr/lib/madde/linux-${arch}/sysroots/.


  • Способ 1:

    Работа с файлом $sysroot/usr/share/qt4/mkspecs/features/meegotouch_common.prf.

    Надо удалить строку:
    unix: QMAKE_LFLAGS += $${QMAKE_LFLAGS_RPATH}$${M_LIB_DIR}
  • Способ 2:

    Работа с файлом $sysroot/usr/share/qt4/mkspecs/linux-g++/qmake.conf.

    Надо дописать строку:
    QMAKE_LFLAGS += -Wl,-rpath-link,$sysroot/usr/lib


В зависимости от значения umask во время установки, компоненты SDK могут быть недоступны для всех пользователей, кроме пользователя root

Из-за этого возникают такие ошибки, как:

$ mad -t meego-handset-ia32-1.1 qmake
-unix is deprecated.
Could not find mkspecs for your QMAKESPEC(linux-g++) after trying:
	/usr/lib/madde/linux-i686/sysroots/meego-core-ia32-madde-sysroot-1.1-fs/usr/share/qt4/mkspecs
Error processing project file:
/home/user_x/work/meego/qthello-handset/qthello-handset.pro



Измените права доступа к файлам SDK, используя следующие команды:

find /usr/lib/madde/linux-i686/ -perm 700 -exec chmod 755 {} \;
find /usr/lib/madde/linux-i686/ -perm 600 -exec chmod 644 {} \;


Ошибки QEMU


Эмулятор не запускается

Выводится сообщение

Starting QEMU runtime meego-netbook-ia32-qemu-1.1.2-runtime
This may take some time ...

и больше ничего не происходит.



Утилита mad препятствует выводу сообщений об ошибках, выдаваемых QEMU. В этом случае можно перейти в каталог, содержащий необходимый образ, и попытаться запустить QEMU непосредственно. Например:

cd /usr/lib/madde/linux-i686/runtimes/meego-netbook-ia32-qemu-1.1.2-runtime
. ./information ; $qemu $qemu_args

Данный способ запуска не позволяет установить ssh-соединение со средой выполнения, однако, для выявления возможных проблем он может быть полезным.


При запуске QEMU происходит ошибка, связанная с модулем KVM

Could not access KVM kernel module: No such file or directory
failed to initialize KVM 

Убедитесь, что ваша система поддерживает аппаратную виртуализацию. Для этого выполните команду

egrep '^flags.*(vmx|svm)' /proc/cpuinfo

Наличие любых строк в выводе команды свидетельствует о наличии аппаратной виртуализации. Иногда аппаратную виртуализацию необходимо предварительно включить в BIOS.



Загрузите модуль kvm:

sudo modprobe kvm_intel

на платформе Intel или

sudo modprobe kvm_amd

на платформе AMD.


При запуске QEMU выдается сообщение об ошибке в правах доступа

Например,

error while loading shared libraries: /usr/lib/libGL.so.1:
cannot restore segment prot after reloc: Permission denied

Известно, что эта ошибка возникает, когда используются libGL.so и QEMU 1.1.2x на Fedora Core 13.



Эта ошибка связана с настройками безопасности SELinux. Ниже приведено два способа решения этой проблемы:

  • Временное (надо повторять при каждом перезапуске)
    sudo /usr/sbin/setenforce 0
  • Постоянное

    В файле /etc/selinux/config установите значение переменной enforcing на disabled.

Также необходимо выполнить команду

sudo /usr/sbin/setenforce 0

чтобы изменения вступили в силу немедленно.

При следующей загрузке SELinux будет отключен. Будьте осторожны, так как отключение SELinux снижает безопасность вашей системы!


После запуска QEMU появляется только черное окно. Пользовательский интерфейс MeeGo не появляется.



Загрузка ядра MeeGo зависает в связи с ошибками в KVM. По данной проблеме отслеживайте ошибки 9790 и 10075 в багтрекере MeeGo. Возможно, обновление модуля KVM до последней версии поможет исправить проблему.


После запуска QEMU виден только decorator bar. X-сервер запущен и доступ к образу через ssh работает, но пользовательский интерфейс не появляется.



Как правило, это происходит потому, что перестала работать программа duihome.

Это может быть связано с тем, что в системе нет доступной звуковой карты — см. ошибку 11367 в багтрекере MeeGo.



Если звуковая карта работает правильно, а пользовательский интерфейс то загружается, то нет, то можно попробовать соединиться с образом MeeGo по ssh и удалить файл "/tmp/mstatusbar_pixmap_handle" (или даже все содержимое каталога /tmp), а затем попробовать снова. Этот файл содержит общий для нескольких процессов обработчик, что может быть непосредственной причиной сбоев duihome.


Производительность операционной системы MeeGo в QEMU низкая. Перерисовка экрана происходит очень медленно (по 3-5 секунд на каждое действие)



Аппаратное ускорение графики в QEMU в SDK 1.1 handset было выключено из-за ошибки 10495. Сейчас она устранена, и ускорение GL будет работать в следующих выпусках MeeGo SDK. С аппаратным ускорением производительность операционной системы будет выше.



В релизе SDK 1.1 netbook аппаратное ускорение включено. Если производительность графики в этом образе низкая, проверьте, что на хостовой машине включено аппаратное ускорение графики:

$ glxinfo | grep "renderer string"

Успешный вывод: OpenGL renderer string: Mesa DRI…

Неуспешный вывод: OpenGL renderer string: Software Rasterizer


QEMU запускается, но не работает ssh



Наиболее вероятная причина связана с тем, что демон sshd daemon не запускается. Это может быть связано с тем, что файлы ключей ssh в образе MeeGo были повреждены (например, из-за неправильного закрытия работающего образа).

Эта ошибка может быть исправлена путем удаления файлов ключей в каталоге /etc/ssh в образе MeeGo.

Если Вы можете успешно загрузить образ, то откройте терминал внутри QEMU и выполните команды

sudo rm -rf /etc/ssh/*key*
sudo /etc/init.d/sshd start

В Linux Вы можете смонтировать образ и внести необходимые изменения непосредственно из хостовой системы:

sudo mount -o loop,offset=512 <image file name>.raw /mnt/
sudo rm -rf /mnt/etc/ssh/*key*
sudo umount /mnt

Вместо .raw вставьте путь и имя к файлу образа, например, /usr/lib/madde/linux-i686/runtimes/meego-handset-ia32-qemu-1.1.2-runtime/meego-handset-ia32-qemu-1.1.20110110.1026-sda.raw


В Windows с включенным kqemu не загружается пользовательский интерфейс образа MeeGo Handset. Появляется лишь серое окно QEMU.



QEMU не может запустить ядро MeeGo на некоторых машинах со включенным kqemu.

Список работающих конфигураций доступен по ссылке Начало работы с MeeGo SDK в Windows. См. также ошибку 11590 в багтрекере MeeGo.

В версии SDK 1.1, то можно отключить kqemu командой

net stop kqemu

и затем перезапустить QEMU. Без kqemu QEMU будет работать медленно, но зато сможет загрузить образ корректно.

Если это все не помогло, то еще можно включить CPUID limit в BIOS хостовой машины. При этом убедитесь, что служба kqemu запущена:

net start kqemu

Обратите внимание! Вообще говоря, менять настройки в BIOS не рекомендуется.



Исходная статья: MeeGo SDK Troubleshooting at wiki.meego.com

Перевод: Владимир Шабаршин

Редактирование и дополнение: Илья Парамонов