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

4 篇文章 0 订阅
4 篇文章 0 订阅

环境

硬件

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?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
  • 2
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值