tag 标签: 开发板

相关博文
  • 2025-5-10 14:45
    35 次阅读|
    0 个评论
    Qt是基于C++ 的跨平台开源应用程序开发框架,专注于图形用户界面和非GUI程序的构建。它提供丰富的GUI控件库和高级功能模块(如网络通信、数据库访问、多媒体处理),并采用独特的信号与槽机制实现高效组件通信。支持OpenGL、Vulkan等图形接口,以及针对嵌入式系统的EGLFS无窗口模式和LinuxFB帧缓冲等,开发者可根据目标平台选择灵活的渲染策略。 本文基于触觉智能RK3506星闪开发板Ubuntu系统进行演示,配套RK3506核心板(3核A7@1.5GHz+M0@200MHz多核异构) 宽温级5 9元/ 工 业级6 8元 ,一片也是含税批量价~ Ubuntu SDK安装与环境搭建 SDK安装 网盘下载路径:Linux4.软件资料QT-SDK/Ubuntu 资料链接请进入触觉智能官网,或联系客服13423856106获取。 注意: 1. QT-SDK 采用交叉编译,所以要在 X86_64 电脑上使用 SDK,不要将 SDK 下载到板子上。 2. 编译环境请使用 Ubuntu22.04(真机或 docker 容器),如果使用其他版本可能导致编译出错。 3. 不要在虚拟机共享文件夹以及非英文目录存放、解压QT-SDK。 下载SDK后,首先校验MD5值,命令如下: $ md5sum rk3506-ubuntu22_qt5-sdk.tar.gz 解压QT-SDK,命令如下: $ sudo tar -zxvf rk3506-ubuntu22_qt5-sdk.tar.gz -C ./ 交叉编译环境搭建 进入qt sdk目录下,执行install_sdk.sh脚本,进行安装和搭建交叉编译环境,具体如下: $ cd ./rk3506-ubuntu22_qt5-sdk $ sudo ./install_sdk.sh $ ./env.sh $ source ~/.bashrc 搭建环境后,查看qmake版本和交叉编译工具链版本: $ arm-none-linux-gnueabihf-gcc -v Using built-in specs. COLLECT_GCC =arm-none-linux-gnueabihf-gcc COLLECT_LTO_WRAPPER =/ home /industio/ evb3506 /arm-gnu-toolchain-11.3.rel1-x86_64-arm-none-linux-gnueabihf/ bin /../ libexec /gcc/ arm - none - linux - gnueabihf /11.3.1/ lto - wrapper Target: arm-none-linux-gnueabihf Configured with: /data/jenkins/workspace/GNU-toolchain/arm-11/src/gcc/configure --target=arm-none-linux-gnueabihf --prefix= --with-sysroot=/arm-none-linux-gnueabihf/libc --with-build-sysroot=/data/jenkins/workspace/GNU-toolchain/arm-11/build-arm-none-linux-gnueabihf/install//arm-none-linux-gnueabihf/libc --with-bugurl=https://bugs.linaro.org/ --enable-gnu-indirect-function --enable-shared --disable-libssp --disable-libmudflap --enable-checking=release --enable-languages=c,c++,fortran --with-gmp=/data/jenkins/workspace/GNU-toolchain/arm-11/build-arm-none-linux-gnueabihf/host-tools --with-mpfr=/data/jenkins/workspace/GNU-toolchain/arm-11/build-arm-none-linux-gnueabihf/host-tools --with-mpc=/data/jenkins/workspace/GNU-toolchain/arm-11/build-arm-none-linux-gnueabihf/host-tools --with-isl=/data/jenkins/workspace/GNU-toolchain/arm-11/build-arm-none-linux-gnueabihf/host-tools --with-arch=armv7-a --with-fpu=neon --with-float=hard --with-mode=thumb --with-arch=armv7-a --with-pkgversion= 'Arm GNU Toolchain 11.3.Rel1' Thread mod el: posix Supported LTO compression algorithms: zlib gcc version 11 . 3 . 1 20220712 (Arm GNU Toolchain 11 . 3 .Rel1) $ qmake -v QMake version 3 . 1 Using Qt version 5.15.8 in /opt/rk3506/rk3506_ubuntu22_5.15/ext/lib 注意:根据安装路径的不同,导致qmake和arm-none-linux-gnueabihf-gcc的路径也是不同的。 Qt交叉编译 Qt源码demo 将Qt demo 解压到当前路径下,命令如下: $ mkdir -p ./qt-demo tar -xvf moveblocks.tar.gz -C ./qt-demo $ cd qt-demo $ ls main .cpp moveblocks .pro 交叉编译 命令如下: $ qmake ./ $ make $ make install $ ls main .cpp Makefile moveblocks moveblocks .pro 由此可见编译后生成moveblocks可执行程序,可以通过ssh等方式将可执行程序传到开发板中运行。 Qt验证 将demo传到开发板上,命令如下: $ adb push Z:\moveblocks /tmp 运行demo,命令如下: $ chmod a+x /tmp/moveblocks $ /tmp/moveblocks 结果展示:
  • 2025-5-10 14:36
    0 个评论
    LVGL是一个免费的轻量级开源图形库。具有丰富部件与高级图形特性,支持多种输入设备和多国语言,独立于硬件之外的开源图形库。LVGL的配置主要区别在于渲染后端的选择,目前可选DRM直接送显以及通过SDL送显。目前RK3506平台可支持SDL送显。 本文基于触觉智能RK3506星闪开发板进行演示,配套RK3506核心板(3核A7@1.5GHz+M0@200MHz多核异构) 含税价5 9元 ,一片也是批量含税价~ 配置LVGL Buildroot配置 基础配置保存路径: $sdk/buildroot/configs/rockchip_rk3506_defconfig # Buildroot相关配置 # include "base/base.config" # include "chips/rk3506_arm.config" # include "fs/vfat.config" # include "wifibt/bt.config" # include "wifibt/wireless.config" # include "multimedia/audio.config" # include "wifibt/bt.config" # include "wifibt/wireless.config" # include "lvgl/lvgl_rkadk.config" # include "lvgl/rk_demo.config" # include "fs/ntfs.config" ... LVGL配置 基础配置保存路径: $sdk/buildroot/configs/rockchip/lvgl/v8 $ ls buildroot/configs/rockchip/lvgl/v8 base. config lvgl_drm. config lvgl_rkadk. config lvgl_sdl. config LVGL DEMO 源码⽬录结构 源码路径:SDK/app/lvgl_demo/ $tree -L 1 . #i ├── amp_monitor ├── cJSON # cJSON源码 ├── CMakeLists .txt ├── common ├── flexbus ├── gallery ├── lv_demo # 基础示例程序,运行官方DEMO ├── lvgl8 # 默认使用lvgl8 ├── lvgl9 ├── motor_demo ├── rk_demo # RK显控DEMO,包含智能家居、家电显控、楼宇对讲、系统设置等DEMO ├── sys # 时间戳,trace debug等 └── tools rk_demo代码说明 源码路径:SDK/app/lvgl_demo/rk_demo 主要作为一个示例程序,演示如何将官方的DEMO运行起来。以下说明略过一些无关的代码,仅挑选需要关注的代码进行说明。 static void lvgl_init ( void ) { /* 一切LVGL应用的开始 */ lv_port_init (); ... check_scr (); } ... int main ( int argc, char **argv) { signal (SIGINT, sigterm_handler); struct sched_param param; int max_priority; max_priority = sched_get_priority_max(SCHED_FIFO) ; param.sched_priority = max_priority ; if ( sched_setscheduler ( 0 , SCHED_FIFO, param) == - 1 ) { perror ("sched_setscheduler failed"); } /* 根据配置选择对应的DEMO初始化,绘制对应UI */ #ifROCKIT_EN RK_MPI_SYS_Init (); # endif #ifWIFIBT_EN run_wifibt_server (); # endif lvgl_init (); app_init (); rk_demo_init (); while (!quit) { /* 调用LVGL任务处理函数,LVGL所有的事件、绘制、送显等都在该接口内完成 */ lv_task_handler (); usleep ( 100 ); } #ifROCKIT_EN RK_MPI_SYS_Exit (); # endif return0; } 源码编译说明 修改源码后,重新编译之前删除之前的的lvgl_demo: $rm -rf SDK /buildroot/output /rockchip_rk3506/build /lvgl_demo/ -rf 重新编译buildroot: $ ./build.sh buildroot DEMO编译说明 触觉智能RK3506资料网盘中有提供的lvgl的demo,以下是编译方法以及demo运行方法。 解压 命令如下: $ mkdir demo $ unzip lvgl_demo. zip -d demo/ $ cd demo/lvgl_demo 修改与编译 修改交叉编译工具链: $ cat Makefile # # Makefile # #CC ?= gcc CC = /home/rk3506/rk3506_linux-250211/rk3506_linux6.1/buildroot/output/rockchip_rk3506/host/bin/arm-buildroot-linux-gnueabihf-gcc LVGL_DIR_NAME ?= lvgl LVGL_DIR ?= ${ shell pwd} CFLAGS ?= -O3 -g0 -I$(LVGL_DIR)/ -Wall -Wshadow -Wundef -Wmissing-prototypes -W no -discarded-qualifiers -Wall -Wextra -W no -unused-function -W no - error =strict-prototypes -Wpointer-arith -fno-strict-aliasing -W no - error =cpp -Wuninitialized -Wmaybe-uninitialized -W no -unused-parameter -W no -missing-field-initializers -Wtype-limits -Wsizeof-pointer-memaccess -W no -format-nonliteral -W no -cast-qual -Wunreachable-code -W no -switch-default -Wreturn-type -Wmultichar -Wformat-security -W no -ignored-qualifiers -W no - error =pedantic -W no -sign-compare -W no - error =missing-prototypes -Wdouble-promotion -Wclobbered -Wdeprecated -Wempty-body -Wtype-limits -Wshift-negative-value -Wstack-usage= 2048 -W no -unused-value -W no -unused-parameter -W no -missing-field-initializers -Wuninitialized -Wmaybe-uninitialized -Wall -Wextra -W no -unused-parameter -W no -missing-field-initializers -Wtype-limits -Wsizeof-pointer-memaccess -W no -format-nonliteral -Wpointer-arith -W no -cast-qual -Wmissing-prototypes -Wunreachable-code -W no -switch-default -Wreturn-type -Wmultichar -W no -discarded-qualifiers -Wformat-security -W no -ignored-qualifiers -W no -sign-compare LDFLAGS ?= -lm BIN = demo #Collect the files to compile MAINSRC = ./main.c include $(LVGL_DIR) /lvgl/lvgl.mk include $(LVGL_DIR) /lv_drivers/lv_drivers.mk # CSRCS +=$(LVGL_DIR)/mouse_cursor_icon.c OBJEXT ?= .o AOBJS = $(ASRCS:.S=$(OBJEXT)) COBJS = $(CSRCS:.c=$(OBJEXT)) MAINOBJ = $(MAINSRC:.c=$(OBJEXT)) SRCS = $(ASRCS) $(CSRCS) $(MAINSRC) OBJS = $(AOBJS) $(COBJS) # # MAINOBJ - OBJFILES all : default %.o: %.c @ $(CC) $(CFLAGS) -c $ -o $@ @ echo "CC$" default : $( AOBJS )$( COBJS )$( MAINOBJ ) $( CC ) -o $( BIN )$( MAINOBJ )$( AOBJS )$( COBJS )$( LDFLAGS ) clean: rm -f $( BIN )$( AOBJS )$( COBJS )$( MAINOBJ ) 修改DEMO,如图所示,在main.c中将demo中显示的分辨率设置成与屏幕分辨率对应: 编译( 注意:交叉编译工具链路径根据实际情况进行更改。): $ make 最后将编译出的demo 通过adb push到开发板上。 C:\Users\industio_mhkadb push Z:\rk\rk3506\rk3506_linux-250211\rk3506_linux6.1\app\ test \demo\lvgl_demo\demo / Z:\rk\rk3506\rk3506_linux-250211\rk3506_linux6.1\app\ test \...ile pushed, 0 skipped. 24.4 MB/s (1127184 bytes in 0.044s) root@rk3506-buildroot:/# chmod a+x /demo root @rk3506 - buildroot : / # /demo END
  • 2025-5-9 17:38
    65 次阅读|
    0 个评论
    1.概述 MYD-YG2LX采用瑞萨RZ/G2L作为核心处理器,该处理器搭载双核Cortex-A55@1.2GHz+Cortex-M33@200MHz处理器,其内部集成高性能3D加速引擎Mail-G31 GPU(500MHz)和视频处理单元(支持H.264硬件编解码),16位的DDR4-1600 / DDR3L-1333内存控制器、千兆以太网控制器、USB、CAN、SD卡、MIPI-CSI等外设接口,在工业、医疗、电力等行业都得到广泛的应用。 米尔基于瑞萨RZ/G2L开发板 本文主要介绍基于MYD-YG2LX开发板进行系统启动时间优化的调试案例,一般启动方式有去掉常规uboot,直接使用SPL加载内核和保留常规uboot加载内核的方式,MYD-YG2LX目前使用的是保留常规uboot的方法启动,启动时间20s+,接下来介绍的主要包括TFA、Uboot、Kernel和文件系统时间优化。 2.硬件资源 USB-TTL调试串口线一根 MYD-YG2LX开发板一块 12V电源适配器一个 3.软件资源 Linux虚拟机 米尔提供的SDK交叉工具链 Linux5.10.83 4.环境准备 进行调试之前,需要安装好Linux虚拟机等相关开发环境,具体可以参考 《MYD-YG2LX_Linux软件开发指南》 的2.0章节。 5.启动时间优化 5.1.1. TFA优化 TFA引导启动的log主要有以下,如果我们认为不是太美观,可以到TFA源码中使用grep命令去搜索关键的信息打印,然后把相关的打印去掉,这可能需要花点功夫去寻找。 例如(grep -rn “BL2:”)搜索到关键的文件(以下图示只是其中的一个地方),然后屏蔽即可。 另外,需要检查源码下面的这个寄存器有没有设置,有则忽略,没有则需要打开,这样会减少系统在启动中的时间。 static void cpu_cpg_setup ( void ) { while (( mmio_read_32 ( CPG_CLKSTATUS ) CLKSTATUS_DIVPL1_STS ) != 0x00000000 ); mmio_write_32 ( CPG_PL1_DDIV , PL1 _DDIV_DIVPL1_SET_WEN | PL1 _DDIV_DIVPL1_SET_1_1); while (( mmio_read_32 ( CPG_CLKSTATUS ) CLKSTATUS_DIVPL1_STS ) != 0x00000000 ); } void cpg_early_setup ( void ) { cpu_cpg_setup (); cpg_ctrl_clkrst (early_setup_tbl , ARRAY_SIZE (early_setup_tbl)); } 最后编译TFA以及更新即可。 5.1.2. Uboot优化 正常的启动log如下,我们需要对这部分进行优化,优化可以从下面3个点出发。 裁剪uboot,减少uboot大小。 MYD-YG2LX平台的2G DDR配置文件在configs/myc-rzg2l_defconfig,1G DDR的配置文件在configs/myc-rzg2l_ddr1gb_defconfig,可以在这个配置文件中屏蔽掉一些自己不需要的功能,这个需要根据实际情况删除不需要的功能,例如: 移除bootdelay的倒计时时间 bootdelay一般默认都是2-3s,移除可以直接修改include/configs/myc-rzg2l.h文件,例如: 关闭uboot的打印log 关闭uboot相关的日志打印,可以到uboot的源码路径下搜索关键的信息,然后进行屏蔽即可(以下图示只是其中的一个地方),例如: 最后编译与更新uboot即可。 5.1.3. Kernel优化 Kernel典型的修改主要有以下: 简单:通过在 cmdline 中添加 quiet 来减少控制台消息 适度:通过移除驱动程序、文件系统、子系统来精简内核,从减少内核解压或加载的时间 适度:通过移除未使用的硬件接口精简设备树 棘手:开始优化行为不良的驱动程序,这是一个相对复杂和困难的任务。优化驱动程序可以提高其性能、稳定性和兼容性,从而改善系统的整体表现。然而,如果驱动程序的行为不良,例如出现崩溃、卡顿或冲突等问题,那么进行优化就会变得更加棘手和挑战。这需要深入分析和修复驱动程序的问题,调整其代码和算法,以使其更加高效和可靠。 使用Bootgraph分析内核启动的调用时间,移除花费时间长的驱动和优化需要使用的驱动 总之优化还算是一项蛮复杂的项目,我们此次主要从以下几点优化: 去掉kernel的打印等级,需要到内核源码下屏蔽掉log属性和到uboot源码下把log等级升高,内核修改如下: Uboot修改如下: 关掉kernel不需要的一些外设资源,缩小内核大小(需要根据自己的情况来进行修改) 可以到设备树中屏蔽掉一些不需要的接口和到内核配置文件中屏蔽掉一些不需要的驱动配置,例如: 使用Bootgraph分析内核启动的调用时间,移除花费时间长的驱动和优化需要使用的驱动。 首先需要在uboot加上时间戳和init debug调用: setenv bootargs 'rw rootwait earlycon root=/dev/mmcblk0p2 printk.time=1 initcall_debug=1' 然后启动内核,采集启动log,如下: dmesg boot-kernel. log 返回内核源码目录,进入内核源码scripts目录,只需下面命令,生成直观图形,如下: ./bootgraph.pl boot-kernel.log boot-kernel.svg 然后打开boot.svg查看花费时间最大的驱动调用,没用的就关闭,需要用的就优化。 最后编译以及更新内核即可。 5.1.4. 文件系统优化 MYD-YG2LX的文件系统是基于yocto构建的,关于yocto如何构建可以参考 《MYD-YG2LX_Linux软件开发指南》 的3.0章节。 文件系统主要使用下面这3个命令就可以找到花费时间最多的服务,然后可以根据实际情况优化。当然也可以把所有的服务以图形的形式表现出来,这样更加直观,采用systemd-analyze plot boot.svg可以把每个服务启动顺序和消耗时间显示出来,针对这些服务,移除掉不需要的或者调整服务之间的启动顺序。 systemctl list-unit-files --state=enabled #查看所有开机自启的服务 systemd-analyze blame #查看服务的初始化时间 systemd-analyze critical-chain #查看启动花费时间最多的 5.1.5. 启动测试 经过以上的优化后可以打包一个sd卡刷机包并刷到板子的emmc,关于如何打包可以参考 《MYD-YG2LX_Linux软件开发指南》 的4.3章节,最后再启动测试,执行systemd-analyze即可看到启动时间,效果如下:
  • 2025-4-25 13:55
    0 个评论
    Qt是基于C++ 的跨平台开源应用程序开发框架,专注于图形用户界面和非GUI程序的构建。它提供丰富的GUI控件库和高级功能模块(如网络通信、数据库访问、多媒体处理),并采用独特的信号与槽机制实现高效组件通信。支持OpenGL、Vulkan等图形接口,以及针对嵌入式系统的EGLFS无窗口模式和LinuxFB帧缓冲等,开发者可根据目标平台选择灵活的渲染策略。 本文基于触觉智能RK3506星闪开发板Ubuntu系统进行演示,配套RK3506核心板(3核A7@1.5GHz+M0@200MHz多核异构) 宽温级59元/ 工 业级68元 ,一片也是含税批量价。 Ubuntu SDK安装与环境搭建 SDK安装 网盘下载路径:Linux4.软件资料QT-SDK/Ubuntu 资料链接请进入触觉智能官网,或联系客服13423856106获取。 注意: 1. QT-SDK 采用交叉编译,所以要在 X86_64 电脑上使用 SDK,不要将 SDK 下载到板子上。 2. 编译环境请使用 Ubuntu22.04(真机或 docker 容器),如果使用其他版本可能导致编译出错。 3. 不要在虚拟机共享文件夹以及非英文目录存放、解压QT-SDK。 下载SDK后,首先校验MD5值,命令如下: $ md5sum rk3506-ubuntu22_qt5-sdk.tar.gz 解压QT-SDK,命令如下: $ sudo tar -zxvf rk3506-ubuntu22_qt5-sdk.tar.gz -C ./ 交叉编译环境搭建 进入qt sdk目录下,执行install_sdk.sh脚本,进行安装和搭建交叉编译环境,具体如下: $ cd ./rk3506-ubuntu22_qt5-sdk $ sudo ./install_sdk.sh $ ./env.sh $ source ~/.bashrc 搭建环境后,查看qmake版本和交叉编译工具链版本: $ arm-none-linux-gnueabihf-gcc -v Using built-in specs. COLLECT_GCC =arm-none-linux-gnueabihf-gcc COLLECT_LTO_WRAPPER =/ home /industio/ evb3506 /arm-gnu-toolchain-11.3.rel1-x86_64-arm-none-linux-gnueabihf/ bin /../ libexec /gcc/ arm - none - linux - gnueabihf /11.3.1/ lto - wrapper Target: arm-none-linux-gnueabihf Configured with: /data/jenkins/workspace/GNU-toolchain/arm-11/src/gcc/configure --target=arm-none-linux-gnueabihf --prefix= --with-sysroot=/arm-none-linux-gnueabihf/libc --with-build-sysroot=/data/jenkins/workspace/GNU-toolchain/arm-11/build-arm-none-linux-gnueabihf/install//arm-none-linux-gnueabihf/libc --with-bugurl=https://bugs.linaro.org/ --enable-gnu-indirect-function --enable-shared --disable-libssp --disable-libmudflap --enable-checking=release --enable-languages=c,c++,fortran --with-gmp=/data/jenkins/workspace/GNU-toolchain/arm-11/build-arm-none-linux-gnueabihf/host-tools --with-mpfr=/data/jenkins/workspace/GNU-toolchain/arm-11/build-arm-none-linux-gnueabihf/host-tools --with-mpc=/data/jenkins/workspace/GNU-toolchain/arm-11/build-arm-none-linux-gnueabihf/host-tools --with-isl=/data/jenkins/workspace/GNU-toolchain/arm-11/build-arm-none-linux-gnueabihf/host-tools --with-arch=armv7-a --with-fpu=neon --with-float=hard --with-mode=thumb --with-arch=armv7-a --with-pkgversion= 'Arm GNU Toolchain 11.3.Rel1' Thread mod el: posix Supported LTO compression algorithms: zlib gcc version 11 . 3 . 1 20220712 (Arm GNU Toolchain 11 . 3 .Rel1) $ qmake -v QMake version 3 . 1 Using Qt version 5.15.8 in /opt/rk3506/rk3506_ubuntu22_5.15/ext/lib 注意:根据安装路径的不同,导致qmake和arm-none-linux-gnueabihf-gcc的路径也是不同的。 Qt交叉编译 Qt源码demo 将Qt demo 解压到当前路径下,命令如下: $ mkdir -p ./qt-demo tar -xvf moveblocks.tar.gz -C ./qt-demo $ cd qt-demo $ ls main .cpp moveblocks .pro 交叉编译 命令如下: $ qmake ./ $ make $ make install $ ls main .cpp Makefile moveblocks moveblocks .pro 由此可见编译后生成moveblocks可执行程序,可以通过ssh等方式将可执行程序传到开发板中运行。 Qt验证 将demo传到开发板上,命令如下: $ adb push Z:\moveblocks /tmp 运行demo,命令如下: $ chmod a+x /tmp/moveblocks $ /tmp/moveblocks 结果展示:
  • 2025-4-25 12:21
    0 个评论
    本文介绍Linux开发板文件系统打包及镜像制作的方法,演示Linux文件系统打包及镜像制作,适用于想将配置好的系统环境打包成镜像批量烧录。 触觉智能RK3562开发板 演示,搭载4核A53处理器,主频高达2.0GHz;内置独立1Tops算力NPU,可应用于物联网网关、平板电脑、智能家居、教育电子、工业显示与控制等行业。 工具获取 本文所介绍的方法需要使用到Linux环境下的一些工具。工具可联系触觉智能客服或留言获取。下载Ubuntu PC环境后,需要解包后使用,解包方法如下: $ tar -vxf ido- pack -tools.tar -C ./ 解包后的文件内容如下: 工具包脚本默认芯片信息是rk3562,如果使用其他芯片,则需要修改芯片信息,对应路径ido-pack-tools/mkupdate.sh。 文件系统打包及文件系统镜像制作 从开发板中打包出文件系统 先在开发板中插入U盘或TF卡,然后通过mount命令查看文件系统分区节点,如下所示: root@ido:/# mount /dev/mmcblk2p8 on / type ext4 (rw,relatime) devtmpfs on /dev type devtmpfs (rw,relatime,size=996844k,nr_inodes=249211,mode=755) sysfs on /sys type sysfs (rw,nosuid,nodev,noexec,relatime) proc on /proc type proc (rw,nosuid,nodev,noexec,relatime) securityfs on /sys/kernel/security type securityfs (rw,nosuid,nodev,noexec,relatime) tmpfs on /dev/shm type tmpfs (rw,nosuid,nodev,size=1008396k,nr_inodes=252099) devpts on /dev/pts type devpts (rw,nosuid,noexec,relatime,gid=5,mode=620,ptmxmode=000) tmpfs on /run type tmpfs (rw,nosuid,nodev,size=201680k,nr_inodes=252099,mode=755) tmpfs on /run/lock type tmpfs (rw,nosuid,nodev,noexec,relatime,size=5120k,nr_inodes=252099) tmpfs on /sys/fs/cgroup type tmpfs (ro,nosuid,nodev,noexec,size=1008396k,nr_inodes=252099,mode=755) cgroup2 on /sys/fs/cgroup/unified type cgroup2 (rw,nosuid,nodev,noexec,relatime,nsdelegate) cgroup on /sys/fs/cgroup/systemd type cgroup (rw,nosuid,nodev,noexec,relatime,xattr,name=systemd) pstore on /sys/fs/pstore type pstore (rw,relatime) cgroup on /sys/fs/cgroup/cpu,cpuacct type cgroup (rw,nosuid,nodev,noexec,relatime,cpu,cpuacct) cgroup on /sys/fs/cgroup/cpuset type cgroup (rw,nosuid,nodev,noexec,relatime,cpuset) cgroup on /sys/fs/cgroup/devices type cgroup (rw,nosuid,nodev,noexec,relatime,devices) cgroup on /sys/fs/cgroup/freezer type cgroup (rw,nosuid,nodev,noexec,relatime,freezer) debugfs on /sys/kernel/debug type debugfs (rw,relatime) tracefs on /sys/kernel/tracing type tracefs (rw,nosuid,nodev,noexec,relatime) configfs on /sys/kernel/config type configfs (rw,nosuid,nodev,noexec,relatime) fusectl on /sys/fs/fuse/connections type fusectl (rw,nosuid,nodev,noexec,relatime) adb on /dev/usb-ffs/adb type functionfs (rw,relatime) tmpfs on /run/user/0 type tmpfs (rw,nosuid,nodev,relatime,size=201676k,nr_inodes=252099,mode=700) tmpfs on /run/user/1001 type tmpfs (rw,nosuid,nodev,relatime,size=201676k,nr_inodes=252099,mode=700,uid=1001,gid=1001) gvfsd-fuse on /run/user/1001/gvfs type fuse.gvfsd-fuse (rw,nosuid,nodev,relatime,user_id=1001,group_id=1001) /dev/mmcblk2p7 on /media/ido/oem type ext4 (rw,nosuid,nodev,relatime,uhelper=udisks2) /dev/mmcblk2p6 on /media/ido/userdata type ext4 (rw,nosuid,nodev,relatime,uhelper=udisks2) /dev/sda1 on /media/ido/U type vfat (rw,nosuid,nodev,relatime,uid=1001,gid=1001,fmask=0022,dmask=0022,codepage=936,iocharset=utf8,shortname=mixed,showexec,utf8,flush,errors=remount-ro,uhelper=udisks2) 由上面命令第2和29行可以看到 /dev/mmcblk2p8 on/type ext4 (rw,relatime),/dev/mmcblk2p8 挂载到根目录,/dev/mmcblk2p8就是我们需要的节点。U盘挂载目录为/media/ido/U。 # 挂载根文件目录 $ sudo mount /dev/mmcblk2p8 /mnt # 进入挂载文件夹 $ cd /mnt $ rm var/lib/misc/firstrun $ sudo tar -czf /media/ido/U/ido-rootfs.tar.gz ./* $ sync 注意:打包使用tar命令需要用sudo权限。 压缩包解压 将打包出的压缩包,解压至Ubuntu PC端环境,命令如下: $ mkdir -p your/target/path/ $ sudo tar -xzf ido-rootfs.tar.gz -C your/target/path/ 文件系统镜像制作 查看文件系统大小,如下所示: $ sudo du -sh your/target/path/ 制作镜像需要的脚本文件mk-rootfs-image.sh,文件位于工具包的pack-tools/roofs_mk/目录。根据系统大小修改 mk-rootfs-image.sh 脚本第25行的参数,默认镜像大小设置为4096MB。 dd if=/dev/zero of=${ROOTFSIMAGE} bs=1M count=0 seek=4096 注意:一般脚本中设置的镜像大小需要大于 du 返回值。 $ sudo cd pack-tools/roofs_mk/ $ sudo ./mk-rootfs-image.sh ../../your/target/path/ 脚本正常运行退出后,可在目录得到rootfs.img的文件系统镜像。 制作整包固件update.img 前面文章得到了rootfs.img散包固件,接下来我们制作update.img整包固件。 此处分两种情况: 1. 只修改文件系统,只需将原本烧录的update.img镜像解包后,替换新制作的rootfs.img。 2. 如果除了文件系统外还有其他修改,则可以修改sdk源码编译脚本,编译的时候使用自定义的文件系统。 只修改文件系统的情况 将需要解包的完整镜像文件拷贝到工具包 pack-tools 目录下,此处以完整镜像 IDO-EVB3562-V1B_MIPI-800x1280_Ubuntu20_QT5_240719.img为例。 执行解包脚本,将update镜像按照分区拆分出分区镜像。 $ ./unpack.sh IDO-EVB3562-V1B_MIPI-800x1280_Ubuntu20_QT5_240719.img 执行结果如下: 分区文件解包存放到./output/目录。 将文章第2节中打包好的文件系统镜像复制替换到./output/rootfs.img,文件名称必须为rootfs.img。 最后执行./mkupdate.sh脚本将分区镜像合并为一个完整的镜像update.img。 脚本运行成功后,将会产生新的整包文件./output/update.img。 除了文件系统外还有其他修改的情况 不同SDK修改的地方不一致,在sdk中新建自定义目录myrootfs,把rootfs.img放入其中(myrootfs和build.sh同级目录)。 mkdir myrootfs #将rootfs.img放入myrootfs中 ls myrootfs/rootfs.img 情况一:直接修改build.sh,使其编译时使用我们的rootfs.img打包。在build.sh的function build_rootfs()函数中,添加24-27行代码。 function build_rootfs (){ check_config RK_ROOTFS_IMG || return 0 RK_ROOTFS_DIR=.rootfs ROOTFS_IMG= ${RK_ROOTFS_IMG##*/} rm -rf $RK_ROOTFS_IMG $RK_ROOTFS_DIR mkdir -p ${RK_ROOTFS_IMG%/*} $RK_ROOTFS_DIR case " $1 " in yocto) build_yocto ln -rsf yocto/build/latest/rootfs.img \ $RK_ROOTFS_DIR /rootfs.ext4 ;; debian) build_debian ln -rsf debian/linaro-rootfs.img \ $RK_ROOTFS_DIR /rootfs.ext4 ;; distro) build_distro for f in $( ls distro/output/images/rootfs.*); do ln -rsf $f $RK_ROOTFS_DIR / done ;; myrootfs) ln -rsf myrootfs/rootfs.img \ $RK_ROOTFS_DIR /rootfs.ext4 ;; *) build_buildroot for f in $( ls buildroot/output/ $RK_CFG_BUILDROOT /images/rootfs.*); do ln -rsf $f $RK_ROOTFS_DIR / done ;; esac 在执行build.sh lunch后,执行以下命令: export RK_ROOTFS_SYSTEM=myrootfs 最后执行build.sh即可生成包含了rootfs.img的update.img整包固件。 ./build.sh rockdev/update.img即为我们所需的完整固件。 情况二:如果build.sh脚本中没有function build_rootfs()函数,则修改 ./device/rockchip/common/scripts/mk-rootfs.sh,添加以下8-12行与35行代码: ....省略部分代码........ build_ubuntu20 () { ln -rsf " $PWD /ubuntu/rootfs-ubuntu20.04-desktop.img" $ROOTFS_DIR /rootfs.ext4 finish_build build_ubuntu20 $@ } build_myrootfs () { ln -rsf " $PWD /myrootfs/rootfs.img" $ROOTFS_DIR /rootfs.ext4 finish_build build_myrootfs $@ } ....省略部分代码........ build_hook () { check_config RK_ROOTFS_TYPE || return 0 if ; then ROOTFS= ${RK_ROOTFS_SYSTEM:-buildroot} else ROOTFS= $1 fi ROOTFS_IMG=rootfs. ${RK_ROOTFS_TYPE} ROOTFS_DIR= " $RK_OUTDIR /rootfs" echo "==========================================" echo " Start building rootfs( $ROOTFS )" echo "==========================================" rm -rf " $ROOTFS_DIR " mkdir -p " $ROOTFS_DIR " case " $ROOTFS " in yocto) build_yocto " $ROOTFS_DIR " ;; debian) build_debian " $ROOTFS_DIR " ;; buildroot) build_buildroot " $ROOTFS_DIR " ;; ubuntu) build_ubuntu20 " $ROOTFS_DIR " ;; myrootfs)build_myrootfs " $ROOTFS_DIR " ;; *) usage ;; esac 修改 ./device/rockchip/common/configs/Config.in.rootfs,添加以下7、20、21行代码: config RK_ROOTFS_SYSTEM string default "buildroot" if RK_ROOTFS_SYSTEM_BUILDROOT default "debian" if RK_ROOTFS_SYSTEM_DEBIAN default "yocto" if RK_ROOTFS_SYSTEM_YOCTO default "ubuntu" if RK_ROOTFS_SYSTEM_UBUNTU default "myrootfs" if RK_ROOTFS_SYSTEM_MYROOTFS choice prompt "default rootfs system" help Default rootfs system. config RK_ROOTFS_SYSTEM_BUILDROOT bool "buildroot" depends on RK_BUILDROOT_BASE_CFG != "" config RK_ROOTFS_SYSTEM_DEBIAN bool "debian" depends on RK_DEBIAN_VERSION != "" config RK_ROOTFS_SYSTEM_UBUNTU bool "ubuntu" config RK_ROOTFS_SYSTEM_MYROOTFS bool "myrootfs" 在执行build.sh lunch命令后,执行以下命令: export RK_ROOTFS_SYSTEM=myrootfs 最后执行build.sh命令,即可生成包含了rootfs.img的update.img整包固件。 ./build.sh rockdev/update.img即为我们所需的完整固件。 产品简介 触觉智能RK3562开发板 (型号EVB3562),基于瑞芯微新一代SoC RK3562/RK3562J设计,可用于轻量级人工智能应用。EVB3562开发板配备了PCIe2.1/USB3.0 OTG/千兆网口等各类型接口,支持4G/5G通信、多摄像头及多种视频接口,可应用于物联网网关、平板电脑、智能家居、教育电子、工业显示、工业控制等行业领域。 搭载瑞芯微新一代RK3562/RK3562J芯片; 1TOPS算力NPU,支持INT8/INT16/FP16 等数据类型运算; 支持4K@30FPS与1080P@60FPS视频解码; 13M ISP,支持HDR与多路摄像头视频采集; 单路MIPI-DSI,最高2048x1080@60fps ; 单通道LVDS,最高1366x768@60fps ; 三路独立的以太网口,其中两路千兆网口, 一路百兆网口(2025新款开发板则为USB OTG+双网口); 支持5G/4G/WiFi/蓝牙无线通信; 支持Android,Linux操作系统;
相关资源