嵌入式linux开发板web服务器搭建1——Boa移植

环境

硬件

TMS320DM8127

软件

win7 64位
VM+Ubuntu10.04.4
boa-0.94.13

主要步骤

主要参考https://wenku.baidu.com/view/8d5dd954f01dc281e53af08f.htmlhttps://blog.youkuaiyun.com/lyiya/article/details/50865947两篇博客的步骤。

  1. 从http://www.boa.org/下载Boa源码,将其解压并进入源码目录的src子目录
# tar -zxvf boa-0.94.13.tar.gz
# cd boa-0.94.13/src
  1. 生成Makefile文件
# ./configure

修改Makefile文件,
a.找到CC=gcc,将其改成CC = arm-linux-gcc,
b.找到CPP = gcc –E,将其改成CPP = arm-linux-gcc –E,
保存退出。

  1. 运行make进行编译,得到的可执行程序为boa,并将调试信息剥去
 # make
 # arm-linux-strip boa
  1. 将生成的boa可执行程序(在/src目录下)拷贝到开发板的/bin目录下,在开发板/etc目录下建boa目录,将boa.conf拷贝到板子的/etc/boa目录。
  2. 修改/etc/boa下的boa.conf文件:
    User(48行)默认nobody,改为0
    Group(49行)默认nogroup,改为0
  3. 创建日志文件所在目录/var/log/boa,创建HTML文档的主目录/var/www,创建CGI脚本所在目录/var/www/cgi-bin/,在/var/www中放置一个index.html文件。上述目录若不存在,均需手动创建,这些都是boa运行需要的目录。index.html就是打开网址时的网页。
  4. 将虚拟机/etc目录下的mime.types文件到开发板/etc目录
  5. 在开发板运行boa:
    #/bin/boa
    然后就可以通过其他机器访问了。
    http://192.168.0.58
    就可以访问到你放置的那个index页面了。

遇到的问题

make时提示arm-linux-gcc未安装

虚拟机没安装arm-linux-gcc交叉编译器。Ubuntu10.04下安装教程参考https://www.veryarm.com/46757.html,备份如下:

  1. 将arm-linux-gcc的压缩包arm-linux-gcc-2.95.3.tar.gz解压缩;
  2. 将路径usr/local下的arm目录拷贝到你自己系统的/usr/local下;
  3. 修改/etc/bash.bashrc文件修改/etc/bash.bashrc文件
 #vim /etc/bash.bashrc

在最后加上:

 export PATH=$PATH:/usr/local/arm/3.4.1/bin
                export PATH

立即使新的环境变量生效,不用重启电脑:

# source /etc/bash.bashrc

测试:

# arm-linux-gcc -v

这是在root用户下建立脚本,因此可能在普通用户下仍然用不了,一个解决方法是切换到普通用户下再进入该文件添加变量,过程和上述过程相同,这样在两个用户模式下都可以使用该工具了。

其中使用到的arm-linux-gcc-2.95.3.tar.gz,下载链接为https://download.youkuaiyun.com/download/wanlxf/6891613
我安装编译器时还出现了如下错误:libc.so.6: file format not recognized。。。原因为我在windows下载压缩文件后,习惯性的在windows下解压,然后再拷贝到虚拟机中,该过程导致很多的链接失效,导致了上面的问题。改为在Linux下解压就好了。

make提示:make: yacc: 命令未找到 make: *** [y.tab.c] 错误127

原因:没有安装yacc
解决方法:执行apt-get install bison命令(可能需要管理员权限sudo)。或者下载byacc-1.9.tar.gz,编译生成yacc,拷贝到/usr/local/bin/下。

make提示:make: lex: 命令未找到 make: *** [lex.yy.c] 错误 127

原因:没有安装lex程序
解决方法:执行apt-get install flex命令。或者下载flex-2.5.37.tar.gz,编译生成flex,然后改名为lex,将lex拷贝到 /usr/local/bin/下。

apt-get install报错

apt-get install上述两个命令时,提示需要先apt-get update。直接执行apt-get update报错:“有一些索引文件不能下载,它们可能被忽略了。。。”原因是ubuntu10.4到2016年已停止了更新支持,ubuntu也不再维护了。官方源不再维护。需要按照ubuntu提供的old-release方案修改源。
方法如下:(参考https://blog.youkuaiyun.com/suquan629/article/details/52333769
sudo gedit /etc/apt/sources.list,打开源列表文件,把里面的地址全删除,然后换上如下的地址,如果你是其他版本的,把lucid替换即可。

deb http://old-releases.ubuntu.com/ubuntu lucid main restricted universe multiverse   
deb http://old-releases.ubuntu.com/ubuntu lucid-security main restricted universe multiverse   
deb http://old-releases.ubuntu.com/ubuntu lucid-updates main restricted universe multiverse   
deb http://old-releases.ubuntu.com/ubuntu lucid-proposed main restricted universe multiverse   
deb http://old-releases.ubuntu.com/ubuntu lucid-backports main restricted universe multiverse   
deb-src http://old-releases.ubuntu.com/ubuntu lucid main restricted universe multiverse   
deb-src http://old-releases.ubuntu.com/ubuntu lucid-security main restricted universe multiverse   
deb-src http://old-releases.ubuntu.com/ubuntu lucid-updates main restricted universe multiverse   
deb-src http://old-releases.ubuntu.com/ubuntu lucid-proposed main restricted universe multiverse   
deb-src http://old-releases.ubuntu.com/ubuntu lucid-backports main restricted universe multiverse  

然后再运行 apt-get update,发现一堆404 Not Found错误。在终端ping外网ip能ping通,确认网络没问题,ping www.baidu.com失败,可能是DNS未设置,直接按下图设置后重启网络,或重启虚拟机即可。在这里插入图片描述

执行bin/boa后,访问web服务器失败

执行bin/boa后,超级终端未报错,但仍然无法访问web服务器。这时,需要在开发板的/var/log/boa/error_log下查看错误信息。参考https://blog.youkuaiyun.com/xdw1985829/article/details/6672742,出现错误信息后的修改方法如下。我出现了第3和第4个错误,修改后重新make,重新拷贝boa。

  1. 错误1: gethostbyname:: No such file or directory
    解决办法: 修改boa.conf 去掉 ServerName www.your.org.here 前的注释符号(#)
  2. 错误1: util.c?1: error: pasting “t” and "->"does not give a valid preprocessing token make: *** [util.o]
    解决办法: 修改 src/compat.h 解决办法: 修改 src/compat.h
    找到
 #defineTIMEZONE_OFFSET(foo) foo##->tm_gmtoff

修改成

#defineTIMEZONE_OFFSET(foo) (foo)->tm_gmtoff
  1. 错误2: boa.c:211 - getpwuid: No such file or directory

    解决办法: 修改src/boa.c

注释掉下面这段程序:

if (passwdbuf == NULL) {

   DIE(”getpwuid”);

   }

   if(initgroups(passwdbuf->pw_name, passwdbuf->pw_gid) == -1) {

   DIE(”initgroups”);

   }

即修改为:

 #if 0

   if (passwdbuf == NULL) {

   DIE(”getpwuid”);

   }

   if(initgroups(passwdbuf->pw_name, passwdbuf->pw_gid) == -1) {

   DIE(”initgroups”);

   }

  #endif
  1. 错误3: boa.c:228 - icky Linux kernel bug!: No such file or directory

    解决办法: 修改src/boa.c

注释掉下面语句:

if(setuid(0) != -1) {

  DIE(”icky Linux kernel bug!”);

  }

即修改为:

#if 0

   if(setuid(0) != -1) {

   DIE(”icky Linux kernel bug!”);

   }

  #endif
  1. 错误4: log.c:73 unable to dup2 the error log:bad file descriptor

    解决方法:

    方法1> 确定日志目录对与所有用户都具有可读/写的权限

    方法2> 修改src/log.c (建议采用方法1)

注释掉

 if(dup2(error_log, STDERR_FILENO) == -1) {

  DIE("unableto dup2 the error log");

  }

即修改为:

 #if 0

    if (dup2(error_log, STDERR_FILENO) == -1) {

  DIE("unable to dup2 the error log");

   }

   #endif
### 回答1: 根据需求不同,可推荐几种不同类型的嵌入式 Linux 开发板: - Raspberry Pi:低成本、低功耗、高性能,适合制作物联网设备、智能家居等应用。 - NVIDIA Jetson Nano/TX2/ Xavier:高性能、高功耗,适合运行深度学习模型、机器人控制等应用。 - BeagleBone:开源、高性能、低功耗,适合控制工业设备、机器人等应用。 - Arduino:简单易用、低成本,适合制作物联网设备、智能家居等应用。 需要注意的是,在选择开发板时应考虑自己的需求和开发经验,以及开发板的性能和功耗。 ### 回答2: 随着嵌入式技术的发展,嵌入式开发在各个领域都有广泛的应用,涵盖了从智能家居、智能物联网、智能工业、医疗、教育等行业的各种物联网应用。在嵌入式开发之中,嵌入式 Linux 开发板的难度较大,但是使用也更加灵活,拓展性和性能都更高,因此深受广大开发者的欢迎。 在众多厂家产品中,若想看中嵌入式 Linux 开发板,各家设备的性能、价格、拓展性、稳定性等都不同,而在挑选时候,也需要结合实际自身应用场景及需求。 1.树莓派(Raspberry Pi) 树莓派最初也是为了教育目的而开发的一个小型电脑,但是这款电脑很快推出后,许多开发者们在上面实现了数百种想象不到的应用。不仅如此,树莓派的生态环境也非常的完善,有着充足的各种资料以及大量的经验分享。虽然树莓派的性能不是很高,且一些直接集成开发工具的集成开发环境(IDE)不适用Linux;海外畅销,国产也在逐渐涌现,相信未来的树莓派开发板会越来越好。 2.Orange Pi Orange Pi 是一款中性化的嵌入式开发,它能够支持多种嵌入式操作系统,且支持 Linux 开发板,这使得它成为 Linux 开发者的又一良心选择。该的高性能让它成为专业人士自己开发嵌入式解决方案的绝佳选择。基于 Banana PI 设计,但 CPU 微调后大幅提高,目前发行的型号已有了4K H.265硬解码,配合Mali-450 GPU,成为了一款性能优秀、能够编译 Kodi的选择之一。 3.NVIDIA Jetson Nano NVIDIA Jetson Nano 是 NVIDIA 推出的一款高性能嵌入式开发,同时支持 Linux 和 NVIDIA CUDA-X,可以广泛应用于人工智能、机器人、自动驾驶领域。它拥有4GB载内存和支持NVME SSD生产级管理器等多种顶端的硬件配置,算力和加速能力可以帮助用户应对复杂工业级应用场景。 总结来说,嵌入式 Linux 开发板本身就是一个很大系统,但是它也因此提供了很多自由,用的好会被更快、更方便、最重要的是更具有区别性的!以上三种 Linux嵌入式开发都不错,最好根据自己需求挑选。 ### 回答3: 在现代科技领域中,嵌入式系统已经成为一种广泛应用和发展的技术,它以其小巧,低功耗,高性能的特点,被应用于各种领域,如智能家居,工业自动化,医疗设备,机器人等。嵌入式Linux是目前应用最广泛的嵌入式系统之一。嵌入式Linux开发板嵌入式Linux系统开发的核心部件之一。下面将介绍几款值得推荐的嵌入式Linux开发板1. 树莓派 (Raspberry Pi) 树莓派是一个低成本,高性能的小型计算机,由于其较高的性价比,被广泛应用于DIY领域、教育领域等。树莓派可以运行各种类型的Linux操作系统,包括Raspbian,Ubuntu Mate等。它具有多个USB口,以太网口,SD卡插槽和GPIO端口。树莓派还有一个庞大的用户群体和社区,用户可以从中获得大量教程和支持。 2. BeagleBone Black BeagleBone Black是另一个广泛使用的嵌入式Linux开发板,具有16位器件接口,两个UART串行口,两个USB接口等。它还具有一个TI的Sitara AM335x ARM Cortex-A8处理器,可以运行Debian,Ubuntu,Android等嵌入式操作系统。该模块还包括大量的内存和存储设备,可轻松扩展。 3. ArduinoYún ArduinoYún是Arduino发行的一款开源嵌入式Linux开发板,它集成了ATmega32u4和Atheros AR9331芯片,可以运行嵌入式Linux操作系统,包括OpenWRT等。它具有多个GPIO端口,包括I2C和SPI接口。此外,ArduinoYún还具有Wifi,以太网接口等通信接口,使得用户可以轻松地联网和控制各种设备。 4. MinnowBoard MAX MinnowBoard MAX是英特尔推出的一款高性能嵌入式Linux开发板,由双核英特尔Atom E3845处理器和1GB DDR3L RAM组成。该具有丰富的接口选项,包括两个USB 2.0端口,一个HDMI端口,一个10/100/1000以太网口和一个MicroSD卡插槽。该开发板采用设计优秀,易于扩展,可以完成大多数嵌入式Linux系统开发任务。 总而言之,嵌入式Linux开发板使用范围广泛,适用于各种应用场景。以上推荐的几款开发板具有不同的特点和优点,用户可以根据自己的项目需求选择合适的开发板
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值