加入星计划,您可以享受以下权益:

  • 创作内容快速变现
  • 行业影响力扩散
  • 作品版权保护
  • 300W+ 专业用户
  • 1.5W+ 优质创作者
  • 5000+ 长期合作伙伴
立即加入
  • 正文
  • 推荐器件
  • 相关推荐
  • 电子产业图谱
申请入驻 产业图谱

ELF 1技术贴|如何移植libwebsockets

06/18 09:27
1603
阅读需 16 分钟
加入交流群
扫码加入
获取工程师必备礼包
参与热点资讯讨论

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开发板,期望这一过程和成果能为正在探索嵌入式系统领域的学习者提供实质性的帮助与启发,助力大家在技术的征途上不断前行。

推荐器件

更多器件
器件型号 数量 器件厂商 器件描述 数据手册 ECAD模型 风险等级 参考价格 更多信息
AFBR-5803TZ 1 Agilent Technologies Inc Transceiver, Through Hole Mount,
$37.34 查看
AFBR-1624Z 1 Foxconn Transmitter, 630nm Min, 685nm Max, Through Hole Mount, ROHS COMPLIANT, PLASTIC, PACKAGE-8
$22.76 查看
CB3-3C-4M0000 1 CTS Corporation HCMOS/TTL Output Clock Oscillator, 4MHz Nom, GREEN, CERAMIC PACKAGE-4

ECAD模型

下载ECAD模型
$1.45 查看

相关推荐

电子产业图谱