0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

如何移植libwebsockets

ElfBoard 2024-06-17 13:53 次阅读

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")

添加效果如下图所示

wKgaomZvzaiAem2kAAgs9OodtL0362.png

在第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()

wKgaomZvzdaAO2QlAAa253DHSCc379.png

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

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 嵌入式
    +关注

    关注

    5082

    文章

    19122

    浏览量

    305107
  • Linux
    +关注

    关注

    87

    文章

    11304

    浏览量

    209458
  • 开发板
    +关注

    关注

    25

    文章

    5047

    浏览量

    97442
  • 学习开发板
    +关注

    关注

    0

    文章

    10

    浏览量

    253
收藏 人收藏

    评论

    相关推荐

    ElfBoard技术贴|如何将libwebsockets库编译为x86架构

    在之前的文章中,我们已经详细介绍了如何交叉编译libwebsockets并将其部署到ELF1开发板上。然而在调试阶段,发现将libwebsockets在Ubuntu环境下编译为x86架构可能更为方便
    的头像 发表于 07-10 09:38 1217次阅读
    ElfBoard技术贴|如何将<b class='flag-5'>libwebsockets</b>库编译为x86架构

    【WRTnode2R试用体验】随身数据服务器之 libwebsocket

    用起来是挺爽的,但是,可折腾性就没那么高了。本文做 gameserver 使用的 libwebsockets也在里面集成,不过不是官方的完整版本。libwebsockets 同时需要依赖 json-c
    发表于 12-10 13:53

    Intel Edison编译image报错

    /work/core2-32-poky-linux/libwebsockets/1.23-r0/image/usr/bin/libwebsockets-test-client | -- Installing
    发表于 07-09 05:17

    HHARM9200移植2.6内核移植文档

    HHARM9200移植2.6内核移植文档
    发表于 03-01 16:04 37次下载
    HHARM9200<b class='flag-5'>移植</b>2.6内核<b class='flag-5'>移植</b>文档

    STM32_UCOS移植

    STM32 UCOS移植 STM32 UCOS移植 STM32 UCOS移植 STM32 UCOS移植
    发表于 07-13 17:31 30次下载

    ucosIII移植教程

    ucosIII移植教程 工作很久了,一直在用ucosIII,以前移植过ucosII,也看过别人写的教程移植过ucosIII,但是一直想自己移植一下ucosIII,然后把自己的
    发表于 11-28 14:06 94次下载

    什么是可移植?C语言是如何做到可移植的?

    什么是可移植?如何才能可移植?C语言是如何做到可移植的?对于初学者,可移植可能是一个经常遇到却很神秘的词。
    的头像 发表于 03-29 14:41 7171次阅读

    移植RT-Thread的原理与方法

    大家好我是惊觉。是的,失踪人口回来了。最近参加了rt-thread的国产MCU移植活动,移植rt-thread到华大的HC32L196。rtt论坛中已有许多介绍移植到各种平台的文章,详细讲述
    的头像 发表于 09-17 09:41 7797次阅读

    转发:stm32 移植 freertos

    转发:stm32 移植 freertos
    发表于 11-20 12:36 14次下载
    转发:stm32 <b class='flag-5'>移植</b> freertos

    【国产MCU移植移植RT-Thread到国产芯片FM33LC026

    【国产MCU移植移植RT-Thread到国产芯片FM33LC026
    发表于 11-30 16:51 22次下载
    【国产MCU<b class='flag-5'>移植</b>】<b class='flag-5'>移植</b>RT-Thread到国产芯片FM33LC026

    IAR移植FreeRTOS

    IAR移植FreeRTOS之前写了移植在MDK的文章,之后试着移植到IAR上(IAR的在线调试功能用着比MDK顺手,在线调试实时查看大型数组也不会卡死,MDK查看数组若是太大会很卡)。发现有一些
    发表于 12-03 10:36 15次下载
    IAR<b class='flag-5'>移植</b>FreeRTOS

    FreeRTOS移植—基于STM32

    FreeRTOS移植—基于STM32
    发表于 12-04 12:51 18次下载
    FreeRTOS<b class='flag-5'>移植</b>—基于STM32

    移植USB鼠标实验

    移植USB鼠标实验这是我在csdn上的第一篇博客,这次主要是想记录一下我之前做的USB鼠标实验移植的过程。移植过程与正点原子USB鼠标实验教程类似,注意移植时,如果遇到串口初始化等的函
    发表于 12-28 19:59 12次下载
    <b class='flag-5'>移植</b>USB鼠标实验

    STM32-不同芯片的移植

    在实际项目中,我们根据项目需求选用最合适的芯片型号,有时会涉及到一个工程代码在不同芯片上的使用,不同型号的芯片如何移植呢?通过本文,您将了解基本的移植过程。同时,由于该方法没有经过不同芯片型号的大量
    发表于 12-29 18:49 5次下载
    STM32-不同芯片的<b class='flag-5'>移植</b>

    OpenHarmony富设备移植指南(2)从postmarketOS获取移植资源

    OpenHarmony富设备移植指南(2)从postmarketOS获取移植资源
    的头像 发表于 02-08 10:58 2327次阅读
    OpenHarmony富设备<b class='flag-5'>移植</b>指南(2)从postmarketOS获取<b class='flag-5'>移植</b>资源