Вопрос или проблема
Создана дистрибутив Linux с использованием Yocto (ветка Poky fido) для Raspberry Pi 2, следуя этому отличному обучающему руководству Часть 1.
Теперь пытаюсь запустить Chromium.
Добавлен meta-browser в мой bblayers.conf
Добавлены рецепты chromium
в мой файл образа .bb
.
Удалось скомпилировать и создать образ, но возникают следующие ошибки при попытке запустить:
root@raspberrypi2:/usr/bin/chromium# ./chrome
[527:527:0624/195537:FATAL:browser_main_loop.cc(161)] Running without the SUID sandbox! See https://code.google.com/p/chromium/wiki/LinuxSUIDSandboxDevelopment for more information on developing with the sandbox on.
Aborted
–no-sandbox
root@raspberrypi2:/usr/bin/chromium# ./chrome --no-sandbox
[528:528:0624/195641:ERROR:browser_main_loop.cc(164)] Running without the SUID sandbox! See https://code.google.com/p/chromium/wiki/LinuxSUIDSandboxDevelopment for more information on developing with the sandbox on.
[528:528:0624/195641:ERROR:browser_main_loop.cc(210)] Gtk: cannot open display:
root@raspberrypi2:/usr/bin/chromium# [530:530:0624/195641:ERROR:image_metadata_extractor.cc(111)] Couldn't load libexif.
[530:530:0100/000000:ERROR:zygote_linux.cc(587)] write: Broken pipe
^C
DISPLAY=:0.0
root@raspberrypi2:/usr/bin/chromium# export DISPLAY=:0.0 && ./chrome --no-sandbox
[531:531:0624/195652:ERROR:browser_main_loop.cc(164)] Running without the SUID sandbox! See https://code.google.com/p/chromium/wiki/LinuxSUIDSandboxDevelopment for more information on developing with the sandbox on.
[531:531:0624/195652:ERROR:browser_main_loop.cc(210)] Gtk: cannot open display: :0.0
root@raspberrypi2:/usr/bin/chromium# [533:533:0624/195652:ERROR:image_metadata_extractor.cc(111)] Couldn't load libexif.
[533:533:0100/000000:ERROR:zygote_linux.cc(587)] write: Broken pipe
^C
–use-gl=egl
Меня очень интересует работа с аппаратным ускорением
root@raspberrypi2:/usr/bin/chromium# export DISPLAY=:0.0 && ./chrome --no-sandbox --use-gl=egl
[534:534:0624/195901:ERROR:browser_main_loop.cc(164)] Running without the SUID sandbox! See https://code.google.com/p/chromium/wiki/LinuxSUIDSandboxDevelopment for more information on developing with the sandbox on.
[534:534:0624/195901:ERROR:browser_main_loop.cc(210)] Gtk: cannot open display: :0.0
root@raspberrypi2:/usr/bin/chromium# [536:536:0624/195901:ERROR:image_metadata_extractor.cc(111)] Couldn't load libexif.
[536:536:0100/000000:ERROR:zygote_linux.cc(587)] write: Broken pipe
^C
Любые подсказки приветствуются.
Возможно, это поможет… из моего “ps” на чуть другой платформе.
/bin/sh /usr/bin/google-chrome
2009 root 2424 S {google-chrome} /bin/sh /usr/bin/google-chrome
2010 root 378m S /usr/bin/chrome/chrome --use-gl=egl --user-data-dir=/home/root/.chromium/
2012 root 1956 S /usr/sbin/chrome-devel-sandbox /usr/bin/chrome/chrome --type=zygote --user-data-dir=/home/
2013 root 100m S /usr/bin/chrome/chrome --type=zygote --user-data-dir=/home/root/.chromium/
2016 root 108m S /usr/bin/chrome/chrome --type=zygote --user-data-dir=/home/root/.chromium/
2069 root 212m S /usr/bin/chrome/chrome --type=renderer --use-gl=egl --enable-deferred-image-decoding --lan
2078 root 175m S /usr/bin/chrome/chrome --type=renderer --use-gl=egl --enable-deferred-image-decoding --lan
Это было запущено с помощью значка на рабочем столе /bin/sh /usr/bin/google-chrome
, который, в свою очередь, установил все переменные, указанные в следующих потоках.
Ответ или решение
Для интеграции Chromium в ваш дистрибутив Yocto Project на Raspberry Pi 2 необходимо учитывать несколько аспектов, которые прямо или косвенно влияют на успешную работу браузера.
Теория:
Yocto Project – это мощная система для сборки встроенных систем Linux, позволяющая настраивать практически все аспекты вашей операционной системы, включая компоненты пользовательского пространства, такие как браузеры. Chromium – популярный браузер с открытым исходным кодом, используемый в различных встраиваемых системах. Интеграция Chromium в Yocto требует добавления соответствующих метаслоёв и рецептов в конфигурацию проекта. Однако, при добавлении Chromium на платформы с ограниченными ресурсами, такие как Raspberry Pi 2, возникают дополнительные сложности, связанные с ограничениями производительности и специфическими требованиями к библиотекам.
Пример:
В вашем случае, чтобы добавить Chromium, вы правильно подключили метаслой meta-browser
и добавили рецепты Chromium в ваш файл образа .bb
. Но при запуске столкнулись с ошибками, связанными с SUID sandbox и настройкой переменной окружения DISPLAY для работы с графической подсистемой.
Ошибка SUID связана с безопасностью и механизмами песочницы, которые необходимы для изоляции различных компонентов браузера. Отсутствие песочницы может привести к снижению безопасности, но зачастую отключение данной функции (путём использования флага --no-sandbox
) может быть целесообразным в тестовых окружениях или системах с ограниченными ресурсами.
Кроме того, ошибка Gtk: cannot open display: :0.0
указывает на отсутствие связи с графическим сервером. DISPLAY=:0.0 это переменная, которая определяет дисплей, к которому подключен X-сервер. Для её корректной работы необходимо убедиться, что графическая подсистема запущена, и приложение имеет доступ к дисплею.
Применение:
Чтобы исправить ситуацию, следует предпринять следующие шаги:
-
Убедитесь, что X-сервер запущен.
Это можно сделать, удостоверившись, что у вас установлены и настроены все необходимые библиотеки и сервисы для работы с графической подсистемой. На Raspberry Pi это может быть, например,Xorg
илиWayland
. -
Проверьте целостность и конфигурацию системных библиотек.
Ошибка о невозможности загрузитьlibexif
сигнализирует о недостающих библиотеках. Вам нужно будет убедиться, что все зависимые библиотеки установлены. Возможно, потребуется вручную установить недостающие пакеты через менеджер пакетов. -
Проанализируйте параметры запуска Chromium.
Попробуйте использовать комбинацию параметров, которая подходит для вашей аппаратной конфигурации. Команда запуска может выглядеть так:export DISPLAY=:0.0 ./chrome --no-sandbox --use-gl=egl --user-data-dir=/home/root/.chromium
-
Включите аппаратное ускорение.
Использование флага--use-gl=egl
показывает вашу заинтересованность в аппаратном ускорении. Проверьте наличие нужных драйверов для вашей видеокарты и убедитесь, что аппаратное ускорение поддерживается. Обычно, для Raspberry Pi 2 необходимо установить VC4 драйвера. -
Посмотрите на конфигурацию системы.
Убедитесь, что права доступа к файлам и исполняемым файлам настроены правильно. В случае SUID, убедитесь, что у пользователей есть соответствующие права на запуск исполняемых файлов.
В заключение, интеграция Chromium в Yocto на Raspberry Pi требует учёта особенностей этой платформы, конфигурации аппаратного и программного обеспечения. Стоит внимательно проверить все версии пакетов и библиотеки, воспользовавшись рекомендациями по устранению неполадок, предлагаемыми сообществом и документацией Yocto Project.