【RP-RV1126】SDK编译常用记录

文章详细介绍了如何编译RockchipRV1126SDK,包括单独配置编译kernel、Buildroot和rkmedia的步骤,以及如何解决文件系统体积过大无法打包的问题。同时,文章提到了Rockchip提供的主要软件包及其功能,并解析了设备分区和Linux设备常用缩略语。
摘要由CSDN通过智能技术生成


荣品的RV1126。

目录名解释
buildroot定制根文件系统。
app存放上层应用程序。
external相关库,包括音频、视频等。
kernelkernel代码。
device/rockchip存放每个平台的一些编译和打包固件的脚本和预备文件。
docs存放开发指导文件、平台支持列表、工具使用文档、Linux 开发指南等。
prebuilts存放交叉编译工具链。
rkbin存放固件和工具。
rockdev存放编译输出固件。
tools存放一些常用工具。
u-bootU-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/recoveryrecovery
external/rkwifibtWi-Fi和BT
external/libdrmDRM接口
external/rk_pcba_testexternal/rk_pcba_test
external/isp2-ipc图像信号处理服务端
external/mpp编解码代码
external/rkmediaRockchip多媒体封装接口
external/rkupdateRockchip升级代码
external/camera_engine_rkaiq图像处理算法模块
external/rknpuNPU驱动
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-backendweb后端
app/librkdb数据库接口
app/ipcweb-ngweb前端,采用Angular 8框架

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

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

摄像头视频数据的流程

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

设备分区

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

Linux设备常用缩略语

缩略语英文全称解释
ARMAdvanced RISC Machine高级精简指令集计算机
CANController Area Network控制器局域网络
CECConsumer Electronics Control消费电子控制
CIFCamera Input Format相机并行接口
CPUCentral processing unit中央处理器
CSICamera Serial Interface相机串行接口
DC/DCDirect current-Direct current converter直流/直流变换器
DDRDouble Data Rate双倍速率同步动态随机存储器
DPDisplayPort显示接口
DSIDisplay Serial Interface显示串行接口
EBCE-book controller电子书控制器
eDPEmbedded DisplayPort嵌入式数码音视讯传输接口
eMMCEmbedded Multi Media Card内嵌式多媒体存储卡
ESDElectro-Static discharge静电释放
ESREquivalent Series Resistance等效电阻
Flash_VOL_SELFlash voltage selectioneMMC/Nand Flash IO电压选择
FSPIFlexible Serial Peripheral Interface灵活串行外设接口
GPUGraphics Processing Unit图形处理单元
HDMIHigh Definition Multimedia Interface高清晰度多媒体接口
HPDHot Plug Detect热插拔检测
I2CInter-Integrated Circuit内部整合电路(两线式串行通讯总线)
I2SInter-IC Sound集成电路内置音频总线
ISPImage Signal Processing图像信号处理
JTAGJoint Test Action Group联合测试行为组织定义的一种国际标准测试协议(
LDOLow Drop Out Linear Regulator低压差线性稳压器
LCDCLCD ControllerLCD 控制器并行接口
LCMLCD ModuleLCD显示模组
LVDSLow-Voltage Differential Signaling低电压差分信号
MACMedia Access Control以太网媒体接入控制器
MIPIMobile Industry Processor Interface移动产业处理器接口
NPUNeural network Processing Unit神经网络处理器
PCBPrinted Circuit Board印制电路板
PCIePeripheral Component Interconnect-express外设组件互联标准
PCMPulse Code Modulation脉冲编码调制
PDMPulse density modulation脉冲密度调制
PLLPhase-locked loop锁相环
PMICPower Management IC电源管理芯片
PMUPower Management Unit电源管理单元
PWMPulse width modulation脉冲宽度调制
QSGMIIQuad Serial Gigabit Media Independent Interface四串行千兆媒体独立接口
RGBRGB color mode is a color standard in industryRGB色彩模式, 是工业界的一种颜色标准
GMACGigabit Media Access Controller千兆媒体访问控制器
RGMIIReduced Gigabit Media Independent Interface简化千兆媒体独立接口
RMIIReduced Media Independent Interface简化媒体独立接口
SARADCsuccessive approximation register Analog to digital converter逐次逼近寄存器型模数转换器
SATASerial Advanced Technology Attachment串行高级技术附件
SCRSmart Card Reader智能卡读卡器
SD CardSecure Digital Memory Card安全数码卡
SDIOSecure Digital Input and Output Card安全数字输入输出卡
SDMMCSecure Digital Multi Media Card安全数字多媒体存储卡
SGMIISerial Gigabit Media Independent Interface串行千兆媒体独立接口
SPDIFSony/Philips Digital Interface FormatSONY、 PHILIPS数字音频接口
SPISerial Peripheral Interface串行外设接口
SubLVDSSub- Low-Voltage Differential Signaling低摆幅差分信号技术
TF CardMicro SD Card(Trans-flash Card)外置记忆卡
TSADCTemperature sensing A / D converter温度感应模数转换器
UARTUniversal Asynchronous Receiver / Transmitter通用异步收发传输器
VOPVideo Output Processor视频输出处理器
VPUVideo Processing Unit视频处理器
USB2.0Universal Serial Bus 2.0通用串行总线
USB3.0Universal Serial Bus 3.0通用串行总线
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值