当前位置: 首页 > article >正文

移植rv1106SDK的ipcweb到ubuntu

移植minilogger

在sdk中找到minilogger,复制到任意的文件夹,执行

cmake ./
make
make install

把minilogger 安装到系统

修改Makefile

在上次那个基础上,修改Makefile


#* 这里原来要包含../Makefile.param,但含有sdk的很多参数,放弃
#*ifeq ($(APP_PARAM), )
#*    APP_PARAM:=../Makefile.param
#*    include $(APP_PARAM)
#*endif

export LC_ALL=C
SHELL:=/bin/bash

CURRENT_DIR := $(shell pwd)
#* 取消这个项,不用安装不用复制
#* PKG_INSTALL_TO_ROOTFS ?= NO
PKG_NAME := ipcweb-backend
PKG_BIN ?= out
PKG_BUILD ?= build
#* RK_APP_ARCH_TYPE在Makefile.param里面定义 Makefile.param RK_APP_ARCH_TYPE:=arm
RK_APP_ARCH_TYPE:=arm
PKG_TARBALL := ipcweb-backend/ipcweb-env-$(RK_APP_ARCH_TYPE)
PKG_TARPATH ?= $(PKG_BIN)/
# debug: build cmake with more message
# PKG_CONF_OPTS += -DCMAKE_VERBOSE_MAKEFILE=ON
#

#* RK_APP_MEDIA_INCLUDE_PATH 是sdk里面media的头文件路径,放弃
#* RK_APP_CFLAGS = -I $(RK_APP_MEDIA_INCLUDE_PATH) \
#* 				-I $(CURRENT_DIR)/$(PKG_TARPATH)/include \

#* 只包含out文件夹里面的include
RK_APP_CFLAGS = -I $(CURRENT_DIR)/$(PKG_TARPATH)/include


RK_APP_LDFLAGS = -L $(CURRENT_DIR)/$(PKG_TARPATH)/usr/lib/

#* RK_APP_OPTS 也是sdk里面的库和头文件路径,放弃
#* RK_APP_OPTS += -Wl,-rpath-link,$(RK_APP_MEDIA_LIBS_PATH):$(RK_APP_PATH_LIB_INCLUDE)/root/usr/lib
PKG_CONF_OPTS += -DCMAKE_C_FLAGS="$(RK_APP_CFLAGS) $(RK_APP_LDFLAGS) $(RK_APP_OPTS) -g -O0" \
				-DCMAKE_CXX_FLAGS="$(RK_APP_CFLAGS) $(RK_APP_LDFLAGS) $(RK_APP_OPTS) -g -O0"

# define project/cfg/BoardConfig*.mk

#* RK_APP_IPCWEB_BACKEND 是编译开关
RK_APP_IPCWEB_BACKEND = y
ifeq ($(RK_APP_IPCWEB_BACKEND),y)
PKG_TARGET := ipcweb-build
endif

ifeq ($(PKG_BIN),)
$(error ### $(CURRENT_DIR): PKG_BIN is NULL, Please Check !!!)
endif

all: $(PKG_TARGET)
	@echo "build $(PKG_NAME) done"

ipcweb-build:
	@rm -rf $(PKG_BIN) $(PKG_TARPATH) && mkdir -p $(PKG_TARPATH) $(PKG_BIN) $(PKG_BUILD);
	@cp -rfa $(PKG_TARBALL)/include $(PKG_TARPATH)/;
	@cp -rfa $(PKG_TARBALL)/usr $(PKG_TARPATH)/;
	@echo "PKG_TARPATH is $(PKG_TARPATH)";
#*  修改gcc和g++	
	pushd $(PKG_BUILD)/; \
		rm -rf CMakeCache.txt; \
		cmake $(CURRENT_DIR)/$(PKG_NAME)/ \
			-DCMAKE_C_COMPILER=gcc \
			-DCMAKE_CXX_COMPILER=g++ \
			-DCMAKE_INSTALL_PREFIX="$(CURRENT_DIR)/$(PKG_BIN)" \
			-DCMAKE_BUILD_TYPE=Release \
			-DCMAKE_COLOR_MAKEFILE=OFF \
			-DCMAKE_SYSTEM_NAME=Linux \
			-DUSE_RKIPC=ON \
			$(PKG_CONF_OPTS) ;\
			make -j6 || exit -1; \
			make install; \
	popd;
	(mkdir -p $(PKG_BIN)/usr;mv $(PKG_BIN)/www $(PKG_BIN)/usr;);

#* 因为在ubuntu上运行,所以不需要安装到rootfs,也不需要把配置复制。
#* ifeq ($(PKG_INSTALL_TO_ROOTFS),YES)
#* 	@cp -rfa $(PKG_TARBALL)/etc $(PKG_TARPATH)/;
#* 	@cp -rfa $(PKG_TARBALL)/usr $(PKG_TARPATH)/;
#* else
#* 	@cp -rfa $(PKG_TARBALL)/etc4oem $(PKG_TARPATH)/etc
#* endif
#*这两项安装的放弃
#*	@test ! -d $(PKG_BIN)/root/include || mv $(PKG_BIN)/root/include $(PKG_BIN)/;
#*	$(call MAROC_COPY_PKG_TO_APP_OUTPUT, $(RK_APP_OUTPUT), $(PKG_BIN))

clean:
	@rm -rf $(PKG_BIN) $(PKG_BUILD) $(PKG_TARPATH)

distclean: clean
C_BLACK  = \e[30;1m
C_RED    = \e[31;1m
C_GREEN  = \e[32;1m
C_YELLOW = \e[33;1m
C_BLUE   = \e[34;1m
C_PURPLE = \e[35;1m
C_CYAN   = \e[36;1m
C_WHITE  = \e[37;1m
C_NORMAL = \033[0m
info:
ifeq ($(RK_APP_IPCWEB_BACKEND),y)
	@echo -e "$(C_YELLOW)-------------------------------------------------------------------------$(C_NORMAL)"
	@echo -e "$(C_YELLOW)-------------------------------------------------------------------------$(C_NORMAL)"
endif

修改 ipcweb-backend/CMakeLists.txt

修改ipcweb-backend/CMakeLists.txt,增加对MiniLogger支持

#
# Copyright 2019 Fuzhou Rockchip Electronics Co., Ltd. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
#
cmake_minimum_required(VERSION 3.5)

list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake")
project(ipcweb-backend
    LANGUAGES CXX)
set(DESCRIPTION "IP Camera web backend cgi projects")

option(IPCWEBBACKEND_BUILD_TESTS  "Build tests executables" OFF)
option(ENABLE_JWT  "enbale jwt" OFF)
option(MEDIASERVER_ROCKFACE  "enbale mediaserver rockface" OFF)
option(USE_RKIPC  "use rkipc" OFF)

set(PROJECT_THIRDPARTY_DIR "${CMAKE_SOURCE_DIR}/thirdparty")
include(clang-format)
include(cppcheck)

if (NOT ${CMAKE_SYSTEM_NAME} STREQUAL "Linux" OR NOT DEFINED CMAKE_SYSTEM_PROCESSOR)
    message(FATAL_ERROR "This project can only be built for linux")
endif()

set(TARGET_HOST ${CMAKE_SYSTEM_PROCESSOR}-linux)

if (${USE_RKIPC})
#find_package(jwt_cpp REQUIRED)
find_package(MiniLogger REQUIRED)
else()
find_package(MiniLogger REQUIRED)
find_package(Cgicc)
find_package(nlohmann_json REQUIRED)
find_package(jwt_cpp REQUIRED)
find_package(OpenSSL REQUIRED)
endif()

include(GNUInstallDirs)
if (${IPCWEBBACKEND_BUILD_TESTS})
    enable_testing()
    add_subdirectory(thirdparty/googletest)
    add_subdirectory(test)
endif()
if (${ENABLE_JWT})
    add_definitions(-DENABLE_JWT)
endif()
if (${MEDIASERVER_ROCKFACE})
    add_definitions(-DMEDIASERVER_ROCKFACE)
endif()
if (${USE_RKIPC})
    add_definitions(-DUSE_RKIPC "-fno-rtti -fno-exceptions -Os")
endif()
add_subdirectory(src)

修改ipcweb-backend/src/rest_api.h

修改ipcweb-backend/src/rest_api.h使用minilogger

// *改为1使用mimilogger
#if 1
#include "minilogger/backtrace.h"
#include "minilogger/log.h"
#else
#define minilog_warn(...)
#define minilog_error(...)
#define minilog_info(...)
#define minilog_debug(...)
#define __minilog_log_init(...)
#endif

更改ipcweb-backend/src/system_api.c

强制status返回0, auth返回1, 注意,第一个才是使用#ifdef USE_RKIPC 为真的

  //res.emplace("status", id_mark);
  //res.emplace("auth", 0);
  res.emplace("status", 0);
  res.emplace("auth", 1);

编译

在顶层文件夹中make

设置nginx的位置

server {
        listen       80;
        server_name  localhost;

#       location /live {
#               flv_live on;
#       }
        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        location / {
            root   ~/ipcweb/out/usr/www;
            index  index.html index.htm;
        }

        location ~* \.(mp4|bmp)$  {
            root /usr/www;
            if ($request_uri ~* view$) {
                add_header Content-Disposition inline;
            }
            if ($request_uri !~* view$) {
                add_header Content-Disposition attachment;
            }
        }

        # error_page  404              /404.html;
        error_page  404              /;

        # redirect server error pages to the static page /50x.html
        #
        # error_page   500 502 503 504  /50x.html;
        # location = /50x.html {
        #     root   html;
        # }

        location /cgi-bin/ {
            gzip           off;
            root           ~/ipcweb/out/usr/www;
            fastcgi_pass   unix:/var/run/fcgiwrap.socket;
            fastcgi_index  entry.cgi;
            fastcgi_param  DOCUMENT_ROOT     unix:/var/run/fcgiwrap.socket/cgi-bin;
            fastcgi_param  SCRIPT_NAME       /entry.cgi;
            include        fastcgi_params;
            set $path_info "";
            set $real_script_name $fastcgi_script_name;
            if ($fastcgi_script_name ~ "^(.+?\.cgi)(/.+)$") {
                set $real_script_name $1;
                set $path_info $2;
            }
            fastcgi_param PATH_INFO       $path_info;
            fastcgi_param SCRIPT_FILENAME $document_root$real_script_name;
            fastcgi_param SCRIPT_NAME     $real_script_name;
        }

把nginx的根目录盒cgi目录设置为新编译好文件的位置

安装 fcgiwrap

sudo apt-get install fcgiwrap
sudo systemctl start fcgiwrap

重启 nginx

sudo systemctl restar nginx

登录测试

进到登录页面以后,输入任意的账号密码都能进入系统
在这里插入图片描述


http://www.kler.cn/news/368624.html

相关文章:

  • iOS静态库(.a)及资源文件的生成与使用详解(OC版本)
  • offset Explorer连接云服务上的kafka连接不上
  • 什么是Kubernetes?K8s基础与工作原理
  • 大厂面经:京东嵌入式面试题及参考答案
  • Android 应用包名的定义 pm list packages查询的包名
  • pip在ubuntu下换源
  • 数据结构---链表(二)【不带头双向非循环】
  • 【C++复习】第三弹之继承和多态
  • 面向接口的方式进行CRUD
  • 排序算法(冒泡,插入),希尔排序(插入升级),希尔排序和插入排序时间比较!
  • C++:多态(用法篇)
  • webpack解决使用window.open方法打开history路由页面提示404的问题
  • linux softirq tasklet 软中断实现
  • AGI大模型面经汇总,太全了!收藏一下吧很难找全的!
  • 2-135 基于matlab的有限差分法计算电位分布
  • Linux系统设置开机自启动.py脚本(树莓派Ubuntu)
  • 使用虚拟机搭建环境:CentOS7 Docker、MySQL、Redis 安装与配置
  • 微信小程序美团点餐
  • 【软件工程】软件项目管理/工程项目管理复习资料
  • Rust: [u8] 与 String 相互转换
  • JavaScript(操作元素属性:样式style,className,classList,表单元素,自定义属性,间歇函数)注册用户协议同意倒计时
  • 【论文笔记】MLSLT: Towards Multilingual Sign Language Translation
  • 数据结构之 二叉树详解一 介绍篇
  • 如何提高游戏的游戏性
  • 电动汽车与软件定义汽车(SDV)时代的汽车行业变革
  • 【机器学习-无监督学习】自编码器