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

如何移植libwebsockets

libwebsockets是一个高性能的开源C语言库,专为实现WebSocket协议及相关的HTTP协议而设计。它不仅使开发者能够在客户端与服务器端轻松构建WebSocket连接,还可以用作标准HTTP服务器。WebSocket是一种在单个TCP连接上进行全双工通信的协议,可以促进浏览器与服务器间实时、互动数据交换的能力,为现代网络应用提供了强大的支持。

libwebsockets在处理如HTTPS和WSS等安全连接时,依赖于OpenSSL提供的强大加密功能来保障数据的安全性。同时,为了提高网络传输效率,libwebsockets还利用ZLib库进行数据压缩。因此,在交叉编译libwebsockets库之前需要先交叉编译OpenSSL和ZLib这两个依赖库。接下来,将跟各位小伙伴详述将这三大库移植至ELF 1开发板的具体步骤。

开发环境操作系统:Ubuntu18.04

交叉编译链:arm-poky-linux-gnueabi-gcc

内核版本:Linux4.1.15

交叉编译OpenSSL

1、下载源码

https://www.openssl.org/source/old/1.1.1/

2、拷贝openssl-1.1.1c.tar.gz到开发环境/home/elf/work目录下解压

elf@ubuntu:~/work$ tar -zxvf openssl-1.1.1c.tar.gz

3、进入openssl-1.1.1c目录,执行./config生成Makefile文件

elf@ubuntu:~/work$ cd openssl-1.1.1c/
elf@ubuntu:~/work/openssl-1.1.1c$ ./config no-asm shared --prefix=/home/elf/work/openssl-1.1.1c/install

4、修改Makefile

第8行修改为:

8 PLATFORM=linux-armv7

第124行修改为:

124 CNF_CFLAGS=-pthread

第125行修改为:

125 CNF_CXXFLAGS=-std=c++11 -pthread

注释掉90-92行、99行、103行、105-106行:

90 #CROSS_COMPILE=
91 #CC=$(CROSS_COMPILE)gcc
92 #CXX=$(CROSS_COMPILE)g++
99 #MAKEDEPEND=$(CROSS_COMPILE)gcc
103 #AR=$(CROSS_COMPILE)ar
105 #RANLIB=$(CROSS_COMPILE)ranlib
106 #RC= $(CROSS_COMPILE)windres

5、设置环境变量

elf@ubuntu:~/work/openssl-1.1.1c$ . /opt/fsl-imx-x11/4.1.15-2.0.0/environment-setup-cortexa7hf-neon-poky-linux-gnueabi

6、编译

elf@ubuntu:~/work/openssl-1.1.1c$ make

7、安装

elf@ubuntu:~/work/openssl-1.1.1c$ make install

8、在/home/elf/work/openssl-1.1.1c目录下会生成一个install目录

elf@ubuntu:~/work/openssl-1.1.1c/install$ ls
bin  include  lib  share  ssl

9、将install目录下的文件打包

elf@ubuntu:~/work/openssl-1.1.1c/install$ tar -cvjf openssl.tar.bz2 *

10、拷贝openssl.tar.bz2到ELF 1开发板根目录下解压

root@ELF1:~# cd /
root@ELF1:/# cp run/media/sda1/openssl.tar.bz2 .
root@ELF1:/# tar -xvf openssl.tar.bz2

交叉编译ZLib

1、下载源码

https://zlib.net/

2、将zlib-1.3.1.tar.gz 拷贝到开发环境/home/elf/work目录下解压

elf@ubuntu:~/work$ tar xvf zlib-1.3.1.tar.gz

3、进入zlib源码目录内,创建一个install文件夹用来放置编译出来的文件

elf@ubuntu:~/work$ cd zlib-1.3.1
elf@ubuntu:~/work/zlib-1.3.1$ mkdir install

4、设置环境变量

elf@ubuntu:~/work/zlib-1.3.1$ . /opt/fsl-imx-x11/4.1.15-2.0.0/environment-setup-cortexa7hf-neon-poky-linux-gnueabi

5、生成Makefile

elf@ubuntu:~/work/zlib-1.3.1$ ./configure --prefix=$(pwd)/install

6、编译

elf@ubuntu:~/work/zlib-1.3.1$ make

7、安装

elf@ubuntu:~/work/zlib-1.3.1$ make install

8、在install目录下生成文件

elf@ubuntu:~/work/zlib-1.3.1/install$ ls
include  lib  share

9、将install目录下的文件打包

elf@ubuntu:~/work/zlib-1.3.1/install$ tar -cvjf zlib.tar.bz2 *

10、拷贝zlib.tar.bz2到ELF 1开发板根目录下解压

root@ELF1:~# cd /
root@ELF1:/# cp run/media/sda1/zlib.tar.bz2 .
root@ELF1:/# tar -xvf zlib.tar.bz2

交叉编译libwebsockets

1、下载源码

https://github.com/warmcat/libwebsockets

2、将libwebsockets-main.zip拷贝到开发环境/home/elf/work目录下解压

elf@ubuntu:~/work$ unzip libwebsockets-main.zip

3、新建目录

elf@ubuntu:~/work$ cd libwebsockets-main/
elf@ubuntu:~/work/libwebsockets-main$ mkdir build
elf@ubuntu:~/work/libwebsockets-main$ mkdir install

4、修改CMakeLists.txt文件

elf@ubuntu:~/work/libwebsockets-main$ cd build
elf@ubuntu:~/work/libwebsockets-main/build$ vi ../CMakeLists.txt

在第74行project(libwebsockets C)下面添加如下内容

#设置openssl的库头文件
set(OPENSSL_INCLUDE_DIR  "/home/elf/work/openssl-1.1.1c/install/include/")
#设置openssl的库路径
set(OPENSSL_SSL_LIBRARY "/home/elf/work/openssl-1.1.1c/install/lib/libssl.so")
#设置openssl的工具库
set(OPENSSL_CRYPTO_LIBRARY "/home/elf/work/openssl-1.1.1c/install/lib/libcrypto.so")#设置zlib的库头文件
set(ZLIB_INCLUDE_DIR  "/home/elf/work/zlib-1.3.1/install/include/")
#设置openssl的库路径
set(ZLIB_LIBRARY "/home/elf/work/zlib-1.3.1/install/lib/libz.so")
#设置生成库的安装路径
SET(CMAKE_INSTALL_PREFIX "/home/elf/work/libwebsockets-main/install")

添加效果如下图所示

图片

在第1012行指定libcap库的路径,否则编译报错

1011 if (LWS_HAVE_LIBCAP)
1012         set(LIBCAP_LIBRARIES /opt/fsl-imx-x11/4.1.15-2.0.0/sysroots/cortexa7hf-neon-poky-linux-gnueabi/lib/libcap.so)
1013         list(APPEND LIB_LIST_AT_END ${LIBCAP_LIBRARIES} )
1014 endif()

图片

6、执行环境变量

elf@ubuntu:~/work/libwebsockets-main/build$ . /opt/fsl-imx-x11/4.1.15-2.0.0/environment-setup-cortexa7hf-neon-poky-linux-gnueabi

7、生成Makefile

elf@ubuntu:~/work/libwebsockets-main/build$ sudo apt-get update
elf@ubuntu:~/work/libwebsockets-main/build$ sudo apt-get install cmake
elf@ubuntu:~/work/libwebsockets-main/build$ cmake ..

8、编译

elf@ubuntu:~/work/libwebsockets-main/build$ make

9、安装

elf@ubuntu:~/work/libwebsockets-main/build$ make install

10、将install目录下的文件打包

elf@ubuntu:~/work/libwebsockets-main/build$ cd ../install/
elf@ubuntu:~/work/libwebsockets-main/install$ ls
bin  include  lib  share
elf@ubuntu:~/work/libwebsockets-main/install$ tar -cvjf libwebsockets.tar.bz2 *

11、拷贝libwebsockets.tar.bz2到ELF 1开发板根目录下解压

root@ELF1:~# cd /
root@ELF1:/# cp run/media/sda1/libwebsockets.tar.bz2 .
root@ELF1:/# tar -xvf libwebsockets.tar.bz2

至此,OpenSSL、ZLib以及libwebsockets这三个核心库已成功部署至ELF 1开发板,期望这一过程和成果能为正在探索嵌入式系统领域的学习者提供实质性的帮助与启发,助力大家在技术的征途上不断前行。

相关文章:

  • 工厂方法模式和抽象工厂
  • Cosmopolitan:一次构建,多平台原生运行的C语言库行!
  • 编译原理要点和难点以及具体应用案例
  • 汇川CodeSys PLC教程 03-2-5EtherNet
  • 自然语言处理nlp概述
  • 基于gunicorn+flask+docker模型高并发部署
  • C#自定义类的属性名并且通过反射获取属性名
  • MinIO Enterprise Cache:实现超性能的分布式 DRAM 缓存
  • html入门综合练习
  • STM32基于DMA数据转运和AD多通道
  • js下拉框选择筛选数据数据联动
  • c++ 智能指针使用注意事项及解决方案
  • 华为中小企业组网
  • Ai绘画行业又叒翻天了!Stable Diffusion 3.0开源!多图实测附安装包!
  • arsetryhtehrwgefwadasdadasd
  • 【399天】跃迁之路——程序员高效学习方法论探索系列(实验阶段156-2018.03.11)...
  • 【面试系列】之二:关于js原型
  • Codepen 每日精选(2018-3-25)
  • electron原来这么简单----打包你的react、VUE桌面应用程序
  • es6
  • Java读取Properties文件的六种方法
  • mongo索引构建
  • React 快速上手 - 07 前端路由 react-router
  • SegmentFault 2015 Top Rank
  • Vue2.x学习三:事件处理生命周期钩子
  • 基于组件的设计工作流与界面抽象
  • ------- 计算机网络基础
  • 聊聊spring cloud的LoadBalancerAutoConfiguration
  • 一加3T解锁OEM、刷入TWRP、第三方ROM以及ROOT
  • 一天一个设计模式之JS实现——适配器模式
  • 原生 js 实现移动端 Touch 滑动反弹
  • 好程序员大数据教程Hadoop全分布安装(非HA)
  • ​【原创】基于SSM的酒店预约管理系统(酒店管理系统毕业设计)
  • ​DB-Engines 12月数据库排名: PostgreSQL有望获得「2020年度数据库」荣誉?
  • # Panda3d 碰撞检测系统介绍
  • # 执行时间 统计mysql_一文说尽 MySQL 优化原理
  • #《AI中文版》V3 第 1 章 概述
  • #07【面试问题整理】嵌入式软件工程师
  • (2)MFC+openGL单文档框架glFrame
  • (Matlab)遗传算法优化的BP神经网络实现回归预测
  • (Qt) 默认QtWidget应用包含什么?
  • (zz)子曾经曰过:先有司,赦小过,举贤才
  • (二)c52学习之旅-简单了解单片机
  • (二)JAVA使用POI操作excel
  • (十)【Jmeter】线程(Threads(Users))之jp@gc - Stepping Thread Group (deprecated)
  • (十七)devops持续集成开发——使用jenkins流水线pipeline方式发布一个微服务项目
  • (四)docker:为mysql和java jar运行环境创建同一网络,容器互联
  • (学习日记)2024.04.04:UCOSIII第三十二节:计数信号量实验
  • (一)Kafka 安全之使用 SASL 进行身份验证 —— JAAS 配置、SASL 配置
  • (已解决)Bootstrap精美弹出框模态框modal,实现js向modal传递数据
  • (转载)hibernate缓存
  • (转载)微软数据挖掘算法:Microsoft 时序算法(5)
  • (最全解法)输入一个整数,输出该数二进制表示中1的个数。
  • .NET 6 Mysql Canal (CDC 增量同步,捕获变更数据) 案例版
  • .NET C# 使用GDAL读取FileGDB要素类