Cómo adaptar la placa de chip Rockchip a OpenHarmony

Cómo adaptar la placa de chip Rockchip a OpenHarmony

1 idea general

OpenHarmony es un sistema operativo de usuario de nivel superior, que está diseñado para ser compatible con diferentes sistemas subyacentes. Para dispositivos L2 estándar de Linux, OpenHarmony no depende demasiado de sistemas subyacentes como Linux y Uboot, y en términos de controladores, HDF también es compatible con los controladores estándar de Linux.

Por lo tanto, el sistema subyacente básicamente puede usar directamente el fabricante del chip original o el fabricante OEM, y el sistema superior se compila usando OpenHarmony.

En términos de la idea general, puede usar el método de empalme de imágenes de partición para trasplantar y adaptar:

  • El sistema subyacente, es decir, el kernel y las imágenes anteriores: uboot, boot (incluidos dtb, kenel, driver), etc., utilizan los originales de los fabricantes de chips o fabricantes OEM;

  • El sistema superior, es decir, la imagen sobre el kernel: rootfs, proveedor (u oem), datos de usuario, usando OpenHarmony.

Si la cadena de herramientas de compilación del SDK de placa única es compatible con la de OpenHarmony, la parte de arranque (incluidos dtb, kernel y controlador) del sistema subyacente se puede compilar con la imagen compilada por el SDK de placa única.

Si no es compatible, la parte de arranque del sistema subyacente debe usar la cadena de herramientas de compilación de OpenHarmony para volver a compilar la imagen. Puede consultar zh-cn/device-dev/porting/porting-linux-kernel.md · OpenHarmony/docs - Gitee.com

2 opciones de versión

1.1 Selección de versión de OpenHarmony

Se recomienda elegir una versión más nueva y más estable. No elija la rama maestra de desarrollo por ahora. La elección actual es OpenHarmony-v3.1-Beta. Esta versión ya tiene el producto de chip Rockchip "Runhe DAYU200", por lo que es más fácil de trasplantar.

1.2 Selección de versión SDK

Se recomienda elegir un SDK de Linux puro.

Algunas placas individuales basadas en chips RK admiten múltiples sistemas operativos, como Android, Ubuntu, Buildroot (Linux puro), correspondientes a diferentes SDK, se recomienda elegir el SDK de Linux puro, no use Android y Ubuntu, uno es debido a Android y Ubuntu Se ha modificado el mecanismo del kernel, lo que aumenta la dificultad y la carga de trabajo del trasplante. Por ejemplo, el AVB de Android, la partición dinámica y otros mecanismos afectan nuestro trasplante; en segundo lugar, la cadena de herramientas de compilación del SDK de Linux puro de los chips principales de RK es compatible. con la cadena de herramientas de OpenHarmony de.

3 método de adaptación

Tomando como ejemplo la serie RK de Firefly, el método de adaptación es el siguiente.

Se ha verificado que este método es compatible con los siguientes productos Firefly, y se ha verificado que el sistema OpenHarmony se puede iniciar correctamente y que el Iniciador se mostrará en la pantalla.

  • ROC-RK3568-PC, el chip es rk3568
  • AIO-3568J, el chip es rk3568
  • AIO-3399J, el chip es rk3399

Paso 1 Preparar el entorno básico

Elija usar el firmware Buildroot del SDK de Linux puro y descargue el firmware Buildroot del producto correspondiente del sitio web oficial de Firefly para grabarlo.

Por ejemplo,

Enlace de descarga de ROC-RK3568-PC: https://www.t-firefly.com/doc/download/107.html

Método de grabación de ROC-RK3568-PC: https://wiki.t-firefly.com/zh_CN/ROC-RK3568-PC/03-upgrade_firmware.html

Paso 2 Modificar el núcleo compilado

OpenHarmony necesita usar el enlazador IPC para comunicarse, que no está habilitado en el SDK de Linux puro, y el kernel debe volver a compilarse después de habilitar el enlazador IPC.

Después de obtener el código fuente, modifique la configuración del kernel para abrir la macro CONFIG_ANDROID_BINDER_IPC y vuelva a compilar el kernel.

Por ejemplo, el método de operación de la serie Firefly:

Primero, descargue el paquete de código fuente Linux_SDK del producto correspondiente del sitio web oficial de Firefly Tenga en cuenta que Kernel debe seleccionar la versión 4.19.

Luego, modifique el archivo de configuración correspondiente al producto y agregue CONFIG_ANDROID_BINDER_IPC=y. Por ejemplo

Agregue CONFIG_ANDROID_BINDER_IPC=y en kernel/arch/arm64/configs/firefly_linux_defconfig.

Luego, siga las instrucciones en el sitio web oficial para configurar el entorno de compilación, compile el kernel ./build.sh kernel y obtenga boot.img.

Finalmente, grabe el archivo boot.img compilado por separado utilizando el método de grabación por partición. Después de grabar la placa con éxito, asegúrese de que las funciones básicas de la placa sigan siendo normales y asegúrese de que haya un directorio /sys/module/binder/.

# ls /sys/module/binder/ -l 
total 0 
drwxr-xr-x 2 raíz raíz 0 2022-01-25 07:20 parámetros 
--w------- 1 raíz raíz 4096 2022-01-25 07:18 evento

El archivo de la tabla de particiones parámetro.txt durante la grabación se puede obtener del código fuente descargado en el paso 2, o se puede obtener del firmware Buildroot desempaquetado en el paso 1. Para conocer el método de desembalaje, consulte https://blog.csdn.net/Neutionwei/article/details/121886647

Paso 3 Modificar y compilar OH

Debe tener la imagen del sistema estándar OpenHarmony-v3.1-Beta, descargar el código de OpenHarmony-v3.1-Beta y compilar el producto hihope rk3568.

Ruta de descarga del código: zh-cn/release-notes/OpenHarmony-v3.1-beta.md · OpenHarmony/docs - Gitee.com

Modifique el código: rk3399 necesita eliminar los códigos relacionados con zpos, y los códigos que se enumeran a continuación deben eliminarse. rk3568 no requiere esta modificación de código.

// Ruta del código: ./device/hihope/hardware/display/src/display_device/drm_plane.cpp 
// Función: int32_t DrmPlane::Init(DrmDevice &drmDevice) 
// Borre el siguiente código: 
    ret = drmDevice.GetPlaneProperty(*this , PROP_ZPOS_ID, prop); 
    DISPLAY_CHK_RETURN((ret != DISPLAY_SUCCESS), DISPLAY_FAILURE, DISPLAY_LOGE("cat not get panel crtc prop id")); 

// Ruta del código: ./device/hihope/hardware/display/src/display_device/ hdi_drm_composition.cpp 
// Función: int32_t HdiDrmComposition::ApplyPlane(HdiDrmLayer &layer, 
// HdiLayer &hlayer, 
// DrmPlane &drmPlane, 
// drmModeAtomicReqPtr pset) 
// Borre el siguiente código:
    ret = drmModeAtomicAddProperty(pset, drmPlane.GetId(), drmPlane.GetPropZposId(), layer.GetZorder()); 
    DISPLAY_LOGI("establezca el fb planeid %{public}d, GetPropZposId %{public}d, zpos %{public}d", drmPlane.GetId(), drmPlane.GetPropZposId(), layer.GetZorder()); 
    DISPLAY_CHK_RETURN((ret < 0), DISPLAY_FAILURE, DISPLAY_LOGE("establezca el errno de zpos archivado: %{public}d", errno));

Método de compilación: compile los productos Runhe DAYU200, consulte OpenHarmony/device_hihope para obtener instrucciones de compilación detalladas

bash build/prebuilds_download.sh 
./build.sh --product-name rk3568 --ccache

Después de compilar, obtenga system.img, vendor.img, userdata.img

Paso 4 Ajustar la tabla de particiones

Debido a que la imagen de OH es grande, es necesario ajustar la tabla de particiones.

Modifique el contenido de CMDLINE en el parámetro de archivo de tabla de partición.txt, ajuste el tamaño de partición de oem, rootfs y userdata de acuerdo con el tamaño de vendor.img, system.img y userdata.img, y ajuste la ubicación de las particiones posteriores respectivamente.

Por ejemplo, la tabla de particiones ajustada del producto Firefly ROC-RK3568-PC.

mtdparts=rk29xxnand:0x00002000@0x00004000(uboot),0x00002000@0x00006000(misc),0x00020000@0x00008000(arranque),0x00020000@0x00028000(recuperación),0x0001000 0@0x00048000(copia de seguridad),0x00150000@0x00058000(oem),0x30ce00@0x001A8000( rootfs),-@0x4B4e00(datos de usuario:crecer)

Paso 5 Grabe la tabla de particiones y la imagen modificadas

Con la herramienta de actualización, primero importe el archivo de la tabla de particiones parámetro.txt modificado en el paso 4 (haga clic con el botón derecho --> importar configuración --> seleccione el tipo de archivo como txt), y luego seleccione cada archivo para grabar.

  • Parámetro, seleccione el archivo de tabla de partición modificado parámetro.txt en el paso 4

  • oem, seleccione el archivo vendor.img compilado en el paso 3

  • rootfs, seleccione system.img compilado en el paso 3

  • userdata, seleccione el userdata.img compilado en el paso 3

    Después de completar este paso, los productos de la serie rk3568, se puede iniciar OpenHarmony y la pantalla HDMI puede mostrar el escritorio OpenHarmony.

Paso 6 Modificar la ruta de montaje

Descripción de la ruta de montaje

Las rutas de montaje de partición de diferentes productos son diferentes. Al montar particiones, debe especificar la ruta de montaje de partición real de su producto.

Usamos las imágenes compiladas por OpenHarmony hihope rk3568. La configuración de la ruta de montaje de la partición en estas imágenes es hihope rk3568 y debe modificarse a la ruta de montaje de la partición real de nuestros propios productos.

Para hihope rk3568 en OpenHarmony, hay dos archivos que especifican la ruta de montaje y estos dos archivos deben modificarse.

El primer archivo es /system/etc/init.without_two_stages.cfg (esta es la ruta en la placa), empaquetado en system.img, la ruta del archivo de código es device/hihope/rk3568/build/rootfs/init.without_two_stages .cfg

"mount ext4 /dev/block/platform/fe310000.sdhci/by-name/vendor /vendor wait rdonly barrier=1", 
"mount ext4 /dev/block/platform/fe310000.sdhci/by-name/userdata /data wait nosuid nodev noatime barrier=1,data=ordered,noauto_da_alloc"

Nota: Los productos sin ramdisk usan /system/etc/init.without_two_stages.cfg, los productos con ramdisk usan /system/etc/init.cfg. Los productos Firefly probados actualmente no tienen el ramdisk habilitado. Si no está seguro de si el ramdisk está habilitado, se recomienda modificar ambos archivos cfg.

El segundo archivo /vendor/etc/fstab.rk3568 (esta es la ruta en la placa), está empaquetado en vendor.img y la ruta del archivo de código es ./device/hihope/rk3568/build/rootfs/fstab.rk3568.

# archivo fstab. 
# <src> <mnt_point> <tipo> <mnt_flags and options> <fs_mgr_flags> 
/dev/block/platform/fe310000.sdhci/by-name/system /usr ext4 ro,barrier=1 wait,required 
/dev/block/ plataforma/fe310000.sdhci/por-nombre/proveedor /proveedor ext4 ro,barrera=1 espera,requerido 
/dev/bloque/plataforma/fe310000.sdhci/por-nombre/datosdeusuario /datos ext4 nosuid,nodev,noatime,barrera=1 ,data=ordered,noauto_da_alloc wait,reservatedsize=104857600

Método de modificación

Primero verifique la ruta de montaje de la partición, el prefijo de la ruta de la partición de diferentes productos, puede usar el siguiente comando para ver. El prefijo encontrado más el nombre de la partición es la ruta de montaje completa.

# find /dev/ -name "by-name" 
/dev/block/platform/fe310000.sdhci/by-name

Luego modifique el archivo de configuración. Puede modificarlo en el código y luego compilarlo, o empaquetar busybox en la imagen del sistema y modificarlo a través de vi, o modificarlo directamente según el archivo de imagen, el método es el siguiente.

  1. En el servidor Linux, obtenga vendor.img y system.img

  2. Cree una nueva carpeta vacía, como temp

  3. Monte system.img en el directorio temporal

  4. Modifique la ruta de montaje en el archivo temp/system/etc/init.without_two_stages.cfg y guárdelo. La forma de modificar diferentes productos se enumera en la parte posterior.

  5. temperatura de salida

  6. Montar vendor.img en el directorio temporal

  7. Modifique la ruta de montaje en el archivo temp/etc/fstab.rk3568 y guárdelo. La forma de modificar diferentes productos se enumera en la parte posterior.

  8. temperatura de salida

    El comando de ejecución puede referirse a:

tanpengju@OpenHarmony:~/firefly/hihope$ ls 
system.img userdata.img proveedor.img 
tanpengju@OpenHarmony:~/firefly/hihope$ mkdir temp 
tanpengju@OpenHarmony:~/firefly/hihope$ sudo mount system.img temp 
tanpengju@ OpenHarmony:~/firefly/hihope$ ls temp 
bin config data dev etc. init lib lost+found proc sys system updater proveedor 
tanpengju@OpenHarmony:~/firefly/hihope$ sudo vi temp/system/etc/init.without_two_stages.cfg 
tanpengju@ OpenHarmony:~/firefly/hihope$ sudo umount temp 
tanpengju@OpenHarmony:~/firefly/hihope$ ls temp/ 
tanpengju@OpenHarmony:~/firefly/hihope$ sudo mount vendor.img temp 
tanpengju@OpenHarmony:~/firefly/hihope$ ls temperatura/ 
etc perdido + encontrado
tanpengju@OpenHarmony:~/firefly/hihope$ sudo vi temp/etc/fstab.rk3568 
tanpengju@OpenHarmony:~/firefly/hihope$ sudo umount temp

Después de completar la modificación, grabe el system.img y el vendor.img modificados.

Después de grabar, verifique el estado de montaje de la partición a través del comando de montaje en el puerto serie de la placa y confirme que las particiones oem y userdata se montaron correctamente en los directorios /vendor y /data.

Puntos de modificación para diferentes productos.

Para Firefly ROC-RK3568-PC y Firefly AIO-3568J, el nombre de la partición se modifica principalmente.

# /system/etc/init.without_two_stages.cfg文件
"mount ext4 /dev/block/platform/fe310000.sdhci/by-name/oem /vendor wait rdonly barrier=1", 
"mount ext4 /dev/block/platform/ fe310000.sdhci/by-name/userdata /data espera nosuid nodev noatime barrier=1,data=ordered,noauto_da_alloc"
# /vendor/etc/fstab.rk3568文件
# archivo fstab. 
# <src> <mnt_point> <tipo> <mnt_flags and options> <fs_mgr_flags> 
/dev/block/platform/fe310000.sdhci/by-name/rootfs /usr ext4 ro,barrier=1 wait,required 
/dev/block/ plataforma/fe310000.sdhci/by-name/oem /vendor ext4 ro,barrier=1 espera,requerido 
/dev/block/platform/fe310000.sdhci/by-name/userdata /data ext4 nosuid,nodev,noatime,barrier=1 ,data=ordered,noauto_da_alloc wait,reservatedsize=104857600

Firefly AIO-3399J, modifica principalmente la ruta y el nombre de la partición.

# /system/etc/init.without_two_stages.cfg文件
"mount ext4 /dev/block/platform/fe330000.sdhci/by-name/oem /vendor wait rdonly barrier=1", 
"mount ext4 /dev/block/platform/ fe330000.sdhci/by-name/userdata /data espera nosuid nodev noatime barrier=1,data=ordered,noauto_da_alloc"
# /vendor/etc/fstab.rk3568文件
# archivo fstab. 
# <src> <mnt_point> <tipo> <mnt_flags and options> <fs_mgr_flags> 
/dev/block/platform/fe330000.sdhci/by-name/rootfs /usr ext4 ro,barrier=1 wait,required 
/dev/block/ plataforma/fe330000.sdhci/by-name/oem /proveedor ext4 ro,barrier=1 esperar,requerido 
/dev/block/platform/fe330000.sdhci/by-name/userdata /data ext4 nosuid,nodev,noatime,barrier=1 ,data=ordered,noauto_da_alloc wait,reservatedsize=104857600

Paso 7 Adaptación de la pantalla táctil

Primero, busque el dispositivo correspondiente a la pantalla táctil. Use cat /proc/bus/input/devices para encontrar el dispositivo correspondiente a la pantalla táctil. Por ejemplo, aquí la pantalla táctil es el cuarto dispositivo y el nombre del registro es "himax-touchscreen".

# cat /proc/bus/input/devices 
I: Bus=0019 Vendor=524b Product=0006 Version=0100 
N: Name="fe6e0030.pwm" 
P: Phys=gpio-keys/remotectl 
S: Sysfs=/devices/platform /fe6e0030.pwm/input/input0 
U: Uniq= 
H: Handlers=kbd event0 cpufreq 
B: PROP=0 
B: EV=3 
B: KEY=100 0 0 40408800 1c16c0 0 0 0 

I: Bus=0019 Vendor=0000 Producto =0000 Versión=0000 
N: Nombre="rk805 pwrkey" 
P: Phys=rk805_pwrkey/input0 
S: Sysfs=/devices/platform/fdd40000.i2c/i2c-0/0-0020/rk805-pwrkey/input/input1 
U: Uniq= 
H: Handlers=kbd event1 cpufreq 
B: PROP=0 
B: EV=3 
B: KEY=100000 0 0 0 
 
I: Bus=0000 Vendor=0000 Product=0000 Version=0000
N: Name="Typec_Headphone" 
P: Phys=fusb302/typec 
S: Sysfs=/devices/platform/fdd40000.i2c/i2c-0/0-0022/input/input2 U: 
Uniq= 
H: Controladores=evento2 
B: PROP=0 
B: EV=21 
B: SW=4 

I: Bus=0000 Vendor=0000 Product=0000 Version=0000 
N: Name="himax-touchscreen" 
P: Phys= 
S: Sysfs=/devices/virtual/input/input3 
U: Uniq= 
H: Handlers=kbd event3 cpufreq 
B: PROP=2 
B: EV=b 
B: KEY=10 0 0 0 0 0 0 0 400 0 0 0 2000000 0 40000800 40 0 ​​0 0 
B: ABS=6658000 0 

I: Bus=0019 Proveedor =0001 Producto=0001 Versión=0100 
N: Nombre="adc-keys" 
P: Phys=adc-keys/input0 
S: Sysfs=/devices/platform/adc-keys/input/input4 
U: Uniq= 
H: Handlers=kbd event4 cpufreq 
B: PROP=0 
B: EV=3 
B: CLAVE=40000800 40000 1000000 0 0

Luego, configure el Nombre del dispositivo de pantalla táctil en la regla udev, para que udev reconozca automáticamente el dispositivo con el nombre como un dispositivo de pantalla táctil. Al final del archivo /etc/udev/rules.d/touchscreen.rules, agregue la siguiente oración, donde "himax-touchscreen" es el nombre consultado en el paso anterior, que es diferente en diferentes entornos de hardware.

ATTR{nombre}=="himax-pantalla táctil", ENV{ID_INPUT}="1", ENV{ID_INPUT_TOUCHSCREEN}="1"

El archivo touchscreen.rules modificado es el siguiente:

# cat /etc/udev/rules.d/touchscreen.rules 
ATTRS{nombre}=="VSoC pantalla táctil", ENV{ID_INPUT}="1", ENV{ID_INPUT_TOUCHSCREEN}="1" 
ATTRS{nombre}=="VSoC teclado", ENV{ID_INPUT}="1", ENV{ID_INPUT_KEYBOARD}="1" 
DRIVERS=="hid-multitouch", ENV{ID_INPUT}="1", ENV{ID_INPUT_TOUCHSCREEN}="1" ATTR{nombre 
} =="pantalla táctil himax", ENV{ID_INPUT}="1", ENV{ID_INPUT_TOUCHSCREEN}="1" 
#

Después de modificar touchscreen.rules, debe reiniciar el dispositivo para que surta efecto.

4 efecto de adaptación

Luciérnaga ROC-RK3568-PC:

Luciérnaga AIO-3568J:

Luciérnaga AIO-3399J:

Después de la instalación, la pantalla y el tacto están disponibles.

Supongo que te gusta

Origin blog.csdn.net/2301_76484015/article/details/130363374
Recomendado
Clasificación