Полный отказ от ответственности: последние 6 недель я использую buildroot. Это мое первое знакомство со встроенным Linux, поэтому я все еще очень экологичен, но смог решить 99% своих проблем сам. по большей части процесс был простым.
Чтобы занять себя, пока я застрял, дома и не могу работать, я работал над проектом встраиваемого оборудования. Я выбрал свое оборудование, построил прототип, изучил основы buildroot, поднял базовую систему, оптимизировал конфигурацию ядра, построил собственное дерево устройств для своего оборудования, и я доволен до этого момента.
Параллельно я программировал целевое приложение на python на моем рабочем столе, оно зависит от нескольких библиотек (аппаратная абстракция, связь, отображение и т. Д.), Но относительно прямолинейно.
Я дошел до того, что у меня есть список необходимых пакетов для встраивания в мою систему buildroot. Здесь отлично подходят инструменты buildroot, использующие инструмент scanpypi:
~/buildroot$ utils/scanpypi diskcache -o package
Простое добавление всех зависимостей в /package/config.in позволило выбрать их в menuconfig и добавить в рецепт.
Проблема возникает во время сборки, когда сборка модуля python не выполняется для модуля выше python-diskcache.
У него есть зависимости от нескольких вещей, но одна из них - slqite3, она была добавлена как: основной модуль python "sqlite module" внешний пакет "библиотеки python-pysqlite3"> база данных> sqlite
Однако при сборке он не работает:
>>> python-diskcache 4.1.0 Building
Traceback (most recent call last):
File "setup.py", line 5, in <module>
import diskcache
File "/home/buildroot/output/build/python-diskcache-4.1.0/diskcache/__init__.py", line 9, in <module>
from .core import Cache, Disk, EmptyDirWarning, JSONDisk, UnknownFileWarning, Timeout
File "/home/buildroot/output/build/python-diskcache-4.1.0/diskcache/core.py", line 14, in <module>
import sqlite3
File "/home/buildroot/output/host/arm-buildroot-linux-uclibcgnueabihf/sysroot/usr/lib/python3.8/sqlite3/__init__.py", line 23, in <module>
from sqlite3.dbapi2 import *
File "/home/buildroot/output/host/arm-buildroot-linux-uclibcgnueabihf/sysroot/usr/lib/python3.8/sqlite3/dbapi2.py", line 27, in <module>
from _sqlite3 import *
ModuleNotFoundError: No module named '_sqlite3'
make[1]: *** [package/pkg-generic.mk:269: /home/buildroot/output/build/python-diskcache-4.1.0/.stamp_built] Error 1
make: *** [Makefile:84: _all] Error 2
При поиске решения кажется, что _sqlite3 - это модуль C, внешний по отношению к python, для связи с базой данных sqlite. Он должен быть установлен с помощью python (с использованием 3.8) и должен быть включен в buildroot с включением основного модуля sqlite.
Есть несколько исправлений для решения этой проблемы на хосте (например, apt get install libsqlite3-dev и переустановите / перенастройте python). Очевидно, что это невозможно в образе, и установки sqlite и python3 являются последними сборками и устанавливаются в образ во время сборки.
Я действительно изо всех сил пытаюсь понять проблему или то, как я могу ее исправить. У меня есть несколько теорий, основанных на обсуждении, но я не уверен.
1) python устанавливается на изображение до sqlite, поэтому соответствующий модуль не получает cp или символическую ссылку на установку python.
2) есть еще одна неизвестная зависимость, которая не выполняется во время сборки, и она молча терпит неудачу
любые идеи или помощь будут очень признательны.
Спасибо