荣品的RV1126。

目录名 解释
buildroot 定制根文件系统。
app 存放上层应用程序。
external 相关库,包括音频、视频等。
kernel kernel代码。
device/rockchip 存放每个平台的一些编译和打包固件的脚本和预备文件。
docs 存放开发指导文件、平台支持列表、工具使用文档、Linux 开发指南等。
prebuilts 存放交叉编译工具链。
rkbin 存放固件和工具。
rockdev 存放编译输出固件。
tools 存放一些常用工具。
u-boot U-Boot代码。

荣品开发板SDK,编译步骤:
以下进入SDK根目录下进行

./build.sh lunch
32 # 32. pro-rv1126.mk
source envsetup.sh
93 # 93. rockchip_rv1126_rv1109_facial_gate

./build.sh lunch其实是在目录SDK/device/rockchip/rv1126_rv1109里面选择一个BoardConfig,里面定义了uboot和kernel的编译defconfig。
source envsetup.sh其实是选择buildroot的编译defconfig文件,他会进入SDK/buildroot/configs/目录列出里面rockchip的defconfig文件,这里选择93就会在buildroot的编译的时候根据rockchip_rv1126_rv1109_facial_gate_defconfig的配置来构建文件系统

看一下配置好的信息:

processing board option: info
processing option: info
No found target product!!!
Not found .repo/manifest.xml [ignore] !!!
Current Building Information:
Target Product: /home/liefyuan/rv1126/rp_rv1126_sdk/device/rockchip/rv1126_rv1109
Target BoardConfig: /home/liefyuan/rv1126/rp_rv1126_sdk/device/rockchip/rv1126_rv1109/pro-rv1126.mk
Target Misc config:
RK_ARCH=arm
RK_BOARD_PRE_BUILD_SCRIPT=app-build.sh
RK_BOOT_IMG=zboot.img
RK_CFG_BUILDROOT=rockchip_rv1126_rv1109_facial_gate
RK_CFG_RECOVERY=rockchip_rv1126_rv1109_recovery
RK_JOBS=12
RK_KERNEL_DEFCONFIG=rv1126_defconfig
RK_KERNEL_DEFCONFIG_FRAGMENT=rv1126-facial-gate.config
RK_KERNEL_DTS=pro-rv1126
RK_KERNEL_FIT_ITS=boot.its
RK_KERNEL_IMG=kernel/arch/arm/boot/zImage
RK_MISC=wipe_all-misc.img
RK_MODEL=RKXXXX_RETROGAME
RK_OEM_BUILDIN_BUILDROOT=NO
RK_OEM_DIR=oem_facial_gate
RK_OEM_FS_TYPE=ext2
RK_OTA_HOST=172.16.21.205:8080
RK_PACKAGE_FILE=rv1126_rv1109-package-file
RK_PARAMETER=parameter-facial-gate.txt
RK_RECOVERY_FIT_ITS=boot4recovery.its
RK_ROOTFS_IMG=rockdev/rootfs.ext4
RK_ROOTFS_SYSTEM=buildroot
RK_ROOTFS_TYPE=ext4
RK_TARGET_PRODUCT=rv1126_rv1109
RK_UBOOT_DEFCONFIG=rv1126
RK_UBOOT_FORMAT_TYPE=fit
RK_USERDATA_DIR=userdata_normal
RK_USERDATA_FS_TYPE=ext2
RK_VERSION=V1.0.0

零、常用的

  • 全局编译:./build.sh all
  • 全部清除:./build.sh clean
  • 生成烧录文件一(分开):./build.sh firmware
  • 生成烧录文件二(update.img):./build.sh updateimg

一、单独编译

如果执行 build.sh 运行完成后没有在 rockdev/ 目录下生成镜像文件,请执行:

./build.sh firmware;./build.sh updateimg

1.1 单独配置编译kernel

设备树目录:pro-rv1126 kernel/arch/arm/boot/dts/pro-rv1126.dts

$ cd kernel/
$ make ARCH=arm menuconfig
$ make ARCH=arm savedefconfig
$ cp defconfig arch/arm/configs/rv1126_defconfig
$ cd ..
$ ./build.sh kernel && ./build.sh firmware

生成镜像路径: rockdev/
生成镜像:boot.img

./build.sh

function build_kernel(){
    check_config RK_KERNEL_DTS RK_KERNEL_DEFCONFIG || return 0

    echo "============Start building kernel============"
    echo "TARGET_ARCH          =$RK_ARCH"
    echo "TARGET_KERNEL_CONFIG =$RK_KERNEL_DEFCONFIG"
    echo "TARGET_KERNEL_DTS    =$RK_KERNEL_DTS"
    echo "TARGET_KERNEL_CONFIG_FRAGMENT =$RK_KERNEL_DEFCONFIG_FRAGMENT"
    echo "=========================================="

    cd kernel
    make ARCH=$RK_ARCH $RK_KERNEL_DEFCONFIG $RK_KERNEL_DEFCONFIG_FRAGMENT
    make ARCH=$RK_ARCH $RK_KERNEL_DTS.img -j$RK_JOBS
    if [ -f "$TOP_DIR/device/rockchip/$RK_TARGET_PRODUCT/$RK_KERNEL_FIT_ITS" ]; then
        $COMMON_DIR/mk-fitimage.sh $TOP_DIR/kernel/$RK_BOOT_IMG \
            $TOP_DIR/device/rockchip/$RK_TARGET_PRODUCT/$RK_KERNEL_FIT_ITS
    fi

    build_check_power_domain

    finish_build
}

从上面可以知道编译Kernel的命令:

============Start building kernel============
TARGET_ARCH          =arm
TARGET_KERNEL_CONFIG =rv1126_defconfig
TARGET_KERNEL_DTS    =pro-rv1126
TARGET_KERNEL_CONFIG_FRAGMENT =rv1126-facial-gate.config
==========================================

make ARCH=arm rv1126_defconfig rv1126-facial-gate.config
make ARCH=arm pro-rv1126.img -j12

1.2 单独编译配置Buildroot

$ source envsetup.sh rockchip_rv1126_rv1109_facial_gate
$ make ARCH=arm menuconfig
$ make ARCH=arm savedefconfig
$ ./build.sh buildroot && ./build.sh firmware

编译完 buildroot 完成后会自动编译 rootfs
生成镜像路径: rockdev/
生成镜像:rootfs.img

默认 buildroot config 文件路径:buildroot/configs/rockchip_rv1126_rv1109_facial_gate_defconfig
编译出来的文件系统路径:buildroot/output/rockchip_rv1126_rv1109_facial_gate/target/

1.3 单独编译rkmedia

先编译buildroot

$ source envsetup.sh rockchip_rv1126_rv1109_facial_gate
$ make ARCH=arm menuconfig
$ make ARCH=arm savedefconfig
$ ./build.sh buildroot && ./build.sh firmware

然后再在SDK根目录运行:./build.sh external/rkmedia

  • 源码目录:SDK/external/rkmedia/example/
  • 编译完成后的输出目录是(脚本会拷贝一个一模一样的目录到/build):SDK/buildroot/output/rockchip_rv1126_rv1109_facial_gate/build/rkmedia/examples/

1.3.1 添加自己的rkmedia代码文件

我想添加一个自己的代码文件rkmedia_test.c到rkmedia然后编译的步骤:

  • 在目录SDK/external/rkmedia/example/添加一个文件rkmedia_test.c
  • 在该文件中添加编译相关的字段SDK/external/rkmedia/examples/CMakeLists.txt
    #--------------------------
    #  rkmedia_test
    #--------------------------
    add_executable(rkmedia_test rkmedia_test.c ${COMMON_SRC})
    add_dependencies(rkmedia_test easymedia)
    target_link_libraries(rkmedia_test easymedia)
    target_include_directories(rkmedia_test PRIVATE ${CMAKE_SOURCE_DIR}/include)
    install(TARGETS rkmedia_test RUNTIME DESTINATION "bin")
    
  • 然后在根目录编译:./build.sh external/rkmedia
  • 编译完成后的输出目录:SDK/buildroot/output/rockchip_rv1126_rv1109_facial_gate/build/rkmedia/examples/,这个目录下会拷贝一个rkmedia_test.c以及rkmedia_test可执行文件
  • 修改自己的代码然后编译,直接在目录SDK/buildroot/output/rockchip_rv1126_rv1109_facial_gate/build/rkmedia/examples/中修改自己的.c文件,然后在SDK/buildroot/output/rockchip_rv1126_rv1109_facial_gate/build/rkmedia/examples/目录里面运行make命令就可以了!
  • 注意,在SDK/buildroot/output/rockchip_rv1126_rv1109_facial_gate/build/rkmedia/examples/目录中修改的代码不会保存到源码工程中即:./build.sh external/rkmedia/example,如果此时来一个全局编译,你代码将会被拷贝成最原始的那一份。

二、问题解决记录

编译出来的文件系统体积过大无法打包成img文件

打包命令是:./build.sh firmware
在这里插入图片描述
倒数第四行:error: rootfs image size exceed parameter!

修改文件:/sdk/device/rockchip/rv1126_rv1109/parameter-facial-gate.txt

FIRMWARE_VER: 8.1
MACHINE_MODEL: RV1126
MACHINE_ID: 007
MANUFACTURER: RV1126
MAGIC: 0x5041524B
ATAG: 0x00200800
MACHINE: 0xffffffff
CHECK_MASK: 0x80
PWR_HLD: 0,0,A,0,1
TYPE: GPT
CMDLINE: mtdparts=rk29xxnand:0x00002000@0x00004000(uboot),0x00002000@0x00006000(misc),0x00010000@0x00008000(boot),0x00010000@0x00018000(recovery),0x00010000@0x00028000(backup),0x00200000@0x00038000(rootfs),0x00040000@0x00238000(oem),-@0x00278000(userdata:grow)
uuid:rootfs=614e0000-0000-4b53-8000-1d28000054a9

分区大小怎么看

上面所描述的就是整个emmc中分区的排布方式,烧写工具和启动程序会按照该表进行烧录和引导。他的格式是:

分区大小 @ 所在地址 (分区名)

其中大小和地址都是以块为单位(1块=512byte),换算成MByte可以用以下公式:

MByte = N * 512 / 1024 / 1024

例如我们看uboot这行,他的分区大小是0x2000, 也就是 8192块 * 512字节每块 / 1024 / 1024 = 4MByte ,所以uboot分区大小就是4M,而他所在的位置也是在emmc 4M的位置。

修改分区大小

而我们的rootfs分区是大小是:0x200000,也就是2097152 x 512 / 1024 / 1024 = 1024正好是1GiB。
现在我把它分配成2GiB:

FIRMWARE_VER: 8.1
MACHINE_MODEL: RV1126
MACHINE_ID: 007
MANUFACTURER: RV1126
MAGIC: 0x5041524B
ATAG: 0x00200800
MACHINE: 0xffffffff
CHECK_MASK: 0x80
PWR_HLD: 0,0,A,0,1
TYPE: GPT
CMDLINE: mtdparts=rk29xxnand:0x00002000@0x00004000(uboot),0x00002000@0x00006000(misc),0x00010000@0x00008000(boot),0x00010000@0x00018000(recovery),0x00010000@0x00028000(backup),0x00400000@0x00038000(rootfs),0x00040000@0x00438000(oem),-@0x00478000(userdata:grow)
uuid:rootfs=614e0000-0000-4b53-8000-1d28000054a9

很简单吧!
好了编译没有问题!
在这里插入图片描述

三、名词解释

Rockchip提供的主要软件包

部分模块代码目录路径 模块功能描述
external/recovery recovery
external/rkwifibt Wi-Fi和BT
external/libdrm DRM接口
external/rk_pcba_test external/rk_pcba_test
external/isp2-ipc 图像信号处理服务端
external/mpp 编解码代码
external/rkmedia Rockchip多媒体封装接口
external/rkupdate Rockchip升级代码
external/camera_engine_rkaiq 图像处理算法模块
external/rknpu NPU驱动
external/rockface 人脸识别代码
external/CallFunIpc 应用进程间通信代码
external/common_algorithm 音视频通用算法库
external/rknn-toolkit 模型转换、推理和性能评估的开发套件
app/libIPCProtocol 基于dbus,提供进程间通信的函数接口
app/mediaserver 提供多媒体服务的主应用
app/ipc-daemon 系统守护服务
app/dbserver 数据库服务
app/netserver 网络服务
app/storage_manager 存储管理服务
app/ipcweb-backend web后端
app/librkdb 数据库接口
app/ipcweb-ng web前端,采用Angular 8框架

Rockchip平台中的几个概念和他们之间的关系

概念 说明
rkmedia RK平台上将音视频编解码缩放,网络推流本地录像,AI识别等集成在一起的一个库
easymedia 就是上面的rkmedia编译生成的库,可以认为是一个东西
mpp RK平台上的硬件编解码组件
RGA RK平台上独有的一个组件,用来进行2D图像的格式转换,缩放,合成等,底层由硬件IP实现
RKNN RK平台上NPU相关组件和工具,底层由硬件IP NPU支持,可用来加载用户指定的模型,并高速运算
ISP 负责处理sensor出来的原始图像
ISPP 负责处理对图像进行降噪等处理
AIQ 负责从sensor搬运数据到ISP,从ISP搬运数据到ISPP等,还负责从ISP读取统计数据并进行曝光控制策略等

摄像头视频数据的流程

SENSOR---->ISP---->ISPP-------------------------->APP
            |_________|                            |
            |                                      |
            AIQ                                    |
                                        |----------|---------|
                                        MPP        RGA       RKNN

设备分区

分区 对应文件 说明
loader rockdev/Miniloader 由u-boot下rkbin等文件合成,一级引导,负责初始化DDR等,一般不需要改变
parameter rockdev/parameter.txt 从device/rockchip/rv1126_rv1109拷贝过来或者软链接过来,这里面主要保存着CMDLINE参数,包含分区信息,rootfs挂载信息等,传给内核,如果需要改变分区布局的话,可以修改这个文件
u-boot rockdev/u-boot.bin 由u-boot目录拷贝而来或者软链接过来
boot/kenel rockdev/boot.img 由kernel目录下zboot.img软链接过来
misc rockdev/misc.img 记录系统状态辅助完成升级流程等,非必须
recovery rockdev/recovery.img 负责系统升级等,非必须
rootfs rockdev/rootfs.img 由buildroot下面软链接过来,根文件系统
oem rockdev/oem.img 来自buildroot或者device/rockchip,主要放有些RK原厂的库,脚本和可执行文件
userdata rockdev/userdata.img 用来存放用户数据,非必须

Linux设备常用缩略语

缩略语 英文全称 解释
ARM Advanced RISC Machine 高级精简指令集计算机
CAN Controller Area Network 控制器局域网络
CEC Consumer Electronics Control 消费电子控制
CIF Camera Input Format 相机并行接口
CPU Central processing unit 中央处理器
CSI Camera Serial Interface 相机串行接口
DC/DC Direct current-Direct current converter 直流/直流变换器
DDR Double Data Rate 双倍速率同步动态随机存储器
DP DisplayPort 显示接口
DSI Display Serial Interface 显示串行接口
EBC E-book controller 电子书控制器
eDP Embedded DisplayPort 嵌入式数码音视讯传输接口
eMMC Embedded Multi Media Card 内嵌式多媒体存储卡
ESD Electro-Static discharge 静电释放
ESR Equivalent Series Resistance 等效电阻
Flash_VOL_SEL Flash voltage selection eMMC/Nand Flash IO电压选择
FSPI Flexible Serial Peripheral Interface 灵活串行外设接口
GPU Graphics Processing Unit 图形处理单元
HDMI High Definition Multimedia Interface 高清晰度多媒体接口
HPD Hot Plug Detect 热插拔检测
I2C Inter-Integrated Circuit 内部整合电路(两线式串行通讯总线)
I2S Inter-IC Sound 集成电路内置音频总线
ISP Image Signal Processing 图像信号处理
JTAG Joint Test Action Group 联合测试行为组织定义的一种国际标准测试协议(
LDO Low Drop Out Linear Regulator 低压差线性稳压器
LCDC LCD Controller LCD 控制器并行接口
LCM LCD Module LCD显示模组
LVDS Low-Voltage Differential Signaling 低电压差分信号
MAC Media Access Control 以太网媒体接入控制器
MIPI Mobile Industry Processor Interface 移动产业处理器接口
NPU Neural network Processing Unit 神经网络处理器
PCB Printed Circuit Board 印制电路板
PCIe Peripheral Component Interconnect-express 外设组件互联标准
PCM Pulse Code Modulation 脉冲编码调制
PDM Pulse density modulation 脉冲密度调制
PLL Phase-locked loop 锁相环
PMIC Power Management IC 电源管理芯片
PMU Power Management Unit 电源管理单元
PWM Pulse width modulation 脉冲宽度调制
QSGMII Quad Serial Gigabit Media Independent Interface 四串行千兆媒体独立接口
RGB RGB color mode is a color standard in industry RGB色彩模式, 是工业界的一种颜色标准
GMAC Gigabit Media Access Controller 千兆媒体访问控制器
RGMII Reduced Gigabit Media Independent Interface 简化千兆媒体独立接口
RMII Reduced Media Independent Interface 简化媒体独立接口
SARADC successive approximation register Analog to digital converter 逐次逼近寄存器型模数转换器
SATA Serial Advanced Technology Attachment 串行高级技术附件
SCR Smart Card Reader 智能卡读卡器
SD Card Secure Digital Memory Card 安全数码卡
SDIO Secure Digital Input and Output Card 安全数字输入输出卡
SDMMC Secure Digital Multi Media Card 安全数字多媒体存储卡
SGMII Serial Gigabit Media Independent Interface 串行千兆媒体独立接口
SPDIF Sony/Philips Digital Interface Format SONY、 PHILIPS数字音频接口
SPI Serial Peripheral Interface 串行外设接口
SubLVDS Sub- Low-Voltage Differential Signaling 低摆幅差分信号技术
TF Card Micro SD Card(Trans-flash Card) 外置记忆卡
TSADC Temperature sensing A / D converter 温度感应模数转换器
UART Universal Asynchronous Receiver / Transmitter 通用异步收发传输器
VOP Video Output Processor 视频输出处理器
VPU Video Processing Unit 视频处理器
USB2.0 Universal Serial Bus 2.0 通用串行总线
USB3.0 Universal Serial Bus 3.0 通用串行总线
Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐