首页 > 其他分享 >ubus移植

ubus移植

时间:2023-05-11 13:45:03浏览次数:27  
标签:set CMAKE ubus json 移植 PATH libubox

一、引言

近期项目中需要用到ubus相关内容,ubus是OpenWrt中的进程间通信机制。Ubus源码可以很容易地从网上下载到,但是要想应用到实际项目中,需要进行移植。网上关于ubus移植的文章琳琅满目,但是仔细阅读下来发现,这些文章要么讲得很粗略,要么充斥着一些无效和重复的内容。对于刚接触ubus的开发者来说,这些文章并不能正确指导开发者如何移植和使用ubus。因此博主写下此文,记录移植的详细过程,同时也为其他开发者提供一些参考。

 

二、ubus的依赖关系

Ubus是新的openWrt中引入的一个消息总线,主要作用是实现不同应用程序之间的信息交互。Ubus的编译和运行依赖libubox中的一些内容,而libubox又依赖于json-c中的内容,环环相扣。因此,我们需要按照先json-c,后libubox,最后ubus的顺序来编译。

 

三、环境说明

博主本人使用的系统环境如下:

宿主机系统:Ubuntu 16.04

目标机CPU:ARM Cortex-A7 32bit 800MHz

交叉编译器:arm-buildroot-linux-uclibcgnueabihf-gcc

 

四、获取源码

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
将这3份源码下载后,放到同一个目录下,并在该目录下新建3个文件名分别为"toolChain_json.cmake"、"toolChain_libubox.cmake"、"toolChain_ubus.cmake"的空白文件,如下图所示:

 

 

五、编译json-c

修改文件toolChain_json.cmake的内容为如下内容:

set(CMAKE_SYSTEM_NAME Linux)

SET(TOOLCHAIN_DIR "/opt/ssc_toolchains/arm-buildroot-linux-uclibcgnueabihf-4.9.4-uclibc-1.0.31")
set(CMAKE_C_COMPILER ${TOOLCHAIN_DIR}/bin/arm-buildroot-linux-uclibcgnueabihf-gcc)
set(CMAKE_CXX_COMPILER ${TOOLCHAIN_DIR}/bin/arm-buildroot-linux-uclibcgnueabihf-g++)

set(CMAKE_FIND_ROOT_PATH "/home/allen/open_lib/libubox/src/json-c")
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
其中,

TOOLCHAIN_DIR 为交叉编译工具链所在的目录

CMAKE_C_COMPILER 是交叉编译器gcc的名称

CMAKE_CXX_COMPILER 是交叉编译器g++的名称

CMAKE_FIND_ROOT_PATH 是json-c源码存放的路径

以上这些需要根据实际情况填写。

修改好后,cd进入json-c目录,执行如下命令:

cmake -DCMAKE_INSTALL_PREFIX=/home/allen/open_lib/libubox/install -DCMAKE_TOOLCHAIN_FILE=../toolChain_json.cmake .
make
make install
其中-DCMAKE_INSTALL_PREFIX是用来指定编译后库文件的安装路径。当这3条命令执行成功后,就会在"/home/allen/open_lib/libubox/install"目录下生成"include"和"lib"两个目录,这就是json-c的库文件。后面两个模块的编译需要用到这里面的内容,后续编译产生的库文件,也是放到这个路径下。

 

六、编译libubox

修改文件toolChain_libubox.cmake的内容为如下内容:

set(CMAKE_SYSTEM_NAME Linux)

SET(TOOLCHAIN_DIR "/opt/ssc_toolchains/arm-buildroot-linux-uclibcgnueabihf-4.9.4-uclibc-1.0.31")
set(CMAKE_C_COMPILER ${TOOLCHAIN_DIR}/bin/arm-buildroot-linux-uclibcgnueabihf-gcc)
set(CMAKE_CXX_COMPILER ${TOOLCHAIN_DIR}/bin/arm-buildroot-linux-uclibcgnueabihf-g++)


set(INSTALL_PATH "/home/allen/open_lib/libubox/install")
include_directories(${INSTALL_PATH}/include)
include_directories(${INSTALL_PATH}/include/json-c)

set(CMAKE_FIND_ROOT_PATH "/home/allen/open_lib/libubox/src/libubox")
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)

set(json "/home/allen/open_lib/libubox/install/lib/libjson-c.so")
其中,

INSTALL_PATH 是上一步骤中编译产生的库文件的安装路径

CMAKE_FIND_ROOT_PATH 是libubox源码的存放路径

json用来指定libjson-c动态库的路径

以上这些根据实际情况填写。

修改好后,cd进入libubox目录,执行如下命令:

cmake -DBUILD_LUA=OFF -DCMAKE_INSTALL_PREFIX=/home/allen/open_lib/libubox/install -DCMAKE_TOOLCHAIN_FILE=../toolChain_libubox.cmake .
make
make install

七、编译ubus

修改文件toolChain_ubus.cmake的内容为如下内容:

set(CMAKE_SYSTEM_NAME Linux)

SET(TOOLCHAIN_DIR "/opt/ssc_toolchains/arm-buildroot-linux-uclibcgnueabihf-4.9.4-uclibc-1.0.31")
set(CMAKE_C_COMPILER ${TOOLCHAIN_DIR}/bin/arm-buildroot-linux-uclibcgnueabihf-gcc)
set(CMAKE_CXX_COMPILER ${TOOLCHAIN_DIR}/bin/arm-buildroot-linux-uclibcgnueabihf-g++)


set(INSTALL_PATH "/home/allen/open_lib/libubox/install")
include_directories(${INSTALL_PATH}/include)

set(CMAKE_FIND_ROOT_PATH "/home/allen/open_lib/libubox/src/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)
和前面一样,涉及到具体路径的地方按照实际情况修改。

修改好后,cd进入ubus目录,执行如下命令:

cmake -DBUILD_LUA=OFF -DCMAKE_INSTALL_PREFIX=/home/allen/open_lib/libubox/install -DCMAKE_TOOLCHAIN_FILE=../toolChain_ubus.cmake .
make
make install
至此,ubus的移植就完成了。接下来可以将install目录下的内容拷贝到项目的工程中,包含和引用相应的库之后,就可以使用ubus提供的功能了。
————————————————
版权声明:本文为CSDN博主「f大熊」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/fun_tion/article/details/107785425

标签:set,CMAKE,ubus,json,移植,PATH,libubox
From: https://www.cnblogs.com/hshy/p/17390819.html

相关文章

  • STM32裸机移植RT-Thread(标准版)
    前言,因为我嫌正点原子stm32l475vet6(潘多拉)给的rt-thread太过臃肿,决定自己移植一遍(RT-Thread包来自正点原子中潘多拉例程)参考了野火rt-thread的手册1、建立工程文件夹,如下      CoreCore/IncCore/src用于存放用户自己的.c和.h文件 Dri......
  • 《开发板移植tcpdump 交叉编译 带有依赖库如何移植》
    1.下载源码由于tcpdump依赖于libpcap,所以需要先下载这两个的源代码;官方地址:https://www.tcpdump.org/这里示例所下载的版本是tcpdump-4.9.3.tar.gzlibpcap-1.9.1.tar.gz 2.编译libpcap解压libpcap源码,创建build目录,避免编译的临时文件污染源码tarxvflibp......
  • 电力电子相关仿真,并网逆变器仿真有模块版本,和c语言版本,方便移植。
    电力电子相关仿真,并网逆变器仿真有模块版本,和c语言版本,方便移植。并网逆变器模型预测电流控制仿真,有单矢量,双矢量三矢量等多种。ID:6699672831165332......
  • Rockchip RK3399 - uboot移植
    ----------------------------------------------------------------------------------------------------------------------------开发板 :NanoPC-T4开发板eMMC  :16GBLPDDR3:4GB显示屏 :15.6英寸HDMI接口显示屏u-boot  :2014.10---------------------------------------......
  • libcurl 移植 支持https,openssl NDK (二)
    一、编译环境介绍:(有一部分原因是环境造成编译失败)系统版本:ubuntu-16.04.3-desktop-amd6464位(可以使用虚拟机)NDK版本:Android-ndk-r10b                 (已经测试,使用Android-ndk-r17b无法通过)源码版本:curl-7.61.0               https......
  • linux GUI-QT6.5移植到Mini2440
    ----------------------------------------------------------------------------------------------------------------------------内核版本:linux5.2.8根文件系统:busybox1.25.0u-boot:2016.05开发板:Mini2440-----------------------------------------------------------------......
  • stm32 cubeide ST7920 12864点阵屏 U8G2移植
    准备工作【通用-移植u8g2准备工作】在cubeide中移植u8g2到STM32的准备工作源码获取和文件处理-不打鱼光晒网-博客园(cnblogs.com) 7920很老了,spi只能接受2.5M的时钟,实际上2M就大概率花屏了,使用硬件spi的话,由于分频系数选择的问题,配置为1M就行了,不然花屏7920的穿行模式仅......
  • 一个stm23移植u8g2驱动iic屏SSD1306方案12864的左边竖着两列没有显示的奇怪问题
    初始化后画一个方框u8g2_DrawLine(&u8g2,0,0,127,0);u8g2_DrawLine(&u8g2,1,0,1,63);//左边框u8g2_DrawLine(&u8g2,0,63,127,63);u8g2_DrawLine(&u8g2,127,0,127,63);左边框地址为0不显示,设置为1还是不显示设置为2可以看到竖线了中景园......
  • 嵌入式linux移植——ptlib、H323plus、oh323tut 交叉编译
    前言:上一篇博客主要讲了比较多原理的东西,也是我解决问题时掌握到的一些东西和重要依据,这篇博客接着上一篇博客嵌入式linux移植——ptlib、H323plus交叉编译I继续往下讲~【补充】开发环境:Ubuntu16.04、Hi3531a;编译工具链:arm-hisiv300-linux; 【一个刷存在感而且想要骗赞......
  • 在cubeide中移植u8g2到STM32的流水账
    首先在github克隆项目源码到本地硬盘复制该文件夹到工程的core目录并改个名字,方便自己明天还能记得起来这是干毛用的文件夹,哈哈哈哈这个文件夹里边有121个文件包含了很多芯片的驱动,也就是名字中有_d_和芯片型号的文件先不管这些直接打开u8g2_d_setup.c 搜索关键字,比......