Как обновить Python с помощью Yocto, прикрепленного к Thud?
Я использую встроенную сборку Linux на модуле TI Sitara AM335x и использую их Processor SDK для создания пользовательской u-boot, ядра и корневой файловой системы.
Их последняя версия SDK - 06.03, она привязана к дистрибутивам Yocto Thud (которые сейчас немного устарели). У меня есть все необходимое для настройки, есть мой новый BSP, я могу собрать все, что мне нужно, но есть ровно одна вещь, с которой я не могу работать. SDK поставляется с Python 3.5, и мне нужен Python 3.6+ для запуска определенного инструмента.
Строго в качестве эксперимента я встроил Docker в систему и могу запускать там новые контейнеры, но это имеет нетривиальный размер и влияние на производительность, а также некоторые дополнительные соображения по развертыванию и обновлению.
Я пытаюсь выяснить, есть ли у меня способ обновить только дистрибутив Python, но я не могу найти много информации об этом. Есть некоторые примечания о последовательном применении всех патчей из более поздних дистрибутивов, попытках компиляции, отладки и т.д., но патчей много, и было бы легко что-то пропустить.
Я знаю, что один из вариантов - выбросить SDK и перейти прямо к Йокто Данфеллу, но Processor SDK поставляется с большим количеством встроенных настроек ядра и u-boot, поэтому я хотел бы придерживаться этого в краткосрочной перспективе (долго, долгосрочный план - перейти на прямой Yocto и получить самое последнее / лучшее).
TL; DR; Есть ли какой-либо простой / оптимизированный механизм для обновления Yocto Thud до Python3.6+ без особого риска при поиске и применении патчей ядра и rfs, использовании Docker внутри rootfs или отказе от Processor SDK?
1 ответ
Я был в том же положении и смог обновить Python 3.5.6 (стук) до Python 3.7.7 (воин).
Для этого я сделал следующие шаги:
- Форк репозитория poky
- Заменить полностью
meta/recipes-devtools/python
путь с тем, кто в ветке воинов - Замените следующие bbclasses в
meta/classes/
с версией воина:- distutils-tools.bbclass (удалить)
- distutils.bbclass
- distutils3.bbclass
- python3-dir.bbclass
- python3native.bbclass
- Увеличьте версию Python с 3.5 до 3.7 здесь:
meta/recipes-graphics/mesa/files/0004-Use-Python-3-to-execute-the-scripts.patch b/meta/recipes-graphics/mesa/files/0004-Use-Python-3-to-execute-the-scripts.patch
- Исправьте dnf_2.7.5.bb следующим патчем:
From acd3f9b300fcd7319a83d09c24bcf252d0bb82b1 Mon Sep 17 00:00:00 2001
From: Yocto thud <yocto@thud.de>
Date: Thu, 2 Nov 2023 08:33:27 +0000
Subject: [PATCH] fix dnf/util.py for python3.7
---
dnf/util.py | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/dnf/util.py b/dnf/util.py
index 9726339e7..8d32bd09c 100644
--- a/dnf/util.py
+++ b/dnf/util.py
@@ -39,6 +39,7 @@ import subprocess
import sys
import tempfile
import time
+import errno
logger = logging.getLogger('dnf')
@@ -120,7 +121,7 @@ def ensure_dir(dname):
try:
os.makedirs(dname, mode=0o755)
except OSError as e:
- if e.errno != os.errno.EEXIST or not os.path.isdir(dname):
+ if e.errno != errno.EEXIST or not os.path.isdir(dname):
raise e
def empty(iterable):
--
2.17.1
Это сработало на моем изображении с пакетами, которые я использовал. Для других пакетов все еще могут потребоваться некоторые исправления.