文章目录
荣品的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 | 通用串行总线 |