1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/liangzili-harmony-raspberry

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
README.md 15 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
Отправлено 28.02.2025 00:45 557dda3

Гармония-пикси

Введение

Цель работы — перенос OpenHarmony на платформу Raspberry Pi.

OHOS3.0 - Raspberry Pi 4B

1. Добавление компиляционных конфигураций и gn

1. Добавление RPI4B.json

Основной источник — компонент сборки HiSilicon. Нужно добавить новый продукт в список компонентов сборки, который указывается в файлах конфигурации продуктов. Например:

productdefine\common\products\RPI4B.json

Другие части можно взять за основу от Hi3516, но две строки должны быть указаны явно: путь к одиночному компоненту и его добавление. Без этих двух строк невозможно скомпилировать ядро, будет создан только файловая система OHOS.

... ..
"product_build_path": "device/raspberrypi/build",
"parts":{
    ... ...
	"raspberrypi_products:raspberrypi_products":{},
    ... ...
	}

2. Добавление ohos.build

Следующим шагом создаем директорию raspberrypi в каталоге device и добавляем в неё файл ohos.build. Этот файл соответствует настройкам в файлах конфигурации продуктов.

device\raspberrypi\build\ohos.build

{
    "subsystem": "raspberrypi_products",
    "parts": {
        "raspberrypi_products": {
            "module_list": [
                "//device/raspberrypi/build:products_group"
            ]
        }
    }
}

Затем создаём BUILD.gn в директории device\raspberrypi\build. Каждый производитель может иметь несколько моделей, поэтому здесь можно указать пути к другим моделям, таким как Raspberry Pi 2B, 3B и так далее.

import("//build/ohos.gni")

device_type = "rpi4b"
group("products_group") {
  deps += [
    "//device/raspberrypi/rpi4b:rpi4b_group"
  ]
}

Таким образом, компонент сборки для Raspberry Pi 4B был добавлен в систему сборки OHOS3.0. Все последующие изменения следует делать в этой директории.

2. Ядерные компоненты Raspberry Pi

После того как мы добавили необходимые компоненты сборки, рассмотрим, какие компоненты были уже перенесены на Raspberry Pi 4B и как они могут быть включены в процесс сборки OHOS3.0.

1. Патчи ядра Raspberry Pi

Информацию о патчах можно найти в компонентах Patch. Процесс компиляции ядра выполняется с помощью файла kernel.mk.

kernel\linux\build\kernel.mk

DEVICE_PATCH_DIR := $(OHOS_BUILD_HOME)/kernel/linux/patches/${KERNEL_VERSION}/$(DEVICE_NAME)_patch
DEVICE_PATCH_FILE := $(DEVICE_PATCH_DIR)/$(DEVICE_NAME).patch
... ...
$(KERNEL_IMAGE_FILE):
	$(hide) echo "build kernel..."
	$(hide) rm -rf $(KERNEL_SRC_TMP_PATH);mkdir -p $(KERNEL_SRC_TMP_PATH);cp -arfL $(KERNEL_SRC_PATH)/* $(KERNEL_SRC_TMP_PATH)/
	$(hide) cd $(KERNEL_SRC_TMP_PATH) && patch -p1 < $(HDF_PATCH_FILE) && patch -p1 < $(DEVICE_PATCH_FILE)
ifneq ($(findstring $(BUILD_TYPE), small),)
	$(hide) cd $(KERNEL_SRC_TMP_PATH) && patch -p1 < $(SMALL_PATCH_FILE)
endif

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

Файл hdf.patch пока ещё не содержит информации о HDF, поэтому можно использовать патч из Hi3516.

Файл rpi4b.patch следует брать из официального образа Raspberry Pi, доступного по адресу https://github.com/raspberrypi/linux.

kernel\linux\patches\linux-5.10\rpi4b_patch\hdf.patch
kernel\linux\patches\linux-5.10\rpi4b_patch\rpi4b.patch

2. Конфигурация компиляции ядра

kernel\linux\config\linux-5.10\arch\arm\configs\rpi4b_standard_defconfig

Ниже приведена часть конфигурации ядра, которая должна быть активирована. Однако это не полный список всех требуемых настроек.

~/ohos/kernel/linux/config/linux-5.10/arch/arm/configs/rpi4b_standard_defconfig
#####################################################################################
> Опции безопасности
    > (32768) Нижняя область адресного пространства для защиты от выделения пользователя

    [*] Поддержка SELinux NSP			#(выбор)
    [*]   SELinux параметры запуска	#(выбор)
    [ ]   Отключение SELinux во время выполнения
    [*]   Разработка SELinux
    [*]   Статистика SELinux AVC
    (1)   Значение по умолчанию SELinux checkreqprot	#(установить значение 1)
    (9)   Размер таблицы хэш-таблиц SELinux sidtab
    (256) Размер кеша преобразования контекста SELinux SID
        Первый старый 'major LSM' для инициализации (SELinux)  ---> #(выбор) SELinux
        Упорядоченный список активированных LSMs #(ввести:"lockdown,yama,loadpin,safesetid,integrity,selinux,smack,tomoyo,apparmor,bpf")
#####################################################################################
> Устройство-драйверы
	> Android
		[*] Android устройства	#(активировать)
		[*]   Android Binder IPC устройство #(активировать)
#####################################################################################
> Устройство-драйверы 
	> Поддержка звука
    	<*> Расширенная архитектура звука Linux (ALSA) #(выбор, включить в ядро)
        	<*>   Поддержка ALSA для SoC аудио #(выбор, включить в ядро)
> Устройство-драйверы 
	> Графический режим
    	<*> Direct Rendering Manager (XFree86 4.1.0 и более новые версии DRI поддержка)	#(выбор, включить в ядро)
        <*> Broadcom V3D 3.x и более новые версии #(выбор, включить в ядро)
        <*> Broadcom VC4 графика #(выбор, этот драйвер зависит от предыдущего звукового драйвера, иначе он не сможет быть включен в ядро)
#####################################################################################
> Устройство-драйверы 
	> Поддержка ввода устройств 
    	> Тачскрин
        	<*>   Поддержка базовых данных тачскрина фирмы Raspberry Pi #(выбор, включить в ядро)

3. Адаптация драйверов

1. Настройка экрана

GPU Pi4 использует VideoCore VI, поддерживающий OpenGL ES 3.2, тогда как GPU Pi3 использует VideoCore IV, поддерживающий OpenGL ES 2.0. Для VideoCore IV используется драйвер VC4, а для VideoCore VI — V3D. Эти драйверы уже включены в ядро, согласно rpi4b_standard_defconfig.

Также требуется настроить config.txt следующим образом:

dtoverlay=vc4-fkms-v3d

В OHOS необходимо также изменить конфигурацию weston, указав драйвер для отображения.

system\etc\weston.ini

[output]
name=card0

2. Настройка тачскрина

Основная идея заключается в том, чтобы сначала найти номер устройства, затем найти драйвер по этому номеру.

ls -l /sys/dev/char/|grep input    # Просматривает входные устройства в директории input
cat /sys/dev/char/13\:64/device/uevent	# Затем вводит номер устройства, чтобы просмотреть информацию о драйвере
PRODUCT=19/0/0/0
NAME="raspberrypi-ts"
PROP=2
EV=b
KEY=400 0 0 0 0 0 0 0 0 0 0
ABS=2608000 3
MODALIAS=input:b0019v0000p0000e0000-e0,1,3,k14A,ra0,1,2F,35,36,39,mlsfw

Когда ранее настраивали ядро, в rpi4b_standard_defconfig уже было включено управление тачскрином, поэтому теперь не требуется загружать модуль при запуске init. Вместо этого достаточно изменить конфигурацию eudev.

third_party\eudev\rules.d\touchscreen.rules

ATTRS{name}=="raspberrypi-ts", ENV{ID_INPUT}="1", ENV{ID_INPUT_TOUCHSCREEN}="1"
ATTRS{name}=="VSoC keyboard", ENV{ID_INPUT}="1", ENV{ID_INPUT_KEYBOARD}="1"
DRIVERS=="hid-multitouch", ENV{ID_INPUT}="1", ENV{ID_INPUT_TOUCHSCREEN}="1"

4. Создание образа системы

1. Изменение скриптов компиляции ядра

Обычно ядро загружается через U-Boot, и OHOS по умолчанию генерирует uImage. Но Raspberry Pi имеет свой собственный загрузочный менеджер, хотя можно использовать U-Boot для загрузки uImage после загрузки U-Boot через BootLoader Raspberry Pi. Это усложняет процесс и увеличивает время загрузки. Однако в текущих скриптах компиляции ядра zImage заменяет uImage.

kernel\linux\build\kernel.mk

$(hide) $(KERNEL_MAKE) -C $(KERNEL_SRC_TMP_PATH) ARCH=$(KERNEL_ARCH) $(KERNEL_CROSS_COMPILE) -j64 zImage

kernel\linux\build\build_kernel.sh

- cp ${2}/kernel/src_tmp/${8}/arch/arm/boot/uImage ${3}/uImage
+ cp ${2}/kernel/src_tmp/${8}/arch/arm/boot/zImage ${3}/zImage

kernel\linux\build\BUILD.gn

- outputs = [ "$root_build_dir/packages/phone/images/uImage" ]
+ outputs = [ "$root_build_dir/packages/phone/images/zImage" ]

kernel\linux\build\kernel_module_build.sh

- LINUX_KERNEL_UIMAGE_FILE=${LINUX_KERNEL_OUT}/arch/arm/boot/uImage
+ LINUX_KERNEL_UIMAGE_FILE=${LINUX_KERNEL_OUT}/arch/arm/boot/zImage

Компиляция ядра зависит от hdf.hcs файла, находящегося в директории vendor/$product_company/$product_name. Поэтому нужно создать этот файл, чтобы избежать ошибки.

ninja: error: '../../vendor/raspberrypi/RPI4B/hdf_config/uhdf/hdf.hcs', needed by 'gen/drivers/adapter/uhdf2/hcs/hdf_default.hcb', missing and no known rule to make it

Создайте: vendor/raspberrypi/RPI4B/hdf_config/uhdf/hdf.hcs

root {
    module = "default";
}

2. Создание директории boot для Raspberry PiДля создания образа системы Hi3516 обычно записывают uImage, system.img, vendor.img и другие образы на eMMC. Однако Raspberry Pi использует microSD-карты для загрузки, поэтому требуется разделение microSD-карты на несколько разделов и копирование соответствующих файлов в каждый раздел. Сначала создаем директорию boot для Raspberry Pi, которая будет использоваться для хранения дерева устройств, config.txt, cmdline.txt, ядерного образа и других важных файлов. Для этого пишем простой скрипт mkboot.py, который находится в директории rpi4b/device/raspberrypi/images/mkboot.py и создаёт boot.img.

Чтобы сделать процесс записи удобнее, нужно объединить boot.img, system.img, updater.img, vendor.img и userdata.img в один rpi4b.img. Также пишем простой скрипт для этого процесса rpi4b/device/raspberrypi/images/mkboot.py.

Однако есть проблема: главный раздел поддерживает только четыре раздела, поэтому updater.img временно не включается в rpi4b.img. Эту проблему можно решить в будущем.

В конце получится один образ rpi4b.img, который можно записать на SD-карту.

Linux: Можно использовать команду dd

Windows: Можно использовать Win32 Disk Imager для записи образа.

На данном этапе удалось пройти весь процесс добавления новой платформы, хотя пока что адаптированы только экран и тачскрин. В дальнейших планах стоит попробовать адаптировать HDF или distributed компоненты.

OHOS1.0 - Raspberry Pi 2B

1. Предварительная подготовка

1.1. Установка окружения

1.2. Скачивание исходного кода

1.3. Стартовый процесс Raspberry Pi

1.4. Компиляция U-Boot для Raspberry Pi

2. Перенос кода

2.1. Добавление нового устройства

2.2. Настройка запуска

2.3. Анализ и перенос UART

2.4. Системные часы

2.5. Блочные устройства и драйверы

Опубликовать ( 0 )

Вы можете оставить комментарий после Вход в систему

1
https://api.gitlife.ru/oschina-mirror/liangzili-harmony-raspberry.git
git@api.gitlife.ru:oschina-mirror/liangzili-harmony-raspberry.git
oschina-mirror
liangzili-harmony-raspberry
liangzili-harmony-raspberry
master