ubus编译_环境搭建

一、环境搭建脚本

准备四个文件

install.sh,toolChain_jsonc.cmake,toolChain_libubox.cmake,toolChain_ubus.cmake

toolChain_jsonc.cmake

set(CMAKE_SYSTEM_NAME Linux)
SET(TOOLCHAIN_DIR "/usr")
set(CMAKE_C_COMPILER   ${TOOLCHAIN_DIR}/bin/gcc)
set(CMAKE_CXX_COMPILER ${TOOLCHAIN_DIR}/bin/g++)
set(CMAKE_FIND_ROOT_PATH "/home/yyh/ubus_libs/json-c")
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)

toolChain_libubox.cmake

set(CMAKE_SYSTEM_NAME Linux)
SET(TOOLCHAIN_DIR "/usr")
set(CMAKE_C_COMPILER   ${TOOLCHAIN_DIR}/bin/gcc)
set(CMAKE_CXX_COMPILER ${TOOLCHAIN_DIR}/bin/g++)
set(INSTALL_PATH "/home/yyh/ubus_libs/install_build_ubuntu")

include_directories(${INSTALL_PATH}/include)
include_directories(${INSTALL_PATH}/include/json-c)
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)

set(CMAKE_FIND_ROOT_PATH "/home/yyh/ubus_libs/ubox") # or libubox
set(json "/home/yyh/ubus_libs/install_build_ubuntu/lib/libjson-c.so")

toolChain_ubus.cmake

set(CMAKE_SYSTEM_NAME Linux)
SET(TOOLCHAIN_DIR "/usr")
set(CMAKE_C_COMPILER   ${TOOLCHAIN_DIR}/bin/gcc)
set(CMAKE_CXX_COMPILER ${TOOLCHAIN_DIR}/bin/g++)


set(INSTALL_PATH "/home/yyh/ubus_libs/install_build_ubuntu")
include_directories(${INSTALL_PATH}/include)
set(CMAKE_FIND_ROOT_PATH "/home/yyh/ubus_libs/ubus" $(INSTALL_PATH)) 
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)

set(blob_library     ${INSTALL_PATH}/lib/libblobmsg_json.so)
set(json             ${INSTALL_PATH}/lib/libjson-c.so)
set(ubox_include_dir ${INSTALL_PATH}/include/libubox)
set(ubox_library     ${INSTALL_PATH}/lib/libubox.so)

install.sh

#!/bin/bash
# @Author: yyh
# @Date:   2023-03-08 13:32:27
# @Last Modified by:   yyh
# @Last Modified time: 2023-03-08 17:09:22

LIBS_DIR=/home/yyh/ubus_libs

LIB_LIBUBOX_DIR=libubox
LIB_UBUS_DIR=ubus
LIB_JSONC_DIR=json-c

COMPILE_EV=install_build_ubuntu

if [[ $1 = "git_libs" ]]; then
	mkdir $LIBS_DIR -p
	cd $LIBS_DIR
    git clone https://github.com/json-c/json-c.git
    git clone http://git.openwrt.org/project/libubox.git
    git clone https://git.openwrt.org/project/ubus.git
fi

if [[ $1 = "compile_lib" ]]; then

    cp *.cmake $LIBS_DIR
    cd $LIBS_DIR
    mkdir ${LIBS_DIR}/${COMPILE_EV} -p
	
    cd ${LIBS_DIR}/$LIB_JSONC_DIR
    cmake -DCMAKE_INSTALL_PREFIX=${LIBS_DIR}/${COMPILE_EV} -DCMAKE_TOOLCHAIN_FILE=${LIBS_DIR}/toolChain_jsonc.cmake .
    # cmake -DCMAKE_INSTALL_PREFIX=/home/yyh/ubus_libs/install_build_ubuntu -DCMAKE_TOOLCHAIN_FILE=/home/yyh/ubus_libs/toolChain_jsonc.cmake .
    make
    sudo make install
    sudo ldconfig -v

    
    cd ${LIBS_DIR}/$LIB_LIBUBOX_DIR
    cmake -DBUILD_LUA=OFF -DCMAKE_INSTALL_PREFIX=${LIBS_DIR}/${COMPILE_EV} -DCMAKE_TOOLCHAIN_FILE=${LIBS_DIR}/toolChain_libubox.cmake .
    # cmake -DCMAKE_INSTALL_PREFIX=/home/yyh/ubus_libs/install_build_ubuntu -DCMAKE_TOOLCHAIN_FILE=/home/yyh/ubus_libs/toolChain_libubox.cmake .
    make
    sudo make install


    cd ${LIBS_DIR}/$LIB_UBUS_DIR
    cmake -DBUILD_LUA=OFF -DCMAKE_INSTALL_PREFIX=${LIBS_DIR}/${COMPILE_EV} -DCMAKE_TOOLCHAIN_FILE=${LIBS_DIR}/toolChain_ubus.cmake .
    #cmake -DCMAKE_INSTALL_PREFIX=/home/yyh/ubus_libs/install_build_ubuntu -DCMAKE_TOOLCHAIN_FILE=/home/yyh/ubus_libs/toolChain_ubus.cmake .
    make
    sudo make install

fi

二、测试

安装相关库

sudo apt-get install libjsoncpp-dev 
sudo apt-get install zmap
sudo apt-get install autoconf automake libtool
sudo apt install lua5.1
chmod +x ./install.sh
./install.sh git_libs
./install compile_lib

编译结果:

出现问题:

/home/yyh/ubus_libs/libubox/blobmsg_json.c:23:11: fatal error: json/json.h: 没有那个文件或目录
   23 |  #include <json/json.h>
      |           ^~~~~~~~~~~~~
compilation terminated.
make[2]: *** [CMakeFiles/blobmsg_json.dir/build.make:63:CMakeFiles/blobmsg_json.dir/blobmsg_json.c.o] 错误 1
make[1]: *** [CMakeFiles/Makefile2:211:CMakeFiles/blobmsg_json.dir/all] 错误 2
make: *** [Makefile:130:all] 错误 2


解决:
sudo cp  /home/yyh/ubus_libs/install_build_ubuntu/include/json-c /home/yyh/ubus_libs/install_build_ubuntu/include/json	 -rf

三、测试uloop

在这里插入图片描述

makefile

CC = gcc
CFLAGS = -I./include -L./lib  -lubox -lubus#-lblobmsg_json -ljson_script -ljson-c  
TARGET = main_ubuntu

all:
    $(CC) -o $(TARGET) main.c $(CFLAGS)

.PHONY:clean
clean:
    rm -rf *.o $(TARGET)

main.c 每5s打印信息

/*
* @Author: yyh
* @Date:   2023-03-08 17:17:35
* @Last Modified by:   yyh
* @Last Modified time: 2023-03-08 17:40:41
*/
/*
typedef void (*uloop_timeout_handler)(struct uloop_timeout *t);
struct uloop_timeout
{
    struct list_head list;
    bool pending;

    uloop_timeout_handler cb;
    struct timeval time;
};
*/

#include <stdio.h>
#include "./libubox/uloop.h"

static void timeout_handler(struct uloop_timeout *timeout)
{
    printf("(hello world)\n");
}

static struct uloop_timeout timer = {
    .cb = timeout_handler,
};

int main(int args, char *argv[])
{
    uloop_init();
    uloop_timeout_set(&timer, 5000);    // 5s
    uloop_run();
    return 0;
}

参考:

https://blog.csdn.net/fun_tion/article/details/107785425
https://oldwiki.archive.openwrt.org/doc/techref/libubox
https://blog.csdn.net/qq_24835087/article/details/122439506
http://blog.gitdns.org/2016/11/30/libubox/#uloop_run
uloop:https://blog.csdn.net/Freaky_Wen/article/details/128049333?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522167826778616800211516266%2522%252C%2522scm%2522%253A%252220140713.130102334…%2522%257D&request_id=167826778616800211516266&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2allsobaiduend~default-1-128049333-null-null.142v73wechat,201v4add_ask,239v2insert_chatgpt&utm_term=uloop&spm=1018.2226.3001.4187

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Yengi

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值