交叉编译器环境配置与boa嵌入式web服务器移植问题

简介: 交叉编译器环境配置与boa嵌入式web服务器移植问题

第一次见这种形式的sdk安装脚本:

fsl-imx-x11-glibc-x86_64-meta-toolchain-qt5-cortexa7hf-neon-toolchain-4.1.15-2.1.0.sh

不过确实挺方便,把压缩包和脚本组合在一起,方便使用。这个sdk安装过之后,交叉编译时遇到一些问题,这里记录一下。

这个也可以安装在wsl里面,这样可以不用虚拟机了。


安装配置交叉编译环境


他这个编译器安装比较简单,直接运行这个脚本即可:


默认安装到opt下面,我这个是安装过一次了,所以会提示是否覆盖。

sh fsl-imx-x11-glibc-x86_64-meta-toolchain-qt5-cortexa7hf-neon-toolchain-4.1.15-2.1.0.sh
Freescale i.MX Release Distro SDK installer version 4.1.15-2.1.0
================================================================
Enter target directory for SDK (default: /opt/fsl-imx-x11/4.1.15-2.1.0):
The directory "/opt/fsl-imx-x11/4.1.15-2.1.0" already contains a SDK for this architecture.
If you continue, existing files will be overwritten! Proceed[y/N]? y
Extracting SDK.........................................done
Setting it up...done
SDK has been successfully set up and is ready to be used.
Each time you wish to use the SDK in a new shell session, you need to source the environment setup script e.g.
 $ . /opt/fsl-imx-x11/4.1.15-2.1.0/environment-setup-cortexa7hf-neon-poky-linux-gnueabi


这样就安装成功了,最后提示的那一句:

. /opt/fsl-imx-x11/4.1.15-2.1.0/environment-setup-cortexa7hf-neon-poky-linux-gnueabi


是配置环境变量用的,记得执行一下,然后迅速码出一个hello world来测试下交叉编译器是否能够正常使用:

#include <stdio.h>

int main(int argc, char **argv)
{
        printf("hello world\n");
        return 0;
}

编译:
arm-poky-linux-gnueabi-gcc main.c
main.c:1:19: fatal error: stdio.h: No such file or directory
compilation terminated.


报错了!找不到stdio.h头文件,这可是C语言的基础头文件!提示找不到肯定还是环境变量的问题,这是需要指定sysroot的路径,如下:

编译命令加上sysroot
arm-poky-linux-gnueabi-gcc main.c  --sysroot=/opt/fsl-imx-x11/4.1.15-2.1.0/sysroots/cortexa7hf-neon-poky-linux-gnueabi/

编译错误:
In file included from /opt/fsl-imx-x11/4.1.15-2.1.0/sysroots/cortexa7hf-neon-poky-linux-gnueabi/usr/include/features.h:392:0,
                 from /opt/fsl-imx-x11/4.1.15-2.1.0/sysroots/cortexa7hf-neon-poky-linux-gnueabi/usr/include/stdio.h:27,
                 from main.c:1:
/opt/fsl-imx-x11/4.1.15-2.1.0/sysroots/cortexa7hf-neon-poky-linux-gnueabi/usr/include/gnu/stubs.h:7:29: fatal error: gnu/stubs-soft.h: No such file or directory
compilation terminated.


还是报错,这个错误又不一样了,说明还是有问题,经过网上搜索发现还需要加编译参数,如下:

编译命令:
arm-poky-linux-gnueabi-gcc main.c  --sysroot=/opt/fsl-imx-x11/4.1.15-2.1.0/sysroots/cortexa7hf-neon-poky-linux-gnueabi/ -mfloat-abi=hard -mfpu=neon

这次没报错,ls查看一下,熟悉的a.out出来了
a.out main.c


到这里编译环境算是搞好了。


交叉编译boa


接下来编译boa服务器,交叉编译boa服务器,可以直接修改src/Makefile,修改内容如下:

LDFLAGS :=  -g  -march=armv7-a -mthumb-interwork -mfloat-abi=hard -mfpu=neon -mtune=cortex-a7 --sysroot=/opt/fsl-imx-x11/4.1.15-2.1.0/sysroots/cortexa7hf-neon-poky-linux-gnueabi/

LIBS =  
CFLAGS = -g -O2 -pipe -Wall -I. -march=armv7-a -mthumb-interwork -mfloat-abi=hard -mfpu=neon -mtune=cortex-a7 --sysroot=/opt/fsl-imx-x11/4.1.15-2.1.0/sysroots/cortexa7hf-neon-poky-linux-gnueabi/


记得这两行都需要修改,否则还是会报错:


然后就可以编译了,编译过程中如果提示bsion相关的错误,需要安装bsion:

sudo apt-get install bison


如果出现lex 的错误,需要安装fles

sudo apt-get install flex


更多错误参考这里吧:https://blog.csdn.net/zhangxuechao_/article/details/82821739


这样boa就可以编译完成了;


配置boa


如下图是我整理的boa涉及到的文件,其中www用于存放网页文件与cgi文件,boa是可执行文件,boa.conf是boa的配置文件,这个文件需要放在/etc/boa/下面,mime.types放置的路径可以在boa.conf里配置,www的路径也可以在boa.conf里配置。


这里的install.sh是写的一个简单的安装脚本:

#!/bin/sh
mkdir /var/log/
touch /var/log/boa
mkdir /usr/local/boa/
mkdir /etc/boa
cp boa /usr/local/boa/
cp mime.types /usr/local/boa/
cp boa.conf /etc/boa/
cp www /usr/local/boa/ -fr
echo "done."


启动boa时,有时会遇到权限问题,可以修改对应文件的所有者权限即可。

目录
相关文章
|
13天前
|
网络协议 数据格式 Python
Python进阶---HTTP协议和Web服务器
Python进阶---HTTP协议和Web服务器
20 4
|
13天前
|
弹性计算 关系型数据库 MySQL
【阿里云弹性计算】从零搭建:基于阿里云ECS的高性能Web服务部署实践
【5月更文挑战第21天】本文介绍了如何使用阿里云ECS搭建高性能Web服务。首先,注册阿里云账号购买ECS实例,选择合适配置。接着,通过SSH连接实例,更新系统并安装Apache、PHP和MySQL。创建网站目录,上传代码,配置数据库和PHP。然后,启用Gzip压缩和KeepAlive,调整Apache并发连接数以优化性能。此教程为在阿里云上构建高效Web服务提供了基础指南。
121 5
|
16天前
|
JavaScript 前端开发 Java
web服务器是什么
web服务器是什么
64 0
|
18天前
|
应用服务中间件 网络安全 Apache
构建高性能Web服务器:Nginx vs Apache
【5月更文挑战第16天】Nginx与Apache是两种主流Web服务器,各具优势。Nginx以其轻量级、高并发处理能力和反向代理功能见长,适合大型网站和高并发场景;而Apache以功能丰富、稳定性强闻名,适合企业网站和需要多种Web服务功能的场景。在性能上,Nginx处理高并发更优,Apache则可能在高负载时遭遇瓶颈。在选择时,应根据实际需求权衡。
|
18天前
|
JSON JavaScript API
使用 Node.js 开发一个简单的 web 服务器响应 HTTP post 请求
使用 Node.js 开发一个简单的 web 服务器响应 HTTP post 请求
39 1
|
18天前
|
JSON JavaScript 中间件
使用 Node.js 开发一个简单的 web 服务器响应 HTTP get 请求
使用 Node.js 开发一个简单的 web 服务器响应 HTTP get 请求
16 2
|
19天前
|
负载均衡 Go 调度
使用Go语言构建高性能的Web服务器:协程与Channel的深度解析
在追求高性能Web服务的今天,Go语言以其强大的并发性能和简洁的语法赢得了开发者的青睐。本文将深入探讨Go语言在构建高性能Web服务器方面的应用,特别是协程(goroutine)和通道(channel)这两个核心概念。我们将通过示例代码,展示如何利用协程处理并发请求,并通过通道实现协程间的通信和同步,从而构建出高效、稳定的Web服务器。
|
19天前
【计网·湖科大·思科】实验一 熟悉仿真软件及访问WEB服务器
【计网·湖科大·思科】实验一 熟悉仿真软件及访问WEB服务器
19 0
|
19天前
|
存储 安全 数据安全/隐私保护
Web应用程序的会话管理是一种跟踪和识别特定用户与Web服务器之间交互的技术
【5月更文挑战第12天】Python Web开发中,会话管理用于跟踪用户与服务器交互,如Flask框架提供的内置功能。以下是一个简单示例:安装Flask后,设置应用密钥,通过session读写用户状态。例如,创建一个显示和设置用户名称的Web应用,用户提交的名字将保存在会话中。在生产环境中,应安全存储密钥,如使用环境变量。扩展会话管理可借助第三方库实现更多功能,但可能需更多配置。
223 2
|
19天前
|
Java 关系型数据库 MySQL
保姆级教程——将springboot项目部署到阿里云服务器包含环境配置(小白包会)
本文档详细介绍了将SpringBoot项目部署到阿里云服务器的步骤。首先,通过Xshell连接服务器,使用公网IP地址。接着,下载JDK的Linux版本,使用XFTP上传并解压,配置环境变量。然后,安装MySQL 5.7,包括下载YUM源、安装、启动服务以及修改root密码和开启远程访问。最后,将SpringBoot项目打包成jar,上传至服务器,使用`java -jar`命令运行,通过`nohup`确保服务持续运行。配置安全组以允许远程访问。