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

2019-07-12 16:05发布

class="markdown_views prism-atom-one-light">

环境

硬件

TMS320DM8127

软件

win7 64位
VM+Ubuntu10.04.4
boa-0.94.13

主要步骤

主要参考https://wenku.baidu.com/view/8d5dd954f01dc281e53af08f.htmlhttps://blog.csdn.net/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.csdn.net/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.csdn.net/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.csdn.net/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