基于mini2440嵌入式linux上整合一套Domoticz智能家居系统(五)交叉编译并安装zlib、curl、boost和domoticz

本篇是本次整合智能家居系统的重点,最终结果是将domoticz交叉编译并安装到mimi2440的嵌入式linux系统中,并让它运行起来,以供后续开发使用。

1、交叉编译zlib:
解压zlib-1.2.11.tar.gz后,进入目录,然后

cmake -DCMAKE_C_COMPILER="arm-linux-gcc" -DCMAKE_INSTALL_PREFIX=/usr/local/arm/zlib/ CMakeLists.txt
make
make install

在主机/usr/local/arm/zlib/lib目录下可以看到:
这里写图片描述

把动态库拷贝到arm板根目录的/usr/lib中。

2、交叉编译curl:
解压curl-7.53.1.tar.gz,进入目录,然后:

 ./configure --prefix=/usr/local/arm/curl  --host=arm-linux --target=arm-linux CC=arm-linux-gcc 
make
make install

然后进入主机/usr/local/arm/curl/lib目录中可以看到:
这里写图片描述

把动态库拷贝到arm板根目录的/usr/lib中。
其实除了动态库之外,它还生成了一个两个可执行文件在/usr/local/arm/curl/bin目录中,但是我们用不到,就不拷贝了。

3、交叉编译boost:
解压boost_1_63_0.tar.gz,进入目录,然后:

sh bootstrap.sh

然后修改生成的project-config.jam文件
修改using gcc ;为:

using gcc : : arm-linux-gcc ; //(注意空格)

还有指定安装目录参数:

option.set prefix : /usr/local/arm/boost ;
option.set exec-prefix : /usr/local/arm/boost ;
option.set libdir : /usr/local/arm/boost/lib ;
option.set includedir : /usr/local/arm/boost/include ;

修改完之后依次执行下面两行命令:

./b2 stage threading=multi link=static --with-thread --with-date_time --with-system --with-atomic --with-regex
./b2 install threading=multi link=static --with-thread --with-date_time --with-system --with-atomic --with-regex

编译安装boost需要花很长时间,编译完成后,生成静态链接库文件。
生成的库有:
这里写图片描述
这几个是我们在domoticz中所使用的,所以只生成了这些。
对于domoticz所使用的boost库,编译参数选项的指定请参考:
Installing and running Domoticz on a Raspberry PI

中有关boost库编译相关内容。

到此,编译domoticz所需各种依赖库已经全部准备完毕,接下来就是任务的重点了。

4、交叉编译domoticz:
4.1、需要修改CMakeLists.txt:
1)指定OpenSSL搜索路径。
在project(domoticz)下一行添加:

set(OPENSSL_ROOT_DIR "/usr/local/arm/ssl")
set(OPENSSL_LIBRARIES "/usr/local/arm/ssl/lib/")

如图所示:
这里写图片描述
2)指定boost搜索路径。
在IF(USE_PYTHON AND PYTHONLIBS_FOUND)上面一行添加:

SET(Boost_ADDITIONAL_VERSION "1.63.0" "1.63.0")
SET(BOOST_ROOT /usr/local/arm/boost)

紧接着下面else()下面内容修改:

  find_package(Boost 1.63.0 REQUIRED COMPONENTS thread date_time system atomic)
    if(Boost_FOUND)
    message(STATUS "boost lib found at: ${Boost_LIBRARY_DIRS} version:${Boost_VERSION}")  
    else()
    message(FATAL_ERROR  "boost lib not found !")  
    endif(Boost_FOUND)

如图所示:
这里写图片描述
Domoticz官网编译参数中,是在执行cmake的时候指定atomic参数:
-DCMAKE_EXE_LINKER_FLAGS=-lboost_atomic
参考:https://www.domoticz.cn/wiki/Linux#Add_support_for_Z-Wave
但是,其实原cmakelists.txt中并没有搜这个库,所以在链接可执行文件的时候会报错,说找不到该库。
所以,需要在CMakeLists.txt文件中添加这个库的搜索参数。

3)指定zlib搜索路径。
在option(USE_BUILTIN_ZLIB “Use builtin zlib library” NO)上面一行添加:

set(ZLIB_ROOT /usr/local/arm/zlib)

接着找到include_directories(${ZLIB_INCLUDE_DIRS}),在下面一行添加:

message(STATUS "ZLIB includes found at: ${ZLIB_INCLUDE_DIRS}")

如图所示:
这里写图片描述

4)指定curl搜索路径。
在FIND_PACKAGE(CURL)上面一行添加:

set(CURL_INCLUDE_DIR "/usr/local/arm/curl/include")
set(CURL_LIBRARY "/usr/local/arm/curl/lib/libcurl.so")

如图所示:
这里写图片描述

5)打印OpenSSL搜索结果(这一个不是必须的,只是用来打印搜索结果到屏幕)。
找到include_directories(${OPENSSL_INCLUDE_DIR}),在上面一行添加:

  MESSAGE(STATUS "OpenSSL libraries found at: ${OPENSSL_LIBRARIES}")
  MESSAGE(STATUS "OpenSSL includes found at: ${OPENSSL_INCLUDE_DIR}")

如图所示:
这里写图片描述
到此,修改CMakeLists.txt完毕。

4.2、编写一个shell脚本,然后运行脚本执行cmake构建命令,因为cmake会生成一些cache文件,如果cmake构建出问题,这些cache是需要删掉的,但是cmake本身没有相关命令,只能手动删除,如果不删除,那么修改CMakeLists.txt文件后,会不起作用。
脚本内容如下:

rm -fr build
mkdir build
cd build
cmake -DCMAKE_BUILD_TYPE=Release -DUSE_BUILTIN_LUA=YES -DUSE_BUILTIN_SQLITE=YES  -DUSE_STATIC_BOOST=ON -DCMAKE_C_COMPILER="arm-linux-gcc" -DCMAKE_CXX_COMPILER="arm-linux-g++" -DCMAKE_INSTALL_PREFIX="/work/rootfs/home/root/domoticz/" CMakeLists.txt .. 

保存为build.sh,然后:

chmod +x build.sh

然后执行脚本:

./build.sh

或者

sh build.sh

执行完之后,生成了build目录。

这里写图片描述

4.3、进入build目录,然后

make

编译完,如图所示:
这里写图片描述
然后:

make install

安装完成后,如下图所示:
这里写图片描述

然后看到主机/work/rootfs/home/root/domoticz/中已经有了
domoticz主程序和web目录:
这里写图片描述

4.4、配置启动脚本:
把原编译目录domoticz-3.5877中的domoticz.sh拷贝到/work/rootfs/etc/init.d/目录下。
编辑这个脚本:
找到第17行:

USERNAME=pi

改为:

USERNAME=root

然后找到第33行:

. /lib/init/vars.sh

注释掉这一行:

#. /lib/init/vars.sh

然后找到第38行:

. /lib/lsb/init-functions

也注释掉:

#. /lib/lsb/init-functions

如图所示:
这里写图片描述

然后保存、退出。

其实可以在这个脚本中可以看到,默认的web访问端口是8080,这个是可以通过修改脚本中的参数来更改的。
现在使用默认的端口。

然后在mini2440串口调试端输入命令:

chmod +x /etc/init.d/domoticz.sh 
 /etc/init.d/domoticz.sh start

如图所示,已经启动:
这里写图片描述

domoticz.sh可以执行的命令参数有三种(start、stop、status):
domoticz.sh start
domoticz.sh stop
domoticz.sh status

我们只是使用启动的那个参数。

在实际使用时,需要让它在后台运行:

/etc/init.d/domoticz.sh start &

参考:https://www.domoticz.com/wiki/Install.txt

4.5、在PC端访问domoticz服务端主页:
我mini2440的ip地址为:192.168.1.230
在PC上打开浏览器,在地址栏输入:

http://192.168.1.230:8080

可以看到已经进入domoticz了:
这里写图片描述

至此,移植domoticz已经完成。
需要注意的是,我没有完全移植domoticz支持的功能,其中包括对OpenZWave、Python、libusb等。
不过,对于本人使用的环境已经够用了。
即便没有支持以上功能,Domoticz能提供的功能还有很多包括与wifi的对接、MQTT代理服务的对接等等,据说最强大的是它的事件处理功能,不过我还没仔细研究,后面慢慢深入吧。

下一篇将用domoticz做个实验,并在Android上安装一个domoticz的客户端程序,联合arm板上的mosquitto代理服务器来实现远程控制。

猜你喜欢

转载自blog.csdn.net/sqshining/article/details/69809429