{"id":10655,"date":"2026-07-16T16:20:02","date_gmt":"2026-07-16T08:20:02","guid":{"rendered":"https:\/\/ieeker.com\/?p=10655"},"modified":"2026-08-26T16:58:42","modified_gmt":"2026-08-26T08:58:42","slug":"rockchip-system-porting-firmware-development-guide","status":"publish","type":"post","link":"https:\/\/ieeker.com\/es\/rockchip-system-porting-firmware-development-guide\/","title":{"rendered":"La gu\u00eda definitiva para la adaptaci\u00f3n de sistemas Rockchip y el desarrollo de firmware"},"content":{"rendered":"<div data-elementor-type=\"wp-post\" data-elementor-id=\"10655\" class=\"elementor elementor-10655\" data-elementor-post-type=\"post\">\n\t\t\t\t<div class=\"elementor-element elementor-element-3345676 e-flex e-con-boxed e-con e-parent\" data-id=\"3345676\" data-element_type=\"container\" data-settings=\"{&quot;jet_parallax_layout_list&quot;:[]}\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-d4c70da elementor-widget elementor-widget-text-editor\" data-id=\"d4c70da\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>La adaptaci\u00f3n de sistemas Rockchip es el proceso de ingenier\u00eda fundamental que consiste en adaptar, compilar y optimizar sistemas operativos como Linux, Android u OpenHarmony para que funcionen a la perfecci\u00f3n en los sistemas en chip (SoC) de Rockchip. Esta gu\u00eda completa te acompa\u00f1a a lo largo de todo el ciclo de vida del desarrollo del paquete de soporte de placa (BSP), desde la inicializaci\u00f3n del entorno hasta la integraci\u00f3n avanzada de controladores y el ajuste del rendimiento. Al dominar estos conceptos, los desarrolladores pueden sacar el m\u00e1ximo partido al potencial del hardware de las plataformas de silicio modernas, garantizando la fiabilidad a largo plazo de los dispositivos perif\u00e9ricos de pr\u00f3xima generaci\u00f3n.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-f27d49a elementor-widget elementor-widget-text-editor\" data-id=\"f27d49a\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p data-path-to-node=\"8\"><b data-path-to-node=\"8\" data-index-in-node=\"0\">Principales conclusiones<\/b><\/p><ul data-path-to-node=\"9\"><li><p data-path-to-node=\"9,0,0\"><b data-path-to-node=\"9,0,0\" data-index-in-node=\"0\">Selecci\u00f3n del ecosistema:<\/b> Compara de forma estrat\u00e9gica Linux, Android, OpenHarmony y los sistemas operativos en tiempo real (RTOS) para implementaciones espec\u00edficas de computaci\u00f3n en el borde.<\/p><\/li><li><p data-path-to-node=\"9,1,0\"><b data-path-to-node=\"9,1,0\" data-index-in-node=\"0\">Arquitectura del SDK:<\/b> Domina la estructura jer\u00e1rquica de los directorios U-Boot, Kernel, Buildroot y External para lograr una configuraci\u00f3n fluida.<\/p><\/li><li><p data-path-to-node=\"9,2,0\"><b data-path-to-node=\"9,2,0\" data-index-in-node=\"0\">Proceso de compilaci\u00f3n:<\/b> Ejecutar procesos de generaci\u00f3n de firmware, tanto autom\u00e1ticos como manuales, desde el gestor de arranque hasta el sistema de archivos ra\u00edz (rootfs).<\/p><\/li><li><p data-path-to-node=\"9,3,0\"><b data-path-to-node=\"9,3,0\" data-index-in-node=\"0\">Portabilidad de controladores:<\/b> Modifica el \u00e1rbol de dispositivos (DTS) para configurar correctamente los GPIO, los perif\u00e9ricos I2C y las interfaces de pantalla complejas.<\/p><\/li><li><p data-path-to-node=\"9,4,0\"><b data-path-to-node=\"9,4,0\" data-index-in-node=\"0\">Optimizaci\u00f3n del rendimiento:<\/b> Implementar estrategias de arranque r\u00e1pido e integraciones de controladores NPU adaptadas a los terminales de hardware de nivel empresarial.<\/p><\/li><\/ul>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-ec5f6dd elementor-widget elementor-widget-text-editor\" data-id=\"ec5f6dd\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<h2 data-path-to-node=\"9\">Introducci\u00f3n y visi\u00f3n general del ecosistema<\/h2><p data-path-to-node=\"9\">La implementaci\u00f3n de un producto integrado comienza con una decisi\u00f3n fundamental: seleccionar el sistema operativo que se adapte a tu arquitectura de hardware y a los requisitos de la aplicaci\u00f3n. Los modernos SoC de Rockchip presentan dise\u00f1os altamente heterog\u00e9neos, que integran CPU multin\u00facleo, GPU de alto rendimiento, unidades de procesamiento neuronal (NPU) dedicadas y potentes motores de procesamiento de v\u00eddeo (VPU) en un \u00fanico chip. Elegir un sistema operativo inadecuado en las primeras fases del ciclo de desarrollo puede provocar graves cuellos de botella en la memoria, incumplimientos de los plazos en tiempo real o un aumento desmesurado de los costes de mantenimiento del software.<\/p><p data-path-to-node=\"10\">Seg\u00fan la <a class=\"ng-star-inserted\" href=\"https:\/\/promwad.com\/news\/edge-ai-platforms-2026-jetson-kria-rockchip-movidius\" target=\"_blank\" rel=\"noopener\" data-hveid=\"0\" data-ved=\"0CAAQ_4QMahgKEwioxvnz1NaVAxUAAAAAHQAAAAAQtQE\">Plataformas de IA en el borde de Promwad 2026<\/a> Seg\u00fan un informe de an\u00e1lisis del sector, Rockchip ofrece el equilibrio m\u00e1s competitivo entre rendimiento computacional y coste unitario dentro del mercado de la IA perif\u00e9rica de gama media. El estudio destaca el RK3588 y sus procesadores sucesores como la plataforma preferida para las empresas que requieren un alto rendimiento en IA, flujos de trabajo multimedia flexibles y salidas de pantalla de gran calidad, sin el elevado precio de las arquitecturas de la competencia.<\/p><p data-path-to-node=\"11\">Para ayudar a los responsables t\u00e9cnicos, arquitectos de sistemas e ingenieros de firmware a orientarse en este proceso de selecci\u00f3n, hemos realizado pruebas comparativas de los principales sistemas operativos compatibles con el ecosistema Rockchip:<\/p><table data-path-to-node=\"12\"><thead><tr><td><strong>Sistema operativo<\/strong><\/td><td><strong>Requisitos m\u00ednimos de RAM<\/strong><\/td><td><strong>Perfil de tiempo de arranque<\/strong><\/td><td><strong>Caso de uso principal en el \u00e1mbito industrial y comercial<\/strong><\/td><td><strong>Complejidad del desarrollo y el mantenimiento<\/strong><\/td><\/tr><\/thead><tbody><tr><td><span data-path-to-node=\"12,1,0,0\"><b data-path-to-node=\"12,1,0,0\" data-index-in-node=\"0\">Linux (Debian\/Ubuntu)<\/b><\/span><\/td><td><span data-path-to-node=\"12,1,1,0\">512 MB \u2013 1 GB<\/span><\/td><td><span data-path-to-node=\"12,1,2,0\">R\u00e1pido (5 \u2013 15 segundos)<\/span><\/td><td><span data-path-to-node=\"12,1,3,0\">Pasarelas industriales, servidores locales de IA en el borde de la red, nodos de automatizaci\u00f3n sin interfaz gr\u00e1fica<\/span><\/td><td><span data-path-to-node=\"12,1,4,0\">Medio (con un alto grado de c\u00f3digo abierto y un amplio apoyo de la comunidad a las bibliotecas)<\/span><\/td><\/tr><tr><td><span data-path-to-node=\"12,2,0,0\"><b data-path-to-node=\"12,2,0,0\" data-index-in-node=\"0\">Android (AOSP)<\/b><\/span><\/td><td><span data-path-to-node=\"12,2,1,0\">4 GB \u2013 8 GB<\/span><\/td><td><span data-path-to-node=\"12,2,2,0\">Moderado (20 \u2013 40 segundos)<\/span><\/td><td><span data-path-to-node=\"12,2,3,0\">Se\u00f1alizaci\u00f3n digital interactiva, terminales de punto de venta inteligentes para comercios, reproductores multimedia<\/span><\/td><td><span data-path-to-node=\"12,2,4,0\">Alto (capa HAL compleja, requisitos estrictos de conformidad con CTS\/GMS)<\/span><\/td><\/tr><tr><td><span data-path-to-node=\"12,3,0,0\"><b data-path-to-node=\"12,3,0,0\" data-index-in-node=\"0\">OpenHarmony<\/b><\/span><\/td><td><span data-path-to-node=\"12,3,1,0\">256 MB \u2013 2 GB<\/span><\/td><td><span data-path-to-node=\"12,3,2,0\">R\u00e1pido (5 \u2013 12 segundos)<\/span><\/td><td><span data-path-to-node=\"12,3,3,0\">Redes distribuidas de Internet de las cosas, electrodom\u00e9sticos inteligentes, nodos seguros de la red el\u00e9ctrica inteligente<\/span><\/td><td><span data-path-to-node=\"12,3,4,0\">Alto (ecosistema en r\u00e1pida evoluci\u00f3n, marco de controladores HDF \u00fanico)<\/span><\/td><\/tr><tr><td><span data-path-to-node=\"12,4,0,0\"><b data-path-to-node=\"12,4,0,0\" data-index-in-node=\"0\">RTOS (FreeRTOS)<\/b><\/span><\/td><td><span data-path-to-node=\"12,4,1,0\">&lt; 16 MB<\/span><\/td><td><span data-path-to-node=\"12,4,2,0\">Instant\u00e1neo (&lt; 1 segundo)<\/span><\/td><td><span data-path-to-node=\"12,4,3,0\">Nodos sensoriales de bajo consumo, controladores de motores en tiempo real, actuadores m\u00e9dicos<\/span><\/td><td><span data-path-to-node=\"12,4,4,0\">Bajo (programador de tareas sencillo, acceso directo a los registros del hardware)<\/span><\/td><\/tr><\/tbody><\/table><h2 data-path-to-node=\"10\"><br \/><br \/><\/h2>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-ddb8a2f elementor-widget elementor-widget-text-editor\" data-id=\"ddb8a2f\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>La integraci\u00f3n de un flujo de trabajo de portabilidad de sistemas bien planificado garantiza que tu software pueda aprovechar al m\u00e1ximo el rendimiento de plataformas avanzadas, como la <a href=\"https:\/\/ieeker.com\/es\/products\/yky-3588s-rk3588s-8k-ai-sbc\/\" target=\"_blank\" rel=\"noopener\">Placa de desarrollo RK3588<\/a>. Tanto si est\u00e1s dise\u00f1ando un sistema de visi\u00f3n de alta velocidad como si est\u00e1s implementando un sistema de gran resiliencia <a class=\"ng-star-inserted\" href=\"https:\/\/ieeker.com\/es\/rk3588-ai-industrial-development-board\/\" target=\"_blank\" rel=\"noopener\" data-hveid=\"0\" data-ved=\"0CAAQ_4QMahgKEwioxvnz1NaVAxUAAAAAHQAAAAAQuQE\">aplicaciones de pasarelas de red industrial<\/a>, comprender este ecosistema fundamental es el primer paso hacia el \u00e9xito del producto.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-04c3d4d elementor-widget elementor-widget-text-editor\" data-id=\"04c3d4d\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<h2 data-path-to-node=\"15\">1. Configuraci\u00f3n del entorno para el SDK de Rockchip<\/h2><p data-path-to-node=\"16\">La falta de una sola biblioteca del host o una versi\u00f3n incompatible del compilador puede paralizar todo tu proceso de desarrollo. Dado que los SDK de Rockchip se basan en cadenas de herramientas complejas para compilar en diferentes arquitecturas (normalmente, mediante compilaci\u00f3n cruzada desde un host x86_64 a un destino Aarch64), resulta fundamental establecer un entorno de compilaci\u00f3n estandarizado y limpio.<\/p><p data-path-to-node=\"17\">Recomendamos encarecidamente utilizar un servidor f\u00edsico dedicado o una m\u00e1quina virtual robusta en la que se ejecute <b data-path-to-node=\"17\" data-index-in-node=\"95\">Ubuntu 20.04 LTS<\/b> o <b data-path-to-node=\"17\" data-index-in-node=\"115\">Ubuntu 22.04 LTS<\/b>. Aunque las distribuciones m\u00e1s recientes de Linux ofrecen paquetes actualizados, a menudo presentan problemas de compatibilidad con versiones obsoletas de GCC o Python que impiden el funcionamiento de los scripts de compilaci\u00f3n heredados dentro de las capas BSP m\u00e1s antiguas de Rockchip.<\/p><h3 data-path-to-node=\"18\">Inicializaci\u00f3n de las dependencias del host<\/h3><p data-path-to-node=\"19\">Antes de descargar el c\u00f3digo fuente, debes configurar tu gestor de paquetes e instalar las dependencias obligatorias a nivel del sistema. Ejecuta el siguiente script de Bash en tu m\u00e1quina host para completar la configuraci\u00f3n del entorno:<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-51e77a2 elementor-widget elementor-widget-text-editor\" data-id=\"51e77a2\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p><span style=\"color: #ff0000;\">#!\/bin\/bash<\/span><br \/><span style=\"color: #999999;\">Instalador de dependencias para la compilaci\u00f3n del BSP estandarizado de Rockchip #<\/span><br \/><span style=\"color: #999999;\">Sistemas de destino #: M\u00e1quinas host con Ubuntu 20.04 \/ 22.04 LTS<\/span><\/p><p><span style=\"color: #ff0000;\">eco<\/span> <span style=\"color: #00ff00;\">\u00abInicializando las dependencias de compilaci\u00f3n del SDK de Rockchip\u2026\u00bb<\/span><br \/>sudo apt-get update<\/p><p>sudo apt-get install -y git ssh make gcc libssl-dev liblz4-tool \\<br \/>expect g++ patchelf chrpath gawk texinfo chrpath diffstat binfmt-support \\<br \/>qemu-user-static live-build bison flex fakeroot cmake gcc-multilib g++-multilib \\<br \/>descomprimir device-tree-compiler ncurses-dev bc python3-pip rsynccpio libelf-dev<\/p><p><span style=\"color: #ff0000;\">eco<\/span> <span style=\"color: #00ff00;\">\u00abEntorno del servidor inicializado correctamente\u00bb.<\/span><\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-e7724c4 elementor-widget elementor-widget-text-editor\" data-id=\"e7724c4\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<h3 data-path-to-node=\"21\">Compilaci\u00f3n en contenedores mediante Docker<\/h3><p data-path-to-node=\"22\">Para los equipos de desarrollo empresarial, basarse en configuraciones locales de los equipos provoca desviaciones en el entorno. Una actualizaci\u00f3n de un paquete en el equipo de un desarrollador puede hacer que su compilaci\u00f3n se realice correctamente, mientras que la de otro falle. Para evitarlo, recomendamos encarecidamente compilar dentro de un contenedor Docker estandarizado. A continuaci\u00f3n se muestra una soluci\u00f3n de nivel industrial <code data-path-to-node=\"22\" data-index-in-node=\"326\">Dockerfile<\/code> que incluye el entorno de compilaci\u00f3n exacto que requieren los SDK de Rockchip:<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-b680e44 elementor-widget elementor-widget-text-editor\" data-id=\"b680e44\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>Archivo Dockerfile # para la compilaci\u00f3n cruzada del SDK de Rockchip<br \/>DESDE Ubuntu:20.04<\/p><p># Evitar las solicitudes interactivas durante la instalaci\u00f3n del paquete<br \/>ENV DEBIAN_FRONTEND=noninteractive<\/p><p>#: Actualizar e instalar las dependencias necesarias<br \/>Ejecuta \u00abapt-get update &amp;&amp; apt-get install -y \\\u00bb<br \/>git ssh make gcc libssl-dev liblz4-tool expect g++ patchelf \\<br \/>chrpath gawk texinfo diffstat binfmt-support qemu-user-static \\<br \/>live-build, bison, flex, fakeroot, cmake, gcc-multilib, g++-multilib \\<br \/>descomprimir device-tree-compiler ncurses-dev bc python3-pip rsync \\<br \/>cpio libelf-dev sudo locales &amp;&amp; \\<br \/>rm -rf \/var\/lib\/apt\/lists\/*<\/p><p># Establecer la configuraci\u00f3n regional del sistema en UTF-8<br \/>Ejecuta \u00ablocale-gen en_US.UTF-8\u00bb<br \/>ENV LANG en_US.UTF-8<br \/>IDIOMA DEL ENTORNO en_US:en<br \/>ENV LC_ALL en_US.UTF-8<\/p><p># Crear un usuario de desarrollador que no sea \u00abroot\u00bb y que coincida con el UID\/GID del host para evitar problemas con los permisos de los archivos<br \/>ARG USER_ID=1000<br \/>ARG GROUP_ID=1000<br \/>Ejecuta \u00abgroupadd -g ${GROUP_ID} developer\u00bb &amp;&amp; \\<br \/>useradd -u ${USER_ID} -g developer -m developer &amp;&amp; \\<br \/>echo \u00abdeveloper ALL=(ALL) NOPASSWD:ALL\u00bb &gt;&gt; \/etc\/sudoers<\/p><p>Desarrollador de USER<br \/>WORKDIR \/home\/developer\/rk_sdk<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-a3a91b0 elementor-widget elementor-widget-text-editor\" data-id=\"a3a91b0\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p data-path-to-node=\"23\">Al montar el directorio ra\u00edz de tu SDK dentro de este contenedor, te aseguras de que cada compilaci\u00f3n sea matem\u00e1ticamente reproducible, lo que protege tu proceso de lanzamiento de firmware frente a dependencias impredecibles del host.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-56ae370 elementor-widget elementor-widget-text-editor\" data-id=\"56ae370\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<h2 data-path-to-node=\"26\">2. An\u00e1lisis en profundidad de la arquitectura del SDK de Rockchip<\/h2><p data-path-to-node=\"27\">El SDK t\u00edpico de Linux para Rockchip es un \u00e1rbol de directorios enorme, que a menudo supera los 50 GB tras una compilaci\u00f3n completa. Para navegar por esta estructura es necesario comprender las distintas funciones que desempe\u00f1a cada directorio de nivel superior.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-5699ef7 elementor-widget elementor-widget-text-editor\" data-id=\"5699ef7\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>rk_sdk\/<br \/>\u251c\u2500\u2500 app\/ Aplicaciones de espacio de usuario # y demostraciones propias<br \/>\u251c\u2500\u2500 buildroot\/ Archivos de generaci\u00f3n del sistema Buildroot #<br \/>\u251c\u2500\u2500 debian\/ #: scripts de generaci\u00f3n del sistema de archivos ra\u00edz de Debian y paquetes precompilados<br \/>\u251c\u2500\u2500 device\/<br \/>\u2502 \u2514\u2500\u2500 rockchip\/ #: Configuraciones de la placa de destino y tablas de particiones<br \/>\u251c\u2500\u2500 external\/ Bibliotecas propias de # (HAL de VPU, NPU y MPP)<br \/>\u251c\u2500\u2500 kernel\/ C\u00f3digo fuente del n\u00facleo de Linux # y \u00e1rboles de dispositivos<br \/>\u251c\u2500\u2500 prebuilts\/ Compiladores cruzados # (GCC, Clang) y cadenas de herramientas binarias<br \/>\u251c\u2500\u2500 rkbin\/ Binarios de arranque propios de # (entrenamiento DDR, Trust)<br \/>\u251c\u2500\u2500 u-boot\/ C\u00f3digo fuente del cargador de arranque universal #<br \/>\u2514\u2500\u2500 build.sh #: script de compilaci\u00f3n para la orquestaci\u00f3n global<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-75ad63f elementor-widget elementor-widget-text-editor\" data-id=\"75ad63f\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<h3 data-path-to-node=\"29\">Funciones b\u00e1sicas del directorio ra\u00edz<\/h3><ul data-path-to-node=\"30\"><li><p data-path-to-node=\"30,0,0\"><b data-path-to-node=\"30,0,0\" data-index-in-node=\"0\"><code data-path-to-node=\"30,0,0\" data-index-in-node=\"0\">u-boot\/<\/code><\/b>: Alberga el gestor de arranque. Inicializa los registros iniciales del sistema y configura el controlador DDR utilizando los archivos binarios de <code data-path-to-node=\"30,0,0\" data-index-in-node=\"118\">rkbin\/<\/code>, configura el controlador de almacenamiento (eMMC\/SD\/NVMe) y carga el n\u00facleo de Linux en la memoria del sistema.<\/p><\/li><li><p data-path-to-node=\"30,1,0\"><b data-path-to-node=\"30,1,0\" data-index-in-node=\"0\"><code data-path-to-node=\"30,1,0\" data-index-in-node=\"0\">kernel\/<\/code><\/b>: Contiene el n\u00facleo principal del sistema operativo. Seg\u00fan <a class=\"ng-star-inserted\" href=\"https:\/\/docs.kernel.org\/translations\/zh_CN\/devicetree\/usage-model.html\" target=\"_blank\" rel=\"noopener\" data-hveid=\"0\" data-ved=\"0CAAQ_4QMahgKEwioxvnz1NaVAxUAAAAAHQAAAAAQvQE\">La documentaci\u00f3n del n\u00facleo de Linux<\/a>, el \u00abDevice Tree\u00bb (DT) funciona como un lenguaje din\u00e1mico de descripci\u00f3n de hardware que separa por completo la disposici\u00f3n f\u00edsica de la placa del c\u00f3digo fuente del controlador. Esta carpeta contiene todos los <code data-path-to-node=\"30,1,0\" data-index-in-node=\"283\">.dts<\/code> y <code data-path-to-node=\"30,1,0\" data-index-in-node=\"292\">.dtsi<\/code> archivos que representan tu placa f\u00edsica.<\/p><\/li><li><p data-path-to-node=\"30,2,0\"><b data-path-to-node=\"30,2,0\" data-index-in-node=\"0\"><code data-path-to-node=\"30,2,0\" data-index-in-node=\"0\">externo\/<\/code><\/b>: El sitio web dedicado a los aceleradores de hardware de c\u00f3digo cerrado y de c\u00f3digo abierto de Rockchip. Esto incluye la Plataforma de Procesamiento Multimedia de Rockchip (<code data-path-to-node=\"30,2,0\" data-index-in-node=\"138\">MPP<\/code>) para la codificaci\u00f3n y decodificaci\u00f3n de v\u00eddeo aceleradas por hardware, junto con las bibliotecas de espacio de usuario necesarias para controlar el procesador de redes neuronales por hardware.<\/p><\/li><li><p data-path-to-node=\"30,3,0\"><b data-path-to-node=\"30,3,0\" data-index-in-node=\"0\"><code data-path-to-node=\"30,3,0\" data-index-in-node=\"0\">dispositivo\/rockchip\/<\/code><\/b>: Aqu\u00ed es donde se configura la placa de destino espec\u00edfica. En su interior, encontrar\u00e1s archivos como <code data-path-to-node=\"30,3,0\" data-index-in-node=\"114\">BoardConfig*.mk<\/code> que especifican las posiciones de las particiones, los formatos de las im\u00e1genes del n\u00facleo, las l\u00edneas de comando de arranque y las configuraciones de los soportes de almacenamiento de destino.<\/p><\/li><\/ul><h3 data-path-to-node=\"31\">Mecanismos de configuraci\u00f3n<\/h3><p data-path-to-node=\"32\">Rockchip utiliza una estructura unificada de Makefile gestionada por el <code data-path-to-node=\"32\" data-index-in-node=\"63\">build.sh<\/code> script en el directorio ra\u00edz. Cuando se inicia una compilaci\u00f3n, el sistema lee las configuraciones en <code data-path-to-node=\"32\" data-index-in-node=\"166\">dispositivo\/rockchip\/<\/code> para configurar variables de entorno globales, como la ruta del compilador, la arquitectura de destino (<code data-path-to-node=\"32\" data-index-in-node=\"267\">brazo<\/code> o <code data-path-to-node=\"32\" data-index-in-node=\"274\">arm64<\/code>), y el tipo de sistema de archivos. Comprender estas interrelaciones entre directorios es lo que permite a los desarrolladores con mayor experiencia pasar con \u00e9xito de las evaluaciones b\u00e1sicas a dise\u00f1os de placas personalizados y aptos para producci\u00f3n.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-cc1bf60 elementor-widget elementor-widget-image\" data-id=\"cc1bf60\" data-element_type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img fetchpriority=\"high\" decoding=\"async\" width=\"800\" height=\"450\" src=\"https:\/\/ieeker.com\/wp-content\/uploads\/2026\/07\/Rockchip-SDK-firmware-compilation-pipeline-and-software-architecture-1024x576.webp\" class=\"attachment-large size-large wp-image-10659\" alt=\"\" srcset=\"https:\/\/ieeker.com\/wp-content\/uploads\/2026\/07\/Rockchip-SDK-firmware-compilation-pipeline-and-software-architecture-1024x576.webp 1024w, https:\/\/ieeker.com\/wp-content\/uploads\/2026\/07\/Rockchip-SDK-firmware-compilation-pipeline-and-software-architecture-300x169.webp 300w, https:\/\/ieeker.com\/wp-content\/uploads\/2026\/07\/Rockchip-SDK-firmware-compilation-pipeline-and-software-architecture-768x432.webp 768w, https:\/\/ieeker.com\/wp-content\/uploads\/2026\/07\/Rockchip-SDK-firmware-compilation-pipeline-and-software-architecture-1536x864.webp 1536w, https:\/\/ieeker.com\/wp-content\/uploads\/2026\/07\/Rockchip-SDK-firmware-compilation-pipeline-and-software-architecture-18x10.webp 18w, https:\/\/ieeker.com\/wp-content\/uploads\/2026\/07\/Rockchip-SDK-firmware-compilation-pipeline-and-software-architecture.webp 1672w\" sizes=\"(max-width: 800px) 100vw, 800px\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-8c1cceb elementor-widget elementor-widget-text-editor\" data-id=\"8c1cceb\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<h2 data-path-to-node=\"34\">3. El proceso de compilaci\u00f3n del firmware<\/h2><p data-path-to-node=\"35\">Comprender la secuencia exacta en la que el sistema de compilaci\u00f3n compila cada imagen es fundamental para solucionar errores de compilaci\u00f3n y gestionar las particiones individuales. El proceso de compilaci\u00f3n es un proceso de varias etapas que convierte sistem\u00e1ticamente el c\u00f3digo fuente sin procesar en particiones binarias que se pueden grabar en la memoria flash.<\/p><p data-path-to-node=\"36\">\u00a0<\/p><div class=\"attachment-container unknown\"><div class=\"sequence-container\" data-hveid=\"0\" data-ved=\"0CAAQse0SahgKEwioxvnz1NaVAxUAAAAAHQAAAAAQvgE\"><div class=\"sequence-event ng-star-inserted\"><div class=\"sequence-event-content\"><div class=\"sequence-event-description gds-body-l\"><span class=\"only-show-to-message-actions\" data-test-id=\"sequence-export-header\"><strong>1. Seleccionar la configuraci\u00f3n de la placa:<\/strong>Comando: .\/build.sh lunch.<\/span><p class=\"ng-star-inserted\">Inicializa el entorno de compilaci\u00f3n del dispositivo de destino cargando un archivo BoardConfig espec\u00edfico (por ejemplo, BoardConfig-rk3588-evb1-lp4-v10.mk). De este modo, se configuran las asignaciones de variables para los compiladores, las configuraciones del n\u00facleo y las arquitecturas de destino.<\/p><\/div><\/div><\/div><div class=\"sequence-event ng-star-inserted\"><div class=\"sequence-event-content\"><div class=\"sequence-event-description gds-body-l\"><span class=\"only-show-to-message-actions\" data-test-id=\"sequence-export-header\"><strong>2. Compilar U-Boot:<\/strong>Comando: .\/build.sh uboot.<\/span><p class=\"ng-star-inserted\">Compila el gestor de arranque. En este paso se integra el c\u00f3digo de c\u00f3digo abierto de U-Boot con los binarios propietarios en <code>rkbin\/<\/code> (como las rutinas de entrenamiento de la DDR y el firmware de confianza de ARM) para generar una salida <code>uboot.img<\/code> y <code>MiniLoaderAll.bin<\/code>.<\/p><\/div><\/div><\/div><div class=\"sequence-event ng-star-inserted\"><div class=\"sequence-event-content\"><div class=\"sequence-event-description gds-body-l\"><span class=\"only-show-to-message-actions\" data-test-id=\"sequence-export-header\"><strong>3. Compilar el n\u00facleo de Linux:<\/strong>Comando: .\/build.sh kernel.<\/span><p class=\"ng-star-inserted\">Compila el n\u00facleo de Linux. Este proceso compila la imagen est\u00e1ndar del n\u00facleo y convierte los archivos de c\u00f3digo fuente del \u00e1rbol de dispositivos (.dts), legibles para el usuario, en archivos binarios del \u00e1rbol de dispositivos (.dtb). Estos se empaquetan juntos en <code>boot.img<\/code>.<\/p><\/div><\/div><\/div><div class=\"sequence-event ng-star-inserted\"><div class=\"sequence-event-content\"><div class=\"sequence-event-description gds-body-l\"><span class=\"only-show-to-message-actions\" data-test-id=\"sequence-export-header\"><strong>4. Crear el sistema de archivos ra\u00edz:<\/strong>Comando: .\/build.sh rootfs.<\/span><p class=\"ng-star-inserted\">Monta el espacio de usuario del sistema operativo de destino. Dependiendo de tu configuraci\u00f3n, esto compila y formatea paquetes de Buildroot o extrae sistemas de archivos ra\u00edz de Debian\/Ubuntu preconfigurados en un entorno limpio <code>rootfs.img<\/code>.<\/p><\/div><\/div><\/div><div class=\"sequence-event ng-star-inserted\"><div class=\"sequence-event-content\"><div class=\"sequence-event-description gds-body-l\"><span class=\"only-show-to-message-actions\" data-test-id=\"sequence-export-header\"><strong>5. Empaquetado del paquete de firmware:<\/strong>Comando: .\/build.sh firmware.<\/span><p class=\"ng-star-inserted\">Utiliza herramientas de Rockchip (<code>afptool<\/code> y <code>rkImageMaker<\/code>) para leer el <code>parameter.txt<\/code> archivo, calcular los desplazamientos de las particiones de los sectores y agrupar todas las particiones independientes en una \u00fanica y unificada <code>update.img<\/code> Archivo listo para el flasheo en serie.<\/p><\/div><\/div><\/div><\/div><\/div><h3 data-path-to-node=\"37\">Manipulaci\u00f3n manual de im\u00e1genes<\/h3><p data-path-to-node=\"38\">Aunque el sistema automatizado <code data-path-to-node=\"38\" data-index-in-node=\"20\">.\/build.sh<\/code> Aunque el script es eficaz para compilaciones de todo el sistema, el desarrollo diario de controladores requiere una mayor granularidad en la compilaci\u00f3n. Si est\u00e1s depurando activamente un controlador personalizado, recompilar todo el SDK lleva un tiempo innecesario. En su lugar, los desarrolladores compilan el n\u00facleo de forma independiente y flashean \u00fanicamente la partici\u00f3n de destino:<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-5f5fff1 elementor-widget elementor-widget-text-editor\" data-id=\"5f5fff1\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p># Compilar \u00fanicamente el n\u00facleo y los \u00e1rboles de dispositivos<br \/>.\/build.sh kernel<\/p><p>#: Compilar \u00fanicamente el gestor de arranque<br \/>.\/build.sh uboot<\/p><p>#: Reconstruir \u00fanicamente el sistema de archivos ra\u00edz<br \/>.\/build.sh rootfs<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-34194d0 elementor-widget elementor-widget-text-editor\" data-id=\"34194d0\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>Esta estrategia de compilaci\u00f3n modular reduce los ciclos de iteraci\u00f3n de horas a minutos, lo que te permite probar r\u00e1pidamente los cambios incrementales en los controladores en tu hardware de destino.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-91c5d66 elementor-widget elementor-widget-text-editor\" data-id=\"91c5d66\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<h2 data-path-to-node=\"42\">4. Adaptaci\u00f3n de controladores b\u00e1sicos y modificaciones del \u00e1rbol de dispositivos<\/h2><p data-path-to-node=\"43\">Modificar el c\u00f3digo fuente del \u00e1rbol de dispositivos (DTS) para adaptarlo a tu hardware personalizado es la tarea m\u00e1s frecuente y crucial en la adaptaci\u00f3n de sistemas. Dado que Rockchip utiliza la arquitectura est\u00e1ndar del n\u00facleo de Linux, cualquier modificaci\u00f3n en el enrutamiento de los pines f\u00edsicos del esquema del hardware debe reflejarse con precisi\u00f3n en el archivo DTS para que los controladores puedan comunicarse con los perif\u00e9ricos f\u00edsicos.<\/p><h3 data-path-to-node=\"44\">Caso pr\u00e1ctico real: c\u00f3mo superar las limitaciones espaciales<\/h3><p data-path-to-node=\"45\">En un reciente proyecto de automatizaci\u00f3n industrial, IEEKER dise\u00f1\u00f3 un controlador perif\u00e9rico pensado para su montaje est\u00e1ndar en un carril DIN dentro de armarios el\u00e9ctricos con espacio limitado. Durante la fase de prototipado f\u00edsico, descubrimos que la disposici\u00f3n f\u00edsica de los armarios especializados de nuestro cliente no permit\u00eda conectar cables est\u00e1ndar en la parte trasera del dispositivo.<\/p><p data-path-to-node=\"46\">Para resolver esta limitaci\u00f3n f\u00edsica, actualizamos nuestras especificaciones t\u00e9cnicas de dise\u00f1o con el fin de situar todos los puertos de interfaz f\u00edsica exclusivamente en el panel lateral, en lugar de en la parte trasera. Este cambio estructural nos oblig\u00f3 a redise\u00f1ar por completo las pistas de cobre de nuestra placa base personalizada, trasladando l\u00edneas cr\u00edticas como HDMI, los controladores USB Host y los PHY de Gigabit Ethernet a pines f\u00edsicos totalmente diferentes del procesador Rockchip.<\/p><p data-path-to-node=\"47\">Este redise\u00f1o de las rutas f\u00edsicas requiri\u00f3 una revisi\u00f3n completa de los bloques de multiplexaci\u00f3n de pines (IOMUX) de nuestra configuraci\u00f3n DTS. Si no hubi\u00e9ramos comprendido a fondo el n\u00facleo, <code data-path-to-node=\"47\" data-index-in-node=\"166\">pinctrl<\/code> subsistema, la asignaci\u00f3n de estas nuevas conexiones habr\u00eda paralizado el proyecto. Al modificar el archivo DTS de nuestra placa personalizada, reasignamos los valores el\u00e9ctricos de pull-up\/pull-down, las intensidades de se\u00f1al y las opciones de multiplexaci\u00f3n de pines para la nueva disposici\u00f3n orientada hacia un lado en tan solo una tarde, resolviendo as\u00ed la modificaci\u00f3n del hardware sin necesidad de editar ning\u00fan c\u00f3digo del controlador en C.<\/p><h3 data-path-to-node=\"48\">Asignaci\u00f3n est\u00e1ndar de perif\u00e9ricos DTS<\/h3><p data-path-to-node=\"49\">A continuaci\u00f3n se muestra un ejemplo de una modificaci\u00f3n DTS de nivel industrial que asigna un controlador de pantalla t\u00e1ctil capacitiva a trav\u00e9s de la <code data-path-to-node=\"49\" data-index-in-node=\"113\">i2c1<\/code> autob\u00fas:<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-82bd81c elementor-widget elementor-widget-text-editor\" data-id=\"82bd81c\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p><span style=\"color: #00ccff;\">&amp;i2c1 {<\/span><br \/>estado = <span style=\"color: #00ff00;\">\u00abVale\u00bb<\/span>;<br \/>i2c-scl-tiempo-de-subida-ns = ;<br \/>i2c-scl-tiempo-de-descenso-ns = ;<br \/>frecuencia-de-reloj = ; \/\/ Establece la velocidad del reloj I2C en 400 kHz (modo r\u00e1pido)<\/p><p><span style=\"color: #ffff00;\">pantalla t\u00e1ctil@38 {<\/span><br \/>compatible =<span style=\"color: #00ff00;\"> \u00abedt,edt-ft5x06\u00bb<\/span>;<br \/>reg = &lt;<span style=\"color: #ff99cc;\">0x38<\/span>&gt;; \/\/ Direcci\u00f3n de hardware I2C del circuito integrado t\u00e1ctil<br \/>interrupt-parent = &lt;<span style=\"color: #3366ff;\">&amp;gpio0<\/span>&gt;;<br \/>interrupts = ; \/\/ Asignar la interrupci\u00f3n al pin A5 del GPIO0<br \/>reset-gpios = &lt;<span style=\"color: #3366ff;\">&amp;gpio0<\/span> RK_PB4 GPIO_ACTIVE_LOW&gt;; \/\/ Asignar el reinicio al pin B4 de GPIO0<br \/><br \/>tama\u00f1o-pantalla-t\u00e1ctil-x = ;<br \/>tama\u00f1o-pantalla-t\u00e1ctil-y = ;<br \/>touchscreen-gpios-delay-ms = ;<br \/><br \/>estado =<span style=\"color: #00ff00;\"> \u00abVale\u00bb<\/span>;<br \/>};<br \/>};<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-9e800a1 elementor-widget elementor-widget-text-editor\" data-id=\"9e800a1\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p data-path-to-node=\"51\">En este bloque del \u00e1rbol de dispositivos:<\/p><ol start=\"1\" data-path-to-node=\"52\"><li><p data-path-to-node=\"52,0,0\"><b data-path-to-node=\"52,0,0\" data-index-in-node=\"0\"><code data-path-to-node=\"52,0,0\" data-index-in-node=\"0\">status = \"okay\"<\/code><\/b> permite el <code data-path-to-node=\"52,0,0\" data-index-in-node=\"37\">i2c1<\/code> controlador.<\/p><\/li><li><p data-path-to-node=\"52,1,0\"><b data-path-to-node=\"52,1,0\" data-index-in-node=\"0\"><code data-path-to-node=\"52,1,0\" data-index-in-node=\"0\">compatible = \"edt,edt-ft5x06\"<\/code><\/b> indica al n\u00facleo de Linux que asigne el <code data-path-to-node=\"52,1,0\" data-index-in-node=\"78\">edt-ft5x06<\/code> controlador de la pantalla t\u00e1ctil para este dispositivo I2C concreto.<\/p><\/li><li><p data-path-to-node=\"52,2,0\"><b data-path-to-node=\"52,2,0\" data-index-in-node=\"0\"><code data-path-to-node=\"52,2,0\" data-index-in-node=\"0\">interrupciones =<\/code><\/b> y <b data-path-to-node=\"52,2,0\" data-index-in-node=\"30\"><code data-path-to-node=\"52,2,0\" data-index-in-node=\"30\">reset-gpios =<\/code><\/b> Definir las l\u00edneas de interrupci\u00f3n y reinicio del hardware.<\/p><\/li><\/ol><p data-path-to-node=\"53\">Si otro controlador (por ejemplo, un maestro SPI) intenta declarar <code data-path-to-node=\"53\" data-index-in-node=\"60\">RK_PA5<\/code> Al mismo tiempo, el n\u00facleo generar\u00e1 un error de conflicto durante la fase de registro de pinctrl y la pantalla t\u00e1ctil dejar\u00e1 de responder por completo.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-a7c1494 elementor-widget elementor-widget-image\" data-id=\"a7c1494\" data-element_type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" width=\"800\" height=\"450\" data-src=\"https:\/\/ieeker.com\/wp-content\/uploads\/2026\/07\/Close-up-of-the-high-density-PCB-copper-routing-traces-and-physical-side-panel-interface-ports-on-a-Smeiker-industrial-edge-gateway-board-1024x576.webp\" class=\"attachment-large size-large wp-image-10660 lazyload\" alt=\"Primer plano de las pistas de cobre de alta densidad de la placa de circuito impreso y de los puertos f\u00edsicos de interfaz del panel lateral de una placa de pasarela industrial de borde de Smeiker.\" data-srcset=\"https:\/\/ieeker.com\/wp-content\/uploads\/2026\/07\/Close-up-of-the-high-density-PCB-copper-routing-traces-and-physical-side-panel-interface-ports-on-a-Smeiker-industrial-edge-gateway-board-1024x576.webp 1024w, https:\/\/ieeker.com\/wp-content\/uploads\/2026\/07\/Close-up-of-the-high-density-PCB-copper-routing-traces-and-physical-side-panel-interface-ports-on-a-Smeiker-industrial-edge-gateway-board-300x169.webp 300w, https:\/\/ieeker.com\/wp-content\/uploads\/2026\/07\/Close-up-of-the-high-density-PCB-copper-routing-traces-and-physical-side-panel-interface-ports-on-a-Smeiker-industrial-edge-gateway-board-768x432.webp 768w, https:\/\/ieeker.com\/wp-content\/uploads\/2026\/07\/Close-up-of-the-high-density-PCB-copper-routing-traces-and-physical-side-panel-interface-ports-on-a-Smeiker-industrial-edge-gateway-board-1536x864.webp 1536w, https:\/\/ieeker.com\/wp-content\/uploads\/2026\/07\/Close-up-of-the-high-density-PCB-copper-routing-traces-and-physical-side-panel-interface-ports-on-a-Smeiker-industrial-edge-gateway-board-18x10.webp 18w, https:\/\/ieeker.com\/wp-content\/uploads\/2026\/07\/Close-up-of-the-high-density-PCB-copper-routing-traces-and-physical-side-panel-interface-ports-on-a-Smeiker-industrial-edge-gateway-board.webp 1672w\" data-sizes=\"(max-width: 800px) 100vw, 800px\" src=\"data:image\/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==\" style=\"--smush-placeholder-width: 800px; --smush-placeholder-aspect-ratio: 800\/450;\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-793e09c elementor-widget elementor-widget-text-editor\" data-id=\"793e09c\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<h2 data-path-to-node=\"55\">5. Estrategias de optimizaci\u00f3n del sistema: RK3588, Android 14 y m\u00e1s all\u00e1<\/h2><p data-path-to-node=\"56\">A medida que evolucionan las exigencias del software, la optimizaci\u00f3n se convierte en una necesidad. Esto es especialmente cierto a la hora de implementar sistemas operativos modernos en chips de alto rendimiento. Por ejemplo, ejecutar un sistema AOSP sin optimizar puede provocar un elevado consumo de memoria, interfaces con retrasos y tiempos de arranque lentos.<\/p><h3 data-path-to-node=\"57\">Optimizaci\u00f3n del arranque r\u00e1pido<\/h3><p data-path-to-node=\"58\">En los entornos de automoci\u00f3n, control industrial y comercio minorista interactivo, las secuencias de arranque en fr\u00edo prolongadas son inaceptables. Para reducir los tiempos de arranque de los m\u00e1s de 30 segundos habituales a menos de 10 segundos, es necesario realizar un ajuste sist\u00e9mico en las distintas fases del arranque:<\/p><ol start=\"1\" data-path-to-node=\"59\"><li><p data-path-to-node=\"59,0,0\"><b data-path-to-node=\"59,0,0\" data-index-in-node=\"0\">Optimizaci\u00f3n de la fase U-Boot:<\/b><\/p><ul data-path-to-node=\"59,0,1\"><li><p data-path-to-node=\"59,0,1,0,0\">Establece el retraso de arranque en cero (<code data-path-to-node=\"59,0,1,0,0\" data-index-in-node=\"28\">CONFIG_BOOTDELAY=0<\/code>) en tu archivo de configuraci\u00f3n de U-Boot para omitir la cuenta atr\u00e1s basada en la entrada arbitraria del usuario.<\/p><\/li><li><p data-path-to-node=\"59,0,1,1,0\">Desactiva las fuentes de arranque innecesarias (como el arranque por red PXE y la detecci\u00f3n de dispositivos de almacenamiento USB) para evitar que el gestor de arranque pierda valiosos segundos buscando archivos de arranque en puertos vac\u00edos.<\/p><\/li><\/ul><\/li><li><p data-path-to-node=\"59,1,0\"><b data-path-to-node=\"59,1,0\" data-index-in-node=\"0\">Selecci\u00f3n a nivel del n\u00facleo:<\/b><\/p><ul data-path-to-node=\"59,1,1\"><li><p data-path-to-node=\"59,1,1,0,0\">Correr <code data-path-to-node=\"59,1,1,0,0\" data-index-in-node=\"4\">ejecutar \u00abmenuconfig\u00bb<\/code> y eliminar los controladores de dispositivos que no se utilicen (por ejemplo, controladores de WLAN, sistemas de archivos heredados, marcos de depuraci\u00f3n como <code data-path-to-node=\"59,1,1,0,0\" data-index-in-node=\"124\">CONFIG_DEBUG_KMEMLEAK<\/code>).<\/p><\/li><li><p data-path-to-node=\"59,1,1,1,0\">Compilar de forma est\u00e1tica en el n\u00facleo los controladores esenciales de almacenamiento, reguladores y pantallas (<code data-path-to-node=\"59,1,1,1,0\" data-index-in-node=\"86\">y<\/code>) en lugar de compilarla como m\u00f3dulos cargables (<code data-path-to-node=\"59,1,1,1,0\" data-index-in-node=\"136\">m<\/code>). De este modo se evita la sobrecarga que suponen las rutinas de carga de m\u00f3dulos en el espacio de usuario durante las primeras fases del arranque.<\/p><\/li><\/ul><\/li><li><p data-path-to-node=\"59,2,0\"><b data-path-to-node=\"59,2,0\" data-index-in-node=\"0\">Optimizaci\u00f3n del espacio de usuario:<\/b><\/p><ul data-path-to-node=\"59,2,1\"><li><p data-path-to-node=\"59,2,1,0,0\">Identifica y retrasa los servicios del sistema que no sean cr\u00edticos. Por ejemplo, los demonios de gesti\u00f3n de red o de sincronizaci\u00f3n en la nube solo deber\u00edan iniciarse <i data-path-to-node=\"59,2,1,0,0\" data-index-in-node=\"133\">despu\u00e9s de<\/i> La interfaz de usuario principal se ha inicializado por completo en la pantalla.<\/p><\/li><\/ul><\/li><\/ol><h3 data-path-to-node=\"60\">Optimizaci\u00f3n de la memoria mediante ZRAM<\/h3><p data-path-to-node=\"61\">Para optimizar la multitarea en configuraciones de hardware con memoria limitada, los ingenieros de sistemas utilizan ZRAM. ZRAM crea un dispositivo de bloques virtual y comprimido dentro de la memoria RAM del sistema. Cuando aumenta la presi\u00f3n sobre la memoria del sistema, el sistema operativo comprime las p\u00e1ginas de memoria inactivas y las traslada a la partici\u00f3n ZRAM, en lugar de escribirlas en un almacenamiento flash m\u00e1s lento (eMMC\/UFS).<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-17b310a elementor-widget elementor-widget-text-editor\" data-id=\"17b310a\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>#: Ejemplos de comandos de Bash en tiempo de ejecuci\u00f3n para inicializar una partici\u00f3n de intercambio ZRAM de 2 GB<br \/>echo lzo &gt; \/sys\/block\/zram0\/comp_algorithm<br \/>echo 2147483648 &gt; \/sys\/block\/zram0\/disksize # Asignar un tama\u00f1o de bloque virtual de 2 GB<br \/>mkswap \/dev\/zram0<br \/>swapon \/dev\/zram0 -p 32767<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-fb08397 elementor-widget elementor-widget-text-editor\" data-id=\"fb08397\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p data-path-to-node=\"63\">En una placa con 8 GB de RAM, asignar 2 GB a un espacio de intercambio ZRAM puede ampliar los l\u00edmites efectivos de memoria para la multitarea a m\u00e1s de 10 GB, lo que mantiene la capacidad de respuesta de los procesos en segundo plano y, al mismo tiempo, reduce el desgaste f\u00edsico de la memoria flash debido a las escrituras.<\/p><h3 data-path-to-node=\"64\">Aceleraci\u00f3n de la IA e integraci\u00f3n de la NPU<\/h3><p data-path-to-node=\"65\">El moderno SoC RK3588 cuenta con una NPU integrada que ofrece hasta 6 TOPS de potencia te\u00f3rica de procesamiento de inteligencia artificial. Sin embargo, las versiones est\u00e1ndar de Android o de Linux gen\u00e9rico suelen canalizar el procesamiento de IA a trav\u00e9s de la CPU o la GPU del host mediante bibliotecas est\u00e1ndar, sin utilizar en absoluto este acelerador de hardware especializado.<\/p><p data-path-to-node=\"66\">Para aprovechar este rendimiento, debes integrar la pila de controladores del espacio de usuario de la NPU de Rockchip (<code data-path-to-node=\"66\" data-index-in-node=\"90\">rknn-toolkit2<\/code> y el <code data-path-to-node=\"66\" data-index-in-node=\"112\">Tiempo de ejecuci\u00f3n de RKNN<\/code>). El entorno de ejecuci\u00f3n act\u00faa como puente, traduciendo modelos de IA estandarizados (ONNX, PyTorch, TensorFlow Lite) a un formato propio <code data-path-to-node=\"66\" data-index-in-node=\"244\">.rknn<\/code> formato optimizado para los n\u00facleos tensoriales de la NPU. Al desviar las cargas de trabajo de inferencia de redes neuronales a trav\u00e9s de la NPU dedicada, los desarrolladores pueden alcanzar hasta un <span class=\"math-inline\" data-math=\"10\\times\" data-index-in-node=\"399\">$10 \u00d7 $<\/span> aumento de la velocidad de procesamiento, al tiempo que se reduce el consumo energ\u00e9tico de la CPU en m\u00e1s del 80%.<\/p><p data-path-to-node=\"67\">Para profundizar en c\u00f3mo sacar partido a estas capas de aceleraci\u00f3n por hardware para aplicaciones de alto rendimiento, consulta nuestra gu\u00eda complementaria espec\u00edfica: <a class=\"ng-star-inserted\" href=\"https:\/\/ieeker.com\/es\/ykr-3588s-all-in-one-sbc\/\" target=\"_blank\" rel=\"noopener\" data-hveid=\"0\" data-ved=\"0CAAQ_4QMahgKEwioxvnz1NaVAxUAAAAAHQAAAAAQwgE\">An\u00e1lisis en profundidad de la adaptaci\u00f3n de Android 14 al RK3588<\/a>.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-e87740c elementor-widget elementor-widget-text-editor\" data-id=\"e87740c\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<h2 data-path-to-node=\"46\">6. Soluci\u00f3n de problemas y preguntas frecuentes<\/h2><p data-path-to-node=\"47\">La adaptaci\u00f3n de sistemas es un proceso iterativo de ensayo y error. Saber interpretar los mensajes de error de la consola y depurar los fallos del sistema es lo que distingue a los arquitectos de BSP con experiencia de los principiantes.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-1c175ce elementor-widget elementor-widget-n-accordion\" data-id=\"1c175ce\" data-element_type=\"widget\" data-settings=\"{&quot;default_state&quot;:&quot;expanded&quot;,&quot;max_items_expended&quot;:&quot;one&quot;,&quot;n_accordion_animation_duration&quot;:{&quot;unit&quot;:&quot;ms&quot;,&quot;size&quot;:400,&quot;sizes&quot;:[]}}\" data-widget_type=\"nested-accordion.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"e-n-accordion\" aria-label=\"Acorde\u00f3n. Abra los enlaces con Intro o Espacio, ci\u00e9rrelos con Escape y navegue con las teclas de flecha.\">\n\t\t\t\t\t\t<details id=\"e-n-accordion-item-2940\" class=\"e-n-accordion-item\" open>\n\t\t\t\t<summary class=\"e-n-accordion-item-title\" data-accordion-index=\"1\" tabindex=\"0\" aria-expanded=\"true\" aria-controls=\"e-n-accordion-item-2940\" >\n\t\t\t\t\t<span class='e-n-accordion-item-title-header'><div class=\"e-n-accordion-item-title-text\"> P1: \u00bfCu\u00e1l es la diferencia t\u00e9cnica entre el modo MaskRom y el modo Loader, y c\u00f3mo puedo activar ambos de forma forzada? <\/div><\/span>\n\t\t\t\t\t\t\t<span class='e-n-accordion-item-title-icon'>\n\t\t\t<span class='e-opened' ><svg aria-hidden=\"true\" class=\"e-font-icon-svg e-fas-minus\" viewbox=\"0 0 448 512\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"><path d=\"M416 208H32c-17.67 0-32 14.33-32 32v32c0 17.67 14.33 32 32 32h384c17.67 0 32-14.33 32-32v-32c0-17.67-14.33-32-32-32z\"><\/path><\/svg><\/span>\n\t\t\t<span class='e-closed'><svg aria-hidden=\"true\" class=\"e-font-icon-svg e-fas-plus\" viewbox=\"0 0 448 512\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"><path d=\"M416 208H272V64c0-17.67-14.33-32-32-32h-32c-17.67 0-32 14.33-32 32v144H32c-17.67 0-32 14.33-32 32v32c0 17.67 14.33 32 32 32h144v144c0 17.67 14.33 32 32 32h32c17.67 0 32-14.33 32-32V304h144c17.67 0 32-14.33 32-32v-32c0-17.67-14.33-32-32-32z\"><\/path><\/svg><\/span>\n\t\t<\/span>\n\n\t\t\t\t\t\t<\/summary>\n\t\t\t\t<div role=\"region\" aria-labelledby=\"e-n-accordion-item-2940\" class=\"elementor-element elementor-element-fe5ac4b e-con-full e-flex e-con e-child\" data-id=\"fe5ac4b\" data-element_type=\"container\" data-settings=\"{&quot;jet_parallax_layout_list&quot;:[]}\">\n\t\t\t\t<div class=\"elementor-element elementor-element-4537c7a elementor-widget elementor-widget-text-editor\" data-id=\"4537c7a\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<ul><li><p data-path-to-node=\"73,0,0\"><b data-path-to-node=\"73,0,0\" data-index-in-node=\"0\">Modo de carga:<\/b> Este es el estado de recuperaci\u00f3n est\u00e1ndar accesible mediante software. Requiere un cargador de arranque primario operativo en el soporte de almacenamiento. Cuando se encuentra en modo Loader, el dispositivo puede aceptar comandos de memoria flash a nivel de partici\u00f3n a trav\u00e9s de USB. Para acceder a \u00e9l, hay que mantener pulsado el bot\u00f3n f\u00edsico <code data-path-to-node=\"73,0,0\" data-index-in-node=\"257\">Recuperaci\u00f3n<\/code> bot\u00f3n mientras se enciende el dispositivo.<\/p><\/li><li><p data-path-to-node=\"73,1,0\"><b data-path-to-node=\"73,1,0\" data-index-in-node=\"0\">Modo MaskRom:<\/b> Se trata de un estado de recuperaci\u00f3n de hardware de bajo nivel integrado directamente en la ROM de arranque del SoC. Solo se ejecuta cuando el dispositivo de almacenamiento (eMMC\/SPI Flash) est\u00e1 completamente vac\u00edo, da\u00f1ado o cuando el gestor de arranque no se inicializa. Se puede forzar que un dispositivo entre en modo MaskRom cortocircuitando f\u00edsicamente a masa el pin de reloj (CLK) del eMMC o el pin de selecci\u00f3n de chip (CS) de la memoria Flash SPI mientras se aplica alimentaci\u00f3n. Esto obliga a la ROM de arranque interna a omitir el medio de almacenamiento da\u00f1ado y a abrir un canal directo de recuperaci\u00f3n USB.<\/p><\/li><\/ul>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/details>\n\t\t\t\t\t\t<details id=\"e-n-accordion-item-2941\" class=\"e-n-accordion-item\" >\n\t\t\t\t<summary class=\"e-n-accordion-item-title\" data-accordion-index=\"2\" tabindex=\"-1\" aria-expanded=\"false\" aria-controls=\"e-n-accordion-item-2941\" >\n\t\t\t\t\t<span class='e-n-accordion-item-title-header'><div class=\"e-n-accordion-item-title-text\"> P2: Mi compilaci\u00f3n falla con \u00abmake\u00bb: *** [kernel] Error 2. \u00bfC\u00f3mo puedo averiguar cu\u00e1l es el error concreto? <\/div><\/span>\n\t\t\t\t\t\t\t<span class='e-n-accordion-item-title-icon'>\n\t\t\t<span class='e-opened' ><svg aria-hidden=\"true\" class=\"e-font-icon-svg e-fas-minus\" viewbox=\"0 0 448 512\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"><path d=\"M416 208H32c-17.67 0-32 14.33-32 32v32c0 17.67 14.33 32 32 32h384c17.67 0 32-14.33 32-32v-32c0-17.67-14.33-32-32-32z\"><\/path><\/svg><\/span>\n\t\t\t<span class='e-closed'><svg aria-hidden=\"true\" class=\"e-font-icon-svg e-fas-plus\" viewbox=\"0 0 448 512\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"><path d=\"M416 208H272V64c0-17.67-14.33-32-32-32h-32c-17.67 0-32 14.33-32 32v144H32c-17.67 0-32 14.33-32 32v32c0 17.67 14.33 32 32 32h144v144c0 17.67 14.33 32 32 32h32c17.67 0 32-14.33 32-32V304h144c17.67 0 32-14.33 32-32v-32c0-17.67-14.33-32-32-32z\"><\/path><\/svg><\/span>\n\t\t<\/span>\n\n\t\t\t\t\t\t<\/summary>\n\t\t\t\t<div role=\"region\" aria-labelledby=\"e-n-accordion-item-2941\" class=\"elementor-element elementor-element-9171cf9 e-con-full e-flex e-con e-child\" data-id=\"9171cf9\" data-element_type=\"container\" data-settings=\"{&quot;jet_parallax_layout_list&quot;:[]}\">\n\t\t\t\t<div class=\"elementor-element elementor-element-ed37b87 elementor-widget elementor-widget-text-editor\" data-id=\"ed37b87\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>Una compilaci\u00f3n paralela (por ejemplo, <code data-path-to-node=\"49\" data-index-in-node=\"108\">make -j16<\/code>) oculta la causa principal al seguir mostrando avisos que no guardan relaci\u00f3n con el error tras producirse el error grave. Vuelve a ejecutar el comando de compilaci\u00f3n con un solo hilo (<code data-path-to-node=\"49\" data-index-in-node=\"267\">make -j1 V=1<\/code>) para obligar al compilador a detenerse inmediatamente en la l\u00ednea exacta de c\u00f3digo o en la dependencia que falta y que ha provocado el error.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/details>\n\t\t\t\t\t\t<details id=\"e-n-accordion-item-2942\" class=\"e-n-accordion-item\" >\n\t\t\t\t<summary class=\"e-n-accordion-item-title\" data-accordion-index=\"3\" tabindex=\"-1\" aria-expanded=\"false\" aria-controls=\"e-n-accordion-item-2942\" >\n\t\t\t\t\t<span class='e-n-accordion-item-title-header'><div class=\"e-n-accordion-item-title-text\"> Pregunta 3: La placa parpadea correctamente, pero se queda atascada en un bucle de arranque en la fase de U-Boot. \u00bfQu\u00e9 falla? <\/div><\/span>\n\t\t\t\t\t\t\t<span class='e-n-accordion-item-title-icon'>\n\t\t\t<span class='e-opened' ><svg aria-hidden=\"true\" class=\"e-font-icon-svg e-fas-minus\" viewbox=\"0 0 448 512\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"><path d=\"M416 208H32c-17.67 0-32 14.33-32 32v32c0 17.67 14.33 32 32 32h384c17.67 0 32-14.33 32-32v-32c0-17.67-14.33-32-32-32z\"><\/path><\/svg><\/span>\n\t\t\t<span class='e-closed'><svg aria-hidden=\"true\" class=\"e-font-icon-svg e-fas-plus\" viewbox=\"0 0 448 512\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"><path d=\"M416 208H272V64c0-17.67-14.33-32-32-32h-32c-17.67 0-32 14.33-32 32v144H32c-17.67 0-32 14.33-32 32v32c0 17.67 14.33 32 32 32h144v144c0 17.67 14.33 32 32 32h32c17.67 0 32-14.33 32-32V304h144c17.67 0 32-14.33 32-32v-32c0-17.67-14.33-32-32-32z\"><\/path><\/svg><\/span>\n\t\t<\/span>\n\n\t\t\t\t\t\t<\/summary>\n\t\t\t\t<div role=\"region\" aria-labelledby=\"e-n-accordion-item-2942\" class=\"elementor-element elementor-element-ea5aa17 e-con-full e-flex e-con e-child\" data-id=\"ea5aa17\" data-element_type=\"container\" data-settings=\"{&quot;jet_parallax_layout_list&quot;:[]}\">\n\t\t\t\t<div class=\"elementor-element elementor-element-753799d elementor-widget elementor-widget-text-editor\" data-id=\"753799d\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>Casi siempre se trata de un problema de sincronizaci\u00f3n de la memoria DDR o de una tabla de particiones mal configurada. Comprueba que el archivo binario DDR de tu <code data-path-to-node=\"50\" data-index-in-node=\"218\">rkbin\/<\/code> La carpeta coincide perfectamente con tus m\u00f3dulos de RAM f\u00edsicos (LPDDR4 frente a LPDDR4X). Adem\u00e1s, aseg\u00farate de que el <code data-path-to-node=\"50\" data-index-in-node=\"318\">parameter.txt<\/code> Las posiciones de las particiones del archivo se alinean con precisi\u00f3n con la estructura de almacenamiento de tu dispositivo.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/details>\n\t\t\t\t\t\t<details id=\"e-n-accordion-item-2943\" class=\"e-n-accordion-item\" >\n\t\t\t\t<summary class=\"e-n-accordion-item-title\" data-accordion-index=\"4\" tabindex=\"-1\" aria-expanded=\"false\" aria-controls=\"e-n-accordion-item-2943\" >\n\t\t\t\t\t<span class='e-n-accordion-item-title-header'><div class=\"e-n-accordion-item-title-text\"> Pregunta 4: El sistema se inicia correctamente, pero la pantalla MIPI-DSI conectada muestra l\u00edneas horizontales aleatorias, artefactos o permanece completamente a oscuras. \u00bfC\u00f3mo puedo solucionar este problema? <\/div><\/span>\n\t\t\t\t\t\t\t<span class='e-n-accordion-item-title-icon'>\n\t\t\t<span class='e-opened' ><svg aria-hidden=\"true\" class=\"e-font-icon-svg e-fas-minus\" viewbox=\"0 0 448 512\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"><path d=\"M416 208H32c-17.67 0-32 14.33-32 32v32c0 17.67 14.33 32 32 32h384c17.67 0 32-14.33 32-32v-32c0-17.67-14.33-32-32-32z\"><\/path><\/svg><\/span>\n\t\t\t<span class='e-closed'><svg aria-hidden=\"true\" class=\"e-font-icon-svg e-fas-plus\" viewbox=\"0 0 448 512\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"><path d=\"M416 208H272V64c0-17.67-14.33-32-32-32h-32c-17.67 0-32 14.33-32 32v144H32c-17.67 0-32 14.33-32 32v32c0 17.67 14.33 32 32 32h144v144c0 17.67 14.33 32 32 32h32c17.67 0 32-14.33 32-32V304h144c17.67 0 32-14.33 32-32v-32c0-17.67-14.33-32-32-32z\"><\/path><\/svg><\/span>\n\t\t<\/span>\n\n\t\t\t\t\t\t<\/summary>\n\t\t\t\t<div role=\"region\" aria-labelledby=\"e-n-accordion-item-2943\" class=\"elementor-element elementor-element-336967b e-con-full e-flex e-con e-child\" data-id=\"336967b\" data-element_type=\"container\" data-settings=\"{&quot;jet_parallax_layout_list&quot;:[]}\">\n\t\t\t\t<div class=\"elementor-element elementor-element-aac4fda elementor-widget elementor-widget-text-editor\" data-id=\"aac4fda\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>En primer lugar, conecta un cable de depuraci\u00f3n serie y comprueba <code data-path-to-node=\"51\" data-index-in-node=\"155\">dmesg<\/code>. Si observas errores relacionados con que el host DSI no se inicializa, los par\u00e1metros de sincronizaci\u00f3n de DTS (<code data-path-to-node=\"51\" data-index-in-node=\"255\">hactive<\/code>, <code data-path-to-node=\"51\" data-index-in-node=\"264\">vactive<\/code>, <code data-path-to-node=\"51\" data-index-in-node=\"273\">hsync-len<\/code>, <code data-path-to-node=\"51\" data-index-in-node=\"284\">vsync-len<\/code>) probablemente no coincidan con la ficha t\u00e9cnica del panel LCD. Si el host se inicializa pero la pantalla permanece oscura, comprueba que el controlador PWM de la retroiluminaci\u00f3n est\u00e9 correctamente asignado y activado en el \u00e1rbol de dispositivos.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/details>\n\t\t\t\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-724a8db elementor-widget elementor-widget-text-editor\" data-id=\"724a8db\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<h2 data-path-to-node=\"83\">7. Pr\u00f3ximos pasos y recursos adicionales<\/h2><p data-path-to-node=\"84\">Para crear un producto integrado fiable se necesitan unos cimientos s\u00f3lidos. Con el fin de ayudarte a acelerar tu ciclo de desarrollo, hemos recopilado nuestros materiales de referencia internos en una \u00fanica gu\u00eda que puedes descargar.<\/p><h3 data-path-to-node=\"85\">Herramientas esenciales de desarrollo<\/h3><table data-path-to-node=\"86\"><thead><tr><td><strong>Recurso<\/strong><\/td><td><strong>Enfoque del documento<\/strong><\/td><td><strong>P\u00fablico destinatario<\/strong><\/td><\/tr><\/thead><tbody><tr><td><span data-path-to-node=\"86,1,0,0\"><b data-path-to-node=\"86,1,0,0\" data-index-in-node=\"0\">Gu\u00eda r\u00e1pida de comandos de IEEKER<\/b><\/span><\/td><td><span data-path-to-node=\"86,1,1,0\">Una recopilaci\u00f3n concisa de los 50 comandos de terminal de Rockchip m\u00e1s utilizados, scripts para particionar la memoria flash y comandos de depuraci\u00f3n del \u00e1rbol de dispositivos.<\/span><\/td><td><span data-path-to-node=\"86,1,2,0\">Ingenieros de sistemas, equipos de puesta en marcha de placas<\/span><\/td><\/tr><tr><td><span data-path-to-node=\"86,2,0,0\"><b data-path-to-node=\"86,2,0,0\" data-index-in-node=\"0\">Gu\u00eda de arquitectura del sistema<\/b><\/span><\/td><td><span data-path-to-node=\"86,2,1,0\">Documentaci\u00f3n estructural exhaustiva en la que se detallan las directrices sobre multiplexaci\u00f3n de pines, las especificaciones de disipaci\u00f3n t\u00e9rmica y las configuraciones de los estados de alimentaci\u00f3n.<\/span><\/td><td><span data-path-to-node=\"86,2,2,0\">Dise\u00f1adores de hardware, ingenieros de dise\u00f1o de circuitos<\/span><\/td><\/tr><\/tbody><\/table><p data-path-to-node=\"87\">Para simplificar tus flujos de trabajo diarios de desarrollo, puedes descargar nuestra gu\u00eda de recursos seleccionada, que contiene instrucciones paso a paso para flashear, depurar y probar tus plataformas.<\/p><ul data-path-to-node=\"88\"><li><p data-path-to-node=\"88,0,0\">\ud83d\udce5 <b data-path-to-node=\"88,0,0\" data-index-in-node=\"3\">Descargar:<\/b> <a class=\"ng-star-inserted\" href=\"https:\/\/ieeker.com\/es\/contact-us\/\" target=\"_blank\" rel=\"noopener\" data-hveid=\"0\" data-ved=\"0CAAQ_4QMahgKEwioxvnz1NaVAxUAAAAAHQAAAAAQxgE\">Consigue la Gu\u00eda de referencia de comandos de Rockchip<\/a><\/p><\/li><\/ul><h3 data-path-to-node=\"89\">Descubre nuestros centros tecnol\u00f3gicos especializados<\/h3><p data-path-to-node=\"90\">Para profundizar en escenarios de implementaci\u00f3n espec\u00edficos, consulta nuestros grupos de contenidos espec\u00edficos:<\/p><ul data-path-to-node=\"91\"><li><p data-path-to-node=\"91,0,0\"><b data-path-to-node=\"91,0,0\" data-index-in-node=\"0\">Optimizaci\u00f3n de Android de alto rendimiento:<\/b> Lee nuestro an\u00e1lisis t\u00e9cnico detallado: <a class=\"ng-star-inserted\" href=\"https:\/\/ieeker.com\/es\/rk3588-npu-performance-industrial-edge-ai\/\" target=\"_blank\" rel=\"noopener\" data-hveid=\"0\" data-ved=\"0CAAQ_4QMahgKEwioxvnz1NaVAxUAAAAAHQAAAAAQxwE\">An\u00e1lisis en profundidad de la adaptaci\u00f3n de Android 14 al RK3588<\/a>.<\/p><\/li><li><p data-path-to-node=\"91,1,0\"><b data-path-to-node=\"91,1,0\" data-index-in-node=\"0\">Implementaciones de Industrial Gateway:<\/b> Descubre c\u00f3mo reducir el espacio que ocupa tu sistema operativo para crear entornos seguros: <a class=\"ng-star-inserted\" href=\"https:\/\/ieeker.com\/es\/rk3568-industrial-hmi-panel\/\" target=\"_blank\" rel=\"noopener\" data-hveid=\"0\" data-ved=\"0CAAQ_4QMahgKEwioxvnz1NaVAxUAAAAAHQAAAAAQyAE\">C\u00f3mo crear un sistema Debian minimalista para RK3568<\/a>.<\/p><\/li><li><p data-path-to-node=\"91,2,0\"><b data-path-to-node=\"91,2,0\" data-index-in-node=\"0\">Arquitecturas de sistemas operativos distribuidos:<\/b> Lee nuestra gu\u00eda sobre c\u00f3mo integrar las bases de los controladores de hardware modernos: <a class=\"ng-star-inserted\" href=\"https:\/\/ieeker.com\/es\/products\/rk3568-core-board-baseboard-development-kit\/\" target=\"_blank\" rel=\"noopener\" data-hveid=\"0\" data-ved=\"0CAAQ_4QMahgKEwioxvnz1NaVAxUAAAAAHQAAAAAQyQE\">SDK de Rockchip frente a OpenHarmony: \u00bfC\u00f3mo migrar los controladores a Ohos?<\/a>.<\/p><\/li><\/ul><h2 data-path-to-node=\"93\">8. Colabora con IEEKER en tu pr\u00f3ximo proyecto con Rockchip<\/h2><p data-path-to-node=\"94\">La adaptaci\u00f3n de sistemas y la optimizaci\u00f3n del firmware pueden requerir una gran cantidad de recursos, pero no tienes por qu\u00e9 afrontar estos retos en solitario. En IEEKER, nuestra filosof\u00eda de ingenier\u00eda se centra en eliminar los obst\u00e1culos en el desarrollo. Al especializarnos exclusivamente en ordenadores de placa \u00fanica de alto rendimiento y placas de desarrollo, nos aseguramos de que nuestro equipo se centre por completo en ofrecer hardware listo para la producci\u00f3n, acompa\u00f1ado de BSP extremadamente estables y con una documentaci\u00f3n exhaustiva.<\/p><p data-path-to-node=\"95\"><i data-path-to-node=\"95\" data-index-in-node=\"0\">(Nota: Somos una empresa dedicada exclusivamente al dise\u00f1o y la venta de placas de desarrollo de hardware; no ofrecemos servicios de montaje de placas de circuito impreso (PCB) a medida ni de fabricaci\u00f3n de conjuntos de placas de circuito impreso (PCBA). Este enfoque operativo estricto garantiza que nuestros recursos de ingenier\u00eda se dediquen por completo a la estabilidad de nuestra plataforma principal.)<\/i><\/p><p data-path-to-node=\"96\">Tanto si est\u00e1s dise\u00f1ando un complejo sistema de visi\u00f3n multic\u00e1mara basado en el RK3588, como si est\u00e1s creando una pasarela de comunicaci\u00f3n robusta con doble Ethernet basada en el RK3568, o explorando las fronteras de OpenHarmony, nuestros ingenieros de aplicaciones de campo (FAE) est\u00e1n a tu disposici\u00f3n para apoyarte en tu ciclo de I+D, desde la revisi\u00f3n de esquemas hasta la compilaci\u00f3n de sistemas operativos personalizados.<\/p><h3 data-path-to-node=\"97\">Por qu\u00e9 los equipos l\u00edderes de I+D eligen IEEKER:<\/h3><ul data-path-to-node=\"98\"><li><p data-path-to-node=\"98,0,0\"><b data-path-to-node=\"98,0,0\" data-index-in-node=\"0\">Paquetes de soporte para placas listos para la producci\u00f3n:<\/b> Ahorra meses de tiempo de desarrollo con nuestras distribuciones preoptimizadas y de nivel empresarial para Android, Linux y OpenHarmony.<\/p><\/li><li><p data-path-to-node=\"98,1,0\"><b data-path-to-node=\"98,1,0\" data-index-in-node=\"0\">Asistencia directa de desarrollador a desarrollador:<\/b> Evita los servicios de asistencia gen\u00e9ricos y resuelve los problemas directamente con nuestros ingenieros expertos en BSP y controladores.<\/p><\/li><li><p data-path-to-node=\"98,2,0\"><b data-path-to-node=\"98,2,0\" data-index-in-node=\"0\">Hardware de calidad rigurosa:<\/b> Todas las placas de desarrollo de IEEKER se dise\u00f1an, simulan y someten a pruebas de resistencia para garantizar un funcionamiento fiable en entornos industriales adversos.<\/p><\/li><\/ul><p data-path-to-node=\"99\">D\u00e9janos ayudarte a acelerar el tiempo de comercializaci\u00f3n. Ponte en contacto hoy mismo con nuestro equipo t\u00e9cnico de ventas para comentar los requisitos de tu proyecto, solicitar im\u00e1genes personalizadas o conseguir unidades de evaluaci\u00f3n de hardware.<\/p><p data-path-to-node=\"100\">\u00bfEst\u00e1s listo para empezar? <a class=\"ng-star-inserted\" href=\"https:\/\/ieeker.com\/es\/contact-us\/\" target=\"_blank\" rel=\"noopener\" data-hveid=\"0\" data-ved=\"0CAAQ_4QMahgKEwioxvnz1NaVAxUAAAAAHQAAAAAQygE\">Solicitar presupuesto<\/a> hoy.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>","protected":false},"excerpt":{"rendered":"<p>Rockchip System Porting is the core engineering process of adapting, compiling, and optimizing operating systems like Linux, Android, or OpenHarmony to run seamlessly on Rockchip system-on-chips (SoCs). This comprehensive guide walks you through the entire board support package (BSP) development lifecycle\u2014from environment initialization to advanced driver integration and performance tuning. By mastering these concepts, developers [&hellip;]<\/p>","protected":false},"author":2,"featured_media":10658,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[1],"tags":[],"class_list":["post-10655","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-news"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v26.5 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Rockchip System Porting: Complete Firmware Development Guide for RK3588 &amp; RK3568<\/title>\n<meta name=\"description\" content=\"Master Rockchip system porting and firmware customization. Practical tips for SDK setup, DTS adjustment, driver porting and NPU tuning on RK3588 \/ RK3568 platforms.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/ieeker.com\/es\/rockchip-system-porting-firmware-development-guide\/\" \/>\n<meta property=\"og:locale\" content=\"es_ES\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Rockchip System Porting: Complete Firmware Development Guide for RK3588 &amp; RK3568\" \/>\n<meta property=\"og:description\" content=\"Master Rockchip system porting and firmware customization. Practical tips for SDK setup, DTS adjustment, driver porting and NPU tuning on RK3588 \/ RK3568 platforms.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/ieeker.com\/es\/rockchip-system-porting-firmware-development-guide\/\" \/>\n<meta property=\"article:published_time\" content=\"2026-07-16T08:20:02+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-08-26T08:58:42+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/ieeker.com\/wp-content\/uploads\/2026\/07\/RK3588-development-board-on-an-RD-lab-workbench.webp\" \/>\n\t<meta property=\"og:image:width\" content=\"1672\" \/>\n\t<meta property=\"og:image:height\" content=\"941\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/webp\" \/>\n<meta name=\"author\" content=\"Ieeker\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Ieeker\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"16 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/ieeker.com\/rockchip-system-porting-firmware-development-guide\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/ieeker.com\/rockchip-system-porting-firmware-development-guide\/\"},\"author\":{\"name\":\"Ieeker\",\"@id\":\"https:\/\/ieeker.com\/#\/schema\/person\/8c84cbebc78c3b57cc5d39e73de3eadb\"},\"headline\":\"The Ultimate Guide to Rockchip System Porting &#038; Firmware Development\",\"datePublished\":\"2026-07-16T08:20:02+00:00\",\"dateModified\":\"2026-08-26T08:58:42+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/ieeker.com\/rockchip-system-porting-firmware-development-guide\/\"},\"wordCount\":3570,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/ieeker.com\/#organization\"},\"image\":{\"@id\":\"https:\/\/ieeker.com\/rockchip-system-porting-firmware-development-guide\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/ieeker.com\/wp-content\/uploads\/2026\/07\/RK3588-development-board-on-an-RD-lab-workbench.webp\",\"articleSection\":[\"News\"],\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/ieeker.com\/rockchip-system-porting-firmware-development-guide\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/ieeker.com\/rockchip-system-porting-firmware-development-guide\/\",\"url\":\"https:\/\/ieeker.com\/rockchip-system-porting-firmware-development-guide\/\",\"name\":\"Rockchip System Porting: Complete Firmware Development Guide for RK3588 & RK3568\",\"isPartOf\":{\"@id\":\"https:\/\/ieeker.com\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/ieeker.com\/rockchip-system-porting-firmware-development-guide\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/ieeker.com\/rockchip-system-porting-firmware-development-guide\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/ieeker.com\/wp-content\/uploads\/2026\/07\/RK3588-development-board-on-an-RD-lab-workbench.webp\",\"datePublished\":\"2026-07-16T08:20:02+00:00\",\"dateModified\":\"2026-08-26T08:58:42+00:00\",\"description\":\"Master Rockchip system porting and firmware customization. Practical tips for SDK setup, DTS adjustment, driver porting and NPU tuning on RK3588 \/ RK3568 platforms.\",\"breadcrumb\":{\"@id\":\"https:\/\/ieeker.com\/rockchip-system-porting-firmware-development-guide\/#breadcrumb\"},\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/ieeker.com\/rockchip-system-porting-firmware-development-guide\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\/\/ieeker.com\/rockchip-system-porting-firmware-development-guide\/#primaryimage\",\"url\":\"https:\/\/ieeker.com\/wp-content\/uploads\/2026\/07\/RK3588-development-board-on-an-RD-lab-workbench.webp\",\"contentUrl\":\"https:\/\/ieeker.com\/wp-content\/uploads\/2026\/07\/RK3588-development-board-on-an-RD-lab-workbench.webp\",\"width\":1672,\"height\":941,\"caption\":\"IEEKER RK3588 development board on an R&D lab workbench for Rockchip system porting and firmware development.\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/ieeker.com\/rockchip-system-porting-firmware-development-guide\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/ieeker.com\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"The Ultimate Guide to Rockchip System Porting &#038; Firmware Development\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/ieeker.com\/#website\",\"url\":\"https:\/\/ieeker.com\/\",\"name\":\"ieeker.com\",\"description\":\"\",\"publisher\":{\"@id\":\"https:\/\/ieeker.com\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/ieeker.com\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"es\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/ieeker.com\/#organization\",\"name\":\"ieeker\",\"url\":\"https:\/\/ieeker.com\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\/\/ieeker.com\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/ieeker.com\/wp-content\/uploads\/2023\/02\/Ieeker-develoment-board-logo-scaled-e1782367781709.webp\",\"contentUrl\":\"https:\/\/ieeker.com\/wp-content\/uploads\/2023\/02\/Ieeker-develoment-board-logo-scaled-e1782367781709.webp\",\"width\":2160,\"height\":388,\"caption\":\"ieeker\"},\"image\":{\"@id\":\"https:\/\/ieeker.com\/#\/schema\/logo\/image\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\/\/ieeker.com\/#\/schema\/person\/8c84cbebc78c3b57cc5d39e73de3eadb\",\"name\":\"Ieeker\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\/\/ieeker.com\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/ieeker.com\/wp-content\/litespeed\/avatar\/9b2208ea44759888946102da78e30511.jpg?ver=1787911265\",\"contentUrl\":\"https:\/\/ieeker.com\/wp-content\/litespeed\/avatar\/9b2208ea44759888946102da78e30511.jpg?ver=1787911265\",\"caption\":\"Ieeker\"},\"sameAs\":[\"http:\/\/www.ieeker.com\"],\"url\":\"https:\/\/ieeker.com\/es\/author\/ieeker\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Rockchip System Porting: Complete Firmware Development Guide for RK3588 & RK3568","description":"Master Rockchip system porting and firmware customization. Practical tips for SDK setup, DTS adjustment, driver porting and NPU tuning on RK3588 \/ RK3568 platforms.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/ieeker.com\/es\/rockchip-system-porting-firmware-development-guide\/","og_locale":"es_ES","og_type":"article","og_title":"Rockchip System Porting: Complete Firmware Development Guide for RK3588 & RK3568","og_description":"Master Rockchip system porting and firmware customization. Practical tips for SDK setup, DTS adjustment, driver porting and NPU tuning on RK3588 \/ RK3568 platforms.","og_url":"https:\/\/ieeker.com\/es\/rockchip-system-porting-firmware-development-guide\/","article_published_time":"2026-07-16T08:20:02+00:00","article_modified_time":"2026-08-26T08:58:42+00:00","og_image":[{"width":1672,"height":941,"url":"https:\/\/ieeker.com\/wp-content\/uploads\/2026\/07\/RK3588-development-board-on-an-RD-lab-workbench.webp","type":"image\/webp"}],"author":"Ieeker","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Ieeker","Est. reading time":"16 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/ieeker.com\/rockchip-system-porting-firmware-development-guide\/#article","isPartOf":{"@id":"https:\/\/ieeker.com\/rockchip-system-porting-firmware-development-guide\/"},"author":{"name":"Ieeker","@id":"https:\/\/ieeker.com\/#\/schema\/person\/8c84cbebc78c3b57cc5d39e73de3eadb"},"headline":"The Ultimate Guide to Rockchip System Porting &#038; Firmware Development","datePublished":"2026-07-16T08:20:02+00:00","dateModified":"2026-08-26T08:58:42+00:00","mainEntityOfPage":{"@id":"https:\/\/ieeker.com\/rockchip-system-porting-firmware-development-guide\/"},"wordCount":3570,"commentCount":0,"publisher":{"@id":"https:\/\/ieeker.com\/#organization"},"image":{"@id":"https:\/\/ieeker.com\/rockchip-system-porting-firmware-development-guide\/#primaryimage"},"thumbnailUrl":"https:\/\/ieeker.com\/wp-content\/uploads\/2026\/07\/RK3588-development-board-on-an-RD-lab-workbench.webp","articleSection":["News"],"inLanguage":"es","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/ieeker.com\/rockchip-system-porting-firmware-development-guide\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/ieeker.com\/rockchip-system-porting-firmware-development-guide\/","url":"https:\/\/ieeker.com\/rockchip-system-porting-firmware-development-guide\/","name":"Rockchip System Porting: Complete Firmware Development Guide for RK3588 & RK3568","isPartOf":{"@id":"https:\/\/ieeker.com\/#website"},"primaryImageOfPage":{"@id":"https:\/\/ieeker.com\/rockchip-system-porting-firmware-development-guide\/#primaryimage"},"image":{"@id":"https:\/\/ieeker.com\/rockchip-system-porting-firmware-development-guide\/#primaryimage"},"thumbnailUrl":"https:\/\/ieeker.com\/wp-content\/uploads\/2026\/07\/RK3588-development-board-on-an-RD-lab-workbench.webp","datePublished":"2026-07-16T08:20:02+00:00","dateModified":"2026-08-26T08:58:42+00:00","description":"Master Rockchip system porting and firmware customization. Practical tips for SDK setup, DTS adjustment, driver porting and NPU tuning on RK3588 \/ RK3568 platforms.","breadcrumb":{"@id":"https:\/\/ieeker.com\/rockchip-system-porting-firmware-development-guide\/#breadcrumb"},"inLanguage":"es","potentialAction":[{"@type":"ReadAction","target":["https:\/\/ieeker.com\/rockchip-system-porting-firmware-development-guide\/"]}]},{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/ieeker.com\/rockchip-system-porting-firmware-development-guide\/#primaryimage","url":"https:\/\/ieeker.com\/wp-content\/uploads\/2026\/07\/RK3588-development-board-on-an-RD-lab-workbench.webp","contentUrl":"https:\/\/ieeker.com\/wp-content\/uploads\/2026\/07\/RK3588-development-board-on-an-RD-lab-workbench.webp","width":1672,"height":941,"caption":"IEEKER RK3588 development board on an R&D lab workbench for Rockchip system porting and firmware development."},{"@type":"BreadcrumbList","@id":"https:\/\/ieeker.com\/rockchip-system-porting-firmware-development-guide\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/ieeker.com\/"},{"@type":"ListItem","position":2,"name":"The Ultimate Guide to Rockchip System Porting &#038; Firmware Development"}]},{"@type":"WebSite","@id":"https:\/\/ieeker.com\/#website","url":"https:\/\/ieeker.com\/","name":"ieeker.com","description":"","publisher":{"@id":"https:\/\/ieeker.com\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/ieeker.com\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"es"},{"@type":"Organization","@id":"https:\/\/ieeker.com\/#organization","name":"ieeker","url":"https:\/\/ieeker.com\/","logo":{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/ieeker.com\/#\/schema\/logo\/image\/","url":"https:\/\/ieeker.com\/wp-content\/uploads\/2023\/02\/Ieeker-develoment-board-logo-scaled-e1782367781709.webp","contentUrl":"https:\/\/ieeker.com\/wp-content\/uploads\/2023\/02\/Ieeker-develoment-board-logo-scaled-e1782367781709.webp","width":2160,"height":388,"caption":"ieeker"},"image":{"@id":"https:\/\/ieeker.com\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/ieeker.com\/#\/schema\/person\/8c84cbebc78c3b57cc5d39e73de3eadb","name":"Ieeker","image":{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/ieeker.com\/#\/schema\/person\/image\/","url":"https:\/\/ieeker.com\/wp-content\/litespeed\/avatar\/9b2208ea44759888946102da78e30511.jpg?ver=1787911265","contentUrl":"https:\/\/ieeker.com\/wp-content\/litespeed\/avatar\/9b2208ea44759888946102da78e30511.jpg?ver=1787911265","caption":"Ieeker"},"sameAs":["http:\/\/www.ieeker.com"],"url":"https:\/\/ieeker.com\/es\/author\/ieeker\/"}]}},"_links":{"self":[{"href":"https:\/\/ieeker.com\/es\/wp-json\/wp\/v2\/posts\/10655","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/ieeker.com\/es\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/ieeker.com\/es\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/ieeker.com\/es\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/ieeker.com\/es\/wp-json\/wp\/v2\/comments?post=10655"}],"version-history":[{"count":5,"href":"https:\/\/ieeker.com\/es\/wp-json\/wp\/v2\/posts\/10655\/revisions"}],"predecessor-version":[{"id":10663,"href":"https:\/\/ieeker.com\/es\/wp-json\/wp\/v2\/posts\/10655\/revisions\/10663"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/ieeker.com\/es\/wp-json\/wp\/v2\/media\/10658"}],"wp:attachment":[{"href":"https:\/\/ieeker.com\/es\/wp-json\/wp\/v2\/media?parent=10655"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/ieeker.com\/es\/wp-json\/wp\/v2\/categories?post=10655"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/ieeker.com\/es\/wp-json\/wp\/v2\/tags?post=10655"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}