Инструкция по созданию своей сборки Android 10 для Raspberry Pi 4 в Ubuntu/Debian.Загружаем [[http://source.android.com/source/downloading.html исходные тексты]] Android:
repo init -u https://android.googlesource.com/platform/manifest -b andoid-10.0.0_r41
git clone https://github.com/android-rpi/local_manifests .repo/local_manifests -b arpi-10
repo sync
Собираем ядро Linux
sudo apt install gcc-arm-linux-gnueabihf libssl-dev
cd kernel/arpi
ARCH=arm scripts/kconfig/merge_config.sh arch/arm/configs/bcm2711_defconfig kernel/configs/android-base.config kernel/configs/android-recommended.config
ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- make zImage
ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- make dtbs
Устанавливаем python-модуль mako:
sudo apt install python-mako
[[https://github.com/android-rpi/device_arpi_rpi4/wiki/Android... Вносим]] несколько исправлений в файлы:
Настраиваем использование GuidedActionEditText для ввода пароля в TvSettings
Settings/res/layout/setup_password_item.xml
@@ line 35
- <EditText
+ <androidx.leanback.widget.GuidedActionEditText
android:id="@+id/guidedactions_item_title"
style="@style/Setup.Action.TextInput"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:focusable="true"
android:gravity="center_vertical"
android:imeOptions="actionNext|flagNoExtractUi"
+ android:inputType="text" />
- android:inputType="text">
- </EditText>
Включаем программный декодировщик видео
media/libstagefright/colorconversion/SoftwareRenderer.cpp
@@ line 128 @@ void SoftwareRenderer::resetFormatIfChanged(
case OMX_COLOR_FormatYUV420Planar:
+ {
+ halFormat = HAL_PIXEL_FORMAT_RGBA_8888;
+ bufWidth = (mCropWidth + 1) & ~1;
+ bufHeight = (mCropHeight + 1) & ~1;
+ break;
+ }
case OMX_COLOR_FormatYUV420SemiPlanar:
@@ line 182
CHECK(mConverter->isValid());
+ } else if (halFormat == HAL_PIXEL_FORMAT_RGBA_8888 &&
+ mColorFormat == OMX_COLOR_FormatYUV420Planar) {
+ mConverter = new ColorConverter(
+ mColorFormat, OMX_COLOR_Format32BitRGBA8888);
+ CHECK(mConverter->isValid());
}
media/codec2/vndk/C2Store.cpp
@@ line 851 @@ C2PlatformComponentStore::C2PlatformComponentStore()
//emplace("libcodec2_soft_av1dec_aom.so"); // deprecated for the gav1 implementation
- emplace("libcodec2_soft_av1dec_gav1.so");
- emplace("libcodec2_soft_avcdec.so");
emplace("libcodec2_soft_avcenc.so");
@@ line 873
emplace("libcodec2_soft_vp8enc.so");
- emplace("libcodec2_soft_vp9dec.so");
emplace("libcodec2_soft_vp9enc.so");
[[http://source.android.com/source/building.html Собираем]] код Android:
source build/envsetup.sh
lunch rpi4-eng
make ramdisk systemimage vendorimage
Подготавливаем SD-карту для записи собранного образа. Разбивка разделов должна выглядеть примерно так:
p1 128MB для /boot: в fdisk выбираем раздел с типом W95 FAT32(LBA) и делаем его загрузочным, далее запускаем mkfs.vfat
p2 768MB для /system: в fdisk создаём новый первичный раздел
p3 128MB для /vendor: в fdisk создаём новый первичный раздел
p4 оставшееся место выделяем для /data: в fdisk создаём новый первичный раздел и запускаем mkfs.ext4. Устанавливаем метку userdata на раздел /data, используя опцию "-L" при выполнении mkfs.ext4.
Записываем подготовленные образы в разделы /system и /vendor (вместо <p2> и <p3> подставляем созданные имена устройств разделов):
cd out/target/product/rpi4
sudo dd if=system.img of=/dev/<p2> bs=1M
sudo dd if=vendor.img of=/dev/<p3> bs=1M
Копируем ядро и образ ram-диска на загрузочный раздел.
Содержимое device/arpi/rpi4/boot/ копируем в корень раздела <p1>, туда же копируем файлы kernel/arpi/arch/arm/boot/zImage, out/target/product/rpi4/ramdisk.im и kernel/arpi/arch/arm/boot/dts/bcm2711-rpi-4-b.dtb. Файл kernel/arpi/arch/arm/boot/dts/overlays/vc4-kms-v3d-pi4.dtbo копируем в каталог /overlays/
URL: https://github.com/android-rpi/device_arpi_rpi4
Обсуждается: http://www.opennet.dev/tips/info/3157.shtml