完整编译SDK包
型号:A191-EB-RV1126 摄像头:gc2053
首先是根据出厂开发手册,在ubuntu上面把RK平台的SDK包完整的编译出来烧录进板子,并且编译出对应的可执行文件,丢到板子上面验证可以运行后再往下一步走。
要注意的地方是,sdk包默认的设备树不是用的gc2053摄像头的,所以需要修改对应的摄像头设备,例如我的gc2053,
参考博文如下:
https://www.ebaina.com/articles/140000014940
这里不讲怎么安装Cmake以及Cmake的应用,网上这类的博文很多,需要自行去搭建
最终可以找到Cmake版本号就可以了
分享一个Cmake API查询网页:
https://cmake.org/cmake/help/v3.0/manual/cmake-commands.7.html
CMakeLists.txt
创建rv1126 Cmake最主要的是找到对应库文件和头文件,以及交叉编译链等等
c++交叉编译链的路径:xxx/RV1126_RV1109_LINUX_SDK_V2.2.5.1_20230530/buildroot/output/rockchip_rv1126_rv1109_spi_nand/host/bin/arm-linux-gnueabihf-g++
c交叉编译链的路径:xxx/RV1126_RV1109_LINUX_SDK_V2.2.5.1_20230530/buildroot/output/rockchip_rv1126_rv1109_spi_nand/host/bin/arm-linux-gnueabihf-gcc
相关头文件的路径:xxx/RV1126_RV1109_LINUX_SDK_V2.2.5.1_20230530/buildroot/output/rockchip_rv1126_rv1109_spi_nand/host/arm-buildroot-linux-gnueabihf/sysroot
编译后生成的库文件都是在:xxx//RV1126_RV1109_LINUX_SDK_V2.2.5.1_20230530/buildroot/oem/usr/lib
然后如果用到其他的头文件或者库文件之类的,可以自行去配置,例如我用到了freetype,sdl,sdl_ttf之类的,也是要用到对应的交叉编译链
下面贴上我的CMakeLists.txt 这里参考了一下rkmeida里面的生成example时用到的CMakeLists.txt,可以去参考下理解下对应意思。
cmake_minimum_required(VERSION 3.18)
project(rkmedia_vi_venc_test)
set(CMAKE_CXX_COMPILER /home/lin-x/MyProject/host/bin/arm-linux-gnueabihf-g++)
set(CMAKE_C_COMPILER /home/lin-x/MyProject/host/bin/arm-linux-gnueabihf-gcc)
add_definitions(-g -O0 -ggdb -gdwarf -funwind-tables -rdynamic)
include_directories(/home/lin-x/MyProject/include/Common)
include_directories(/home/lin-x/MyProject/include/RV1126/easymedia)
include_directories(/home/lin-x/MyProject/include/Common/rkmedia)
include_directories(/home/lin-x/MyProject/include/Common/freetype2)
include_directories(/home/lin-x/MyProject/include/Common/SDL)
link_directories(${PROJECT_SOURCE_DIR}/librtsp/)
set(THIRD_MEDIA ${CMAKE_CURRENT_LIST_DIR}/libs/RV1126/libthird_media.so)
set(FREETYPE ${CMAKE_CURRENT_LIST_DIR}/libs/Common/libfreetype.so.6.17.0)
set(SDL ${CMAKE_CURRENT_LIST_DIR}/libs/Common/libSDL.so)
set(SDL_TTF ${CMAKE_CURRENT_LIST_DIR}/libs/Common/libSDL_ttf.so)
set(SOURCEFILES MyRKProjetc_Rtsp.c)
set(LINKFILES /home/lin-x/MyProject/src/Common/sample_common_isp.c /home/lin-x/MyProject/src/Common/BMP_API.c)
set(LINKFREETYPE )
set(TARGETFILES MyRKProjetc_Rtsp)
add_executable(${TARGETFILES} ${SOURCEFILES} ${LINKFILES} )
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -DRKAIQ")
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} --sysroot=/home/lin-x/MyProject/host/arm-buildroot-linux-gnueabihf/sysroot")
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -I./include/rkmedia")
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -I./include/easymedia")
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -I./include/Common")
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -I/home/lin-x/MyProject/host/arm-buildroot-linux-gnueabihf/sysroot/usr/include/rkaiq/common")
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -I/home/lin-x/MyProject/host/arm-buildroot-linux-gnueabihf/sysroot/usr/include/rkaiq/xcore")
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -I/home/lin-x/MyProject/host/arm-buildroot-linux-gnueabihf/sysroot/usr/include/rkaiq/uAPI")
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -I/home/lin-x/MyProject/host/arm-buildroot-linux-gnueabihf/sysroot/usr/include/rkaiq/algos")
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -I/home/lin-x/MyProject/host/arm-buildroot-linux-gnueabihf/sysroot/usr/include/rkaiq/iq_parser")
set(LIB_FILES "")
set(LD_FLAGS -leasymedia -ldrm -lrockchip_mpp -lpthread -lasound -lRKAP_3A -lRKAP_ANR -lRKAP_Common -lv4l2 -lv4lconvert -lrga -lrknn_api -lrockface -lsqlite3 -lmd_share -lod_share -lrkaiq -lfreetype -lSDL -lSDL_ttf)
target_link_directories(MyRKProjetc_Rtsp PUBLIC /home/lin-x/MyProject/libs/Common)
target_link_libraries(MyRKProjetc_Rtsp ${LIB_FILES} ${LD_FLAGS} ${THIRD_MEDIA} ${FREETYPE} ${SDL} ${SDL_TTF} rtsp)
install(TARGETS MyRKProjetc_Rtsp RUNTIME DESTINATION "./output")
自己搭建流程类似是这样的
我的环境添加了一下别的东西后,类似如下
搭建完成后,执行运行指令
cmake -B build
创建目录,指令目录,把生成的一些编译的文件都统统放到build目录下,显得外面的结构不会那么混乱
cmake --build build
编译项目 类似运行了make,最后会生成对应的执行文件,然后丢到开发板上运行
我这里写了一个简单的脚本运行俩个命令,并且把可执行文件丢到mount挂载到开发板的目录下,方便我执行
记录一下自己的学习过程~