移植编译libubox、ubus、json

编程入门 行业动态 更新时间:2024-10-17 07:27:30

移植编译<a href=https://www.elefans.com/category/jswz/34/1702273.html style=libubox、ubus、json"/>

移植编译libubox、ubus、json

一、引言

        近期项目中需要用到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 .git
git clone .git
git clone .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提供的功能了。

更多推荐

移植编译libubox、ubus、json

本文发布于:2024-02-26 11:10:18,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1702272.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:libubox   ubus   json

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!